You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

835 lines
34 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using NetLibrary.Log;
using NetLibrary.OnlineTrade;
using Newtonsoft.Json.Linq;
using NPOI.HSSF.Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Remoting.Metadata.W3cXsd2001;
using System.Security.Cryptography;
using System.Text;
using System.Web;
using System.Web.Script.Serialization;
namespace TradeManageNew
{
public class Temu
{
//public string IP = "http://50.196.110.198:8081"; //美国跳转服务器ip地址
public string IP = "http://50.196.110.198:8099"; //美国跳转服务器ip地址
public string AccessToken { get; set; }
public string AppKey { get; set; }
public string AppSecret { get; set; }
public int shopid { get; set; }
JavaScriptSerializer JsonConvert = null;
public Temu()
{
JsonConvert = new JavaScriptSerializer();
}
public List<OrderModel> GetOrders(DateTime sdate,DateTime edate, out string errorMessage)
{
var orderModels = new List<OrderModel>();
try
{
if (string.IsNullOrEmpty(AccessToken) || string.IsNullOrEmpty(AppKey) || string.IsNullOrEmpty(AppSecret))
{
errorMessage = "店铺未授权";
return null;
}
var nowPage = 1;
int totalPage = 1;
string error = "";
while (nowPage<=totalPage)
{
var orders = GetOrderList(sdate, edate, nowPage, out totalPage,out error);
if (orders == null)
break;
foreach (var order in orders)
{
ErrorFollow.TraceWrite("自动导入TEMU订单循环model", "店铺名称:" + shopid, JsonConvert.Serialize(order));
//if (order.parentOrderMap.parentOrderSn != "576662364844036518" )
//{
// continue;
//}
//只同步待发货和已发货状态订单
if (order.parentOrderMap.parentOrderStatus==2 || order.parentOrderMap.parentOrderStatus == 4)
{
var receive = GetOrderReceiveInfo(order.parentOrderMap.parentOrderSn);
var orderM = ToOrderModel(order, receive);
if (orderM!=null)
{
orderModels.Add(orderM);
var shipTracks = new List<TemuOrderShipTrackCode>();
var temuShips=new List<TemuShipmentODT>();
//获取订单的发货面单信息
foreach (var item in order.orderList)
{
var shipments = GetOrderShipmentInfo(order.parentOrderMap.parentOrderSn, item.orderSn);
if (shipments != null && item.productList!=null)
{
foreach(var shipment in shipments)
{
var temuShip = new TemuShipmentODT()
{
ParentOrderSn = order.parentOrderMap.parentOrderSn,
TrackCode = shipment.trackingNumber,
Quantity = shipment.quantity,
SKU = item.productList.First().extCode
};
temuShips.Add(temuShip);
//var detail = DataNew.GetGoodsInfoDetailBySku(item.productList.First().extCode);
//var sku = detail != null ? shipment.quantity + "x" + detail.SKU1 : "";
//var _temuTrack = shipTracks.Where(r => r.ParentOrderSn == order.parentOrderMap.parentOrderSn && r.TrackCode == shipment.trackingNumber).FirstOrDefault();
//if (_temuTrack != null)
//{
// _temuTrack.SKU = string.IsNullOrEmpty(_temuTrack.SKU) ? sku : (_temuTrack.SKU + "+" + sku);
//}
//else
//{
// var temuTrack = new TemuOrderShipTrackCode()
// {
// ParentOrderSn = order.parentOrderMap.parentOrderSn,
// //OrderSn = item.orderSn,
// TrackCode = shipment.trackingNumber,
// SKU = detail != null ? shipment.quantity + "x" + detail.SKU1 : "",
// Weight = (detail != null && detail.Weight.HasValue) ? (detail.Weight.Value * shipment.quantity).ToString("0.00") : "",
// Long = (detail != null && detail.Long.HasValue) ? detail.Long.Value.ToString("0.00") : "",
// Width = (detail != null && detail.Width.HasValue) ? detail.Width.Value.ToString("0.00") : "",
// Height = (detail != null && detail.Height.HasValue) ? detail.Height.Value.ToString("0.00") : "",
// };
// shipTracks.Add(temuTrack);
//}
}
}
}
if (temuShips != null)
{
var _GBtemuShips = temuShips.GroupBy(r => new { r.ParentOrderSn, r.TrackCode, r.SKU }).Select(g => new { ParentOrderSn = g.Key.ParentOrderSn, TrackCode = g.Key.TrackCode, SKU = g.Key.SKU, Quantity = g.Sum(r => r.Quantity) }).ToList();
foreach(var _gb in _GBtemuShips)
{
var strack = shipTracks.Where(r => r.ParentOrderSn == _gb.ParentOrderSn && r.TrackCode == _gb.TrackCode).FirstOrDefault();
if (strack != null)
{
strack.SKU = string.IsNullOrEmpty(strack.SKU) ? (_gb.Quantity + "x" + _gb.SKU) : (strack.SKU + "+" + (_gb.Quantity + "x" + _gb.SKU));
}
else
{
var sku = "";
var detail = DataNew.GetGoodsInfoDetailBySku(_gb.SKU);
if (detail == null)
{
continue;
}
if (detail.GoodsId == 5527) //组合商品对应的SKU需要以SKU14为准
{
if (string.IsNullOrEmpty(detail.SKU14))
{
continue;
}
var skuarr = detail.SKU14.Split(',');
foreach (var _sku in skuarr)
{
sku += _gb.Quantity.ToString() + "x" + _sku + "+";
}
sku = sku.TrimEnd('+');
}
else
{
sku = detail != null ? _gb.Quantity + "x" + detail.SKU1 : "";
}
strack = new TemuOrderShipTrackCode
{
ParentOrderSn = _gb.ParentOrderSn,
TrackCode = _gb.TrackCode,
SKU = sku,
Weight = (detail != null && detail.Weight.HasValue) ? (detail.Weight.Value * _gb.Quantity.Value).ToString("0.00") : "",
Long = (detail != null && detail.Long.HasValue) ? detail.Long.Value.ToString("0.00") : "",
Width = (detail != null && detail.Width.HasValue) ? detail.Width.Value.ToString("0.00") : "",
Height = (detail != null && detail.Height.HasValue) ? detail.Height.Value.ToString("0.00") : "",
};
shipTracks.Add(strack);
}
}
}
if (shipTracks != null)
{
foreach(var shipTrack in shipTracks)
{
DataNew.SaveTemuOrderShipTrackCode(shipTrack);
}
}
}
}
}
nowPage++;
}
errorMessage = error;
}
catch (Exception ex)
{
errorMessage = ex.Message;
}
ErrorFollow.TraceWrite("自动导入TEMU订单结束返回APImodel", "店铺名称:" + shopid, JsonConvert.Serialize(orderModels));
return orderModels;
}
/// <summary>
/// 获取订单列表
/// </summary>
/// <param name="sdate"></param>
/// <param name="edate"></param>
/// <param name="pageNum"></param>
/// <param name="totalPage"></param>
/// <param name="error"></param>
/// <returns></returns>
public List<TemuOrderPageItems> GetOrderList(DateTime sdate, DateTime edate, int pageNum, out int totalPage, out string error)
{
var rdatas = new List<TemuOrderPageItems>();
try
{
var sdateStamp = (long)(sdate.Subtract(new DateTime(1970, 1, 1))).TotalSeconds;
var edateStamp = (long)(edate.Subtract(new DateTime(1970, 1, 1))).TotalSeconds;
long timeStamp = (long)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds;
string[] fulfillmentTypeList = new string[] { "fulfillBySeller", "fulfillByCooperativeWarehouse" };
StringBuilder jsonFulfillmentTypes = new StringBuilder("[");
bool isFirst = true;
foreach (var item in fulfillmentTypeList)
{
if (!isFirst)
{
jsonFulfillmentTypes.Append(",");
}
jsonFulfillmentTypes.Append("\"").Append(item).Append("\"");
isFirst = false;
}
jsonFulfillmentTypes.Append("]");
string result = jsonFulfillmentTypes.ToString();
//int regionId = 211;
var apiType = "bg.order.list.get";
//var bodyStrArr = new string[] { "access_token" + AccessToken, "app_key" + AppKey, "createAfter" + sdateStamp, "createBefore" + edateStamp, "data_typeJSON", "fulfillmentTypeList" + result, "pageNumber" + pageNum.ToString(), "pageSize100", "parentOrderStatus0", "regionId211", "timestamp" + timeStamp, "type" + apiType };
var bodyStrArr = new string[] { "access_token" + AccessToken, "app_key" + AppKey, "createAfter" + sdateStamp, "createBefore" + edateStamp, "data_typeJSON", "pageNumber" + pageNum.ToString(), "pageSize100", "parentOrderStatus0", "timestamp" + timeStamp, "type" + apiType };
var bodyStr = AppSecret + string.Join("", bodyStrArr) + AppSecret;//参数按字母顺序排序
var sign = EncryptionHelp.GetMD5(bodyStr);
var body = new
{
access_token = AccessToken,
app_key = AppKey,
createAfter = sdateStamp,
createBefore = edateStamp,
data_type = "JSON",
//fulfillmentTypeList = fulfillmentTypeList,
pageNumber = pageNum,
pageSize = 100,
parentOrderStatus = 0,
//regionId = regionId,
timestamp = timeStamp,
type = apiType,
sign = sign.ToUpper()
};
var json = JsonConvert.Serialize(body);
var path = EncryptionHelp.EncryptString(json, "ThisIsShopifyKey12365498");
var path2 = HttpUtility.UrlEncode(path);
var url = IP + "/api/TemuHelp/GetTemuShopOrderList?bodyStr=" + path2;
//using (HttpClient client = new HttpClient())
//{
// HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, url);
// var response = client.SendAsync(request);
// string responseContent = response.Result.Content.ReadAsStringAsync().GetAwaiter().GetResult();
// if (string.IsNullOrEmpty(responseContent) || responseContent == "Fail")
// {
// totalPage = 0;
// error = "接口返回失败";
// return null;
// }
// else
// {
// var rModel = JsonConvert.Deserialize<TemuOrdersReturn>(responseContent);
// if (rModel != null && rModel.result != null && rModel.result.result != null)
// {
// var result2 = rModel.result.result;
// error = "";
// rdatas = result2.pageItems;
// totalPage = result2.totalItemNum % 100 > 0 ? (result2.totalItemNum / 100 + 1) : (result2.totalItemNum / 100);
// }
// else
// {
// totalPage = 0;
// error = "接口未返回数据";
// return null;
// }
// }
//}
using (WebClient client = new WebClient())
{
client.Encoding = Encoding.UTF8; // 指定下载内容编码方式为 UTF-8
string responseContent = client.DownloadString(url);
ErrorFollow.TraceWrite("自动导入TEMU订单返回结果", "店铺名称:" + shopid, responseContent);
if (string.IsNullOrEmpty(responseContent) || responseContent == "Fail")
{
totalPage = 0;
error = "接口返回失败";
return null;
}
else
{
var rModel = JsonConvert.Deserialize<TemuOrdersReturn>(responseContent);
if (rModel != null && rModel.result != null && rModel.result.result != null)
{
var result2 = rModel.result.result;
error = "";
rdatas = result2.pageItems;
totalPage = result2.totalItemNum % 100 > 0 ? (result2.totalItemNum / 100 + 1) : (result2.totalItemNum / 100);
}
else
{
totalPage = 0;
error = "接口未返回数据";
return null;
}
}
}
}
catch (Exception ex)
{
error = ex.Message;
totalPage = 0;
}
return rdatas;
}
/// <summary>
/// 获取订单收货地址
/// </summary>
/// <param name="orderno"></param>
/// <returns></returns>
public ReceiveResult GetOrderReceiveInfo(string orderno)
{
var rdata = new ReceiveResult();
try
{
//var timeStamp = DateTimeOffset.Now.ToUnixTimeSeconds();
long timeStamp = (long)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds;
var apiType = "bg.order.shippinginfo.get";
var bodyStrArr = new string[] { "access_token" + AccessToken, "app_key" + AppKey, "data_typeJSON", "parentOrderSn" + orderno, "timestamp" + timeStamp, "type" + apiType };
var bodyStr = AppSecret + string.Join("", bodyStrArr) + AppSecret;
var sign = EncryptionHelp.GetMD5(bodyStr);
var body = new
{
access_token = AccessToken,
app_key = AppKey,
data_type = "JSON",
parentOrderSn = orderno,
timestamp = timeStamp,
type = apiType,
sign = sign.ToUpper(),
};
var json = JsonConvert.Serialize(body);
var path = EncryptionHelp.EncryptString(json, "ThisIsShopifyKey12365498");
var path2 = HttpUtility.UrlEncode(path);
var url = IP + "/api/TemuHelp/getTemuShopOrderReceiveInfo?bodyStr=" + path2;
//using (HttpClient client = new HttpClient())
//{
// HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, url);
// var response = client.SendAsync(request);
// string responseContent = response.Result.Content.ReadAsStringAsync().GetAwaiter().GetResult();
// if (string.IsNullOrEmpty(responseContent) || responseContent == "Fail")
// {
// return null;
// }
// else
// {
// var rModel = JsonConvert.Deserialize<TemuReceiveReturn>(responseContent);
// if (rModel != null && rModel.result != null && rModel.result.result != null)
// {
// ReceiveResult result = rModel.result.result;
// rdata = result;
// }
// else
// {
// return null;
// }
// }
//}
using (WebClient client = new WebClient())
{
client.Encoding = Encoding.UTF8; // 指定下载内容编码方式为 UTF-8
string responseContent = client.DownloadString(url);
if (string.IsNullOrEmpty(responseContent) || responseContent == "Fail")
{
return null;
}
else
{
var rModel = JsonConvert.Deserialize<TemuReceiveReturn>(responseContent);
if (rModel != null && rModel.result != null && rModel.result.result != null)
{
ReceiveResult result = rModel.result.result;
rdata = result;
}
else
{
return null;
}
}
}
}
catch (Exception ex)
{
}
return rdata;
}
/// <summary>
/// 获取订单发货信息
/// </summary>
/// <param name="orderno"></param>
/// <returns></returns>
public List<ShipmentInfoDTOItem> GetOrderShipmentInfo(string parentOrderSn, string orderSn)
{
var rdata = new List<ShipmentInfoDTOItem>();
if(parentOrderSn== "PO-211-19061389486712336")
{
}
try
{
long timeStamp = (long)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds;
var apiType = "bg.logistics.shipment.get";
var bodyStrArr = new string[] { "access_token" + AccessToken, "app_key" + AppKey, "data_typeJSON", "orderSn" + orderSn, "parentOrderSn" + parentOrderSn, "timestamp" + timeStamp, "type" + apiType };
var bodyStr = AppSecret + string.Join("", bodyStrArr) + AppSecret;
var sign = EncryptionHelp.GetMD5(bodyStr);
var body = new
{
access_token = AccessToken,
app_key = AppKey,
data_type = "JSON",
orderSn= orderSn,
parentOrderSn = parentOrderSn,
timestamp = timeStamp,
type = apiType,
sign = sign.ToUpper(),
};
var json = JsonConvert.Serialize(body);
var path = EncryptionHelp.EncryptString(json, "ThisIsShopifyKey12365498");
var path2 = HttpUtility.UrlEncode(path);
var url = IP + "/api/TemuHelp/getTemuShopOrderShipmentInfo?bodyStr=" + path2;
//using (HttpClient client = new HttpClient())
//{
// HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, url);
// var response = client.SendAsync(request);
// string responseContent = response.Result.Content.ReadAsStringAsync().GetAwaiter().GetResult();
using (WebClient client = new WebClient())
{
client.Encoding = Encoding.UTF8; // 指定下载内容编码方式为 UTF-8
string responseContent = client.DownloadString(url);
if (string.IsNullOrEmpty(responseContent) || responseContent == "Fail")
{
return null;
}
else
{
var rModel = JsonConvert.Deserialize<TemuShipmentReturn>(responseContent);
if (rModel != null && rModel.result != null && rModel.result.result != null)
{
ShipmentInfoResult2 result = rModel.result.result;
if (result.shipmentInfoDTO != null)
rdata = result.shipmentInfoDTO;
else
rdata = null;
}
else
{
return null;
}
}
}
}
catch (Exception ex)
{
}
return rdata;
}
public OrderModel ToOrderModel(TemuOrderPageItems topi, ReceiveResult rer)
{
try
{
OrderModel model = new OrderModel();
model.PlatOrderCode = topi.parentOrderMap.parentOrderSn;
model.OrderCode = topi.parentOrderMap.parentOrderSn;
model.OrderDate = GetDateTimeFromTimeStamp(topi.parentOrderMap.parentOrderTime.Value);
model.OrderState = 1;
if (rer != null)
{
model.BuyerName = rer.receiptName;
model.BuyerCountry = rer.regionName1;
model.BuyerProvince = rer.regionName2;
model.BuyerCity = rer.regionName3;
model.BuyerAddr = string.IsNullOrEmpty(rer.addressLineAll) ? (rer.addressLine1 + rer.addressLine2) : rer.addressLineAll;
model.BuyerPhone = rer.mobile;
model.BuyerZip = rer.postCode;
}
model.PayDate = model.OrderDate.Value;
model.OutOrderDate = GetDateTimeFromTimeStamp(topi.parentOrderMap.expectShipLatestTime.Value);
model.ListModel = new List<OrderDetailModel>();
decimal totalPrice = 0;
//删除
DataNew.DeleteTemuShopOrderGoodsDetailByParentOrderSn(topi.parentOrderMap.parentOrderSn);
if (topi.orderList!=null)
{
foreach (var item2 in topi.orderList)
{
OrderDetailModel model2 = new OrderDetailModel();
model2.TypeDesc = item2.spec;
model2.GoodsNum = item2.quantity;
model2.OrderItemId = item2.productList != null ? item2.productList.First().productId : "";//SPUID
if (shopid == 94)//没有主体的店铺没有SPUIDSKUID做为唯一
{
model2.OrderItemId = item2.skuId;
}
model2.GoodsName = item2.goodsId + "," + item2.skuId;//goodsId,skuId
model2.GoodsSKU = item2.productList != null ? item2.productList.First().extCode : "";
model2.PostInfo = item2.orderSn;
model.ListModel.Add(model2);
if (!string.IsNullOrEmpty(model2.OrderItemId))
{
var temuPrice = DataNew.GetTemuShopGoodPriceOne(shopid, model2.OrderItemId);
if (temuPrice != null)
totalPrice = totalPrice + (temuPrice.SalePrice.HasValue ? temuPrice.SalePrice.Value * item2.quantity : 0);
}
var temuOGD = new TemuShopOrderGoodsDetail()
{
Shopid = shopid,
ParentOrderSn = topi.parentOrderMap.parentOrderSn,
OrderSn = item2.orderSn,
OrderStatus = item2.orderStatus,
GoodsId = item2.goodsId,
SKUId = item2.skuId,
ThumbUrl = item2.thumbUrl,
Quantity = item2.quantity,
GoodsName = item2.goodsName,
ProductList = item2.productList == null ? "" : JsonConvert.Serialize(item2.productList)
};
DataNew.SaveTemuShopOrderGoodsDetail(temuOGD);
}
}
model.TotalPrice = totalPrice;
model.MoneyCode = "USD";
return model;
}
catch (Exception ex)
{
ErrorFollow.TraceWrite(ex.TargetSite.Name, ex.StackTrace, ex.Message);
return null;
}
}
public DateTime GetDateTimeFromTimeStamp(long st)
{
DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
long lTime = long.Parse(st + "0000000");
TimeSpan toNow = new TimeSpan(lTime);
return dtStart.Add(toNow);
}
#region 订单列表model
public class TemuOrdersReturn
{
public bool success { get; set; }
public string requestId { get; set; }
public int errorCode { get; set; }
public string errorMsg { get; set; }
public TemuOrderResult1 result { get; set; }
}
public class TemuOrderResult1
{
public bool success { get; set; }
public int errorCode { get; set; }
public long serverTime { get; set; }
public string errorMsg { get; set; }
public TemuOrderResult2 result { get; set; }
}
public class TemuOrderResult2
{
public int totalItemNum { get; set; }
public List<TemuOrderPageItems> pageItems { get; set; }
}
public class TemuOrderPageItems
{
public ParentOrderMap parentOrderMap { get; set; }
public List<TemuOrderModel> orderList { get; set; }
}
public class ParentOrderMap
{
public int regionId { get; set; }
public string parentOrderSn { get; set; }
public long? parentShippingTime { get; set; }
public int? siteId { get; set; }
public long? expectShipLatestTime { get; set; }
public int? parentOrderStatus { get; set; }
public long? parentOrderTime { get; set; }
}
public class TemuOrderModel
{
public int quantity { get; set; }
public string orderSn { get; set; }
public string goodsId { get;set; }
public int orderStatus { get; set; }
public string thumbUrl { get;set; }
public string goodsName { get;set; }
public string skuId { get; set; }
public string spec { get; set; }
public List<TemuOrderProduct> productList { get; set; }
}
public class TemuOrderProduct
{
public string productSkuId { get; set; }
public int soldFactor { get; set; }
public string extCode { get; set; }
public string productId { get; set; }
}
#endregion
#region 订单收货地址model
public class TemuReceiveReturn
{
public TemuReceiveResult1 result { get; set; }
}
public class TemuReceiveResult1
{
public bool success { get; set; }
public int errorCode { get; set; }
public long serverTime { get; set; }
public string errorMsg { get; set; }
public ReceiveResult result { get; set; }
}
public class ReceiveResult
{
public string receiptName { get; set; }
public string mobile { get; set; }
public string regionName1 { get; set; }
public string regionName2 { get; set; }
public string regionName3 { get; set;}
public string addressLine1 { get; set; }
public string addressLine2 { get; set;}
public string postCode { get; set; }
public string addressLineAll { get; set; }
}
#endregion
#region 订单发货信息model
//public class TemuShipmentReturn
//{
// public TemuShipmentResult1 result { get; set; }
//}
//public class TemuShipmentResult1
//{
// public bool success { get; set; }
// public int errorCode { get; set; }
// public long serverTime { get; set; }
// public string errorMsg { get; set; }
// public ShipmentResult result { get; set; }
//}
//public class ShipmentResult
//{
// public List<DeliveryInfoMap> shipmentInfoDTO { get; set; }
//}
//public class DeliveryInfoMap
//{
// public string carrierId { get; set; }
// public string carrierName { get; set; }
// public string trackingNumber { get; set; }
// public string skuId { get; set; }
// public string quantity { get; set; }
//}
//如果好用,请收藏地址,帮忙分享。
public class ShipmentInfoDTOItem
{
/// <summary>
///
/// </summary>
public int quantity { get; set; }
/// <summary>
///
/// </summary>
public string carrierName { get; set; }
/// <summary>
///
/// </summary>
public string carrierId { get; set; }
/// <summary>
///
/// </summary>
public string trackingNumber { get; set; }
/// <summary>
///
/// </summary>
public string skuId { get; set; }
}
public class ShipmentInfoResult2
{
/// <summary>
///
/// </summary>
public List<ShipmentInfoDTOItem> shipmentInfoDTO { get; set; }
}
public class ShipmentInfoResult1
{
/// <summary>
///
/// </summary>
public ShipmentInfoResult2 result { get; set; }
/// <summary>
///
/// </summary>
public string success { get; set; }
/// <summary>
///
/// </summary>
public string errorCode { get; set; }
/// <summary>
///
/// </summary>
public long serverTime { get; set; }
/// <summary>
///
/// </summary>
public string errorMsg { get; set; }
}
public class TemuShipmentReturn
{
/// <summary>
///
/// </summary>
public ShipmentInfoResult1 result { get; set; }
/// <summary>
///
/// </summary>
public string success { get; set; }
/// <summary>
///
/// </summary>
public string requestId { get; set; }
/// <summary>
///
/// </summary>
public string errorCode { get; set; }
/// <summary>
///
/// </summary>
public string errorMsg { get; set; }
}
#endregion
}
}