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.

1562 lines
57 KiB
C#

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden 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;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Text.RegularExpressions;
using System.Web.Script.Serialization;
using System.Net;
using System.IO;
using NetLibrary.Data;
using System.Data.Common;
using System.Data;
using NetLibrary.Log;
using NetLibrary.OnlineTrade;
namespace TradeManageNew
{
public class AlibabaApiQMNew
{
public string gatewayUrl = "http://tqoem55nju.api.taobao.com/router/qm";
public string appkey = "24744952";
public string secretKey = "7fb815f1ac871fb3df8cf6f0a18b8e70";
public Int32? ShopId { get; set; }
public string method = "aliexpress.transfer.station";
public string targetAppkey = "24764211";
public string format = "json";
public string signMethod = "md5";
public string apiVersion = "2.0";
public string sdkVersion = "top-sdk-php-20151012";
// public string apimethod { get; set; }
public string sessionKey { get; set; }
JavaScriptSerializer JsonConvert = null;
public AlibabaApiQMNew()
{
JsonConvert = new JavaScriptSerializer();
}
#region 获取数据
public string GetData(string jsonparam, out string ErrorMessage)
{
//Dictionary<string, string> paramDic = new Dictionary<string, string>();
//paramDic.Add("session_key", sessionKey);
//paramDic.Add("method", apimethod);
//string token = UserMd5(apimethod + "-api-479fe803d70b9a45100c976628810b27c908fdde");
//paramDic.Add("token", token);
Dictionary<string, string> paramDic2 = new Dictionary<string, string>();
paramDic2.Add("param", jsonparam);
paramDic2.Add("app_key", appkey);
paramDic2.Add("method", method);
paramDic2.Add("format", format);
paramDic2.Add("target_app_key", targetAppkey);
paramDic2.Add("api_version", apiVersion);
paramDic2.Add("sdk_version", sdkVersion);
paramDic2.Add("sign_method", signMethod);
paramDic2.Add("timestamp", getTimestamp());
paramDic2.Add("sign", SignTopRequest(paramDic2, secretKey));
string rUrl = gatewayUrl + "?" + GetParam(paramDic2);
string XmlContent = CustomIO.HttpRequest(rUrl, "POST", out ErrorMessage);
if (string.IsNullOrEmpty(ErrorMessage) == false)
return "";
QMResult model = JsonConvert.Deserialize<QMResult>(XmlContent);
if (model.response.Ack == "Failure")
return model.response.Errors;
if (model.response.data != null)
return model.response.data;
else
return model.response.Errors;
return "";
}
#endregion
#region 获取订单
public List<OrderModel> GetWaitGoods(string order_status, int OrderState, DateTime? StartTime, DateTime? StopTime, bool IsReadMsg, List<Alibaba_OrderCode> OList, out string ErrorMessage)
{
param_aeop_order_query ppm = new param_aeop_order_query();
ppm.current_page = 1;
ppm.page_size = 50;
ppm.order_status = order_status;
if (OrderState > 1)
ppm.modified_date_start = DateTime.Today.AddDays(-7).ToString("yyyy-MM-dd HH:mm:ss");
else
{
if (StartTime == null)
ppm.create_date_start = DateTime.Today.AddDays(-7).ToString("yyyy-MM-dd HH:mm:ss");
else
ppm.create_date_start = StartTime.Value.ToString("yyyy-MM-dd HH:mm:ss");
}
ppm.create_date_end = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
ppm.modified_date_end = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
string jsonStr1 = JsonConvert.Serialize(ppm);
// string apimethod = "aliexpress.trade.redefining.findorderlistquery";
string apimethod = "aliexpress.trade.seller.orderlist.get";
Dictionary<string, string> paramDic = new Dictionary<string, string>();
paramDic.Add("session_key", sessionKey);
paramDic.Add("method", apimethod);
string token = UserMd5(apimethod + "-api-479fe803d70b9a45100c976628810b27c908fdde");
paramDic.Add("token", token);
paramDic.Add("param_aeop_order_query", jsonStr1);
string jsonStr = JsonConvert.Serialize(paramDic);
string XmlContent = GetData(jsonStr, out ErrorMessage);
if (string.IsNullOrEmpty(ErrorMessage) == false)
return null;
data Model = JsonConvert.Deserialize<data>(XmlContent);
if (Model.result.target_list == null)
return null;
// if (Model.result.total_item < 50) return Model.ToListOrderModel();
int PageCount = Convert.ToInt32(Math.Ceiling(Convert.ToDecimal(Model.result.total_count) / Convert.ToDecimal(50)));
List<OrderModel> ListModel = new List<OrderModel>();
foreach (var item in Model.result.target_list.aeop_order_item_dto)
{
int iscz = 0; //是否已经导入过
if (OList != null)
{
var omd = OList.Find(n => n.OrderCode == item.order_id.ToString());
if (omd != null)
iscz = 1;
}
OrderModel model = new OrderModel();
OrderXXInfoResult mdxx = new OrderXXInfoResult();
if (iscz == 0 && OrderState != 3)
{
mdxx = GetOrderXXInfo(item.order_id, out ErrorMessage);
}
if (iscz == 0)
model = ToOrderModel(item, OrderState, mdxx);
if (iscz == 0 && model != null)
ListModel.Add(model);
}
if (Model.result.total_count < 50)
return ListModel;
for (int i = 1; i < PageCount; i++)
{
ppm = new param_aeop_order_query();
ppm.current_page = (i + 1);
ppm.page_size = 50;
ppm.order_status = order_status;
if (OrderState > 1)
ppm.modified_date_start = DateTime.Today.AddDays(-7).ToString("yyyy-MM-dd HH:mm:ss");
else
{
if (StartTime == null)
ppm.create_date_start = DateTime.Today.AddDays(-7).ToString("yyyy-MM-dd HH:mm:ss");
else
ppm.create_date_start = StartTime.Value.ToString("yyyy-MM-dd HH:mm:ss");
}
ppm.create_date_end = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
ppm.modified_date_end = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
jsonStr1 = JsonConvert.Serialize(ppm);
apimethod = "aliexpress.trade.seller.orderlist.get";
paramDic = new Dictionary<string, string>();
paramDic.Add("session_key", sessionKey);
paramDic.Add("method", apimethod);
token = UserMd5(apimethod + "-api-479fe803d70b9a45100c976628810b27c908fdde");
paramDic.Add("token", token);
paramDic.Add("param_aeop_order_query", jsonStr1);
jsonStr = JsonConvert.Serialize(paramDic);
XmlContent = GetData(jsonStr, out ErrorMessage);
if (string.IsNullOrEmpty(ErrorMessage) == false)
return null;
data Model2 = JsonConvert.Deserialize<data>(XmlContent);
foreach (var item in Model2.result.target_list.aeop_order_item_dto)
{
int iscz = 0; //是否已经导入过
if (OList != null)
{
var omd = OList.Find(n => n.OrderCode == item.order_id.ToString());
if (omd != null)
iscz = 1;
}
// int OrderState = 1;
if (item.fund_status != "PAY_SUCCESS")
OrderState = 2;
OrderModel model = new OrderModel();
OrderXXInfoResult mdxx = new OrderXXInfoResult();
if (iscz == 0)
{
mdxx = GetOrderXXInfo(item.order_id, out ErrorMessage);
}
if (iscz == 0)
model = ToOrderModel(item, OrderState, mdxx);
if (iscz == 0 && model != null)
ListModel.Add(model);
}
}
return ListModel;
}
#endregion
#region 订单详情
public OrderXXInfoResult GetOrderXXInfo(string ordercode, out string ErrorMessage)
{
OrderXXParam ppm = new OrderXXParam();
ppm.order_id = ordercode;
string jsonStr1 = JsonConvert.Serialize(ppm);
string apimethod = "aliexpress.trade.new.redefining.findorderbyid";
Dictionary<string, string> paramDic = new Dictionary<string, string>();
paramDic.Add("session_key", sessionKey);
paramDic.Add("method", apimethod);
string token = UserMd5(apimethod + "-api-479fe803d70b9a45100c976628810b27c908fdde");
paramDic.Add("token", token);
paramDic.Add("param1", jsonStr1);
string jsonStr = JsonConvert.Serialize(paramDic);
string XmlContent = GetData(jsonStr, out ErrorMessage);
if (string.IsNullOrEmpty(ErrorMessage) == false)
return null;
if (XmlContent == null || XmlContent == "")
{
ErrorFollow.TraceWrite("GetOrderXXInfo", ordercode + " ", DateTime.Now.ToString("HH:mm:ss"));
GetOrderXXInfo(ordercode, out ErrorMessage);
return null;
}
OrderXXInfoResult Model = JsonConvert.Deserialize<OrderXXInfoResult>(XmlContent);
if (Model.target == null)
return null;
// if (Model.result.total_item < 50) return Model.ToListOrderModel();
return Model;
}
#endregion
#region 转换成统一的订单对象
public OrderModel ToOrderModel(AeopOrderItemDto md, int OrderState, OrderXXInfoResult mdxx)
{
try
{
OrderModel model = new OrderModel();
//if (this.orderId.ToString() == "72860947447064")
//{
// string treqq = "72860947447064";
//}
model.PlatOrderCode = md.order_id.ToString();
model.OrderCode = md.order_id.ToString();
model.TotalPrice = Convert.ToDecimal(md.pay_amount.amount);// Convert.ToDecimal(md.pay_amount.cent) / Convert.ToDecimal(md.pay_amount.cent_factor);
model.MoneyCode = md.pay_amount.currency_code;
if (md.gmt_create != null)
model.OrderDate = Convert.ToDateTime(md.gmt_create);
if (mdxx.target != null && mdxx.target.buyer_signer_fullname != null)
model.BuyerID = mdxx.target.buyer_signer_fullname;
if (model.BuyerID != null && model.BuyerID.Length > 50) model.BuyerID = model.BuyerID.Substring(0, 50);
model.OrderState = OrderState;
if (mdxx.target != null && mdxx.target.receipt_address != null)
model.BuyerName = mdxx.target.receipt_address.contact_person;
if (mdxx.target != null && mdxx.target.receipt_address != null)
model.BuyerCountry = mdxx.target.receipt_address.country;
if (mdxx.target != null && mdxx.target.receipt_address != null && mdxx.target.receipt_address.detail_address != null)
model.BuyerAddr = mdxx.target.receipt_address.detail_address;
if (mdxx.target != null && mdxx.target.receipt_address != null && mdxx.target.receipt_address.address != null && mdxx.target.receipt_address.address != "")
model.BuyerAddr += " " + mdxx.target.receipt_address.address;
if (mdxx.target != null && mdxx.target.receipt_address != null && mdxx.target.receipt_address.address2 != null && mdxx.target.receipt_address.address2 != "")
model.BuyerAddr += " " + mdxx.target.receipt_address.address2;
model.BuyerPhone = "";
if (mdxx.target != null && mdxx.target.receipt_address != null && mdxx.target.receipt_address.phone_area != null)
model.BuyerPhone = mdxx.target.receipt_address.phone_area;
// if (mdxx.result.receipt_address != null && this.buyerInfo.receiptAddress.phoneArea != null)
// model.BuyerPhone += this.buyerInfo.receiptAddress.phoneArea + "-";
if (mdxx.target != null && mdxx.target.receipt_address != null && mdxx.target.receipt_address.phone_number != null)
model.BuyerPhone += mdxx.target.receipt_address.phone_number;
if (mdxx.target != null && mdxx.target.receipt_address != null)
model.BuyerMobile = mdxx.target.receipt_address.mobile_no;
// if (mdxx.result.receipt_address != null && mdxx.result.receipt_address.e != null)
model.BuyerMail = "";
//model.logisticsAmount = this.buyerInfo.logisticsAmount;
// model.escrowFee = this.buyerInfo.escrowFee;
model.BuyerFax = "";
if (mdxx.target != null && mdxx.target.receipt_address != null && mdxx.target.receipt_address.zip != null)
model.BuyerZip = mdxx.target.receipt_address.zip;
if (mdxx.target != null && mdxx.target.receipt_address != null)
model.BuyerProvince = mdxx.target.receipt_address.province;
if (mdxx.target != null && mdxx.target.receipt_address != null)
model.BuyerCity = mdxx.target.receipt_address.city;
model.BuyerArea = "";
if (mdxx.target != null && mdxx.target.memo != null)
model.OrderRemark = mdxx.target.memo;
else
model.OrderRemark = "";
//memo
model.LeaveWord = "";
if (mdxx.target != null && mdxx.target.order_msg_list != null && mdxx.target.order_msg_list.tp_open_order_msg_dto != null)
{
foreach (var item2 in mdxx.target.order_msg_list.tp_open_order_msg_dto)
{
model.LeaveWord += item2.content + System.Environment.NewLine;
}
}
if (mdxx.target != null && mdxx.target.gmt_pay_success != null && mdxx.target.gmt_pay_success != "")
model.PayDate = Convert.ToDateTime(mdxx.target.gmt_pay_success);
model.OutOrderDate = DateTime.Now;
if (md.left_send_good_day != null && md.left_send_good_day != "")
model.OutOrderDate = model.OutOrderDate.Value.AddDays(Convert.ToInt32(md.left_send_good_day));
if (md.left_send_good_hour != null && md.left_send_good_hour != "")
model.OutOrderDate = model.OutOrderDate.Value.AddHours(Convert.ToInt32(md.left_send_good_hour));
if (md.left_send_good_min != null && md.left_send_good_min != "")
model.OutOrderDate = model.OutOrderDate.Value.AddMinutes(Convert.ToInt32(md.left_send_good_min));
if (model.OutOrderDate == null)
model.OutOrderDate = DateTime.Now.AddDays(5);
if (md.product_list != null && md.product_list.aeop_order_product_dto != null) model.PostInfo = md.product_list.aeop_order_product_dto[0].logistics_service_name;
model.ListModel = new List<OrderDetailModel>();
//Alibaba_productAttributes pmd = null;
//if (this.buyerInfo != null&&this.buyerInfo.childOrderList!=null)
// {
// if (this.buyerInfo.childOrderList.productAttributes != null && this.buyerInfo.childOrderList.productAttributes != "")
// {
// JavaScriptSerializer JsonConvert = new JavaScriptSerializer();
// pmd = JsonConvert.Deserialize<Alibaba_productAttributes>(this.buyerInfo.childOrderList.productAttributes);
// }
// }
if (md.product_list != null && md.product_list.aeop_order_product_dto != null)
{
foreach (var item2 in md.product_list.aeop_order_product_dto)
{
if (string.IsNullOrEmpty(item2.memo) == false) model.OrderRemark += item2.memo + System.Environment.NewLine;
OrderDetailModel model2 = new OrderDetailModel();
string GoodsDesc = "";
if (mdxx.target != null && mdxx.target.child_order_list != null && mdxx.target.child_order_list.aeop_tp_child_order_dto != null)
{
foreach (var pmd in mdxx.target.child_order_list.aeop_tp_child_order_dto)
{
if (pmd.product_id == item2.product_id)
{
JavaScriptSerializer JsonConvert = new JavaScriptSerializer();
Alibaba_productAttributesNew psku = null;
psku = JsonConvert.Deserialize<Alibaba_productAttributesNew>(pmd.product_attributes);
if (psku != null && psku.sku != null && psku.sku.Count > 0)
{
string pName = psku.sku[0].pName.Trim();
string pValue = psku.sku[0].pValue.Trim();
if (psku.sku[0].selfDefineValue.ToString() != "")
pValue = psku.sku[0].selfDefineValue;
GoodsDesc += pName + ":" + pValue;
}
if (psku != null && psku.sku != null && psku.sku.Count > 1)
{
string pName = psku.sku[1].pName.Trim();
string pValue = psku.sku[1].pValue.Trim();
GoodsDesc += " " + pName + ":" + pValue;
}
}
}
}
model2.TypeDesc = GoodsDesc;
if (item2.memo != null && item2.memo != "")
model2.TypeDesc += "备注:" + item2.memo;
model2.productImgUrl = item2.product_img_url;
model2.GoodsNum = item2.product_count;
if (item2.product_unit_price != null)
model2.GoodsPrice = item2.product_unit_price.amount;// Convert.ToDecimal(item2.product_unit_price.cent) / Convert.ToDecimal(item2.product_unit_price.cent_factor);
model2.MoneyCode = item2.product_unit_price.currency_code;
model2.GoodsName = item2.product_name;
model2.GoodsSKU = item2.sku_code;
model2.PostInfo = item2.logistics_service_name;
model.ListModel.Add(model2);
}
}
return model;
}
catch (Exception ex)
{
ErrorFollow.TraceWrite(ex.TargetSite.Name, ex.StackTrace, ex.Message);
return null;
}
}
#endregion
#region 得到留言的数据
/// <summary>
///
/// </summary>
/// <param name="channelId"></param>
/// <param name="msgSources">(站内信)message_center/order_msg(留言)</param>
/// <param name="ErrorMessage"></param>
/// <returns></returns>
public List<Alibaba_MsgContentNew> GetMsgData(string channelId, string msgSources, out string ErrorMessage)
{
try
{
string apimethod = "aliexpress.message.redefining.versiontwo.querymsgdetaillist";
Dictionary<string, string> paramDic = new Dictionary<string, string>();
paramDic.Add("session_key", sessionKey);
paramDic.Add("method", apimethod);
string token = UserMd5(apimethod + "-api-479fe803d70b9a45100c976628810b27c908fdde");
paramDic.Add("token", token);
paramDic.Add("ChannelId", channelId);
paramDic.Add("PageSize", "10");
paramDic.Add("CurrentPage", "1");
string jsonStr = JsonConvert.Serialize(paramDic);
string XmlContent = GetData(jsonStr, out ErrorMessage);
if (string.IsNullOrEmpty(ErrorMessage) == false)
return null;
OpenApiRelationResult Model = JsonConvert.Deserialize<OpenApiRelationResult>(XmlContent);
if (Model != null && Model.is_success == false)
return null;
return null;
}
catch (Exception ex)
{
ErrorMessage = "";
return null;
}
}
#endregion
#region 得到留言关系的数据
/// <summary>
///
/// </summary>
/// <param name="channelId"></param>
/// <param name="msgSources">(站内信)message_center/order_msg(留言)</param>
/// <param name="ErrorMessage"></param>
/// <returns></returns>
public string GetMsgDataRea(string msgSources, out string ErrorMessage)
{
RelationQueryDto ppm = new RelationQueryDto();
ppm.current_page = 1;
ppm.page_size = 500;
ppm.only_un_dealed = true;
ppm.only_un_readed = true;
ppm.start_time = DateTime.Today.AddDays(-7).ToString("MM/dd/yyyy HH:mm:ss");
string jsonStr1 = JsonConvert.Serialize(ppm);
string apimethod = "aliexpress.message.redefining.versiontwo.querymsgrelationlist";
Dictionary<string, string> paramDic = new Dictionary<string, string>();
paramDic.Add("session_key", sessionKey);
paramDic.Add("method", apimethod);
string token = UserMd5(apimethod + "-api-479fe803d70b9a45100c976628810b27c908fdde");
paramDic.Add("token", token);
paramDic.Add("query", jsonStr1);
string jsonStr = JsonConvert.Serialize(paramDic);
string XmlContent = GetData(jsonStr, out ErrorMessage);
if (string.IsNullOrEmpty(ErrorMessage) == false)
return null;
OpenApiMessageDetailListResult Model = JsonConvert.Deserialize<OpenApiMessageDetailListResult>(XmlContent);
if (Model != null && Model.result.is_success == false)
return null;
return XmlContent;
}
#endregion
#region 声明发货
/// <summary>
///
/// </summary>
/// <param name="orderid">订单号</param>
/// <param name="trackno">跟踪码</param>
/// <param name="ysfs">物流类型</param>
/// <param name="shippmark"></param>
/// <param name="acc"></param>
/// <param name="appkey"></param>
/// <returns></returns>
public bool SubmitTrack(string ordercode, string trackno, string serviceName, string shippmark, string trackingWebsite, out string ErrorMessage)
{
try
{
string apimethod = "aliexpress.logistics.sellershipmentfortop";
Dictionary<string, string> paramDic = new Dictionary<string, string>();
paramDic.Add("session_key", sessionKey);
paramDic.Add("method", apimethod);
string token = UserMd5(apimethod + "-api-479fe803d70b9a45100c976628810b27c908fdde");
paramDic.Add("token", token);
paramDic.Add("logistics_no", trackno);
paramDic.Add("description", shippmark);
paramDic.Add("send_type", "all");
paramDic.Add("tracking_website", trackingWebsite);
paramDic.Add("out_ref", ordercode);
paramDic.Add("service_name", serviceName);
string jsonStr = JsonConvert.Serialize(paramDic);
string XmlContent = GetData(jsonStr, out ErrorMessage);
if (string.IsNullOrEmpty(ErrorMessage) == false)
return false;
expressresult Model = JsonConvert.Deserialize<expressresult>(XmlContent);
if (Model.result_success == false)
return false;
return true;
}
catch (Exception ex)
{
ErrorMessage = ex.Message;
return false;
}
//return josn;//SaveData(josn);
}
#endregion
#region 获取买家地址
public string getLogisticsSellerAddresses(out string ErrorMessage)
{
try
{
string apimethod = "aliexpress.logistics.redefining.getlogisticsselleraddresses";
// AeopWarehouseOrderQueryPdfRequest ppm = new AeopWarehouseOrderQueryPdfRequest();
// ppm.warehouse_order_query_d_t_os = tracklist;
Dictionary<string, string> paramDic = new Dictionary<string, string>();
paramDic.Add("session_key", sessionKey);
paramDic.Add("method", apimethod);
string token = UserMd5(apimethod + "-api-479fe803d70b9a45100c976628810b27c908fdde");
paramDic.Add("token", token);
// paramDic.Add("international_logistics_id", "LP102165226SG");
// paramDic.Add("print_detail", "true");
paramDic.Add("seller_address_query", "sender,pickup,refund");// "{\"AeopWarehouseOrderQueryPdfRequest\":[{\"international_logistics_id\":\\\"LP102165226SG\\\"}]}}");
string jsonStr = JsonConvert.Serialize(paramDic);
string XmlContent = GetData(jsonStr, out ErrorMessage);
if (string.IsNullOrEmpty(ErrorMessage) == false)
return "";
OlineAddrId Model = JsonConvert.Deserialize<OlineAddrId>(XmlContent);
if (Model == null || Model.pickup_seller_address_list == null)
return "";
return Model.sender_seller_address_list.senderselleraddresslist[0].address_id + "," + Model.refund_seller_address_list.refundselleraddresslist[0].address_id + "," + Model.pickup_seller_address_list.pickupselleraddresslist[0].address_id;
}
catch (Exception ex)
{
ErrorMessage = ex.Message;
return "";
}
}
#endregion
#region 线上发货
public OnlineResult SendOnline(OlineAddressdtos model, out string ErrorMessage)
{
try
{
string apimethod = "aliexpress.logistics.createwarehouseorder";
// AeopWarehouseOrderQueryPdfRequest ppm = new AeopWarehouseOrderQueryPdfRequest();
// ppm.warehouse_order_query_d_t_os = tracklist;
string jsonStr1 = JsonConvert.Serialize(model.address_d_t_os);
Dictionary<string, string> paramDic = new Dictionary<string, string>();
paramDic.Add("session_key", sessionKey);
paramDic.Add("method", apimethod);
string token = UserMd5(apimethod + "-api-479fe803d70b9a45100c976628810b27c908fdde");
paramDic.Add("token", token);
// paramDic.Add("international_logistics_id", "LP102165226SG");
// paramDic.Add("print_detail", "true");
paramDic.Add("address_d_t_os", jsonStr1);// "{\"AeopWarehouseOrderQueryPdfRequest\":[{\"international_logistics_id\":\\\"LP102165226SG\\\"}]}}");
string jsonStr2 = JsonConvert.Serialize(model.declare_product_d_t_os);
paramDic.Add("declare_product_d_t_os", jsonStr2);
paramDic.Add("domestic_logistics_company_id", model.domestic_logistics_company_id.ToString());
paramDic.Add("domestic_logistics_company", model.domestic_logistics_company);
paramDic.Add("domestic_tracking_no", model.domestic_tracking_no);
paramDic.Add("trade_order_from", model.trade_order_from);
paramDic.Add("trade_order_id", model.trade_order_id);
paramDic.Add("warehouse_carrier_service", model.warehouse_carrier_service);
string jsonStr = JsonConvert.Serialize(paramDic);
string XmlContent = GetData(jsonStr, out ErrorMessage);
if (string.IsNullOrEmpty(ErrorMessage) == false)
return null;
OnlineResult Model = JsonConvert.Deserialize<OnlineResult>(XmlContent);
if (Model == null || Model.result == null)
return null;
return Model;
}
catch (Exception ex)
{
ErrorMessage = ex.Message;
return null;
}
}
#endregion
#region 获取跟踪码
public List<OnlineTrackCodeResultListModel> getOnlineLogisticsInfo(string orderId, out string ErrorMessage)
{
try
{
string apimethod = "aliexpress.logistics.querylogisticsorderdetail";
// AeopWarehouseOrderQueryPdfRequest ppm = new AeopWarehouseOrderQueryPdfRequest();
// ppm.warehouse_order_query_d_t_os = tracklist;
Dictionary<string, string> paramDic = new Dictionary<string, string>();
paramDic.Add("session_key", sessionKey);
paramDic.Add("method", apimethod);
string token = UserMd5(apimethod + "-api-479fe803d70b9a45100c976628810b27c908fdde");
paramDic.Add("token", token);
// paramDic.Add("international_logistics_id", "LP102165226SG");
// paramDic.Add("print_detail", "true");
paramDic.Add("trade_order_id", orderId);// "{\"AeopWarehouseOrderQueryPdfRequest\":[{\"international_logistics_id\":\\\"LP102165226SG\\\"}]}}");
string jsonStr = JsonConvert.Serialize(paramDic);
string XmlContent = GetData(jsonStr, out ErrorMessage);
if (string.IsNullOrEmpty(ErrorMessage) == false)
return null;
OnlineTrackCodeResult Model = JsonConvert.Deserialize<OnlineTrackCodeResult>(XmlContent);
if (Model == null || Model.result == null)
return null;
if (Model.result.success == false)
return null;
return Model.result.result_list.aeop_logistics_order_detail_dto;
}
catch (Exception ex)
{
ErrorMessage = ex.Message;
return null;
}
}
#endregion
#region 获取线上发货标签
public string GetPrintInfo(List<warehouse_order_query_d_t_os> tracklist, out string ErrorMessage)
{
try
{
string apimethod = "aliexpress.logistics.redefining.getprintinfos";
// AeopWarehouseOrderQueryPdfRequest ppm = new AeopWarehouseOrderQueryPdfRequest();
// ppm.warehouse_order_query_d_t_os = tracklist;
string jsonStr1 = JsonConvert.Serialize(tracklist);
Dictionary<string, string> paramDic = new Dictionary<string, string>();
paramDic.Add("session_key", sessionKey);
paramDic.Add("method", apimethod);
string token = UserMd5(apimethod + "-api-479fe803d70b9a45100c976628810b27c908fdde");
paramDic.Add("token", token);
// paramDic.Add("international_logistics_id", "LP102165226SG");
// paramDic.Add("print_detail", "true");
paramDic.Add("warehouse_order_query_d_t_os", jsonStr1);// "{\"AeopWarehouseOrderQueryPdfRequest\":[{\"international_logistics_id\":\\\"LP102165226SG\\\"}]}}");
string jsonStr = JsonConvert.Serialize(paramDic);
string XmlContent = GetData(jsonStr, out ErrorMessage);
if (string.IsNullOrEmpty(ErrorMessage) == false)
return "";
Result2 Model = JsonConvert.Deserialize<Result2>(XmlContent);
if (Model == null || Model.result == null)
return "";
pdflabel2 Model2 = JsonConvert.Deserialize<pdflabel2>(Model.result);
byte[] bytes = CustomIO.Base64ToBytes(Model2.body);
string dir = AppDomain.CurrentDomain.BaseDirectory + "ServerCookies";
if (System.IO.Directory.Exists(dir) == false) System.IO.Directory.CreateDirectory(dir);
string fname = Guid.NewGuid().ToString() + ".pdf";
string filePath = dir + "/" + fname;
CustomIO.SetOffice(filePath, bytes);
return fname;
}
catch (Exception ex)
{
ErrorMessage = ex.Message;
return "";
}
//return josn;//SaveData(josn);
}
#endregion
#region 获取线上物流渠道
public string GetOnlineList(string ordercode, out string ErrorMessage)
{
try
{
string apimethod = "aliexpress.logistics.redefining.getonlinelogisticsservicelistbyorderid";
Dictionary<string, string> paramDic = new Dictionary<string, string>();
paramDic.Add("session_key", sessionKey);
paramDic.Add("method", apimethod);
string token = UserMd5(apimethod + "-api-479fe803d70b9a45100c976628810b27c908fdde");
paramDic.Add("token", token);
// paramDic.Add("international_logistics_id", "LP102165226SG");
// paramDic.Add("print_detail", "true");
paramDic.Add("order_id", ordercode);// "{\"AeopWarehouseOrderQueryPdfRequest\":[{\"international_logistics_id\":\\\"LP102165226SG\\\"}]}}");
string jsonStr = JsonConvert.Serialize(paramDic);
string XmlContent = GetData(jsonStr, out ErrorMessage);
if (string.IsNullOrEmpty(ErrorMessage) == false)
return null;
return XmlContent;
}
catch (Exception ex)
{
ErrorMessage = ex.Message;
return "";
}
}
#endregion
public string GetParam(Dictionary<string, string> dict)
{
string cs = "";
foreach (KeyValuePair<string, string> kv in dict)
{
if (kv.Key != "param")
cs += kv.Key + "=" + kv.Value + "&";
else
cs += kv.Key + "=" + System.Web.HttpUtility.UrlEncode(kv.Value, System.Text.Encoding.UTF8) + "&";
}
cs = cs.TrimEnd('&');
return cs;
}
/// <summary>
/// 将字典类型序列化为json字符串
/// </summary>
/// <typeparam name="TKey">字典key</typeparam>
/// <typeparam name="TValue">字典value</typeparam>
/// <param name="dict">要序列化的字典数据</param>
/// <returns>json字符串</returns>
public string SerializeDictionaryToJsonString<TKey, TValue>(Dictionary<TKey, TValue> dict)
{
if (dict.Count == 0)
return "";
string jsonStr = JsonConvert.Serialize(dict);
return jsonStr;
}
/// <summary>
/// 将json字符串反序列化为字典类型
/// </summary>
/// <typeparam name="TKey">字典key</typeparam>
/// <typeparam name="TValue">字典value</typeparam>
/// <param name="jsonStr">json字符串</param>
/// <returns>字典数据</returns>
public Dictionary<TKey, TValue> DeserializeStringToDictionary<TKey, TValue>(string jsonStr)
{
if (string.IsNullOrEmpty(jsonStr))
return new Dictionary<TKey, TValue>();
Dictionary<TKey, TValue> jsonDict = JsonConvert.Deserialize<Dictionary<TKey, TValue>>(jsonStr);
return jsonDict;
}
public static string SignTopRequest(IDictionary<string, string> parameters, string secret)
{
// 第一步把字典按Key的字母顺序排序
IDictionary<string, string> sortedParams = new SortedDictionary<string, string>(parameters, StringComparer.Ordinal);
IEnumerator<KeyValuePair<string, string>> dem = sortedParams.GetEnumerator();
// 第二步:把所有参数名和参数值串在一起
StringBuilder query = new StringBuilder();
query.Append(secret);
while (dem.MoveNext())
{
string key = dem.Current.Key;
string value = dem.Current.Value;
if (!string.IsNullOrEmpty(key) && !string.IsNullOrEmpty(value))
{
query.Append(key).Append(value);
}
}
// 第三步使用MD5/HMAC加密
byte[] bytes;
query.Append(secret);
MD5 md5 = MD5.Create();
bytes = md5.ComputeHash(Encoding.UTF8.GetBytes(query.ToString()));
// 第四步:把二进制转化为大写的十六进制
StringBuilder result = new StringBuilder();
for (int i = 0; i < bytes.Length; i++)
{
result.Append(bytes[i].ToString("X2"));
}
return result.ToString();
}
private string getTimestamp()
{
string st = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
return st;
}
public static string UserMd5(string str)
{
string cl = str;
string pwd = "";
MD5 md5 = MD5.Create();//实例化一个md5对像
// 加密后是一个字节类型的数组这里要注意编码UTF8/Unicode等的选择 
byte[] s = md5.ComputeHash(Encoding.UTF8.GetBytes(cl));
// 通过使用循环,将字节类型的数组转换为字符串,此字符串是常规字符格式化所得
for (int i = 0; i < s.Length; i++)
{
// 将得到的字符串使用十六进制类型格式。格式后的字符是小写的字母如果使用大写X则格式后的字符是大写字符
pwd = pwd + s[i].ToString("x2");
}
return pwd;
}
}
#region
public class expressresult
{
public string result_error_desc { get; set; }
public string result_error_code { get; set; }
public Boolean? result_success { get; set; }
}
#endregion
#region
public class QMResult
{
public response response { get; set; }
}
#endregion
#region
public class response
{
public string Ack { get; set; }
public string data { get; set; }
public string Errors { get; set; }
}
#endregion
#region
public class data
{
public result result { get; set; }
}
#endregion
#region
public class result
{
public target_list target_list { get; set; }
public Int32? total_count { get; set; }
}
#endregion
#region
public class target_list
{
public List<AeopOrderItemDto> aeop_order_item_dto { get; set; }
}
#endregion
#region
public class AeopOrderItemDto
{
public string biz_type { get; set; }
public Decimal? logisitcs_escrow_fee_rate { get; set; }
public string left_send_good_min { get; set; }
public string left_send_good_hour { get; set; }
public string left_send_good_day { get; set; }
public product_list product_list { get; set; }
public Boolean? has_request_loan { get; set; }
public string gmt_send_goods_time { get; set; }
public money escrow_fee { get; set; }
public string escrow_fee_rate { get; set; }
public string frozen_status { get; set; }
public string issue_status { get; set; }
public string logistics_status { get; set; }
public string fund_status { get; set; }
public string payment_type { get; set; }
public string gmt_pay_time { get; set; }
public string order_status { get; set; }
public money loan_amount { get; set; }
public money pay_amount { get; set; }
public string timeout_left_time { get; set; }
public string seller_operator_aliid { get; set; }
public string seller_signer_fullname { get; set; }
public string seller_aliid { get; set; }
public string buyer_signer_fullname { get; set; }
public string seller_login_id { get; set; }
public string buyer_login_id { get; set; }
public string order_detail_url { get; set; }
public string gmt_create { get; set; }
public string order_id { get; set; }
public Boolean? phone { get; set; }
}
#endregion
#region
public class product_list
{
public List<AeopOrderProductDto> aeop_order_product_dto { get; set; }
}
#endregion
#region
public class AeopOrderProductDto
{
public string afflicate_fee_rate { get; set; }
public string escrow_fee_rate { get; set; }
public string freight_commit_day { get; set; }
public string memo { get; set; }
public string issue_mode { get; set; }
public string sku_code { get; set; }
public string order_id { get; set; }
public string send_goods_time { get; set; }
public string delivery_time { get; set; }
public string goods_prepare_time { get; set; }
public money logistics_amount { get; set; }
public string logistics_service_name { get; set; }
public string logistics_type { get; set; }
public string seller_signer_last_name { get; set; }
public string seller_signer_first_name { get; set; }
public string buyer_signer_last_name { get; set; }
public string buyer_signer_first_name { get; set; }
public string product_id { get; set; }
public string child_id { get; set; }
public money total_product_amount { get; set; }
public string product_unit { get; set; }
public Int32? product_count { get; set; }
public string product_standard { get; set; }
public string product_img_url { get; set; }
public string product_snap_url { get; set; }
public string product_name { get; set; }
public string send_goods_operator { get; set; }
public money product_unit_price { get; set; }
public Boolean? can_submit_issue { get; set; }
public Boolean? money_back3x { get; set; }
}
#endregion
#region
public class money
{
public string currency_code { get; set; }
public string cent_factor { get; set; }
public string cent { get; set; }
public Decimal? amount { get; set; }
public currency currency { get; set; }
}
#endregion
#region
public class currency
{
public string display_name { get; set; }
public string symbol { get; set; }
public string currency_code { get; set; }
public string numeric_code { get; set; }
public string default_fraction_digits { get; set; }
}
#endregion
public class param_aeop_order_query
{
public int page_size { get; set; }
public string order_status { get; set; }
public string create_date_start { get; set; }
public string create_date_end { get; set; }
public string modified_date_start { get; set; }
public string modified_date_end { get; set; }
public int current_page { get; set; }
}
public class param1
{
public int page { get; set; }
public int page_size { get; set; }
public string order_status { get; set; }
public string create_date_start { get; set; }
public string create_date_end { get; set; }
public string modified_date_start { get; set; }
public string modified_date_end { get; set; }
public int current_page { get; set; }
}
public class OrderXXParam
{
public string order_id { get; set; }
}
/// <summary>
/// 留言关系条件
/// </summary>
public class RelationQueryDto
{
public int current_page { get; set; }
public int page_size { get; set; } //每页条数,pageSize取值范围(0~100) 最多返回前5000条数据
public string start_time { get; set; } //会话时间查询范围截至时间如果不填则取当前时间从1970年起计算的毫秒时间戳
public Boolean? only_un_dealed { get; set; }//是否只查询未处理会话
public Boolean? only_un_readed { get; set; }//是否只查询未读会话
}
#region
public class OpenApiRelationResult
{
public relation_list result { get; set; }
public string error_msg { get; set; }
public string error_code { get; set; }
public Boolean? is_success { get; set; }
}
#endregion
#region
public class relation_list
{
public List<RelationResult> MessageDetail { get; set; }
}
#endregion
#region
public class RelationResult
{
public string deal_stat { get; set; }
public string read_stat { get; set; }
public string order_id { get; set; }
public string channel_id { get; set; }
public string child_name { get; set; }
public string last_message_id { get; set; }
public string other_name { get; set; }
public string other_login_id { get; set; }
}
#endregion
#region
/// <summary>
/// 留言内容
/// </summary>
public class OpenApiMessageDetailListResult
{
public messresult result { get; set; }
}
#endregion
#region
public class messresult
{
public message_detail_list message_detail_list { get; set; }
public string error_msg { get; set; }
public string error_code { get; set; }
public Boolean? is_success { get; set; }
}
#endregion
#region
public class message_detail_list
{
public List<MessageDetail> MessageDetail { get; set; }
}
#endregion
#region
public class MessageDetail
{
public summary summary { get; set; }
public string content { get; set; }
public string message_type { get; set; }
public string sender_name { get; set; }
public string gmt_create { get; set; }
public string id { get; set; }
public string sender_ali_id { get; set; }
}
#endregion
#region
public class summary
{
public string sender_login_id { get; set; }
public string receiver_ali_id { get; set; }
public string sender_ali_id { get; set; }
public string receiver_name { get; set; }
public string sender_name { get; set; }
public string order_url { get; set; }
public string product_detail_url { get; set; }
public string product_image_url { get; set; }
public string product_name { get; set; }
}
#endregion
public class OlineAddrId
{
public senderOlineAddrIdMd sender_seller_address_list { get; set; }
public refundOlineAddrIdMd refund_seller_address_list { get; set; }
public pickupOlineAddrIdMd pickup_seller_address_list { get; set; }
}
public class senderOlineAddrIdMd
{
public List<OnlineAddr> senderselleraddresslist { get; set; }
}
public class refundOlineAddrIdMd
{
public List<OnlineAddr> refundselleraddresslist { get; set; }
}
public class pickupOlineAddrIdMd
{
public List<OnlineAddr> pickupselleraddresslist { get; set; }
}
#region 线上发货
public class address_d_t_os
{
public AeopWlDeclareAddressDto sender { get; set; }
public AeopWlDeclareAddressDto pickup { get; set; }
public AeopWlDeclareAddressDto receiver { get; set; }
public AeopWlDeclareAddressDto refund { get; set; }
}
public class declare_product_d_t_os
{
public List<AeopWlDeclareProductForTopDto> AeopWlDeclareProductForTopDto { get; set; }
}
public class AeopWlDeclareProductForTopDto
{
public string aneroid_markup { get; set; }
public Boolean? contains_battery { get; set; }
public string product_declare_amount { get; set; }
public Int64? product_num { get; set; }
public string product_weight { get; set; }
public string hs_code { get; set; }
public string category_cn_desc { get; set; }
public string category_en_desc { get; set; }
public string sku_code { get; set; }
public Int64? product_id { get; set; }
public string sku_value { get; set; }
}
public class AeopWlDeclareAddressDto
{
public string phone { get; set; }
public string fax { get; set; }
public string member_type { get; set; }
public string trademanage_id { get; set; }
public string post_code { get; set; }
public string street { get; set; }
public string country { get; set; }
public string city { get; set; }
public string county { get; set; }
public string email { get; set; }
public Int64? address_id { get; set; }
public string name { get; set; }
public string province { get; set; }
public string street_address { get; set; }
public string mobile { get; set; }
}
#endregion
#region 属性信息
public class Alibaba_productAttributesNew
{
public List<Alibaba_SKUNew> sku { get; set; }
}
#endregion
#region 属性信息
public class Alibaba_SKUNew
{
public string pName { get; set; }
public string pValue { get; set; }
public string selfDefineValue { get; set; }
}
#endregion
/// <summary>
/// 线上发货
/// </summary>
public class OlineAddressdtos
{
public address_d_t_os address_d_t_os { get; set; }
public List<AeopWlDeclareProductForTopDto> declare_product_d_t_os { get; set; }
public string domestic_logistics_company { get; set; }
public Int64? domestic_logistics_company_id { get; set; }
public string domestic_tracking_no { get; set; }
public string trade_order_from { get; set; }
public string trade_order_id { get; set; }
public string warehouse_carrier_service { get; set; }
}
public class Onlinesender
{
public OnlineAddr sender { get; set; }
public OnlineAddr pickup { get; set; }
public OnlineAddr receiver { get; set; }
public OnlineAddr refund { get; set; }
}
public class OnlineAddr
{
public Int64? address_id { get; set; }
}
public class OnlineGoods
{
public string category_cn_desc { get; set; }
public string category_en_desc { get; set; }
public Boolean? contains_battery { get; set; }
public string hs_code { get; set; }
public string product_id { get; set; }
public Int32? product_num { get; set; }
public Decimal? product_weight { get; set; }
public Decimal? productDeclareAmount { get; set; }
public Boolean? only_battery { get; set; }
public string sku_value { get; set; }
}
public class OnlineResult
{
public OnlineResultMd result { get; set; }
public Boolean? result_success { get; set; }
}
public class OnlineResultMd
{
public string error_desc { get; set; }
public string intl_tracking_no { get; set; }
public string out_order_id { get; set; }
public string success { get; set; }
public string trade_order_from { get; set; }
public string trade_order_id { get; set; }
public string warehouse_order_id { get; set; }
}
/// <summary>
/// 线上获取跟踪码
/// </summary>
public class OnlineTrackCodeResult
{
public OnlineTrackCodeResultList result { get; set; }
}
/// <summary>
/// 线上获取跟踪码
/// </summary>
public class OnlineTrackCodeResultList
{
public OnlineTrackCodeResultList2 result_list { get; set; }
public Boolean? success { get; set; }
}
/// <summary>
/// 线上获取跟踪码
/// </summary>
public class OnlineTrackCodeResultList2
{
public List<OnlineTrackCodeResultListModel> aeop_logistics_order_detail_dto { get; set; }
}
/// <summary>
/// 线上获取跟踪码
/// </summary>
public class OnlineTrackCodeResultListModel
{
public string international_logistics_type { get; set; }
public string international_logistics_num { get; set; }
public string out_order_code { get; set; }
public string logistics_order_id { get; set; }
public string channel_code { get; set; }
public string trade_order_id { get; set; }
}
/// <summary>
/// 线上发货标签
/// </summary>
public class AeopWarehouseOrderQueryPdfRequest
{
public List<warehouse_order_query_d_t_os> warehouse_order_query_d_t_os { get; set; }
}
public class warehouse_order_query_d_t_os
{
public string international_logistics_id { get; set; }
}
public class Result2
{
public string result { get; set; }
}
public class pdflabel2
{
public string body { get; set; }
public string StatusCode { get; set; }
}
public class OrderXXInfoResult
{
public AeopTpOrderDetailDto target { get; set; }
}
public class AeopTpOrderDetailDto
{
public buyer_info buyer_info { get; set; }
public string buyer_signer_fullname { get; set; }
public receipt_address receipt_address { get; set; }
public string gmt_pay_success { get; set; }
public money order_amount { get; set; }
public string memo { get; set; }
public order_msg_dtomd order_msg_list { get; set; }
public child_order_list child_order_list { get; set; }
}
public class child_order_list
{
public List<AeopTpChildOrderDto> aeop_tp_child_order_dto { get; set; }
}
public class AeopTpChildOrderDto
{
public string child_order_id { get; set; }
public string product_id { get; set; }
public string product_name { get; set; }
public string product_attributes { get; set; }
public money product_price { get; set; }
public string sku_code { get; set; }
public Int32? product_count { get; set; }
}
public class product_info_dto
{
public List<product_info_dtosku> tp_open_order_product_info_dto { get; set; }
}
public class product_info_dtosku
{
public string sku { get; set; }
public string quantity { get; set; }
public string unit_price { get; set; }
public string product_name { get; set; }
public string product_id { get; set; }
}
public class buyer_info
{
public string login_id { get; set; }
public string last_name { get; set; }
public string first_name { get; set; }
public string country { get; set; }
}
public class receipt_address
{
public string fax_area { get; set; }
public string zip { get; set; }
public string fax_country { get; set; }
public string address2 { get; set; }
public string country { get; set; }
public string city { get; set; }
public string detail_address { get; set; }
public string fax_number { get; set; }
public string phone_number { get; set; }
public string address { get; set; }
public string province { get; set; }
public string phone_area { get; set; }
public string phone_country { get; set; }
public string contact_person { get; set; }
public string mobile_no { get; set; }
}
public class order_msg_dtomd
{
public List<order_msg_dto> tp_open_order_msg_dto { get; set; }
}
public class order_msg_dto
{
public string status { get; set; }
public string content { get; set; }
public string id { get; set; }
public string gmt_create { get; set; }
}
}