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 douyinApiAction; /// /// 抖音cookie /// private string cookie = string.Empty; public string GetCookie() { var tmp = new List(CookieCache) { }; return JsonConvert.SerializeObject(tmp); } public void SetMember(fl_cps_member Member) { this.Member = Member; Heartbeat(); } #endregion private List CookieCache = new List(); /// /// 没什么用 /// public bool ISVIEW { get; private set; } = false; /// /// 抖音首页 /// //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 = "●●●"; /// /// 初始化完成之后将cookie还原进去 /// /// /// private void ChromeBrowser_IsBrowserInitializedChanged(object sender, EventArgs e) { try { if (!string.IsNullOrWhiteSpace(Member.cookies)) { var cookies = JsonConvert.DeserializeObject>(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); } } /// /// 订单响应数据 /// /// /// 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 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; }); } /// /// 执行查询的订单 /// 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) { } } /// /// 是否在运行 /// private bool IsQueryOrderRun = false; private static string QueryOrderUrl = "https://buyin.jinritemai.com/dashboard/dataCenter/order"; /// /// 跳转请求页面,实现查询以当前时间为基础的,七天订单 ☆☆☆☆☆ /// public Task 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; } /// /// 登录的账号是否满足条件 /// public Action IsQualifiedAction; /// /// 网页加载完毕 /// /// /// 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); } /// /// 访问者收到的cookie /// /// 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失效提示 /// /// 获取登录用户的信息 /// /// 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; } /// /// 获取登录用户的信息 /// /// 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 /// /// 检测cookie是否还有效(心跳) /// 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); }); } /// /// 口令解析地址 /// 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"; /// /// 搜索商品(商品链接搜索,或标题搜索) /// private const string SearchUrl = @"https://buyin.jinritemai.com/pc/selection/search/pmt?page_size=60&page=1&search_text={0}&_signature={1}"; /// /// 橱窗商品列表搜索地址 /// 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}"; /// /// 添加商品至橱柜 /// private const string AddGoods_WindowUrl = @"https://buyin.jinritemai.com/pc/selection/window/pmt/add?_signature={0}"; /// /// 将抖音口令解析成商品id /// 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; } /// /// 通过商品链接查询商品信息 /// /// /// 返回商品的基础信息 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(html); //if (goodsInfo != null) return goodsInfo; } catch (Exception ex) { Console.WriteLine($"查询商品信息异常,{ex.Message} - {ex.StackTrace}"); } return null; } /// /// 添加商品至橱柜 /// /// 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; } /// /// 通过商品id查询橱柜中的商品,获取推广链接 /// /// /// 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; } /// /// 抖音订单状态 /// public enum DouyinOrderStatus : int { 全部订单 = 1, 订单结算 = 2, PAY_SUCC = 3,//订单付款 REFUND = 5,//退款/失效 订单维权中 = 6, } /// /// 根据字符生成Cookie和精简串,将排除path,expires,domain以及重复项 /// /// Cookie字符串 /// 精简串 internal static string GetSmallCookie(string strcookie) { if (string.IsNullOrWhiteSpace(strcookie)) { return string.Empty; } Dictionary keyValues = new Dictionary(); 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 list = new List(); foreach (KeyValuePair item in keyValues) { list.Add($"{item.Key}={ item.Value}"); } return string.Join(";", list) + ";"; } } }