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; } /// /// 代发订单查询 /// /// /// /// 100 待发货 199 部分发货 200 已发货 300 已取消 /// 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; } /// /// 代发订单详情查询 /// /// /// /// 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 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 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"; } } }