old_flsystem/类库/Api.Framework/Cps/DuoyinApi - 复制.cs

770 lines
34 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 Api.Framework.Cps.CefSharp1;
using Api.Framework.Enums;
using Api.Framework.Events;
using Api.Framework.Model;
using Api.Framework.Tools;
using CefSharp;
using CefSharp.WinForms;
using CsharpHttpHelper;
using CsharpHttpHelper.Enum;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
namespace Api.Framework.Cps
{
public class DouyinApi : BaseCpsApi
{
#region
public ChromiumWebBrowser chromeBrowser;
public static Action<DouyinApi> douyinApiAction;
/// <summary>
/// 抖音cookie
/// </summary>
private string cookie = string.Empty;
public string GetCookie()
{
var tmp = new List<string>(CookieCache) { };
return JsonConvert.SerializeObject(tmp);
}
public void SetMember(fl_cps_member Member)
{
this.Member = Member;
Heartbeat();
}
#endregion
private List<string> CookieCache = new List<string>();
/// <summary>
/// 没什么用
/// </summary>
public bool ISVIEW { get; private set; } = false;
/// <summary>
/// 抖音首页
/// </summary>
//private static string DouyinUrl = "https://www.douyinec.com/";
private static string DouyinUrl = "https://buyin.jinritemai.com/dashboard";
static DouyinApi()
{
//CefSettings settings = new CefSettings();
////日志文件
//settings.LogFile = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase + "/LogData";
//settings.PersistSessionCookies = true;
//settings.WindowlessRenderingEnabled = true;
//settings.UserDataPath = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase + "/UserData";
//// Initialize cef with the provided settings
//Cef.Initialize(settings);
}
public DouyinApi(fl_cps_member member) : base(member)
{
InitializeChromium(string.IsNullOrWhiteSpace(member.username) ? Guid.NewGuid().ToString("N") : member.username);
}
//初始化浏览器并启动
public void InitializeChromium(string accountName)
{
RequestContext context = new RequestContext(new RequestContextSettings()
{
CachePath = HttpExtend.MapPath($"Cache\\Cef\\{accountName}"),
});
//创建一个浏览器组件
chromeBrowser = new ChromiumWebBrowser(DouyinUrl, context);
//this.tabPage2.Controls.Add(chromeBrowser);
//chromeBrowser.Dock = DockStyle.Fill;
chromeBrowser.AddressChanged += ChromeBrowser_AddressChanged;
chromeBrowser.FrameLoadEnd += ChromeBrowser_FrameLoadEnd;
chromeBrowser.IsBrowserInitializedChanged += ChromeBrowser_IsBrowserInitializedChanged;
//注册自定义的请求/拦截响应
var cefRequestHandler = new CEFRequestHandler();
chromeBrowser.RequestHandler = cefRequestHandler;
cefRequestHandler.JsonAction += CefRequestHandler_JsonAction;
}
private static string splitStr = "●●●";
/// <summary>
/// 初始化完成之后将cookie还原进去
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ChromeBrowser_IsBrowserInitializedChanged(object sender, EventArgs e)
{
try
{
if (!string.IsNullOrWhiteSpace(Member.cookies))
{
var cookies = JsonConvert.DeserializeObject<List<string>>(Member.cookies);
var cookieManager = chromeBrowser.GetCookieManager();
//var cookieManager = CefSharp.Cef.GetGlobalCookieManager();
foreach (string c in cookies)
{
var result = c.Split(new string[] { splitStr }, StringSplitOptions.RemoveEmptyEntries);
var cookieTmp = new CefSharp.Cookie
{
Creation = DateTime.Now,
Domain = result[0],
Name = result[1],
Value = result[2],
Expires = DateTime.Now.AddDays(20)
};
cookie += $"{result[1]}={result[2]};";
cookie = GetSmallCookie(cookie);
if (!string.IsNullOrWhiteSpace(result[2]))
CookieCache.Add($"{result[0]}{splitStr}{result[1]}{splitStr}{result[2]}");
//var b = cookieManager.SetCookieAsync(DouyinUrl, cookie).Result;
cookieManager.SetCookieAsync(DouyinUrl, cookieTmp);
}
ISVIEW = true;
}
}
catch (Exception ex)
{
}
finally
{
chromeBrowser.Load(DouyinUrl);
}
}
/// <summary>
/// 订单响应数据
/// </summary>
/// <param name="arg1"></param>
/// <param name="arg2"></param>
private void CefRequestHandler_JsonAction(string url, string json)
{
IsQueryOrderRun = false;
orderjson = json;
Console.WriteLine($"@@@@@@@@@@@@@@@ {orderjson}");
}
private void ChromeBrowser_AddressChanged(object sender, AddressChangedEventArgs e)
{
Console.WriteLine($"######### = " + e.Address);
//e.Address == "https://buyin.jinritemai.com/dashboard/live/control
//在线的离线了,
if (e.Address == "https://www.douyinec.com/" && Member.is_valid)
{
Task.Run(() =>
{
//if (isCheck) return;
//isCheck = true;
try
{
var end = DateTime.Now.AddMinutes(1);
do
{
Thread.Sleep(500);
Member.cookies = GetCookie();
var json = GetLoginUserInfo();
if (!string.IsNullOrWhiteSpace(json))
{
EventClient.OnEvent("获取抖音信息", json);
var jObj = JObject.Parse(json);
if (jObj != null && (int)jObj["code"] == 0)
{
//{"code":0,"data":{"account_avatar":"https://p6.douyinpic.com/img/tos-cn-i-0813/e87c3c6a24cb47568147aef8a949c392~c5_100x100.jpeg?from=4010531038","agree_pro":2,"anchor_coupon_menu_show":1,"buyin_account_id":"6978842327024533801","center_menu_show":1,"check_status":0,"child_status":0,"compass_first_level_menu_show":1,"compass_second_level_menu_show":1,"contact_not_set":1,"daren_plaza_popup":false,"daren_plaza_status":2,"doudian_shop_id":0,"dr_auth":{"1128":{"authority_shop":1,"authority_item":1,"authority_live":1}},"has_bind_star":0,"origin_uid":"1460607342872671","plaza_status":1,"qianchuan":1,"selection_plaza":1,"shop_id":"6978842327024550185","shop_name":"四面八方","shop_type":24,"shop_type_child":2,"shops":[{"agree_protocol":2,"check_status":0,"shop_id":"6978842327024550185","shop_name":"四面八方","shop_type":24,"shop_type_child":2,"status":1,"user_name":"四面八方"}],"status":1,"user_app":1128,"user_id":"123616240602295","user_identity_type":1,"user_name":"四面八方","user_role":1},"log_id":"202106301629040101980662044544AEAC","msg":"success","st":0}
var userid = jObj["data"]["origin_uid"].ToString();
var Member = CpsClient.Members.FirstOrDefault(f => f.username == userid && f.cpstype == CpsType.);
if (Member == null)
{
Member = new fl_cps_member() { username = userid, cpstype = CpsType. };
CpsClient.Members.Add(Member);
}
Member.online = true;
Member.cookies = GetCookie();
Member.usernick = jObj["data"]["shop_name"].ToString();
Member.logintime = DateTime.Now;
Member.is_valid = true;
CpsClient.AddDouyinApi(this);
this.Member = Member;
ApiClient.GetSession().SaveOrUpdate(Member);
EventClient.OnEvent("", $"抖音激活成功:{Member.usernick}({Member.username})");
break;
}
else
{
IsQualifiedAction?.Invoke(!flag, this)
EventClient.OnEvent("抖音登录失败", json);
}
}
} while (end < DateTime.Now);
//isCheck = false;
//this.Invoke(new Action(() =>
//{
// this.Close();
//}));
}
catch (Exception ex)
{
EventClient.OnEvent("抖音登录失败", ex.Message + " - " + ex.StackTrace);
}
});
}
}
private string orderjson = string.Empty;
private Task<string> GetOrderData()
{
return Task.Run(() =>
{
try
{
if (!IsQueryOrderRun)
return null;
var endTime = DateTime.Now.AddSeconds(20);
do
{
Thread.Sleep(200);
if (!IsQueryOrderRun)
break;
} while (endTime > DateTime.Now);
var orderjsonTmp = orderjson;
return orderjsonTmp;
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
IsQueryOrderRun = false;
orderjson = string.Empty;
}
return string.Empty;
});
}
/// <summary>
/// 执行查询的订单
/// </summary>
public void QueryOrderButton()
{
try
{
chromeBrowser.EvaluateScriptAsync("document.getElementsByClassName('ant-btn ant-btn-primary')[0].click()");
}
catch (Exception ex)
{
}
}
public void SkipOther(string url)
{
try
{
chromeBrowser.Load(url);
Thread.Sleep(1000 + new Random().Next(200, 4000));
}
catch (Exception ex)
{ }
}
/// <summary>
/// 是否在运行
/// </summary>
private bool IsQueryOrderRun = false;
private static string QueryOrderUrl = "https://buyin.jinritemai.com/dashboard/dataCenter/order";
/// <summary>
/// 跳转请求页面,实现查询以当前时间为基础的,七天订单 ☆☆☆☆☆
/// </summary>
public Task<string> SkipQueryOrder()
{
if (IsQueryOrderRun) return Task.FromResult("error");
IsQueryOrderRun = true;
SkipOther("https://buyin.jinritemai.com/dashboard/dataCenter/export-list");
var data = GetOrderData();
SkipOther(QueryOrderUrl);
return data;
}
/// <summary>
/// 登录的账号是否满足条件
/// </summary>
public Action<bool, DouyinApi> IsQualifiedAction;
/// <summary>
/// 网页加载完毕
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ChromeBrowser_FrameLoadEnd(object sender, FrameLoadEndEventArgs e)
{
if (!ISVIEW && e.Url.StartsWith("https://summon.bytedance.com/web/?sign_token="))
{
StringBuilder sb = new StringBuilder();
sb.AppendLine("function tempFunction() {");
sb.AppendLine(" return document.getElementsByTagName('button')[0].innerHTML; ");
sb.AppendLine("}");
sb.AppendLine("tempFunction();");
chromeBrowser.EvaluateScriptAsync(sb.ToString()).ContinueWith(x =>
{
var response = x.Result;
if (response.Success && response.Result != null)
{
//var a = CpsClient.DouyinApiCache;
var startDate = response.Result;
var flag = startDate.ToString().Contains("暂无开通权限");
if (!flag)
ISVIEW = true;
IsQualifiedAction?.Invoke(!flag, this);
}
});
}
CookieVisitor visitor = new CookieVisitor();
visitor.SendCookie += visitor_SendCookie;
ICookieManager cookieManager = chromeBrowser.GetCookieManager();
cookieManager.VisitAllCookies(visitor);
}
/// <summary>
/// 访问者收到的cookie
/// </summary>
/// <param name="obj"></param>
private void visitor_SendCookie(Cookie obj)
{
try
{
//System.Net.Cookie ck = new System.Net.Cookie(obj.Name, obj.Value);
//ck.Domain = obj.Domain;
cookie += $"{obj.Name}={obj.Value};";
cookie = GetSmallCookie(cookie);
if (!string.IsNullOrWhiteSpace(obj.Value))
CookieCache.Add($"{obj.Domain}{splitStr}{obj.Name}{splitStr}{obj.Value}");
}
catch (Exception ex)
{ }
}
#region cookie
//{"code":-2,"log_id":"202106301727440101980662104D4B7D05","msg":"用户未登录"}
//cookie失效提示
/// <summary>
/// 获取登录用户的信息
/// </summary>
/// <returns></returns>
public string GetLoginUserInfo()
{
try
{
if (Member == null || string.IsNullOrWhiteSpace(Member.cookies)) return string.Empty;
var item = new HttpItem()
{
URL = "https://buyin.jinritemai.com/index/getUser",
Method = "GET",
Timeout = 100000,
ReadWriteTimeout = 30000,
IsToLower = false,
Cookie = cookie,
UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0",
Accept = "text/html, application/xhtml+xml, */*",
ContentType = "application/json",
Referer = "https://buyin.jinritemai.com/dashboard",
Allowautoredirect = false,
AutoRedirectCookie = false,
Postdata = "",
ResultType = ResultType.String,
};
var http = new HttpHelper();
var res = http.GetHtml(item);
var html = res.Html;
//{"code":0,"data":{"account_avatar":"https://p6.douyinpic.com/img/tos-cn-i-0813/e87c3c6a24cb47568147aef8a949c392~c5_100x100.jpeg?from=4010531038","agree_pro":2,"anchor_coupon_menu_show":1,"buyin_account_id":"6978842327024533801","center_menu_show":1,"check_status":0,"child_status":0,"compass_first_level_menu_show":1,"compass_second_level_menu_show":1,"contact_not_set":1,"daren_plaza_popup":false,"daren_plaza_status":2,"doudian_shop_id":0,"dr_auth":{"1128":{"authority_shop":1,"authority_item":1,"authority_live":1}},"has_bind_star":0,"origin_uid":"1460607342872671","plaza_status":1,"qianchuan":1,"selection_plaza":1,"shop_id":"6978842327024550185","shop_name":"四面八方","shop_type":24,"shop_type_child":2,"shops":[{"agree_protocol":2,"check_status":0,"shop_id":"6978842327024550185","shop_name":"四面八方","shop_type":24,"shop_type_child":2,"status":1,"user_name":"四面八方"}],"status":1,"user_app":1128,"user_id":"123616240602295","user_identity_type":1,"user_name":"四面八方","user_role":1},"log_id":"202106301629040101980662044544AEAC","msg":"success","st":0}
return html;
}
catch (Exception ex)
{
Console.WriteLine($"获取登录用户信息异常:{ex.Message} - {ex.StackTrace}");
}
return string.Empty;
}
/// <summary>
/// 获取登录用户的信息
/// </summary>
/// <returns></returns>
public string GetUserInfo(string cookice)
{
try
{
var item = new HttpItem()
{
URL = "https://buyin.jinritemai.com/index/getUser",
Method = "GET",
Timeout = 100000,
ReadWriteTimeout = 30000,
IsToLower = false,
Cookie = cookice,
UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0",
Accept = "text/html, application/xhtml+xml, */*",
ContentType = "application/json",
Referer = "https://buyin.jinritemai.com/dashboard",
Allowautoredirect = false,
AutoRedirectCookie = false,
Postdata = "",
ResultType = ResultType.String,
};
var http = new HttpHelper();
var res = http.GetHtml(item);
var html = res.Html;
//{"code":0,"data":{"account_avatar":"https://p6.douyinpic.com/img/tos-cn-i-0813/e87c3c6a24cb47568147aef8a949c392~c5_100x100.jpeg?from=4010531038","agree_pro":2,"anchor_coupon_menu_show":1,"buyin_account_id":"6978842327024533801","center_menu_show":1,"check_status":0,"child_status":0,"compass_first_level_menu_show":1,"compass_second_level_menu_show":1,"contact_not_set":1,"daren_plaza_popup":false,"daren_plaza_status":2,"doudian_shop_id":0,"dr_auth":{"1128":{"authority_shop":1,"authority_item":1,"authority_live":1}},"has_bind_star":0,"origin_uid":"1460607342872671","plaza_status":1,"qianchuan":1,"selection_plaza":1,"shop_id":"6978842327024550185","shop_name":"四面八方","shop_type":24,"shop_type_child":2,"shops":[{"agree_protocol":2,"check_status":0,"shop_id":"6978842327024550185","shop_name":"四面八方","shop_type":24,"shop_type_child":2,"status":1,"user_name":"四面八方"}],"status":1,"user_app":1128,"user_id":"123616240602295","user_identity_type":1,"user_name":"四面八方","user_role":1},"log_id":"202106301629040101980662044544AEAC","msg":"success","st":0}
return html;
}
catch (Exception ex)
{
Console.WriteLine($"获取登录用户信息异常:{ex.Message} - {ex.StackTrace}");
}
return string.Empty;
}
#endregion
/// <summary>
/// 检测cookie是否还有效(心跳)
/// </summary>
public void Heartbeat()
{
Task.Run(() =>
{
do
{
Thread.Sleep(200000 + new Random().Next(2000000, 30000000));
var json = GetLoginUserInfo();
if (!string.IsNullOrWhiteSpace(json))
{
var jObj = JObject.Parse(json);
if (jObj != null && (int)jObj["code"] == 0)
{
Console.WriteLine($"账号:{Member.usernick}({Member.username})在线...");
}
else
{
Console.WriteLine($"账号:{Member.usernick}({Member.username})离线了");
return;
}
}
} while (true);
});
}
/// <summary>
/// 口令解析地址
/// </summary>
private const string AnalysisCmdUrl = @"https://aweme.snssdk.com/aweme/v2/platform/share/command/trans/?command={0}&support_type=16&os_api=22&device_type=MI+9&ssmix=a&manifest_version_code=160201&dpi=320&uuid=863254393831028&app_name=aweme&version_name=16.2.0&ts={1}&cpu_support64=false&app_type=normal&appTheme=dark&ac=wifi&host_abi=armeabi-v7a&update_version_code=16209900&channel=tengxun_1128_0531&_rticket=1624938653257&device_platform=android&iid=3466131644356413&version_code=160200&cdid={2}&is_android_pad=0&openudid=0347cf3f47c211af&device_id=1478167560454807&resolution=900*1600&os_version=5.1.1&language=zh&device_brand=Xiaomi&aid=1128&minor_status=0&mcc_mnc=46007";
/// <summary>
/// 搜索商品(商品链接搜索,或标题搜索)
/// </summary>
private const string SearchUrl = @"https://buyin.jinritemai.com/pc/selection/search/pmt?page_size=60&page=1&search_text={0}&_signature={1}";
/// <summary>
/// 橱窗商品列表搜索地址
/// </summary>
private const string ShopWindowUrl = @"https://buyin.jinritemai.com/api/shop/search?hide_status=0&promotion_source=0&title={0}&page=1&pageSize=20&_signature={1}";
/// <summary>
/// 添加商品至橱柜
/// </summary>
private const string AddGoods_WindowUrl = @"https://buyin.jinritemai.com/pc/selection/window/pmt/add?_signature={0}";
/// <summary>
/// 将抖音口令解析成商品id
/// </summary>
public static string AnalysisCmdToGoodsUrl(string kl)
{
try
{
var analysisCmdUrl = string.Format(AnalysisCmdUrl, HttpHelper.URLEncode(kl), HttpExtend.GetTimeStamp(), Guid.NewGuid().ToString());
HttpHelper http = new HttpHelper();
HttpItem item = new HttpItem()
{
URL = analysisCmdUrl,
Method = "get",
IsToLower = false,
Cookie = "",
Referer = "",
Postdata = "",
Timeout = 100000,
ReadWriteTimeout = 30000,
UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)",
ContentType = "text/html",
Allowautoredirect = false,
ProxyIp = "",
ResultType = ResultType.String
};
HttpResult result = http.GetHtml(item);
string html = result.Html;
string cookie = result.Cookie;
var jObj = JObject.Parse(html);
if (html.Contains("schema"))
{
var schema = jObj["schema"].ToString();
var reg = Regex.Match(schema, @"product_id=(?<商品id>\d+)", RegexOptions.IgnoreCase);
if (reg.Success)
{
return reg.Groups["商品id"].Value;
}
}
}
catch (Exception ex)
{
Console.WriteLine($"抖音口令解析异常:{ex.Message} - {ex.StackTrace} - kl:{kl}");
}
return string.Empty;
}
/// <summary>
/// 通过商品链接查询商品信息
/// </summary>
/// <param name="goodsUrl"></param>
/// <returns>返回商品的基础信息</returns>
public DouyinGoodsInfo FindGoodsInfo(string goodsId)
{
try
{
var sign = "";//TODO 这个可以为空
var searchUrl = string.Format(SearchUrl, HttpHelper.URLEncode($"https://haohuo.jinritemai.com/views/product/item2?id={goodsId}"), sign);
HttpHelper http = new HttpHelper();
HttpItem item = new HttpItem()
{
URL = searchUrl,
Method = "get",
IsToLower = false,
Cookie = cookie,
Referer = "",
Postdata = "",
Timeout = 100000,
ReadWriteTimeout = 30000,
UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)",
ContentType = "text/html",
Allowautoredirect = false,
ProxyIp = "",
ResultType = ResultType.String
};
HttpResult result = http.GetHtml(item);
string html = result.Html;
//string cookie = result.Cookie;
//{"code":0,"st":0,"msg":"","data":{"promotions":[{"promotion_id":"3473786827197053067","product_id":"3473587162723782872","title":"【象牙塔】爆款 厚实桌面手机支架 随意旋转上下调节","cover":{"uri":"temai/e7ea85383a76fe7cec7390407fdfa984www1099-1015","url_list":["http://p3.pstatp.com/aweme/720x720/temai/e7ea85383a76fe7cec7390407fdfa984www1099-1015.jpeg","http://pb9.pstatp.com/aweme/720x720/temai/e7ea85383a76fe7cec7390407fdfa984www1099-1015.jpeg","http://pb3.pstatp.com/aweme/720x720/temai/e7ea85383a76fe7cec7390407fdfa984www1099-1015.jpeg"]},"detail_url":"https://haohuo.jinritemai.com/views/product/item2?id=3473587162723782872","promotion_source":4,"brand_icon":{"url_list":["http://p3.pstatp.com/origin/db00001bcc4cfde8d96a"]},"price":990,"market_price":1900,"cos_fee":495,"cos_ratio":5000,"month_sales":7020,"shop_id":14065420,"shop_name":"象牙塔","exp_score":"4.5","in_promotion":true,"in_shop":false,"sales":0}],"has_more":false,"search_id":"6979517724091285760"},"total":1,"log_id":"20210630173326010198066204044B8F51"}
var goodsInfo = JsonConvert.DeserializeObject<DouyinGoodsInfo>(html);
//if (goodsInfo != null)
return goodsInfo;
}
catch (Exception ex)
{
Console.WriteLine($"查询商品信息异常,{ex.Message} - {ex.StackTrace}");
}
return null;
}
/// <summary>
/// 添加商品至橱柜
/// </summary>
/// <returns></returns>
public bool AddGoodsWindowUrl(string product_id)
{
try
{
var sign = "";//TODO 这个可以为空
var addGoods_WindowUrl = string.Format(AddGoods_WindowUrl, sign);
HttpHelper http = new HttpHelper();
HttpItem item = new HttpItem()
{
URL = addGoods_WindowUrl,
Method = "POST",
Timeout = 100000,
ReadWriteTimeout = 30000,
IsToLower = false,
Cookie = cookie,
UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0",
Accept = "text/html, application/xhtml+xml, */*",
ContentType = "application/x-www-form-urlencoded",
Referer = "https://buyin.jinritemai.com/dashboard/merch-picking-hall",
Allowautoredirect = false,
AutoRedirectCookie = false,
Postdata = $"product_id={product_id}&item_type=4&pick_first_source=%E7%99%BE%E5%BA%94&pick_second_source=%E9%80%89%E5%93%81%E5%B9%BF%E5%9C%BA&pick_third_source=search&pick_source_id=",
ResultType = ResultType.String,
};
HttpResult result = http.GetHtml(item);
//{"code":0,"st":0,"msg":"success","error_type":0,"data":{},"log_id":"202107011223480101980650882E822E5B"}
string html = result.Html;
//string cookie = result.Cookie;
var jObj = JObject.Parse(html);
if (html.Contains("code") && (int)jObj["code"] == 0)
{
if (jObj["msg"].ToString().ToLower() == "success")
return true;
}
}
catch (Exception ex)
{
Console.WriteLine($"添加商品到橱柜异常:{ex.Message} - {ex.StackTrace}");
}
return false;
}
/// <summary>
/// 通过商品id查询橱柜中的商品,获取推广链接
/// </summary>
/// <param name="goodsid"></param>
/// <returns></returns>
public string GetShopWindow_PromotionUrlToGoodsId(string goodsid)
{
try
{
var sign = "";//TODO 这个可以为空
var searchUrl = string.Format(ShopWindowUrl, goodsid, sign);
HttpHelper http = new HttpHelper();
HttpItem item = new HttpItem()
{
URL = searchUrl,
Method = "get",
IsToLower = false,
Cookie = cookie,
Referer = "",
Postdata = "",
Timeout = 100000,
ReadWriteTimeout = 30000,
UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)",
Accept = "text/html, application/xhtml+xml, */*",// 可选项有默认值
ContentType = "application/json",//返回类型 可选项有默认值
Allowautoredirect = false,
ProxyIp = "",
ResultType = ResultType.String
};
HttpResult result = http.GetHtml(item);
string html = result.Html;
//string cookie = result.Cookie;
//{"code":0,"data":[{"promotion_id":"3461130275701011777","product_id":"3454352531717751823","promotion_source":4,"coupon_amount":"","price":9990,"cos_fee":3996,"cos_ratio":40,"title":" 【辉腾】直播落地支架 直播支架 直播落地三脚架 户外落地支架","detail_url":"https://haohuo.jinritemai.com/views/product/item2?id=3454352531717751823\u0026origin_type=2002170010\u0026origin_id=1460607342872671_3461130275701011777\u0026alkey=1128_1460607342872671_0_3461130275701011777_011\u0026sec_author_id=MS4wLjABAAAAEnpGkVpQS-WLtu18Me9lZ-9A284xvNbstU-HGyQK3vn2Pi-WtDWPRAXLCnSRvDsF\u0026buyin_track=COgIEN-Q0K6ijcwCGgQIABAAIgAoj4iI8LXqlPgvMAE\u0026c_biz_combo=2","cover":"temai/c9a03a89407ec53f6dc06fb949a9a7bcwww800-800","images":["temai/c9a03a89407ec53f6dc06fb949a9a7bcwww800-800","temai/bd81e0f3a80b8ef97228454fcd243157www800-800","temai/7575df4d88e28769e16ebd13ec48c14awww800-800","temai/0bdd668c8dad2dd2605dc62b51b9f509www800-800","temai/b25524e60b62f6b768995a2c4910cd91www800-800"],"elastic_title":"","elastic_images":["temai/c9a03a89407ec53f6dc06fb949a9a7bcwww800-800","temai/bd81e0f3a80b8ef97228454fcd243157www800-800","temai/7575df4d88e28769e16ebd13ec48c14awww800-800","temai/0bdd668c8dad2dd2605dc62b51b9f509www800-800","temai/b25524e60b62f6b768995a2c4910cd91www800-800"],"ies_category":12,"sales":0,"pic_audit_status":null,"brand_icon":"","original_promotion_source":0,"cos_type":0,"cos_type_name":"","live_elastic_title":"","full_discount":[],"shop_label":null,"shop_id":9868340,"tax_price":0,"is_haitao":false,"hide_status":2,"pool_type":"","industry_cid":7,"industry_cname":"智能家居"}],"extra":{"log_id":"2021070109250001019806620216778C63","now":1625102701000},"msg":"success","st":0,"total":1}
var jObj = JObject.Parse(html);
if (html.Contains("code") && (int)jObj["code"] == 0)
{
var jArr = (JArray)jObj["data"];
if (jArr.Count != 0)
{
var jTok = jArr[0];
return jTok["detail_url"].ToString();
}
}
}
catch (Exception ex)
{
Console.WriteLine($"获取推广链接异常:{ex.Message} - {ex.StackTrace}");
}
return string.Empty;
}
/// <summary>
/// 抖音订单状态
/// </summary>
public enum DouyinOrderStatus : int
{
= 1,
= 2,
PAY_SUCC = 3,//订单付款
REFUND = 5,//退款/失效
= 6,
}
/// <summary>
/// 根据字符生成Cookie和精简串将排除path,expires,domain以及重复项
/// </summary>
/// <param name="strcookie">Cookie字符串</param>
/// <returns>精简串</returns>
internal static string GetSmallCookie(string strcookie)
{
if (string.IsNullOrWhiteSpace(strcookie))
{
return string.Empty;
}
Dictionary<string, string> keyValues = new Dictionary<string, string>();
string[] array = strcookie.ToString().Split(new string[2]
{
",",
";"
}, StringSplitOptions.RemoveEmptyEntries);
string[] array2 = array;
foreach (string text in array2)
{
var index = text.IndexOf("=");
if (index != -1)
{
var val0 = text.Substring(0, index);
var val1 = text.Substring(index + 1, text.Length - index - 1);
var val2 = val0.ToLower().Trim();
if (!val2.Contains("path=") && !val2.Contains("expires=") && !val2.Contains("domain="))
{
if (!keyValues.ContainsKey(val0))
keyValues.Add(val0, val1);
else
keyValues[val0] = val1;
}
}
}
List<string> list = new List<string>();
foreach (KeyValuePair<string, string> item in keyValues)
{
list.Add($"{item.Key}={ item.Value}");
}
return string.Join(";", list) + ";";
}
}
}