Files
29WxOrder/Work/_29Tools/BLL/ShopBLL.cs
T
2026-07-05 22:55:04 +08:00

230 lines
11 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using AllBase;
using AllBase.Helper;
using AllBase.Model.Local;
using NaiBa.Util.Extension;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Work.BaseForms;
namespace Work._29Tools.BLL
{
public class ShopBLL
{
public static string AddServerShop(ShopLoginInfo _shop)
{
var url = BaseClass.Build29WxObjString("shop/add_shop");
var data = UserLogin.GetSignaturex()
+ "&login_name=" + _shop.LoginName
+ "&login_pass=" + GetHtml.UrlEncodeUtf8(_shop.Password)
+ "&shop_id=" + _shop.ShopId
+ "&shop_account=" + _shop.ShopAccount
//+ "&mall_id" + _shop.MallId
+ "&cookie=" + _shop.Cookies
//+ "&cookie2=" + _shop.Cookies2
+ "&group_name=" + GetHtml.UrlEncodeUtf8(_shop.GroupName)
+ "&sub_user_name=" + GetHtml.UrlEncodeUtf8(_shop.SubUserName)
+ "&notes=" + GetHtml.UrlEncodeUtf8(_shop.Notes)
+ "&login_status=" + _shop.LoginStatus;
//+ "&anti_contents=" + JsonHelper.SerializeObject(_shop.AntiContents);
var result = GetHtml.PostUtf8(url, data);
if (!result.Contains("\"code\":200") && !result.Contains("已达上限") && !result.Contains("已存在"))
result = GetHtml.PostUtf8(url, data);
if (!result.Contains("\"code\":200") && !result.Contains("已达上限") && !result.Contains("已存在"))
result = GetHtml.PostUtf8(url, data);
if (!result.Contains("\"code\":200"))
{
var msg = BaseRegex.GetStringJson(ref result, "msg");
if (string.IsNullOrEmpty(msg))
msg = "店铺保存失败!";
BaseMsgForm.ShowError(msg);
}
return result;
}
#region 服务端店铺Cookie管理
/// <summary>
/// 添加店铺Cookies
/// </summary>
/// <param name="shopName">店铺名称</param>
/// <param name="shopCookies">cookies</param>
/// <param name="fromTool">工具名称(可不填写)</param>
public static string UpdateServerShopCookies(ShopLoginInfo shop, string fromTool = null, bool isShowProgress = true)
{
var fTool = string.IsNullOrEmpty(fromTool) ? "" : "&from_tool=" + fromTool;
var url = BaseClass.Build29WxObjString("shop/mdy_shop_cookie_and_login_status");
var data = UserLogin.GetSignaturex()
+ "&login_name=" + shop.LoginName
+ "&login_status=" + shop.LoginStatus
+ "&cookie=" + shop.Cookies.Replace("&", "&").Replace("%", "%").Replace("+", "+")
+ "&openid=" + shop.openid
+ fTool;
var result = GetHtml.PostUtf8(url, data);
if (!result.Contains("\"code\":200"))
result = GetHtml.PostUtf8(url, data);
if (!result.Contains("\"code\":200"))
{
var errMsg = BaseRegex.GetStringJson(ref result, "msg");
if (isShowProgress)
BaseMsgForm.ShowError("服务端登录状态保存失败!请检查网络连接。" + errMsg);
else
return "服务端登录状态保存失败!请检查网络连接。" + errMsg;
}
return "";
}
public static List<ShopLoginInfo> AdminGetServerShopLstByIds(List<string> shop_ids)
{
List<ShopLoginInfo> list = new List<ShopLoginInfo>();
shop_ids = shop_ids.Where(s => !string.IsNullOrEmpty(s)).ToList();
var url = BaseClass.Build29WxObjString("shop/admin_get_shop_list");
var data = UserLogin.GetSignaturex() +
"&shop_ids='" + string.Join("','", shop_ids) + "'";
data += "&page_size=200";
var html = GetHtml.PostUtf8(url, data);
for (int i = 0; i < 5 && (string.IsNullOrEmpty(html) || !html.Contains("\"code\":200")); i++)
{
html = GetHtml.PostUtf8(url, data);
System.Threading.Thread.Sleep(200);
}
if (string.IsNullOrEmpty(html)
|| !html.Contains("shop_id") || !html.Contains("shop_account") || !html.Contains("login_pass"))
{
return new List<ShopLoginInfo>();
}
return ShopBLL.DeserializationShop(html);
}
#endregion
public static List<ShopLoginInfo> DeserializationShop(string shopJson, string shopDataName = "data")
{
List<ShopLoginInfo> list = new List<ShopLoginInfo>();
if (!shopJson.Contains(shopDataName))
return list;
var jArr = JObject.Parse(shopJson)[shopDataName];
if (jArr.Count() == 0)
return list;
foreach (JObject jObj in jArr)
{
var shop = DeserializationShop(jObj);
if (shop != null)
list.Add(shop);
}
return list;
}
public static ShopLoginInfo DeserializationShop(JObject shopObj)
{
string shopStr = shopObj.ToString();
ShopLoginInfo shop = new ShopLoginInfo();
shop.DbId = BaseRegex.GetStringJson(ref shopStr, "id");
if (shop.DbId == null)
return null;
shop.LoginName = BaseRegex.GetStringJson(ref shopStr, "login_name");
shop.Password = BaseRegex.GetStringJson(ref shopStr, "login_pass");
shop.ShopId = BaseRegex.GetStringJson(ref shopStr, "shop_id");
shop.ShopAccount = BaseRegex.GetStringJson(ref shopStr, "shop_account");
shop.SubUserName = BaseRegex.GetStringJson(ref shopStr, "sub_user_name");
shop.GroupName = BaseRegex.GetStringJson(ref shopStr, "group_name");
shop.Cookies = shopObj["cookie"].ParseToString().Replace("&", "&").Replace("%", "%").Replace("+", "+").Replace(""", "\"");
shop.CompanyName = BaseRegex.GetStringJson(ref shopStr, "company_name");
shop.Notes = BaseRegex.GetStringJson(ref shopStr, "notes");
shop.LoginStatus = BaseRegex.GetStringJson(ref shopStr, "login_status");
shop.AddTime = BaseRegex.GetStringJson(ref shopStr, "add_time") == null ? DateTime.MinValue : Convert.ToDateTime(BaseRegex.GetStringJson(ref shopStr, "add_time"));
shop.is_point_shop_expire = BaseRegex.GetBoolJson(ref shopStr, "is_point_shop_expire");
shop.expire_time = BaseRegex.GetIntJson(ref shopStr, "expire_time");
shop.ErpShopId = BaseRegex.GetStringJson(ref shopStr, "erp_shop_id");
shop.ErpCorporateAccountUserId = BaseRegex.GetStringJson(ref shopStr, "erp_corporate_account_user_id");
shop.ErpManageUserId = BaseRegex.GetStringJson(ref shopStr, "erp_manage_user_id");
return shop;
}
#region 检测店铺登录
public static void CheckShopLogin(ShopLoginInfo shop, UserControls.StatusBarUserControl statusBar = null)
{
CheckShopLogin(new string[] { shop.ShopId }, statusBar);
}
public static void CheckShopLogin(ShopLoginInfo[] shops, UserControls.StatusBarUserControl statusBar = null)
{
CheckShopLogin(shops.Select(s => s.ShopId).ToArray(), statusBar);
}
public static void CheckShopLogin(string[] shopNames, UserControls.StatusBarUserControl statusBar = null)
{
for (int i = 0; i < shopNames.Length; i++)
{
var campanys = GlobalConfig.ShopLoginList.ToList().Where(v => v.LoginName == shopNames[i]).ToList();
var shop = GlobalConfig.ShopLoginList.ToList().FirstOrDefault(v => v.LoginName == shopNames[i]);
// 先从服务端取最新cookie
var serverCampanys = ShopBLL.AdminGetServerShopLstByIds(campanys.Select(c => c.ShopId).ToList());
//var shopInfoTmp = string.Join(",", serverCampanys.Select(s => s.UserName + s.ShopAccount));
var serverShop = serverCampanys.FirstOrDefault();
if (shop != null && serverShop != null)
{
shop.Cookies = serverShop.Cookies;
foreach (var sc in campanys)
{
sc.Cookies = serverShop.Cookies;
}
}
if (shop != null)
{
var loginResult = CheckShopLoginStatus(shop);
if (!loginResult.Contains("\"code\":0"))
{
shop.Cookies = "[]";
foreach (var sc in campanys)
{
sc.LoginStatus = "未登录";
shop.Cookies = "[]";
}
}
else
{
foreach (var sc in campanys)
{
sc.LoginStatus = "登录成功";
sc.LastRefreshDate = DateTime.Now.ToString("yyyyMMdd");
}
}
UpdateServerShopCookies(shop, null, statusBar == null ? false : true); // 店铺cookie写入服务端,多店共用一个登录账号一组cookie
}
if (statusBar != null)
{
statusBar.Invoke(new Action(() =>
{
statusBar.lblTaskStatus.Text = "正在检测...";
statusBar.pgbTaskProgress.Value = (i + 1);
statusBar.pgbTaskProgress.Text = (i + 1) + "/" + shopNames.Length;
}));
}
}
}
public static string GetShopInfo(ShopLoginInfo shop)
{
string url = "https://store.weixin.qq.com/shop/home";
string refere = "";
var result = HttpResponseWXBLL.WeiXinGetResponse(shop, url, refere, true);
return result;
}
public static string CheckShopLoginStatus(ShopLoginInfo shop, string refere = "https://store.weixin.qq.com/shop/home")
{
string url = "https://store.weixin.qq.com/shop-faas/mmecnodebase/reachDiolog/getBizNotifyConfig?token=&lang=zh_CN";
string body = @"{""path"":""https://store.weixin.qq.com/shop/home""}";
return HttpResponseWXBLL.WeiXinPostResponse(shop, url, body, refere);
}
#endregion
}
}