230 lines
11 KiB
C#
230 lines
11 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.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)
|
||
+ "¬es=" + 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
|
||
}
|
||
}
|