Files
KJD/TEMUKJD/PDDForms/ShopForms/PDDShopUpdateFddlCookieForm.cs
T
wule 5e9bdd1700 1调整拼多多工作台cookie时的cef user-agent,防止掉线
2优化商品删除逻辑,修复bug
3查找pdd版本长时间运行程序卡死原因并尝试修复
4pdd上货记住主要上货选项避免每次都重新选择
2025-10-08 18:23:00 +08:00

355 lines
17 KiB
C#

using AllBase;
using AllBase.Helper;
using AllBase.Model.Result;
using CefSharp;
using Fiddler;
using NaiBa.Util.Extension;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using TemuKJD.BaseForms;
using TemuKJD.BLL;
using TemuKJD.Helper;
using Work;
namespace TemuKJD.PDDForms.ShopForms
{
public partial class PDDShopUpdateFddlCookieForm : LRBaseForm
{
ShopLoginInfo shop = null;
SetCookieFromEnum updateFrom;
public FddlHelper fddlHelper = new FddlHelper();
public static PDDShopUpdateFddlCookieForm instance;
public PDDShopUpdateFddlCookieForm(ShopLoginInfo _shop, SetCookieFromEnum from = SetCookieFromEnum.normal_user)
{
instance = this;
InitializeComponent();
shop = _shop;
updateFrom = from;
}
private void PDDShopUpdateFddlCookieForm_Load(object sender, EventArgs e)
{
Task.Run(() =>
{
int i = 0;
while (true)
{
i++;
string txt = "店铺 " + shop.ShopAccount + " Cookie获取中,请稍候";
for (int j = 0; j < i % 3 + 1; j++)
{
txt += ".";
}
if (!Created || Disposing || IsDisposed)
break;
Invoke(new Action(() =>
{
this.label1.Text = txt;
}));
Thread.Sleep(500);
}
});
fddlHelper.InstallCertificate();
// 监听
FiddlerApplication.BeforeRequest += FiddlerApplication_BeforeRequest;
fddlHelper.StartupFiddlerCore(); // 启动fiddler
label3.Text = "";
}
private void FiddlerApplication_BeforeRequest(Session oSession)
{
// https://mms.pinduoduo.com/newjersy/api/mms/popup //https://mms.pinduoduo.com/janus/api/heartbeat/v2
// https://mms.pinduoduo.com/janus/api/subSystem/getAuthToken // https://mms.pinduoduo.com/janus/api/new/userinfo
// https://mms.pinduoduo.com/home/ // https://mms.pinduoduo.com/janus/api/checkLogin
if (oSession.fullUrl.StartsWith("https://mms.pinduoduo.com"))
{
var header = oSession.RequestHeaders;
if (!header.Any(h => h.Name == "Cookie"))
return;
var headerCookie = header["Cookie"];
if (headerCookie.Contains("JSESSIONID") && headerCookie.Contains("_nano_fp") && headerCookie.Contains("api_uid") &&
headerCookie.Contains("_f77") && headerCookie.Contains("mms_b84d1838") && headerCookie.Contains("_a42") &&
headerCookie.Contains("rckk") && headerCookie.Contains("ru1k") && headerCookie.Contains("ru2k") &&
headerCookie.Contains("x-visit-time") && headerCookie.Contains("PASS_ID"))
{
}
else
{
return;
}
shop.pddid = "";
if (header.Any(h => h.Name == "pddid"))
{
shop.pddid = header["pddid"];
}
else
{
return;
}
if (this.Created && !this.Disposing && !this.IsDisposed)
{
// 窗口存在
}
else
{
// 窗口关闭
return;
}
FiddlerApplication.BeforeRequest -= FiddlerApplication_BeforeRequest;
string JSESSIONID = BaseRegex.GetStringCookie(ref headerCookie, "JSESSIONID").ParseToString().Trim('\'', '\n', '\r');
string _nano_fp = BaseRegex.GetStringCookie(ref headerCookie, "_nano_fp").ParseToString().Trim('\'', '\n', '\r');
string api_uid = BaseRegex.GetStringCookie(ref headerCookie, "api_uid").ParseToString().Trim('\'', '\n', '\r');
string _bee = BaseRegex.GetStringCookie(ref headerCookie, "_bee").ParseToString().Trim('\'', '\n', '\r');
string _f77 = BaseRegex.GetStringCookie(ref headerCookie, "_f77").ParseToString().Trim('\'', '\n', '\r');
string mms_b84d1838 = BaseRegex.GetStringCookie(ref headerCookie, "mms_b84d1838").ParseToString().Trim('\'', '\n', '\r');
string _a42 = BaseRegex.GetStringCookie(ref headerCookie, "_a42").ParseToString().Trim('\'', '\n', '\r');
string rckk = BaseRegex.GetStringCookie(ref headerCookie, "rckk").ParseToString().Trim('\'', '\n', '\r');
string ru1k = BaseRegex.GetStringCookie(ref headerCookie, "ru1k").ParseToString().Trim('\'', '\n', '\r');
string ru2k = BaseRegex.GetStringCookie(ref headerCookie, "ru2k").ParseToString().Trim('\'', '\n', '\r');
string webp = BaseRegex.GetStringCookie(ref headerCookie, "webp").ParseToString().Trim('\'', '\n', '\r');
string x_visit_time = BaseRegex.GetStringCookie(ref headerCookie, "x-visit-time").ParseToString().Trim('\'', '\n', '\r');
string PASS_ID = BaseRegex.GetStringCookie(ref headerCookie, "PASS_ID").ParseToString().Trim('\'', '\n', '\r');
string cookie = "_a42=" + _a42 + ";" +
"_bee=" + _bee + ";" +
"_f77=" + _f77 + ";" +
"_nano_fp=" + _nano_fp + ";" +
"api_uid=" + api_uid + ";" +
"JSESSIONID=" + JSESSIONID + ";" +
"mms_b84d1838=" + mms_b84d1838 + ";" +
"PASS_ID=" + PASS_ID + ";" +
"rckk=" + rckk + ";" +
"ru1k=" + ru1k + ";" +
"ru2k=" + ru2k + ";" +
"webp=" + webp + ";" +
"x-visit-time=" + x_visit_time + ";";
//PASS_ID=windows_1-txt3KQyFr2JBdl/PeNNwLLsMj2geDn/BnlN1xEg/hdkC8Kx5WrYvqwTCWi9i50ZfXH0jbMX80leYsfebgQ4kLQ_492379693_91339707; PddBrowser=1; api_uid=Ck3IU2jeM5VoLABZFGCTAg==; rckk=F0JWp023Drn2QqjzLaKOJ0omuqKhTPlC; _bee=F0JWp023Drn2QqjzLaKOJ0omuqKhTPlC; ru1k=f3d9839e-c5ed-430f-8a85-41e6827c526e; _f77=f3d9839e-c5ed-430f-8a85-41e6827c526e; ru2k=20807545-2762-4365-8aa8-b8de45bd76f0; _a42=20807545-2762-4365-8aa8-b8de45bd76f0
List<Cookie> cookieList = new List<Cookie>();
if (!string.IsNullOrEmpty(_a42))
cookieList.Add(new Cookie() { Domain = ".pinduoduo.com", Name = "_a42", Value = _a42, Expires = DateTime.Now.AddYears(1), HttpOnly = true, Secure = true, });
if (!string.IsNullOrEmpty(_bee))
cookieList.Add(new Cookie() { Domain = ".pinduoduo.com", Name = "_bee", Value = _bee, Expires = DateTime.Now.AddYears(1), HttpOnly = true, Secure = true, });
if (!string.IsNullOrEmpty(_f77))
cookieList.Add(new Cookie() { Domain = ".pinduoduo.com", Name = "_f77", Value = _f77, Expires = DateTime.Now.AddYears(1), HttpOnly = true, Secure = true, });
if (!string.IsNullOrEmpty(_nano_fp))
cookieList.Add(new Cookie() { Domain = "mms.pinduoduo.com", Name = "_nano_fp", Value = _nano_fp, Expires = DateTime.Now.AddDays(400), });
if (!string.IsNullOrEmpty(api_uid))
cookieList.Add(new Cookie() { Domain = ".pinduoduo.com", Name = "api_uid", Value = api_uid, Expires = DateTime.Now.AddDays(400), });
if (!string.IsNullOrEmpty(JSESSIONID))
cookieList.Add(new Cookie() { Domain = "mms.pinduoduo.com", Name = "JSESSIONID", Value = JSESSIONID, HttpOnly = true, });
if (!string.IsNullOrEmpty(mms_b84d1838))
cookieList.Add(new Cookie() { Domain = "mms.pinduoduo.com", Name = "mms_b84d1838", Value = mms_b84d1838, Expires = DateTime.Now.AddDays(100), });
if (!string.IsNullOrEmpty(PASS_ID))
cookieList.Add(new Cookie() { Domain = "mms.pinduoduo.com", Name = "PASS_ID", Value = PASS_ID, Expires = DateTime.Now.AddDays(30), HttpOnly = true, Secure = true, });
if (!string.IsNullOrEmpty(rckk))
cookieList.Add(new Cookie() { Domain = ".pinduoduo.com", Name = "rckk", Value = rckk, Expires = DateTime.Now.AddYears(1), HttpOnly = true, Secure = true, });
if (!string.IsNullOrEmpty(ru1k))
cookieList.Add(new Cookie() { Domain = ".pinduoduo.com", Name = "ru1k", Value = ru1k, Expires = DateTime.Now.AddYears(1), HttpOnly = true, Secure = true, });
if (!string.IsNullOrEmpty(ru2k))
cookieList.Add(new Cookie() { Domain = ".pinduoduo.com", Name = "ru2k", Value = ru2k, Expires = DateTime.Now.AddYears(1), HttpOnly = true, Secure = true, });
if (!string.IsNullOrEmpty(webp))
cookieList.Add(new Cookie() { Domain = "mms.pinduoduo.com", Name = "webp", Value = webp, Expires = DateTime.Now.AddDays(14), Path = "/home" });
if (!string.IsNullOrEmpty(x_visit_time))
cookieList.Add(new Cookie() { Domain = "mms.pinduoduo.com", Name = "x-visit-time", Value = x_visit_time, Expires = DateTime.Now.AddDays(100), });
if (PASS_ID.StartsWith("windows_1") && !cookieList.Any(c => c.Name == "PddBrowser"))
cookieList.Add(new Cookie() { Domain = ".pinduoduo.com", Name = "PddBrowser", Value = "1", Expires = DateTime.Now.AddYears(1), });
headerCookie = JsonHelper.SerializeObject(cookieList);
var cookieShop = new ShopLoginInfo();
cookieShop.pddid = shop.pddid;
cookieShop.Cookies = JsonHelper.SerializeObject(cookieList);
var data = "";
data = PDDShopListForm.GetShopStatus(cookieShop);
if (data.Contains("基础连接已关闭"))
{
data = PDDShopListForm.GetShopStatus(cookieShop);
}
if (data.Contains("基础连接已关闭"))
{
data = PDDShopListForm.GetShopStatus(cookieShop);
}
if (!data.Contains("\"success\":true") || data.Contains("会话已过期"))
{
Invoke(new Action(() =>
{
//BaseMsgForm.ShowError("cookie已失效!");
label3.Text = "cookie已失效!";
}));
FiddlerApplication.BeforeRequest -= FiddlerApplication_BeforeRequest;
FiddlerApplication.BeforeRequest += FiddlerApplication_BeforeRequest;
return;
}
var username = BaseRegex.GetStringJson(ref data, "username");
var maskMobile = BaseRegex.GetStringJson(ref data, "mobile");
var mallName = BaseRegex.GetStringJson(ref data, "mall_name");
maskMobile = maskMobile.Split('*').Last();
if (string.IsNullOrWhiteSpace(maskMobile) || string.IsNullOrWhiteSpace(username) || string.IsNullOrWhiteSpace(mallName))
{
Invoke(new Action(() =>
{
//BaseMsgForm.ShowError("店铺信息获取失败!");
label3.Text = "店铺信息获取失败!";
}));
FiddlerApplication.BeforeRequest -= FiddlerApplication_BeforeRequest;
FiddlerApplication.BeforeRequest += FiddlerApplication_BeforeRequest;
return;
}
if (!shop.LoginName.EndsWith(maskMobile) && shop.LoginName != username && shop.LoginName != mallName)
{
Invoke(new Action(() =>
{
//BaseMsgForm.ShowError("cookie与店铺不匹配,请核对店铺!");
label3.Text = "cookie与店铺不匹配,请核对店铺!";
}));
FiddlerApplication.BeforeRequest -= FiddlerApplication_BeforeRequest;
FiddlerApplication.BeforeRequest += FiddlerApplication_BeforeRequest;
return;
}
List<ShopLoginInfo> serverShopLst = new List<ShopLoginInfo>();
var rst = ShopBLL.AdminGetServerShopLstForSetCookie(shop, serverShopLst);
if (rst != "success")
{
Invoke(new Action(() =>
{
//BaseMsgForm.ShowError(rst);
label3.Text = rst;
}));
FiddlerApplication.BeforeRequest -= FiddlerApplication_BeforeRequest;
FiddlerApplication.BeforeRequest += FiddlerApplication_BeforeRequest;
return;
}
//如果店铺没有cookie登录过,处理店铺第一次登录(分裂cookie下的所有店铺)
GetShopFirstLogin(data, serverShopLst);
if (updateFrom == SetCookieFromEnum.normal_user) // 普通用户更新本地店铺
{
var localShop = GlobalConfig.ShopLoginList.Where(v => v.LoginName == shop.LoginName).ToList();
foreach (var sc in localShop)
{
sc.Cookies = headerCookie;
sc.LoginStatus = "登录成功";
}
}
shop.Cookies = headerCookie;
shop.ShopId = username;
shop.ShopAccount = mallName;
shop.LoginStatus = "登录成功";
// 店铺更新写入到服务端
var url = BaseClass.BuildObjString("shop/mdy_shop");
var data1 = UserLogin.GetSignaturex()
+ "&login_name=" + shop.LoginName
+ "&new_shop_id=" + shop.ShopId
+ "&shop_account=" + shop.ShopAccount;
var result = GetHtml.PostUtf8(url, data1);
PDDShopListForm.UpdateServerShopCookies(shop); // 店铺cookie写入服务端,不同账号下的同名店铺一起更新cookie
if (this.Created && !this.Disposing && !this.IsDisposed)
Invoke(new Action(() =>
{
this.OnSaveComplete(shop);
this.Close();
}));
}
}
private void PDDShopUpdateFddlCookieForm_FormClosed(object sender, FormClosedEventArgs e)
{
fddlHelper.UninstallFiddler();
}
private void PDDShopUpdateFddlCookieForm_FormClosing(object sender, FormClosingEventArgs e)
{
//UninstallCertificate(); // 移除 CertMaker.dll, BCMakeCert.dll 文件后,无需每次删除证书
fddlHelper.UninstallFiddler();
}
/// <summary>
/// 如果店铺没有cookie登录过,处理店铺第一次登录(分裂cookie下的所有店铺)
/// </summary>
/// <param name="loginData"></param>
void GetShopFirstLogin(string loginData, List<ShopLoginInfo> lstServerShop)
{
if (this.shop == null)
return;
if (lstServerShop == null)
lstServerShop = new List<ShopLoginInfo>();
List<ShopCompany> lstShopCompany = new List<ShopCompany>();
var jObj = JObject.Parse(loginData);
var jArr = jObj["result"]?["companyList"]?[0]?["malInfoList"] as JArray;
if (jArr == null)
jArr = new JArray();
foreach (var productObj in jArr)
{
var prod = JsonHelper.SerializeObject(productObj);
ShopCompany sc = new ShopCompany()
{
AccountId = BaseRegex.GetStringJson(ref prod, "mallId"),
AccountName = BaseRegex.GetStringJson(ref prod, "mallName"),
LoginName = shop.LoginName,
UserName = BaseClass.UserName,
LoginStatus = "登录成功",
};
lstShopCompany.Add(sc);
}
var lstShopCompanyCopy = lstShopCompany.ToList();
foreach (ShopCompany sc in lstShopCompanyCopy)
{
ShopLoginInfo newShop = new ShopLoginInfo()
{
UserName = shop.UserName,
LoginName = shop.LoginName,
Password = shop.Password,
GroupName = shop.GroupName,
ShopAccount = sc.AccountName,
ShopId = sc.AccountId,
SubUserName = shop.SubUserName,
Notes = shop.Notes,
};
var oldServerShop = lstServerShop.FirstOrDefault(s =>
s.LoginName == newShop.LoginName && s.ShopId == newShop.ShopId);
if (oldServerShop == null)
{
if (updateFrom != SetCookieFromEnum.normal_user)
ShopBLL.AdminAddServerShop(newShop); // 店铺写入到服务端
else
ShopBLL.AddServerShop(newShop); // 店铺写入到服务端
}
}
}
}
}