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.
275 lines
12 KiB
C#
275 lines
12 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Security.Cryptography;
|
|
using System.Text;
|
|
using System.Xml.Linq;
|
|
using System.Web;
|
|
|
|
namespace NetLibrary.OnlineTrade
|
|
{
|
|
public class LazadaApi
|
|
{
|
|
/// <summary>
|
|
/// 接口版本
|
|
/// </summary>
|
|
public readonly string VERSION = "1.0";
|
|
#region 读取订单
|
|
public List<OrderModel> GetOrders(string country, string UserID, string apiKey, DateTime? SDate, out string ErrorMessage)
|
|
{
|
|
string Url = "";
|
|
|
|
List<OrderModel> ListModel = new List<OrderModel>();
|
|
|
|
#region 设置市场所在地借口地址
|
|
switch (country)
|
|
{
|
|
case "印尼":
|
|
Url = "https://api.sellercenter.lazada.co.id";
|
|
break;
|
|
case "马来":
|
|
Url = "https://api.sellercenter.lazada.com.my";
|
|
break;
|
|
case "泰国":
|
|
Url = "https://api.sellercenter.lazada.co.th";
|
|
break;
|
|
case "菲律宾":
|
|
Url = "https://api.sellercenter.lazada.com.ph";
|
|
break;
|
|
case "新加坡":
|
|
Url = "https://api.sellercenter.lazada.sg";
|
|
break;
|
|
case "越南":
|
|
Url = "https://api.sellercenter.lazada.vn";
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
#endregion
|
|
var timestamp = DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss+08:00");
|
|
var stime = SDate.Value.ToString("yyyy-MM-ddTHH:mm:ss+08:00");
|
|
var param = new Dictionary<string, string>();
|
|
param.Add("Action", "GetOrders");
|
|
param.Add("CreatedAfter", HttpUtility.UrlEncode(stime, Encoding.GetEncoding("UTF-8")).ToUpper());
|
|
//param.Add("Status", "pending");
|
|
param.Add("UserID", HttpUtility.UrlEncode(UserID, Encoding.GetEncoding("UTF-8")));
|
|
param.Add("Timestamp", HttpUtility.UrlEncode(timestamp, Encoding.GetEncoding("UTF-8")).ToUpper());
|
|
param.Add("Format", "XML");
|
|
param.Add("Version", VERSION);
|
|
|
|
var sign = CreateSignature(param, apiKey);
|
|
param.Add("Signature", HttpUtility.UrlEncode(sign, Encoding.GetEncoding("UTF-8")));
|
|
string surl = Url + "?";
|
|
if (param != null)
|
|
{
|
|
foreach (var item in param)
|
|
{
|
|
surl += item.Key + "=" + item.Value + "&";
|
|
|
|
}
|
|
}
|
|
surl = surl.TrimEnd('&');
|
|
|
|
string XmlContent = CustomIO.HttpRequest2(surl, "GET", "text/html", null, System.Net.HttpVersion.Version10, null, out ErrorMessage);
|
|
if (string.IsNullOrEmpty(ErrorMessage) == false)
|
|
{
|
|
return null;
|
|
}
|
|
|
|
XElement xmlPage = XElement.Parse(XmlContent);
|
|
|
|
try
|
|
{
|
|
foreach (var q in xmlPage.Element("Body").Element("Orders").Elements("Order"))
|
|
{
|
|
string OrderNumber = q.Element("OrderNumber").Value;
|
|
if (q.Element("Statuses").Element("Status").Value != "pending") continue;
|
|
var param2 = new Dictionary<string, string>();
|
|
param2.Add("Action", "GetOrderItems");
|
|
param2.Add("OrderId", HttpUtility.UrlEncode(q.Element("OrderId").Value, Encoding.GetEncoding("UTF-8")).ToUpper());
|
|
|
|
param2.Add("UserID", HttpUtility.UrlEncode(UserID, Encoding.GetEncoding("UTF-8")));
|
|
param2.Add("Timestamp", HttpUtility.UrlEncode(timestamp, Encoding.GetEncoding("UTF-8")).ToUpper());
|
|
param2.Add("Format", "XML");
|
|
param2.Add("Version", VERSION);
|
|
|
|
var sign2 = CreateSignature(param2, apiKey);
|
|
param2.Add("Signature", HttpUtility.UrlEncode(sign, Encoding.GetEncoding("UTF-8")));
|
|
string surl2 = Url + "?";
|
|
if (param != null)
|
|
{
|
|
foreach (var item in param)
|
|
{
|
|
surl2 += item.Key + "=" + item.Value + "&";
|
|
|
|
}
|
|
}
|
|
surl2 = surl2.TrimEnd('&');
|
|
|
|
string result2 = CustomIO.HttpRequest2(surl2, "GET", "text/html", null, System.Net.HttpVersion.Version10, null, out ErrorMessage);
|
|
if (string.IsNullOrEmpty(ErrorMessage) == false)
|
|
{
|
|
return null;
|
|
}
|
|
|
|
XElement DetailXml = XElement.Parse(result2);
|
|
OrderModel om = new OrderModel();
|
|
om.OrderCode = OrderNumber;
|
|
om.PlatOrderCode = q.Element("OrderId").Value;
|
|
string customname = "";
|
|
if (q.Element("CustomerFirstName") != null)
|
|
{
|
|
customname = q.Element("CustomerFirstName").Value;
|
|
}
|
|
if (q.Element("CustomerLastName") != null)
|
|
{
|
|
if (q.Element("CustomerLastName").Value != "")
|
|
customname += " " + q.Element("CustomerLastName").Value;
|
|
}
|
|
if (customname == "")
|
|
{
|
|
ErrorMessage += OrderNumber + " 收件人姓名为空<br />";
|
|
continue;
|
|
}
|
|
om.BuyerName = customname;
|
|
//string price = q.Element("Price").Value;
|
|
//om.TotalPrice = Convert.ToDecimal(price);
|
|
if (q.Element("AddressShipping").Element("Phone") != null)
|
|
{
|
|
om.BuyerPhone = q.Element("AddressShipping").Element("Phone").Value;
|
|
}
|
|
if (q.Element("AddressShipping").Element("Phone2") != null)
|
|
{
|
|
om.BuyerMobile = q.Element("AddressShipping").Element("Phone2").Value;
|
|
}
|
|
string address = "";
|
|
if (q.Element("AddressShipping").Element("Address1") != null)
|
|
{
|
|
address = q.Element("AddressShipping").Element("Address1").Value + ",";
|
|
}
|
|
if (q.Element("AddressShipping").Element("Address2") != null)
|
|
{
|
|
if (q.Element("AddressShipping").Element("Address2").Value != "")
|
|
address += "" + q.Element("AddressShipping").Element("Address2").Value + ",";
|
|
}
|
|
if (q.Element("AddressShipping").Element("Address3") != null)
|
|
{
|
|
if (q.Element("AddressShipping").Element("Address3").Value != "")
|
|
address += "" + q.Element("AddressShipping").Element("Address3").Value + ",";
|
|
}
|
|
if (q.Element("AddressShipping").Element("Address4") != null)
|
|
{
|
|
if (q.Element("AddressShipping").Element("Address4").Value != "")
|
|
address += "" + q.Element("AddressShipping").Element("Address4").Value + ",";
|
|
}
|
|
if (q.Element("AddressShipping").Element("Address5") != null)
|
|
{
|
|
if (q.Element("AddressShipping").Element("Address5").Value != "")
|
|
address += "" + q.Element("AddressShipping").Element("Address5").Value + ",";
|
|
}
|
|
om.BuyerAddr = address;
|
|
string City = " ";
|
|
if (q.Element("AddressShipping").Element("City") != null)
|
|
{
|
|
if (q.Element("AddressShipping").Element("City").Value != "")
|
|
City = q.Element("AddressShipping").Element("City").Value;
|
|
}
|
|
om.BuyerCity = City;
|
|
string Region = " ";
|
|
if (q.Element("AddressShipping").Element("Region") != null)
|
|
{
|
|
if (q.Element("AddressShipping").Element("Region").Value != "")
|
|
Region = q.Element("AddressShipping").Element("Region").Value;
|
|
}
|
|
om.BuyerProvince = Region;
|
|
string PostCode = "";
|
|
if (q.Element("AddressShipping").Element("PostCode") != null)
|
|
{
|
|
PostCode = q.Element("AddressShipping").Element("PostCode").Value;
|
|
}
|
|
om.BuyerZip = PostCode;
|
|
string Country = " ";
|
|
if (q.Element("AddressShipping").Element("Country") != null)
|
|
{
|
|
Country = q.Element("AddressShipping").Element("Country").Value;
|
|
}
|
|
om.BuyerCountry = Country;
|
|
om.OrderDate = DateTime.Now;
|
|
om.PayDate = Convert.ToDateTime(q.Element("CreatedAt").Value);
|
|
string bz = "";
|
|
Decimal PaidPrice = 0;
|
|
List<OrderDetailModel> odmlist = new List<OrderDetailModel>();
|
|
foreach (var item in DetailXml.Element("Body").Element("Orders").Element("Order").Element("OrderItems").Elements("OrderItem"))
|
|
{
|
|
OrderDetailModel odm = new OrderDetailModel();
|
|
string sku = item.Element("Sku").Value;
|
|
string[] goodlist = sku.Split('-');
|
|
odm.GoodsSKU = sku;
|
|
odm.MoneyCode = item.Element("Currency").Value;
|
|
bz = item.Element("Currency").Value;
|
|
odm.GoodsPrice = Convert.ToDecimal(item.Element("ItemPrice").Value);
|
|
//PaidPrice += Convert.ToDecimal(item.Element("PaidPrice").Value);
|
|
PaidPrice += Convert.ToDecimal(item.Element("ItemPrice").Value);
|
|
odm.GoodsNum = 1;
|
|
odm.GoodsName = goodlist[0];
|
|
//odm.PostInfo = item.Element("OrderItemId").Value;
|
|
odmlist.Add(odm);
|
|
//om.ListModel.Add(odm);
|
|
}
|
|
om.ListModel = odmlist;
|
|
om.TotalPrice = PaidPrice;
|
|
om.MoneyCode = bz;
|
|
ListModel.Add(om);
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
ErrorMessage += "读取失败";
|
|
}
|
|
|
|
return ListModel;
|
|
}
|
|
#endregion
|
|
/// <summary>
|
|
/// 生成签名
|
|
/// </summary>
|
|
public string CreateSignature(Dictionary<string, string> dict, string apiKey)
|
|
{
|
|
var dictSort = dict.OrderBy(u => u.Key).Select(u => string.Format("{0}={1}", u.Key, u.Value));
|
|
var str = string.Join("&", dictSort);
|
|
return HmacSHA256(str, apiKey).ToLower();
|
|
}
|
|
/// <summary>
|
|
/// HMACSHA256
|
|
/// </summary>
|
|
private string HmacSHA256(string data, string key)
|
|
{
|
|
var hmacsha256 = new HMACSHA256(Encoding.UTF8.GetBytes(key));
|
|
byte[] _byte = hmacsha256.ComputeHash(System.Text.Encoding.ASCII.GetBytes(data));
|
|
hmacsha256.Clear();
|
|
System.Text.StringBuilder sb = new System.Text.StringBuilder();
|
|
foreach (var item in _byte)
|
|
{
|
|
sb.Append(item.ToString("X").PadLeft(2, '0'));
|
|
}
|
|
|
|
return sb.ToString();
|
|
}
|
|
|
|
public string SHA256Encrypt(string password, string name)
|
|
{
|
|
string str = "";
|
|
|
|
var hmacsha256 = new HMACSHA256(Encoding.UTF8.GetBytes(password));
|
|
hmacsha256.ComputeHash(Encoding.UTF8.GetBytes(name));
|
|
foreach (byte test in hmacsha256.Hash)
|
|
{
|
|
str += test.ToString("x2");
|
|
}
|
|
return str;
|
|
|
|
}
|
|
}
|
|
}
|