246 lines
7.5 KiB
C#
246 lines
7.5 KiB
C#
using AllBase;
|
|
using AllBase.Helper;
|
|
using AllBase.Model.DBModel;
|
|
using NaiBa.Util.Extension;
|
|
using Newtonsoft.Json.Linq;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Runtime.CompilerServices;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using static System.Windows.Forms.VisualStyles.VisualStyleElement;
|
|
|
|
namespace Work._29Tools.BLL
|
|
{
|
|
public class WxApiBLL
|
|
{
|
|
private WXShopTokenInfo UpdateShopWxToken(ShopLoginInfo shop)
|
|
{
|
|
var url = BaseClass.Build29WxObjString("shop/e57_get_wx_shop_token");
|
|
var data = UserLogin.GetSignaturex();
|
|
data += "&shop_id=" + shop.ShopId;
|
|
var html = GetHtml.PostUtf8(url, data);
|
|
// 获取失败
|
|
if (string.IsNullOrEmpty(html) || !html.Contains("\"code\":0"))
|
|
{
|
|
return new WXShopTokenInfo() { shopId = shop.ShopId, accessToken = "", mdyTime = DateTime.Now };
|
|
}
|
|
else
|
|
{
|
|
var token = new WXShopTokenInfo()
|
|
{
|
|
shopId = shop.ShopId,
|
|
accessToken = BaseRegex.GetStringJson(ref html, "accessToken"),
|
|
mdyTime = DateTime.Now,
|
|
};
|
|
return token;
|
|
}
|
|
}
|
|
|
|
public WXShopTokenInfo GetWxToken(ShopLoginInfo shop)
|
|
{
|
|
WXShopTokenInfo token = GlobalConfig.lstWXShopTokenInfo.FirstOrDefault(t => t.shopId == shop.ShopId);
|
|
if (token == null)
|
|
token = new WXShopTokenInfo();
|
|
if (token.isExpire || string.IsNullOrEmpty(token.accessToken))
|
|
{
|
|
token = new WxApiBLL().UpdateShopWxToken(shop);
|
|
|
|
if (!string.IsNullOrEmpty(token.accessToken))
|
|
{
|
|
GlobalConfig.lstWXShopTokenInfo.RemoveAll(t => t.shopId == shop.ShopId);
|
|
GlobalConfig.lstWXShopTokenInfo.Add(token);
|
|
NaiBa.Util.Helper.ConfigHelper.SaveConfig("wx_shop_token_list", GlobalConfig.lstWXShopTokenInfo);
|
|
}
|
|
}
|
|
return token;
|
|
}
|
|
|
|
public string GetShopSupplier(ShopLoginInfo shop)
|
|
{
|
|
bool IsRetry = false;
|
|
|
|
Retry:
|
|
var token = GetWxToken(shop);
|
|
StringBuilder sb = new StringBuilder();
|
|
sb.Append(UserLogin.GetSignaturex());
|
|
sb.Append("&token=").Append(token.accessToken);
|
|
|
|
var url = BaseClass.Build29WxObjString("product/wx_api_get_supplier_list");
|
|
var data = sb.ToString();
|
|
var html = GetHtml.PostUtf8(url, data);
|
|
if (html.Contains("access_token expired") && !IsRetry)
|
|
{
|
|
token.mdyTime = DateTime.MinValue;
|
|
IsRetry = true;
|
|
goto Retry;
|
|
}
|
|
return html;
|
|
}
|
|
|
|
public string SetShopSupplier(ShopLoginInfo shop, string supplierAppid, string serviceId)
|
|
{
|
|
bool IsRetry = false;
|
|
|
|
Retry:
|
|
var token = GetWxToken(shop);
|
|
StringBuilder sb = new StringBuilder();
|
|
sb.Append(UserLogin.GetSignaturex());
|
|
sb.Append("&token=").Append(token.accessToken);
|
|
sb.Append("&supplier_appid=").Append(supplierAppid);
|
|
sb.Append("&service_id=").Append(serviceId);
|
|
|
|
var url = BaseClass.Build29WxObjString("product/wx_api_invite_supplier");
|
|
var data = sb.ToString();
|
|
var html = GetHtml.PostUtf8(url, data);
|
|
if (html.Contains("access_token expired") && !IsRetry)
|
|
{
|
|
token.mdyTime = DateTime.MinValue;
|
|
IsRetry = true;
|
|
goto Retry;
|
|
}
|
|
return html;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 代发订单查询
|
|
/// </summary>
|
|
/// <param name="shop"></param>
|
|
/// <param name="orderId"></param>
|
|
/// <param name="status">100 待发货 199 部分发货 200 已发货 300 已取消</param>
|
|
/// <returns></returns>
|
|
public string WxApiDropshipSearch(ShopLoginInfo shop, string orderId, int status)
|
|
{
|
|
bool IsRetry = false;
|
|
|
|
Retry:
|
|
var token = GetWxToken(shop);
|
|
StringBuilder sb = new StringBuilder();
|
|
sb.Append(UserLogin.GetSignaturex());
|
|
sb.Append("&token=").Append(token.accessToken);
|
|
sb.Append("&order_id=").Append(orderId);
|
|
sb.Append("&status=").Append(status);
|
|
|
|
var url = BaseClass.Build29WxObjString("product/wx_api_dropship_search");
|
|
var data = sb.ToString();
|
|
var html = GetHtml.PostUtf8(url, data);
|
|
if (html.Contains("access_token expired") && !IsRetry)
|
|
{
|
|
token.mdyTime = DateTime.MinValue;
|
|
IsRetry = true;
|
|
goto Retry;
|
|
}
|
|
return html;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 代发订单详情查询
|
|
/// </summary>
|
|
/// <param name="shop"></param>
|
|
/// <param name="orderId"></param>
|
|
/// <returns></returns>
|
|
public string WxApiDropshipSearchDetail(ShopLoginInfo shop, string ds_order_id)
|
|
{
|
|
bool IsRetry = false;
|
|
|
|
Retry:
|
|
var token = GetWxToken(shop);
|
|
StringBuilder sb = new StringBuilder();
|
|
sb.Append(UserLogin.GetSignaturex());
|
|
sb.Append("&token=").Append(token.accessToken);
|
|
sb.Append("&ds_order_id=").Append(ds_order_id);
|
|
|
|
var url = BaseClass.Build29WxObjString("product/wx_api_dropship_search_detail");
|
|
var data = sb.ToString();
|
|
var html = GetHtml.PostUtf8(url, data);
|
|
if (html.Contains("access_token expired") && !IsRetry)
|
|
{
|
|
token.mdyTime = DateTime.MinValue;
|
|
IsRetry = true;
|
|
goto Retry;
|
|
}
|
|
return html;
|
|
}
|
|
|
|
|
|
public string WxApiDropshipAssign(ShopLoginInfo shop, string orderId, string spuId, string skuId, int cnt, string supplier_appid = null)
|
|
{
|
|
bool IsRetry = false;
|
|
|
|
Retry:
|
|
var token = GetWxToken(shop);
|
|
StringBuilder sb = new StringBuilder();
|
|
sb.Append(UserLogin.GetSignaturex());
|
|
sb.Append("&token=").Append(token.accessToken);
|
|
sb.Append("&order_id=").Append(orderId);
|
|
if (!string.IsNullOrWhiteSpace(supplier_appid))
|
|
sb.Append("&supplier_appid=").Append(supplier_appid);
|
|
sb.Append("&dropship_product_list=").Append("[{\"spu_id\":\"").Append(spuId + "\",\"sku_id\":\"").Append(skuId + "\",\"product_cnt\":").Append(cnt).Append("}]");
|
|
|
|
var url = BaseClass.Build29WxObjString("product/wx_api_dropship_assign");
|
|
var data = sb.ToString();
|
|
var html = GetHtml.PostUtf8(url, data);
|
|
if (html.Contains("access_token expired") && !IsRetry)
|
|
{
|
|
token.mdyTime = DateTime.MinValue;
|
|
IsRetry = true;
|
|
goto Retry;
|
|
}
|
|
return html;
|
|
}
|
|
|
|
public async Task<string> WxApiDropshipCancel(ShopLoginInfo shop, oms_wei_order_info order, string dropShopOrderId)
|
|
{
|
|
bool IsRetry = false;
|
|
|
|
Retry:
|
|
var token = GetWxToken(shop);
|
|
StringBuilder sb = new StringBuilder();
|
|
sb.Append(UserLogin.GetSignaturex());
|
|
sb.Append("&token=").Append(token.accessToken);
|
|
sb.Append("&order_id=").Append(order.order_id);
|
|
sb.Append("&ds_order_id=").Append(dropShopOrderId);
|
|
sb.Append("&dropship_product_list=").Append("[");
|
|
foreach (var item in order.orderItems)
|
|
{
|
|
sb.Append("{\"spu_id\":\"").Append(item.product_id).Append("\",\"sku_id\":\"").Append(item.sku_id).Append("\",\"product_cnt\":").Append(item.sku_cnt).Append("},");
|
|
}
|
|
sb.Remove(sb.Length - 1, 1);
|
|
sb.Append("]");
|
|
|
|
var url = BaseClass.Build29WxObjString("product/wx_api_dropship_cancel");
|
|
var data = sb.ToString();
|
|
var html = await GetHtml.PostUtf8Async(url, data);
|
|
if (html.Contains("access_token expired") && !IsRetry)
|
|
{
|
|
token.mdyTime = DateTime.MinValue;
|
|
IsRetry = true;
|
|
goto Retry;
|
|
}
|
|
return html;
|
|
}
|
|
|
|
public static async Task<string> WxSearchAndDropshipCancelAsync(ShopLoginInfo shop, oms_wei_order_info order)
|
|
{
|
|
string orderId = order.order_id;
|
|
|
|
var apiSearchDropship = new WxApiBLL().WxApiDropshipSearch(shop, orderId, 100);
|
|
if (!apiSearchDropship.Contains("\"errcode\":0"))
|
|
{
|
|
return apiSearchDropship;
|
|
}
|
|
if (apiSearchDropship.Contains("ds_order_id_list") && !apiSearchDropship.Contains("\"ds_order_id_list\":[]"))
|
|
{
|
|
var dsOrderId = JsonHelper.JObjectParse(apiSearchDropship)["ds_order_id_list"].FirstOrDefault().ParseToString();
|
|
var apiCancelDropship = await new WxApiBLL().WxApiDropshipCancel(shop, order, dsOrderId);
|
|
if (!apiCancelDropship.Contains("\"errcode\":0"))
|
|
{
|
|
return apiCancelDropship;
|
|
}
|
|
}
|
|
return "success";
|
|
}
|
|
}
|
|
}
|