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.

919 lines
31 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;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.Script.Serialization;
using System.Net.Security;
using System.Security.Authentication;
using System.Security.Cryptography.X509Certificates;
using System.Net;
using System.IO;
using NetLibrary.Data;
using System.Data.Common;
using System.Data;
using Lazop.Api;
using NetLibrary.Log;
using NetLibrary.OnlineTrade;
namespace TradeManageNew
{
public class LazadaApiNew
{
public Int32? ShopId { get; set; }
public string client_id { get; set; }
public string client_secret { get; set; }
public string access_token { get; set; }
public string refresh_token { get; set; }
public DateTime AccessTokenUpdateTime { get; set; }
public string country { get; set; }
#region 读取订单
public List<OrderModel> GetOrders(DateTime sdate,DateTime edate, out string ErrorMessage)
{
try
{
GetReshToken(out ErrorMessage);
string url = "";
string crrury_code = "";
#region 设置市场所在地借口地址
switch (country)
{
case "新加坡":
crrury_code = "SGD";
url = "https://api.lazada.sg/rest";
break;
case "泰国":
crrury_code = "THB";
url = "https://api.lazada.co.th/rest";
break;
case "印尼":
crrury_code = "IDR";
url = "https://api.lazada.co.id/rest";
break;
case "越南":
crrury_code = "VND";
url = "https://api.lazada.vn/rest";
break;
case "马来西亚":
crrury_code = "MYR";
url = "https://api.lazada.com.my/rest";
break;
case "菲律宾":
crrury_code = "PHP";
url = "https://api.lazada.com.ph/rest";
break;
}
#endregion
List<OrderModel> list = new List<OrderModel>();
for (int j = 0; j < 5;j++)
{
string offset = (j*100).ToString();
ILazopClient client = new LazopClient(url, client_id, client_secret);
LazopRequest request = new LazopRequest();
request.SetApiName("/orders/get");
request.SetHttpMethod("GET");
request.AddApiParameter("created_before", edate.ToString("yyyy-MM-dd") + "T23:00:00+08:00");
request.AddApiParameter("created_after", sdate.ToString("yyyy-MM-dd") + "T01:00:00+08:00");
request.AddApiParameter("status", "pending");//unpaid, pending, canceled, ready_to_ship, delivered, returned, shipped and failed.
request.AddApiParameter("update_before", edate.ToString("yyyy-MM-dd") + "T23:00:00+08:00");
request.AddApiParameter("sort_direction", "asc");
request.AddApiParameter("offset", offset);
request.AddApiParameter("limit", "100");
request.AddApiParameter("update_after", sdate.ToString("yyyy-MM-dd") + "T01:00:00+08:00");
request.AddApiParameter("sort_by", "updated_at");
//ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;
LazopResponse response = client.Execute(request, access_token);
JavaScriptSerializer JsonConvert = new JavaScriptSerializer();
if (response.Code == "0")
{
LazadaNew_Root Model = JsonConvert.Deserialize<LazadaNew_Root>(response.Body);
if (Model != null && Model.data != null && Model.data.orders != null)
{
foreach (var md in Model.data.orders)
{
OrderModel model = new OrderModel();
model.OrderCode = md.order_id;
if (md.order_id == "337608984364001")
{
string a = "";
}
model.TotalPrice = Convert.ToDecimal(md.price);
if (md.shipping_fee != null)
model.TotalPrice += Convert.ToDecimal(md.shipping_fee);
model.MoneyCode = crrury_code;
model.OrderDate = GetDateTime(md.created_at);
model.BuyerID = "";
model.BuyerName = md.address_shipping.first_name;
model.BuyerCountry = md.address_shipping.country;
model.BuyerAddr = md.address_shipping.address1;
// if (this.ShippingDetail.street_address2 != null && this.ShippingDetail.street_address2 != "")
// model.BuyerAddr += " " + this.ShippingDetail.street_address2;
model.BuyerPhone = md.address_shipping.phone;
model.BuyerMobile = "";
model.BuyerMail = "";
model.BuyerFax = "";
model.BuyerZip = md.address_shipping.post_code;
if (model.BuyerZip == null || model.BuyerZip == "")
model.BuyerZip = "*****";
model.BuyerProvince = md.address_shipping.city;
model.BuyerCity = md.address_shipping.city;
model.BuyerArea = "";
model.OrderRemark = md.remarks; //memo
model.LeaveWord = "";
model.PayDate = GetDateTime(md.updated_at);
model.OutOrderDate = null;
model.ListModel = new List<OrderDetailModel>();
var glist = GetOrderSKU(md.order_id);
if (glist != null)
{
model.ListModel = glist;
if (glist.Count > 0 && glist[0].MoneyCode != null && glist[0].MoneyCode != "")
model.MoneyCode = glist[0].MoneyCode;
if (glist.Count > 0)
model.PostInfo = glist[0].PostInfo;
}
list.Add(model);
}
if (Model.data.orders.Count < 100)
break;
}
ErrorMessage = "";
}
else
{
if(j==0)
ErrorMessage = response.Message;
//return null;
}
}
return list;
}
catch (Exception ex)
{
ErrorFollow.TraceWrite("GetOrders", ex.Message, "");
ErrorMessage = ex.Message;
return null;
}
}
#endregion
#region 读取订单
public List<OrderDetailModel> GetOrderSKU(string order_id)
{
try
{
string url = "";
string crrury_code = "";
#region 设置市场所在地借口地址
switch (country)
{
case "新加坡":
crrury_code = "SGD";
url = "https://api.lazada.sg/rest";
break;
case "泰国":
crrury_code = "THB";
url = "https://api.lazada.co.th/rest";
break;
case "印尼":
crrury_code = "IDR";
url = "https://api.lazada.co.id/rest";
break;
case "越南":
crrury_code = "VND";
url = "https://api.lazada.vn/rest";
break;
case "马来西亚":
crrury_code = "MYR";
url = "https://api.lazada.com.my/rest";
break;
case "菲律宾":
crrury_code = "PHP";
url = "https://api.lazada.com.ph/rest";
break;
}
#endregion
ILazopClient client = new LazopClient(url, client_id, client_secret);
LazopRequest request = new LazopRequest();
request.SetApiName("/order/items/get");
request.SetHttpMethod("GET");
request.AddApiParameter("order_id", order_id);
LazopResponse response = client.Execute(request, access_token);
var Glist = new List<OrderDetailModel>();
JavaScriptSerializer JsonConvert = new JavaScriptSerializer();
List<OrderModel> list = new List<OrderModel>();
if (response.Code == "0")
{
LazadaNew_Goods_Root Model = JsonConvert.Deserialize<LazadaNew_Goods_Root>(response.Body);
if (Model != null && Model.data != null)
{
foreach (var gmd in Model.data)
{
OrderDetailModel model2 = new OrderDetailModel();
model2.productImgUrl = gmd.product_main_image;
model2.OrderItemId = gmd.order_item_id;
model2.GoodsNum = 1;
if (gmd.item_price != null)
model2.GoodsPrice = Convert.ToDecimal(gmd.item_price);
model2.MoneyCode = gmd.currency;
model2.GoodsName = gmd.name;
model2.GoodsSKU = gmd.sku;
model2.PostInfo = gmd.shipment_provider;
model2.TypeDesc = gmd.Variation;
Glist.Add(model2);
}
}
}
return Glist;
}
catch (Exception ex)
{
ErrorFollow.TraceWrite("GetOrders", ex.Message, "");
return null;
}
}
#endregion
#region 读取跟踪码
public List<lazada_pack> SetStatusToPackedByMarketplace(string itemorderid, string shipment_provider)
{
try
{
string url = "";
string crrury_code = "";
#region 设置市场所在地借口地址
switch (country)
{
case "新加坡":
crrury_code = "SGD";
url = "https://api.lazada.sg/rest";
break;
case "泰国":
crrury_code = "THB";
url = "https://api.lazada.co.th/rest";
break;
case "印尼":
crrury_code = "IDR";
url = "https://api.lazada.co.id/rest";
break;
case "越南":
crrury_code = "VND";
url = "https://api.lazada.vn/rest";
break;
case "马来西亚":
crrury_code = "MYR";
url = "https://api.lazada.com.my/rest";
break;
case "菲律宾":
crrury_code = "PHP";
url = "https://api.lazada.com.ph/rest";
break;
}
#endregion
ILazopClient client = new LazopClient(url, client_id, client_secret);
LazopRequest request = new LazopRequest();
request.SetApiName("/order/pack");
if(shipment_provider=="")
request.AddApiParameter("shipping_provider", "LGS-FM41");
else
request.AddApiParameter("shipping_provider", shipment_provider);
request.AddApiParameter("delivery_type", "dropship");//One of the following delivery types:'dropship' - the seller will send out the package on his own. 'pickup' - shop should pick up the item from the seller (cross-docking). 'send_to_warehouse' - the seller will send the item to the warehouse (cross-docking).
request.AddApiParameter("order_item_ids", "[" + itemorderid + "]");
LazopResponse response = client.Execute(request, access_token);
JavaScriptSerializer JsonConvert = new JavaScriptSerializer();
List<OrderModel> list = new List<OrderModel>();
if (response.Code == "0")
{
lazada_pack_Root Model = JsonConvert.Deserialize<lazada_pack_Root>(response.Body);
if (Model != null && Model.data != null)
{
return Model.data.order_items;
}
else
{
return null;
}
}
else
{
return null;
}
}
catch (Exception ex)
{
ErrorFollow.TraceWrite("SetStatusToPackedByMarketplace", ex.Message, itemorderid);
return null;
}
}
#endregion
#region 读取跟踪码
public List<lazada_pack> SetStatusToReadyToShip(string itemorderid, string tracking_number, string shipment_provider)
{
try
{
string url = "";
string crrury_code = "";
#region 设置市场所在地借口地址
switch (country)
{
case "新加坡":
crrury_code = "SGD";
url = "https://api.lazada.sg/rest";
break;
case "泰国":
crrury_code = "THB";
url = "https://api.lazada.co.th/rest";
break;
case "印尼":
crrury_code = "IDR";
url = "https://api.lazada.co.id/rest";
break;
case "越南":
crrury_code = "VND";
url = "https://api.lazada.vn/rest";
break;
case "马来西亚":
crrury_code = "MYR";
url = "https://api.lazada.com.my/rest";
break;
case "菲律宾":
crrury_code = "PHP";
url = "https://api.lazada.com.ph/rest";
break;
}
#endregion
ILazopClient client = new LazopClient(url, client_id, client_secret);
LazopRequest request = new LazopRequest();
request.SetApiName("/order/rts");
request.AddApiParameter("delivery_type", "dropship");
request.AddApiParameter("order_item_ids", "[" + itemorderid + "]");
if(shipment_provider=="")
request.AddApiParameter("shipment_provider", "LGS-FM41");
else
request.AddApiParameter("shipment_provider", shipment_provider);
request.AddApiParameter("tracking_number", tracking_number);
LazopResponse response = client.Execute(request, access_token);
JavaScriptSerializer JsonConvert = new JavaScriptSerializer();
List<OrderModel> list = new List<OrderModel>();
if (response.Code == "0")
{
lazada_pack_Root Model = JsonConvert.Deserialize<lazada_pack_Root>(response.Body);
if (Model != null && Model.data != null)
{
return Model.data.order_items;
}
else
{
return null;
}
}
else
{
return null;
}
}
catch (Exception ex)
{
ErrorFollow.TraceWrite("SetStatusToReadyToShip", ex.Message, itemorderid + " " + tracking_number);
return null;
}
}
#endregion
public DateTime? GetDateTime(string dt)
{
if (string.IsNullOrEmpty(dt) == true) return null;
// dt = dt.Replace("T", " ");
int len = dt.IndexOf("+");
dt = dt.Substring(0,len);
return Convert.ToDateTime(dt);
}
#region 当长时令牌超过25天那么重新请求
public string GetToken()
{
LazopClient client = new LazopClient("https://auth.lazada.com/rest", client_id, client_secret);
LazopRequest request = new LazopRequest("/auth/token/create");
// request.AddApiParameter
request.AddApiParameter("code", "0_103013_YPO628jU3G3CEXEJ3jN6czhZ10430");
LazopResponse response = client.Execute(request);
return "";
}
#endregion
#region 当长时令牌超过25天那么重新请求
public void GetReshToken(out string ErrorMessage)
{
if (AccessTokenUpdateTime.AddDays(4)> DateTime.Today)
{
ErrorMessage = "";
return;
}
LazopClient client = new LazopClient("https://auth.lazada.com/rest", client_id, client_secret);
LazopRequest request = new LazopRequest("/auth/token/refresh");
request.AddApiParameter("refresh_token", refresh_token);
LazopResponse response = client.Execute(request);
JavaScriptSerializer JsonConvert = new JavaScriptSerializer();
if (response.Code == "0")
{
ErrorMessage = "";
lazada_token Model = JsonConvert.Deserialize<lazada_token>(response.Body);
if (Model != null)
{
UpdateShopToken(Model.access_token,Model.refresh_token);
}
}
else
{
ErrorFollow.TraceWrite("LazadaGetReshToken", response.Message, "");
ErrorMessage = response.Message;
}
//if (Model.code == 0)
//{
// AccessToken = Model.data.access_token;
// RefreshToken = Model.data.refresh_token;
// RefreshTokenSaveTime = DateTime.Now;
// AccessTokenUpdateTime = DateTime.Now;
// UpdateShopToken();
//}
//else
//{
// ErrorMessage = Model.message;
//}
}
#endregion
#region 修改tocken
public void UpdateShopToken(string AccessToken, string refresh_token)
{
string tsql = @"
Update [JC_Shop] set [AccessToken]=@AccessToken,[AccessTokenUpdateTime]=getdate(),RefreshToken=@refresh_token where ShopId=@ShopId
";
Database db = DatabaseFactory.CreateDatabase();
DbCommand cmd = db.GetSqlStringCommand(tsql);
db.AddInParameter(cmd, "@ShopId", DbType.Int32, ShopId);
db.AddInParameter(cmd, "@AccessToken", DbType.String, AccessToken);
db.AddInParameter(cmd, "@refresh_token", DbType.String, refresh_token);
db.ExecuteNonQuery(cmd);
}
#endregion
}
public class lazada_pack_Root
{
/// <summary>
///
/// </summary>
public string code { get; set; }
/// <summary>
///
/// </summary>
public lazada_pack_items data { get; set; }
}
public class lazada_pack_items
{
public List<lazada_pack> order_items { get; set; }
}
public class lazada_pack
{
public string order_item_id { get; set; }
public string purchase_order_id { get; set; }
public string tracking_number { get; set; }
public string purchase_order_number { get; set; }
public string shipment_provider { get; set; }
public string package_id { get; set; }
}
public class lazada_token
{
public string access_token { get; set; }
public string refresh_token { get; set; }
}
public class LazadaNew_Goods_Root
{
/// <summary>
///
/// </summary>
public string code { get; set; }
/// <summary>
///
/// </summary>
public List<LazadaNew_Goods> data { get; set; }
}
public class LazadaNew_Goods
{
/// <summary>
///
/// </summary>
public string sku { get; set; }
public string name { get; set; }
/// <summary>
///
/// </summary>
public string shop_sku { get; set; }
public string order_item_id { get; set; }
public string item_price { get; set; }
/// <summary>
///
/// </summary>
public string product_detail_url { get; set; }
/// <summary>
///
/// </summary>
public string product_main_image { get; set; }
public string shipment_provider { get; set; }
public string Variation { get; set; }
public string tracking_code { get; set; }
public string warehouse_code { get; set; }
public string currency { get; set; }
}
public class Address_billing
{
/// <summary>
///
/// </summary>
public string country { get; set; }
/// <summary>
///
/// </summary>
public string address3 { get; set; }
/// <summary>
///
/// </summary>
public string address2 { get; set; }
/// <summary>
///
/// </summary>
public string city { get; set; }
/// <summary>
///
/// </summary>
public string phone { get; set; }
/// <summary>
///
/// </summary>
public string address1 { get; set; }
/// <summary>
///
/// </summary>
public string post_code { get; set; }
/// <summary>
///
/// </summary>
public string phone2 { get; set; }
/// <summary>
///
/// </summary>
public string last_name { get; set; }
/// <summary>
///
/// </summary>
public string address5 { get; set; }
/// <summary>
///
/// </summary>
public string address4 { get; set; }
/// <summary>
///
/// </summary>
public string first_name { get; set; }
}
public class Address_shipping
{
/// <summary>
///
/// </summary>
public string country { get; set; }
/// <summary>
///
/// </summary>
public string address3 { get; set; }
/// <summary>
///
/// </summary>
public string address2 { get; set; }
/// <summary>
///
/// </summary>
public string city { get; set; }
/// <summary>
///
/// </summary>
public string phone { get; set; }
/// <summary>
///
/// </summary>
public string address1 { get; set; }
/// <summary>
///
/// </summary>
public string post_code { get; set; }
/// <summary>
///
/// </summary>
public string phone2 { get; set; }
/// <summary>
///
/// </summary>
public string last_name { get; set; }
/// <summary>
///
/// </summary>
public string address5 { get; set; }
/// <summary>
///
/// </summary>
public string address4 { get; set; }
/// <summary>
///
/// </summary>
public string first_name { get; set; }
}
public class LazadaNew_Orders2
{
// public string voucher_platform { get; set; }
/// <summary>
///
/// </summary>
// public string voucher { get; set; }
/// <summary>
///
/// </summary>
// public string warehouse_code { get; set; }
/// <summary>
///
/// </summary>
// public string order_number { get; set; }
/// <summary>
///
/// </summary>
// public string voucher_seller { get; set; }
/// <summary>
///
/// </summary>
// public string created_at { get; set; }
/// <summary>
///
/// </summary>
// public string voucher_code { get; set; }
/// <summary>
///
/// </summary>
// public string gift_option { get; set; }
/// <summary>
///
/// </summary>
// public string customer_last_name { get; set; }
/// <summary>
///
/// </summary>
// public string updated_at { get; set; }
/// <summary>
///
/// </summary>
// public string promised_shipping_times { get; set; }
/// <summary>
///
/// </summary>
public string price { get; set; }
/// <summary>
///
/// </summary>
// public string national_registration_number { get; set; }
/// <summary>
///
/// </summary>
// public string payment_method { get; set; }
/// <summary>
///
/// </summary>
// public string address_updated_at { get; set; }
/// <summary>
///
/// </summary>
public string customer_first_name { get; set; }
/// <summary>
///
/// </summary>
public decimal? shipping_fee { get; set; }
/// <summary>
///
/// </summary>
// public string branch_number { get; set; }
/// <summary>
///
/// </summary>
// public string tax_code { get; set; }
/// <summary>
///
/// </summary>
// public Int32? items_count { get; set; }
/// <summary>
///
/// </summary>
// public string delivery_info { get; set; }
/// <summary>
///
/// </summary>
// public string statuses { get; set; }
/// <summary>
///
/// </summary>
// public Address_billing address_billing { get; set; }
/// <summary>
///
/// </summary>
// public string extra_attributes { get; set; }
/// <summary>
///
/// </summary>
public string order_id { get; set; }
/// <summary>
///
/// </summary>
// public string gift_message { get; set; }
/// <summary>
///
/// </summary>
public string remarks { get; set; }
}
public class LazadaNew_Orders
{
/// <summary>
///
/// </summary>
public string voucher_platform { get; set; }
/// <summary>
///
/// </summary>
public string voucher { get; set; }
/// <summary>
///
/// </summary>
public string warehouse_code { get; set; }
/// <summary>
///
/// </summary>
public string order_number { get; set; }
/// <summary>
///
/// </summary>
public string voucher_seller { get; set; }
/// <summary>
///
/// </summary>
public string created_at { get; set; }
/// <summary>
///
/// </summary>
public string voucher_code { get; set; }
/// <summary>
///
/// </summary>
public string gift_option { get; set; }
/// <summary>
///
/// </summary>
public string customer_last_name { get; set; }
/// <summary>
///
/// </summary>
public string updated_at { get; set; }
/// <summary>
///
/// </summary>
public string promised_shipping_times { get; set; }
/// <summary>
///
/// </summary>
public string price { get; set; }
/// <summary>
///
/// </summary>
public string national_registration_number { get; set; }
/// <summary>
///
/// </summary>
public string payment_method { get; set; }
/// <summary>
///
/// </summary>
public string address_updated_at { get; set; }
/// <summary>
///
/// </summary>
public string customer_first_name { get; set; }
/// <summary>
///
/// </summary>
public string shipping_fee { get; set; }
/// <summary>
///
/// </summary>
public string branch_number { get; set; }
/// <summary>
///
/// </summary>
public string tax_code { get; set; }
/// <summary>
///
/// </summary>
public Int32? items_count { get; set; }
/// <summary>
///
/// </summary>
public string delivery_info { get; set; }
/// <summary>
///
/// </summary>
public List<string> statuses { get; set; }
/// <summary>
///
/// </summary>
public Address_billing address_billing { get; set; }
/// <summary>
///
/// </summary>
public string extra_attributes { get; set; }
/// <summary>
///
/// </summary>
public string order_id { get; set; }
/// <summary>
///
/// </summary>
public string gift_message { get; set; }
/// <summary>
///
/// </summary>
public string remarks { get; set; }
/// <summary>
///
/// </summary>
public Address_shipping address_shipping { get; set; }
}
public class LazadaNew_Data
{
/// <summary>
///
/// </summary>
public Int32? count { get; set; }
/// <summary>
///
/// </summary>
public List<LazadaNew_Orders> orders { get; set; }
}
public class LazadaNew_Root
{
/// <summary>
///
/// </summary>
public LazadaNew_Data data { get; set; }
}
}