using System; using System.Collections.Generic; using System.IO; using System.Threading; using AllBase; using Work.CollectClass; using Work.ManageClass; //using JavaScriptEngineSwitcher.V8; //using JavaScriptEngineSwitcher.Core; using System.Linq; using System.Diagnostics; using Newtonsoft.Json.Linq; using System.Collections.Specialized; using System.Net; using System.Text; using System.Text.RegularExpressions; using System.IO.Compression; using NaiBa.Util.Extension; namespace Work.Api { public class UploadPinduoduoSet { /// /// 是否对微店转换数据取整(尾数为1,2,3,4取5,尾数为6,7,8,9取10) /// public static bool IsRounding = false; public static Dictionary CatTemp = new Dictionary(); public static Dictionary ImageTemp = new Dictionary(); public static Dictionary picsTemp = new Dictionary(); public ShopChatBase Shop; public TaobaoProductBase t; public TaobaoProductBase us = null; public bool FullToday = false, Punish = false, Success = false; /// /// 上货时使用代理获取拼多多上家商品 /// public static bool IsUseProxyCollectUp = true; /// /// 中间数据 /// public ProductCollectBase pb = new ProductCollectBase(); public string Name; public UploadPinduoduoSet(ShopChatBase shop, string name, TaobaoProductBase T) { Shop = shop; Name = name; t = T; } public void Get() { #if DEBUG Getx(); Thread.Sleep(1000); #else try { Getx(); Thread.Sleep(2000); } catch (Exception e) { LogSave.Add(Name, "上传商品" + t.FromId + "错误:" + e.Message); } #endif } public byte[] imageByte = null; public long goodsId = 0; Dictionary picUped = new Dictionary(); public void Getx() { if (!string.IsNullOrEmpty(t.ViPrice) && string.IsNullOrEmpty(t.ViPriceMaxMin)) { LogSave.Add(Name, Shop.Name + " 版本升级不支持老数据格式,请重新制作新格式数据,跳过 " + t.FromId + " "); return; } string imageUrlx = ""; //if (ImgDic.Count == 0) // new Thread(CutImage).Start(); string beforeTitle = ""; while (UploadPinduoduoMain.upRunning && UploadPinduoduoMain.Waiting) Thread.Sleep(100); //while (UploadPinduoduoMain.RunningReplace && UploadPinduoduoMain.ReplaceWaiting) // Thread.Sleep(100); t.FromType = t.FromType.Replace("\"", ""); if (t.FromType.Contains("搜款网") && t.FromId > 10) { char[] idc = t.FromId.ToString().ToCharArray(); if (t.FromId.ToString().Length < t.TolerantFormId.Length) idc = t.TolerantFormId.ToString().ToCharArray(); string ld = idc[idc.Length - 1].ToString(); for (int i = 1; i < idc.Length - 1; i++) { ld += idc[i]; } ld += idc[0]; t.FromIdBak = t.FromId; t.FromId = long.Parse(ld); pb.from_site_id = 2; } if (UploadPinduoduoMain.NoRuleIds && UploadPinduoduoMain.RuleIds.Contains(t.FromId.ToString())) { t.Message = "上传可能违规,跳过"; Error("可能违规,跳过:" + t.FromId, t.Message); return; } if (TaobaoMobileCollect.ProductTemp.ContainsKey(t.FromId)) { pb = TaobaoMobileCollect.ProductTemp[t.FromId].Clone(); if (t.Cat3 == 0 && t.Cat4 == 0) { t.Cat1 = pb.cat1; t.Cat2 = pb.cat2; t.Cat3 = pb.cat3; t.CatId = pb.cat_id; t.Cat4 = pb.cat4; t.MainCatId = pb.main_cid; t.MainCatName = pb.main_cat_name; } } else { pb.cat1 = t.Cat1; pb.cat2 = t.Cat2; pb.cat3 = t.Cat3; pb.cat4 = t.Cat4; pb.cat_id = t.CatId; pb.main_cid = t.MainCatId; if (t.FromType == "拼多多" || t.FromType == "内部数据" || t.FromType == "搜款网" || t.FromType == "搜款网净化") { PinduoduoProductCollect pp = new PinduoduoProductCollect(Name, t, IsUseProxyCollectUp); pp.isUseCache = UploadPinduoduoMain.isUseCache; pp.Get(); if (!TaobaoMobileCollect.ProductTemp.ContainsKey(t.FromId)) { if (!pp.OnSale) t.Message = pp.message; else t.Message = pp.message;//"IP或买手号被限制,请更换IP或检查买手号是否能正常浏览商品"; Error("采集失败,跳过:" + t.FromId, t.Message); if (!PinduoduoProductCollect.isProxyAvailable) { Error("采集失败" + t.FromId, PinduoduoProductCollect.proxymessage); } return; } } else if (t.FromType == "阿里巴巴" || t.FromType == "1688" || t.FromType == "阿里巴巴净化") { pb.from_url = "https://detail.1688.com/offer/" + t.FromId + ".html"; pb.from_id = t.FromId; AlibabaProductGet ali = new AlibabaProductGet(pb); ali.IsPinduoduo = true; ali.Get(); if (!ali.OnSale) { t.Message = "商品或已下架"; Error("采集失败,跳过:" + t.FromId, t.Message); return; } if (t.FromType == "阿里巴巴净化") { string jhtml = ServerTemp.GetJinHuaCache(t.FromId.ToString()); ali.AslasyHtml(t, jhtml); } } else if (t.FromType == "微店") { pb.from_url = "https://weidian.com/item.html?itemID=" + t.FromId + ".html"; pb.from_id = t.FromId; WeiDianProductCollect wd = new WeiDianProductCollect(t); wd.Get(); if (!wd.OnSale) { t.Message = "商品或已下架"; Error("采集失败,跳过:" + t.FromId, t.Message); return; } } else if (t.FromType == "淘集集") { pb.from_url = "https://api.tjjapp.com/Api2_24_0/goods/info?goods_id=" + t.FromId; pb.from_id = t.FromId; TaoJiJiProductGet tjj = new TaoJiJiProductGet(pb); tjj.IsPinduoduo = true; tjj.Get(); if (!tjj.OnSale) { t.Message = "商品或已下架"; Error("采集失败,跳过:" + t.FromId, t.Message); return; } } else if (t.FromType == "京喜") //by ttzhao 2020.6.11 { pb.from_url = "https://item.m.jd.com/product/" + t.FromId + ".html"; pb.from_id = t.FromId; JingXiCollect jx = new JingXiCollect(pb); jx.Get(); if (jx.GoodsStatus == JingXiCollect.GoodsStatusEnum.NotExist) { t.Message = "商品或已下架"; Error("采集失败,跳过:" + t.FromId, t.Message); return; } } else { pb.from_url = "https://item.taobao.com/item.htm?id=" + t.FromId; pb.from_id = t.FromId; if (t.TaoKeId > 0) { pb.up_url = "http://www.dataoke.com/item?id=" + t.TaoKeId; } TaobaoMobileCollect tm = new TaobaoMobileCollect(pb); tm.Pinduoduo = true; tm.Name = Name; tm.Get(); if (!tm.GetSuccess) { t.Message = "商品或已下架"; Error("采集失败,跳过:" + t.FromId, t.Message); return; } if (t.FromType == "淘宝净化") { string jhtml = ServerTemp.GetJinHuaCache(t.FromId.ToString()); tm.AslasyHtml(t,jhtml); } } if (TaobaoMobileCollect.ProductTemp.ContainsKey(t.FromId)) pb = TaobaoMobileCollect.ProductTemp[t.FromId].Clone(); else { t.Message = "商品或已下架"; Error("采集失败,跳过:" + t.FromId, t.Message); return; } } if (BaseClass.UpIds.Count > 0) { for (int i = 0; i < BaseClass.UpIds.Count; i++) { string rid = BaseRegex.GetMatchRegexString(BaseClass.UpIds[i], @"([\d]+)"); if (string.IsNullOrEmpty(rid)) continue; long uid = long.Parse(rid); if (pb.id == uid) return; } } if (pb.Props.Count>2 && UploadPinduoduoMain.isSpecCount) { t.Message = "此商品属性较多,官方只允许上传最多俩个属性"; Error("此商品属性较多,官方只允许上传最多俩个属性:" + t.FromId, t.Message); return; } else { if (pb.Props.Count > 2) { pb.Props = pb.Props.OrderBy(u => u.Values.Count).ToList(); int count = pb.Props.Count - 2; pb.Props.RemoveRange(0, count); pb.Props = pb.Props.OrderByDescending(u => u.sort).ToList(); } } if (!string.IsNullOrEmpty(pb.logisticsTime)) { string daystr = BaseRegex.GetMatchRegexString(ref pb.logisticsTime, @"([\d]+)"); int day = 0; int.TryParse(daystr, out day); if (day/24>0) day = day / 24; if ((pb.logisticsTime.Contains("48小时") || pb.logisticsTime.Contains("72小时") || pb.logisticsTime.Contains("2天") || pb.logisticsTime.Contains("3天") || pb.logisticsTime.Contains("预售") || day >= 2) && UploadPinduoduoMain.isLogistics) { t.Message = "跳过发货超过24小时商品或预售商品"; Error("跳过发货超过24小时商品或预售商品:" + t.FromId, t.Message); return; } } if (!string.IsNullOrEmpty(pb.logisticsTime)) { string daystr = BaseRegex.GetMatchRegexString(ref pb.logisticsTime, @"([\d]+)"); int day = 0; int.TryParse(daystr, out day); if (day / 24 > 0) day = day / 24; if ((pb.logisticsTime.Contains("72小时")|| pb.logisticsTime.Contains("3天") || pb.logisticsTime.Contains("预售") || day >=3) && UploadPinduoduoMain.isFourLogistics) { t.Message = "跳过发货超过48小时商品或预售商品"; Error("跳过发货超过48小时商品或预售商品:" + t.FromId, t.Message); return; } } if (UploadPinduoduoMain.JinUp) { bool ishas = false; for (int i = 0; i < pb.SkuMaps.Count; i++) { if (pb.SkuMaps[i].price < UploadPinduoduoMain.minPrice) { ishas = true; break; } if (pb.SkuMaps[i].price> UploadPinduoduoMain.maxPrice) { ishas = true; break; } } if (pb.SkuMaps.Count==0) { if (pb.discountPrice < UploadPinduoduoMain.minPrice) { ishas = true; } if (pb.discountPrice > UploadPinduoduoMain.maxPrice) { ishas = true; } } if (ishas) { t.Message = "上传商品价格超过价格区间"; Error("跳过上传商品价格超过价格区间:" + t.FromId, t.Message); return; } } if (UploadPinduoduoMain.JustFree && pb.express_price > 0) { t.Message = "跳过非包邮商品"; Error("跳过非包邮商品:" + t.FromId, t.Message); return; } if (pb.name.Contains("订金") || pb.name.Contains("定金") || pb.name.Contains("预售")) { t.Message = "预售商品"; Error("预售商品:" + t.FromId, t.Message); return; } if (BaseClass.UserVersion == 99 && (t.FromType == "拼多多" || t.FromType == "内部数据"))//|| t.FromType == "搜款网" { t.Message = "临时关闭"; Error("临时关闭:" + t.FromId, t.Message); return; } if (BaseClass.UserVersion != 100 && (t.FromType == "拼多多" || t.FromType == "内部数据")) { t.Message = "临时关闭"; Error("临时关闭:" + t.FromId, t.Message); return; } if (pb.Props.Count==3) { t.Message = "此商品属性较多,官方只允许上传最多俩个属性"; Error("此商品属性较多,官方只允许上传最多俩个属性:" + t.FromId, t.Message); return; } if ((t.FromType == "拼多多" || t.FromType == "内部数据" || t.FromType == "其他") && pb.Images.Count >= 8) imageUrlx = pb.Images[7]; if ((t.FromType == "淘宝" || t.FromType == "阿里巴巴") && pb.Images.Count >= 5) imageUrlx = pb.Images[4]; if (t.FromType == "京喜") //by ttzhao 2020.6.11 imageUrlx = pb.image; beforeTitle = pb.name; if (!string.IsNullOrEmpty(t.TaoKeUrl)) { t.Titlte = pb.name; t.Title = pb.name; } int beforePriceMin = Int32.MaxValue; int beforePriceMax = 0; for (int i = 0; i < pb.SkuMaps.Count; i++) { int price = (int)(pb.SkuMaps[i].price * 100); if (beforePriceMin > price) beforePriceMin = price; if (beforePriceMax < price) beforePriceMax = price; } if (pb.SkuMaps.Count <= 1) { beforePriceMin = (int)(pb.price * 100); beforePriceMax = beforePriceMin; } if (UploadPinduoduoMain.Irregularities && UploadShopControl.IrregularitiesWordFun(t.Titlte)) { LogSave.Add(Name, Shop.Name + " 遇到品牌数据,跳过 " + t.FromId + " 该产品..."); Thread.Sleep(1000); return; } pb.cat1 = t.Cat1; pb.cat2 = t.Cat2; pb.cat3 = t.Cat3; pb.cat_id = t.CatId; pb.cat4 = t.Cat4; pb.main_cid = t.MainCatId; pb.main_cat_name = t.MainCatName; if (t.Cat3==8524) { FromTitleToCat.UserApi = true; FromTitleToCat.inShop = null; FromTitleToCat ft = new FromTitleToCat(); ft.TaobaoProduct = new TaobaoProductBase(); ft.Title = pb.name; ft.TaobaoProduct.Titlte = pb.name; ft.TaobaoProduct.FromId = pb.from_id; ft.TaobaoCatId = pb.from_cat_id; ft.JustGetCat = true; ft.Get(); if (!string.IsNullOrEmpty(ft.Cat1) && ft.Cat1 != "0") { t.Cat1 = pb.cat1 = int.Parse(ft.Cat1); t.Cat2 = pb.cat2 = int.Parse(ft.Cat2); t.Cat3 = pb.cat3 = int.Parse(ft.Cat3); t.Cat4 = pb.cat4 = int.Parse(ft.Cat4); } } pb.from = t.FromType; pb.from_name = pb.name; if (!string.IsNullOrEmpty(t.Titlte) && t.Titlte.Length > 15) pb.name = t.Titlte; pb.name = BaseClass.SubCharLength(pb.name, 60).Replace("✅", "").Replace("◆", ""); if (pb.name.Contains("?")) { t.Message = "标题中不允许出现问号(?)"; Error("题中不允许出现问号,跳过:" + t.FromId, t.Message); Thread.Sleep(1 * 1000); return; } if (pb.Images.Count < 1) { t.Message = "内容图片不足"; Error("采集失败,跳过:" + t.FromId, t.Message); Thread.Sleep(10 * 1000); return; } if (pb.content==null||!pb.content.Contains(""; } } //删除固定主图 if (UploadPinduoduoMain.DeleteMainImage && pb.Images.Count > 1 && pb.Images.Count > UploadPinduoduoMain.DeleteMainImageCut) pb.Images.RemoveAt(UploadPinduoduoMain.DeleteMainImageCut); if (UploadPinduoduoMain.RandDeleteImage && pb.Images.Count > 1) pb.Images.RemoveAt(Randomx.GetId(pb.Images.Count - 1)); if (UploadPinduoduoMain.PropImageToMain) { List imgs = new List(); for (int i = 0; i < pb.Props.Count; i++) { for (int j = 0; j < pb.Props[i].Values.Count; j++) { //if (!string.IsNullOrEmpty(pb.Props[i].Values[j].image) && !imgs.Contains(pb.Props[i].Values[j].image) || string.IsNullOrEmpty(pb.Props[i].Values[j].image)) if (string.IsNullOrEmpty(pb.Props[i].Values[j].image) || imgs.Contains(pb.Props[i].Values[j].image)) continue; imgs.Add(pb.Props[i].Values[j].image); } } if (imgs.Count > 2) pb.Images = imgs; } for (int i = 0; UploadPinduoduoMain.RandMainImage && i < 15 && t.MainImage == 0; i++)//随机主题 { int i1 = new Random(Guid.NewGuid().GetHashCode()).Next(0, pb.Images.Count - 1); int i2 = new Random(Guid.NewGuid().GetHashCode()).Next(0, pb.Images.Count - 1); int go = new Random(Guid.NewGuid().GetHashCode()).Next(0, 100); if (i1 == i2 || go < 60) continue; string imgRand1 = pb.Images[i1]; string imgRand2 = pb.Images[i2]; pb.Images[i1] = imgRand2; pb.Images[i2] = imgRand1; } for (int i = 0; i < pb.Images.Count; i++) { if (string.IsNullOrEmpty(pb.Images[i])) continue; if (!pb.Images[i].Contains("http:") && !pb.Images[i].Contains("https:")) pb.Images[i] = "http:" + pb.Images[i]; if (pb.Images[i].Contains(".src")) pb.Images[i] = pb.Images[i].Replace(".src", ""); if (pb.Images[i].Contains("@")) pb.Images[i] = pb.Images[i].Substring(0, pb.Images[i].IndexOf("@")); if (pb.Images[i].Contains("?")) pb.Images[i] = pb.Images[i].Substring(0, pb.Images[i].IndexOf("?")); } UpPinduoduoProduct up = new UpPinduoduoProduct(Shop, Name); up.BuildSkuMapProps(ref pb); //获取缓存的图片 string ids = ""; for (int i = 0; i < pb.Images.Count; i++) { string urlx = pb.Images[i]; if (string.IsNullOrEmpty(urlx)) continue; if (urlx.Contains(".yangkeduo.com")) continue; long urlId = Math.Abs(BaseClass.GetLong(urlx)); if (UploadPinduoduoMain.MainImg && picsTemp.ContainsKey(urlId)) { pb.Images[i] = picsTemp[urlId]; continue; } if (!string.IsNullOrEmpty(urlx)) ids += urlId + ","; } var mx = BaseRegex.GetMatchRegex(ref pb.content, @"]*?src=[""'](.*?)[""']"); if (mx.Count == 0) mx = BaseRegex.GetMatchRegex(ref pb.content, @"]*?>(.*?)"); for (int j = 0; j < mx.Count; j++) { string urlx = mx[j].Groups[1].Value.Replace(".src", ""); if (string.IsNullOrEmpty(urlx)) continue; if (urlx.Contains("//") && !urlx.Contains("http:") && !urlx.Contains("https:")) urlx = "http:" + urlx; if (urlx.Contains("?")) urlx = urlx.Substring(0, urlx.IndexOf("?")); if (urlx.Contains("@")) urlx = urlx.Substring(0, urlx.IndexOf("@")); if (urlx.Contains(".yangkeduo.com")) continue; long urlId = Math.Abs(BaseClass.GetLong(urlx)); if (picsTemp.ContainsKey(urlId)) continue; if (!string.IsNullOrEmpty(urlx)) ids += urlId + ","; } for (int j = 0; pb.Props.Count > 0 && j < pb.SkuMaps.Count; j++) { if (!string.IsNullOrEmpty(pb.SkuMaps[j].prop_image) && pb.SkuMaps[j].prop_image.Contains(".yangkeduo.com/")) { if (pb.SkuMaps[j].prop_image.Substring(0, 2) == "//") pb.SkuMaps[j].prop_image = "http:" + pb.SkuMaps[j].prop_image; if (string.IsNullOrEmpty(pb.SkuMaps[j].pinduoduo_image)) pb.SkuMaps[j].pinduoduo_image = pb.SkuMaps[j].prop_image; continue; } string urlx = string.IsNullOrEmpty(pb.SkuMaps[j].pinduoduo_image) ? pb.SkuMaps[j].prop_image : pb.SkuMaps[j].pinduoduo_image; if (string.IsNullOrEmpty(urlx)) continue; urlx = urlx.Replace(".src", ""); if (urlx.Contains("//") && !urlx.Contains("http:") && !urlx.Contains("https:")) urlx = "http:" + urlx; if (urlx.Contains("?")) urlx = urlx.Substring(0, urlx.IndexOf("?")); if (urlx.Contains("@")) urlx = urlx.Substring(0, urlx.IndexOf("@")); pb.SkuMaps[j].prop_image = urlx; if (urlx.Contains(".yangkeduo.com")) continue; long urlId = Math.Abs(BaseClass.GetLong(urlx)); if (picsTemp.ContainsKey(urlId)) { pb.SkuMaps[j].prop_image = picsTemp[urlId]; pb.SkuMaps[j].pinduoduo_image = picsTemp[urlId]; continue; } if (!string.IsNullOrEmpty(urlx) && !ids.Contains(urlId.ToString())) ids += urlId + ","; } if (!string.IsNullOrEmpty(ids)) { ids = ids.Substring(0, ids.Length - 1); string urlxt = BaseClass.LoginApiUrl + "?obj=upshopid/image_pinduoduo&act=get"; string dataxt = UserLogin.GetSignaturex() + "&ids=" + ids; string htmlxt = GetHtml.PostUtf8(urlxt, dataxt); var mg = BaseRegex.GetMatchRegex(ref htmlxt, @"([\d]+),([\w\W]+?);"); for (int i = 0; i < mg.Count; i++) { try { long id = long.Parse(mg[i].Groups[1].Value); string urlx = mg[i].Groups[2].Value; picsTemp.Add(id, urlx); } catch { } } } byte[] img; bool ok; string imageString = ""; string apiImageString = ""; ImageBuild ib; List images = new List(); for (int j = 0; j < pb.Images.Count && images.Count < 10; j++) { if (pb.Images[j].Length > 2 && pb.Images[j].Substring(0, 2) == "//") pb.Images[j] = "http:" + pb.Images[j]; if (pb.Images[j].Contains("@")) pb.Images[j] = pb.Images[j].Substring(0, pb.Images[j].IndexOf("@")); string imgUrl = ""; string tempImage = pb.Images[j]; //图片缓存 if (UploadPinduoduoMain.MainImg && picsTemp.ContainsKey(Math.Abs(BaseClass.GetLong(tempImage)))) tempImage = picsTemp[Math.Abs(BaseClass.GetLong(tempImage))]; if (tempImage.Contains(".yangkeduo.com/")) { images.Add(tempImage); imageString += ",{\"url\":\"" + tempImage + "\",\"width\":640,\"height\":640,\"type\":\"1\"}"; apiImageString += ",\"" + tempImage + "\""; if (imageByte == null || j == 5) { GetPostTaobaoHtml.DownLoadImage(tempImage, out img); imageByte = img; } continue; } if (ImageTemp.ContainsKey(tempImage) && ImageTemp[tempImage].Height == ImageTemp[tempImage].Width && ImageTemp[tempImage].Width > 480 && ImageTemp[tempImage].Width <= 800) { imgUrl = ImageTemp[tempImage].Url; images.Add(imgUrl); AddImage(tempImage, imgUrl, 640, 640); imageString += ",{\"url\":\"" + imgUrl + "\",\"width\":640,\"height\":640,\"type\":\"1\"}"; apiImageString += ",\"" + imgUrl + "\""; continue; } ok = GetPostTaobaoHtml.DownLoadImage(tempImage, out img); if (!ok) continue; if (imageByte == null && j == 2) { imageByte = img; } ib = new ImageBuild(img); if (tempImage.Contains(".yangkeduo.com") && ib.CanUser && ib.Width == ib.Height && ib.Width >= 480 && ib.Width <= 800 && img.Length < 100 * 1024 && images.Count < 2) { imgUrl = tempImage; } else { ImageCut.HandleImage(ref img, UploadPinduoduoMain.MainImg); ib = new ImageBuild(img); if (UploadPinduoduoMain.MainImg) img = ib.BuildNewSize(640, 640, 100); else img = ib.BuildNewSizeCut(640, 640, 100); imgUrl = UploadImg(tempImage, ref img, true); } if (string.IsNullOrEmpty(imgUrl)) continue; images.Add(imgUrl); AddImage(tempImage, imgUrl, 640, 640); imageString += ",{\"url\":\"" + imgUrl + "\",\"width\":640,\"height\":640,\"type\":\"1\"}"; apiImageString += ",\"" + imgUrl + "\""; } if (images.Count == 0) { t.Message = "上传轮播图错误"; Error(t.Message, t.Message); return; } string apiContentString = ""; List contentImage = new List(); var m = BaseRegex.GetMatchRegex(ref pb.content, @"]*?src=[""'](.*?)[""']"); if (m.Count == 0) m = BaseRegex.GetMatchRegex(ref pb.content, @"]*?>(.*?)"); if (m.Count == 0) m = BaseRegex.GetMatchRegex(ref pb.content, @"]+?>(.*?)"); int maxImageCount = UploadPinduoduoMain.JustSaveContentImage ? UploadPinduoduoMain.JustSaveContentImageCount : 20; //if (maxImageCount < m.Count&&!UploadPinduoduoMain.JustSaveContentImage) // maxImageCount = m.Count; for (int j = 0; j < m.Count && contentImage.Count < maxImageCount; j++) { if (j == 0 && m.Count > 3 && UploadPinduoduoMain.DeleteFirst)//不要第一张图 continue; if (m.Count > 5 && j == m.Count - 1 && UploadPinduoduoMain.DeleteFirst)//最后一张 continue; string urlImg = m[j].Groups[1].Value.Replace(".src", ""); if (string.IsNullOrEmpty(urlImg)) continue; if (urlImg.Contains("//") && !urlImg.Contains("http:") && !urlImg.Contains("https:")) urlImg = "http:" + urlImg; if (urlImg.Contains("?")) urlImg = urlImg.Substring(0, urlImg.IndexOf("?")); //图片缓存 if (picsTemp.ContainsKey(Math.Abs(BaseClass.GetLong(urlImg)))) urlImg = picsTemp[Math.Abs(BaseClass.GetLong(urlImg))]; if (urlImg.Contains(".yangkeduo.com/")) { contentImage.Add(urlImg); imageString += ",{\"url\":\"" + urlImg + "\",\"width\":640,\"height\":640,\"type\":\"2\"}"; apiContentString += ",\"" + urlImg + "\""; continue; } //string exe = Path.GetExtension(urlImg).ToLower(); //if (exe != ".jpeg" && exe != ".jpg" && exe != ".png" && exe != ".gif") // continue; if (ImageTemp.ContainsKey(urlImg)) { string imgUrl = ImageTemp[urlImg].Url; contentImage.Add(imgUrl); imageString += ",{\"url\":\"" + imgUrl + "\",\"width\":" + ImageTemp[urlImg].Width + ",\"height\":" + ImageTemp[urlImg].Height + ",\"type\":\"2\"}"; apiContentString += ",\"" + imgUrl + "\""; continue; } ok = GetPostTaobaoHtml.DownLoadImage(urlImg, out img); if (ok && img.Length < 1000 * 1024) { ib = new ImageBuild(img); int width = ib.Width; int height = ib.Height; if (ib.Width < 480 || ib.Width > 2500 || ib.Height > 1500) { if (ib.Width > 480 && ib.Width < 2500 && ib.Height > 1500)//contentImage.Count < 2 && { if (ib.Width > 640) { width = 640; int per = width * 100 / ib.Width; height = ib.Height * per / 100; height = Math.Min(1000, height); } else { width = ib.Width; height = 1500; } } else { continue; } } else if (ib.Width > 640)//图片宽度太宽的压缩一下 { width = 640; int per = width * 100 / ib.Width; height = ib.Height * per / 100; } if (height < 10) continue; string imgUrl = ""; if (urlImg.Contains(".yangkeduo.com") && ib.CanUser && ib.Width > 480 && ib.Width < 1200 && ib.Height > 10 && ib.Height < 1500) { imgUrl = urlImg; } else { img = ib.BuildNewSize(width, height, 950);//不管大小如何,都重新生成JPG图片 imgUrl = UploadImg(urlImg, ref img, true); } if (!string.IsNullOrEmpty(imgUrl)) { contentImage.Add(imgUrl); imageString += ",{\"url\":\"" + imgUrl + "\",\"width\":" + width + ",\"height\":" + height + ",\"type\":\"2\"}"; apiContentString += ",\"" + imgUrl + "\""; AddImage(urlImg, imgUrl, width, height); } } } if (contentImage.Count == 0) { t.Message = "上传内容图异常"; Error(t.Message, t.Message); return; } //上传SKU图 string firstSkuImage = ""; imageString = imageString.Substring(1); apiContentString = apiContentString.Substring(1); for (int j = 0; pb.Props.Count > 0 && j < pb.SkuMaps.Count; j++) { long urlId = Math.Abs(BaseClass.GetLong(pb.SkuMaps[j].prop_image)); if (picsTemp.ContainsKey(urlId)) pb.SkuMaps[j].prop_image = picsTemp[urlId]; if (!string.IsNullOrEmpty(pb.SkuMaps[j].prop_image) && pb.SkuMaps[j].prop_image.Contains(".yangkeduo.com/")) { if (pb.SkuMaps[j].prop_image.Substring(0, 2) == "//") pb.SkuMaps[j].prop_image = "http:" + pb.SkuMaps[j].prop_image; if (string.IsNullOrEmpty(pb.SkuMaps[j].pinduoduo_image)) pb.SkuMaps[j].pinduoduo_image = pb.SkuMaps[j].prop_image; continue; } if (ImageTemp.ContainsKey(pb.SkuMaps[j].prop_image) && ImageTemp[pb.SkuMaps[j].prop_image].Width > 480 && ImageTemp[pb.SkuMaps[j].prop_image].Width == ImageTemp[pb.SkuMaps[j].prop_image].Height) { pb.SkuMaps[j].pinduoduo_image = ImageTemp[pb.SkuMaps[j].prop_image].Url; if (string.IsNullOrEmpty(firstSkuImage)) firstSkuImage = pb.SkuMaps[j].pinduoduo_image; continue; } string urlx = pb.SkuMaps[j].prop_image; if (string.IsNullOrEmpty(urlx)) continue; if (!urlx.Contains("http:") && !urlx.Contains("https:")) urlx = "http:" + urlx; ok = GetHtml.DownloadFile(urlx, out img); ib = new ImageBuild(img); if (ImageTemp.ContainsKey(pb.SkuMaps[j].prop_image) && ib.Width == ib.Height && ib.Width > 480 && ImageTemp[pb.SkuMaps[j].prop_image].Url.Contains("http:"))//未找到尺寸 { ImageTemp[pb.SkuMaps[j].prop_image].Width = ib.Width; ImageTemp[pb.SkuMaps[j].prop_image].Height = ib.Height; pb.SkuMaps[j].pinduoduo_image = ImageTemp[pb.SkuMaps[j].prop_image].Url; if (string.IsNullOrEmpty(firstSkuImage)) firstSkuImage = pb.SkuMaps[j].pinduoduo_image; continue; } string imgUrl = ""; img = ib.BuildNewSize(640, 640, 800); if (urlx.Contains(".yangkeduo.com") && ib.CanUser && ib.Width == ib.Height && ib.Width > 480 && ib.Width <= 800) { imgUrl = urlx; } else { imgUrl = UploadImg(urlx, ref img, true); } if (string.IsNullOrEmpty(imgUrl)) { Thread.Sleep(1000); imgUrl = UploadImg(urlx, ref img, true); } AddImage(urlx, imgUrl, 640, 640); if (string.IsNullOrEmpty(imgUrl)) { t.Message = "上传属性图异常"; Error(t.Message, t.Message); return; } if (string.IsNullOrEmpty(firstSkuImage)) firstSkuImage = imgUrl; pb.SkuMaps[j].pinduoduo_image = imgUrl; if (ImageTemp.ContainsKey(pb.SkuMaps[j].prop_image)) { ImageTemp[pb.SkuMaps[j].prop_image].Url = imgUrl; ImageTemp[pb.SkuMaps[j].prop_image].Width = 640; ImageTemp[pb.SkuMaps[j].prop_image].Height = 640; } AddImage(pb.SkuMaps[j].prop_image, pb.SkuMaps[j].pinduoduo_image, 640, 640); } if (string.IsNullOrEmpty(firstSkuImage) && images.Count > 0) firstSkuImage = images[0]; if (pb.Images.Count < 10) { int subCount = 10 - pb.Images.Count; if (pb.SkuMaps.Count > subCount) { for (int i = 0; i < subCount; i++) { int randx = new Random(Guid.NewGuid().GetHashCode()).Next(0, pb.SkuMaps.Count); string imagex = pb.SkuMaps[randx].pinduoduo_image; if (imagex.Contains("@")) imagex = imagex.Substring(0, imagex.IndexOf("@")); pb.Images.Add(imagex); } } else { for (int i = 0; i < pb.SkuMaps.Count; i++) { int randx = new Random(Guid.NewGuid().GetHashCode()).Next(0, pb.SkuMaps.Count); string imagex = pb.SkuMaps[randx].pinduoduo_image; if (string.IsNullOrEmpty(imagex)) continue; if (imagex.Contains("@")) imagex = imagex.Substring(0, imagex.IndexOf("@")); pb.Images.Add(imagex); } //subCount = 8 - pb.Images.Count; //for (int i = 0; i < subCount; i++) //{ // int randx = new Random(Guid.NewGuid().GetHashCode()).Next(0, contentImage.Count); // pb.Images.Add(contentImage[randx]); //} } int start = images.Count; for (int j = start; j < pb.Images.Count; j++) { string tempImage = pb.Images[j]; //if (tempImage.Contains(".yangkeduo.com/")) //{ images.Add(tempImage); //imageString += ",{\"url\":\"" + tempImage + "\",\"width\":640,\"height\":640,\"type\":\"1\"}"; apiImageString += ",\"" + tempImage + "\""; //continue; //} } } string url, data, html, refere = "https://mms.pinduoduo.com/Pdd.html"; string skuString = ""; string skuApiString = "", upProductId; string out_goods_id = EncryptionCode.GetCode(pb.from_id, pb.from_site_id, Shop.MallId, out upProductId); out_goods_id = ""; decimal maxPriceNewx = 0, minPriceNewx = 1000000; decimal maxPriceOnline = 0, maxPriceNew = 0; string singlePrice = t.ViPrice; decimal proPrice = 0M; decimal proPos = 0M; if (!string.IsNullOrEmpty(singlePrice)) { proPrice = decimal.Parse(singlePrice.Split('+')[0].Replace("%", "")); proPos = decimal.Parse(singlePrice.Split('+')[1]); } decimal expressPrcie = pb.express_price; if (!UploadPinduoduoMain.isExpressPrice) expressPrcie = 0.0M; if (pb.Props.Count == 0 || pb.Props[0].Values.Count == 0) { if (pb.price == 0 && pb.SkuMaps.Count > 0) pb.price = pb.SkuMaps[0].price; int onsale = pb.price == 0 ? 0 : 1; int multi_price = 0; if (t.ViGoodsId <= 0 || string.IsNullOrEmpty(singlePrice)) { multi_price = WhitePriceBuild(pb.price, UploadPinduoduoMain.MultiPrice, expressPrcie); } else { multi_price = WhitePriceBuild(pb.price, proPrice, proPos, expressPrcie); } // 微店转换数据对sku价格取整,尾数1,2,3,4的加到5,尾数6,7,8,9的加到10 if (t.ViGoodsId > 0 && IsRounding) { while (!multi_price.ToString().EndsWith("0") && !multi_price.ToString().EndsWith("5")) { multi_price++; } } maxPriceNewx = multi_price; minPriceNewx = multi_price; maxPriceNew = multi_price; maxPriceOnline = multi_price + UploadPinduoduoMain.SinglePrice * 100; skuString = ",{\"is_onsale\":" + onsale + ",\"limit_quantity\":" + UploadPinduoduoMain.LimitBuy + ",\"quantity_delta\":" + UploadPinduoduoMain.LimitBuy + ",\"thumb_url\":\"\"," + "\"multi_price\":" + multi_price + ",\"price\":" + (multi_price + UploadPinduoduoMain.SinglePrice * 100) + ",\"out_sku_sn\":\"" + out_goods_id + "\",\"id\":0,\"spec\":\"\",\"weight\":1000}"; skuApiString = ",{\"is_onsale\":" + onsale + ",\"limit_quantity\":" + UploadPinduoduoMain.LimitBuy + ",\"price\":\"" + (multi_price + UploadPinduoduoMain.SinglePrice * 100) + "\",\"weight\":1000,\"multi_price\":\"" + multi_price + "\",\"thumb_url\":\"" + firstSkuImage + "\",\"out_sku_sn\":\"" + out_goods_id + "\",\"quantity\":" + UploadPinduoduoMain.LimitBuy + ",\"spec_id_list\":\"[]\"}"; out_goods_id = ""; } string Cookies = Shop.Cookies; //随机属性名称 bool begin = new Random(Guid.NewGuid().GetHashCode()).Next(0, 10) < 5; //UploadPinduoduoMain.RandSku = false;//临时关闭随机SKU功能 for (int i = 0; UploadPinduoduoMain.RandSku && i < pb.Props.Count; i++) { for (int j = 0; j < pb.Props[i].Values.Count; j++) { if (pb.Props[i].name == "尺码") break; pb.Props[i].Values[j].name_pinduoduo = Randomx.GetNewProp(begin, pb.Props[i].Values[j].name); url = "https://mms.pinduoduo.com/glide/v2/mms/query/spec/by/name"; data = "{\"parent_id\":" + pb.Props[i].pinduoduo_id + ",\"name\":\"" + pb.Props[i].Values[j].name_pinduoduo + "\"}"; html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data, Cookies); if (!string.IsNullOrEmpty(html) && html.Contains("过于频繁")) { Thread.Sleep(30 * 1000); html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, Cookies); } if (!string.IsNullOrEmpty(html) && html.Contains("过于频繁")) { Thread.Sleep(30 * 1000); html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, Cookies); } string propvid = BaseRegex.GetStringJson(ref html, "result"); if (string.IsNullOrEmpty(propvid)) { Thread.Sleep(3000); html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data, Cookies); propvid = BaseRegex.GetStringJson(ref html, "result"); } pb.Props[i].Values[j].id = propvid; } } if (t.Cat3 == 0) { foreach (KeyValuePair c3 in PinduoduoCatList.CatIds) { if (c3.Value.cat2 == t.Cat2 && c3.Value.cat3 > 0) { t.Cat3 = c3.Value.cat3; break; } } } if (t.Cat4 == 0 && t.Cat3 > 0) { foreach (KeyValuePair c4 in PinduoduoCatList.CatIds) { if (c4.Value.cat3 == t.Cat3 && c4.Value.cat4 > 0) { t.Cat4 = c4.Value.cat4; break; } } } int catId = t.Cat4 > 0 ? t.Cat4 : t.Cat3, maxEndPrice = 0; if (catId == 0) catId = t.CatId; catId = PinduoduoCatList.GetNewCat3(catId); // 低价sku SkuMapBase skuMin = null; // 生成新的价格 for (int i = 0; i < pb.SkuMaps.Count; i++) { // 团购(拼团) if (t.ViGoodsId <= 0 || string.IsNullOrEmpty(singlePrice)) { if (UploadPinduoduoMain.isPriceModel) { for (int k = 0; k < UploadPinduoduoMain.PriceModelList.Count; k++) { var item = UploadPinduoduoMain.PriceModelList[k]; if (pb.SkuMaps[i].price >= item.MinPrice && pb.SkuMaps[i].price < item.MaxPrice) { UploadPinduoduoMain.Postage = item.CoupPrice; UploadPinduoduoMain.MultiPrice = 0; break; } } } pb.SkuMaps[i].new_price = WhitePriceBuild(pb.SkuMaps[i].price, UploadPinduoduoMain.MultiPrice, expressPrcie); } else { //if (UploadPinduoduoMain.isPriceModel) //{ // for (int k = 0; k < UploadPinduoduoMain.PriceModelList.Count; k++) // { // var item = UploadPinduoduoMain.PriceModelList[k]; // if (pb.SkuMaps[i].price >= item.MinPrice && pb.SkuMaps[i].price < item.MaxPrice) // { // proPos = item.CoupPrice; // proPrice = 0; // break; // } // } //} pb.SkuMaps[i].new_price = WhitePriceBuild(pb.SkuMaps[i].price, proPrice, proPos, expressPrcie); } if (maxEndPrice < pb.SkuMaps[i].new_price) maxEndPrice = pb.SkuMaps[i].new_price; // 单买 pb.SkuMaps[i].online_price = (int)(pb.SkuMaps[i].new_price + UploadPinduoduoMain.SinglePrice * 100); if (maxPriceNew < pb.SkuMaps[i].new_price) maxPriceNew = pb.SkuMaps[i].new_price; if (maxPriceOnline < pb.SkuMaps[i].online_price) maxPriceOnline = pb.SkuMaps[i].online_price; if (skuMin == null || skuMin.new_price > pb.SkuMaps[i].new_price) skuMin = pb.SkuMaps[i]; } int skuMinBackPrice = skuMin==null?0:skuMin.new_price; string skuMinString = ""; if (UploadPinduoduoMain.LowPriceSku && pb.SkuMaps.Count > 1 && skuMin != null) { skuMin.new_price = (int)((skuMin.price * UploadPinduoduoMain.LowPricePercent + UploadPinduoduoMain.LowPriceAdd+expressPrcie) * 100); } int market_price = (int)(maxPriceOnline * UploadPinduoduoMain.BeforePrice); bool userShield = false; //临时关闭价格护盾 decimal dd = PinduoduoCatList.GetPriceSpace(catId) * 10; if (dd == 12) dd = 10; for (int i = 0; UploadPinduoduoMain.PriceShield && i < pb.SkuMaps.Count; i++) // 二级护盾 { if (UploadPinduoduoMain.LowPriceSku && pb.SkuMaps[i].id == skuMin.id) continue; pb.SkuMaps[i].new_price = (int)(pb.SkuMaps[i].new_price) / 10 * 10; if (pb.SkuMaps[i].new_price < maxPriceNew / dd * 10) { userShield = true; pb.SkuMaps[i].new_price = (int)(maxPriceNew / dd * 10); } //单买 pb.SkuMaps[i].online_price = (int)(pb.SkuMaps[i].online_price); if (pb.SkuMaps[i].online_price < maxPriceOnline / dd * 10) { userShield = true; pb.SkuMaps[i].online_price = (int)(maxPriceOnline / dd * 10 + 100); } } if (dd == 10) { for (int i = 0; i < pb.SkuMaps.Count; i++) { if (UploadPinduoduoMain.LowPriceSku) continue; pb.SkuMaps[i].new_price = (int)(maxPriceNew / dd * 10); pb.SkuMaps[i].online_price = (int)(maxPriceOnline / dd * 10 + 100); } } for (int i = 0; i < pb.Props.Count; i++)//剔除过多的属性 { while (pb.Props[i].Values.Count > 30 && pb.Props.Count > 1) { string[] li = skuMin.name.Split(';'); string n1 = li[0].Substring(li[0].IndexOf(":") + 1).Trim(); string n2 = li[1].Substring(li[1].IndexOf(":") + 1).Trim(); if (pb.Props[i].Values[30].name.Contains(n1) || pb.Props[i].Values[30].name.Contains(n2) || n1.Contains(pb.Props[i].Values[30].name) || n2.Contains(pb.Props[i].Values[30].name)) { pb.Props[i].Values.RemoveAt(29); continue; } pb.Props[i].Values.RemoveAt(30); } while (pb.Props[i].Values.Count > 40 && pb.Props.Count == 1) { if (pb.Props[i].Values[40].name.Contains(skuMin.name) || skuMin.name.Contains(pb.Props[i].Values[40].name)) { pb.Props[i].Values.RemoveAt(39); continue; } pb.Props[i].Values.RemoveAt(40); } } decimal maxSkuPriceOnline = 0; decimal maxSkuMultiPriceOnline = 0; // 微店转换数据对sku价格取整,尾数1,2,3,4的加到5,尾数6,7,8,9的加到10 if (t.ViGoodsId > 0 && IsRounding) { for (int i = 0; i < pb.SkuMaps.Count; i++) { var sk = pb.SkuMaps[i]; while (!sk.new_price.ToString().EndsWith("0") && !sk.new_price.ToString().EndsWith("5")) { sk.new_price++; } while (!sk.online_price.ToString().EndsWith("0") && !sk.online_price.ToString().EndsWith("5")) { sk.online_price++; } } } if (pb.Props.Count == 1) { for (int j = 0; j < pb.Props[0].Values.Count; j++) { var sku = new SkuMapBase(); for (int k = 0; k < pb.SkuMaps.Count; k++) { string[] li = pb.SkuMaps[k].name.Split(';'); string n1 = li[0].Substring(li[0].IndexOf(":") + 1).Trim();//pb.SkuMaps[k].nameLite if (n1.Replace(" ", "+") == pb.Props[0].Values[j].name || n1 == pb.Props[0].Values[j].name) { sku = pb.SkuMaps[k]; break; } } if (string.IsNullOrEmpty(sku.pinduoduo_image)) { sku.pinduoduo_image = firstSkuImage; } if (sku.new_price == 0) { //Error("价格错误,跳过上传" + t.FromId, "价格计算错误"); continue; } if (sku.new_price > sku.online_price - 100) sku.online_price = sku.new_price + 100; if (maxSkuPriceOnline < sku.online_price) maxSkuPriceOnline = sku.online_price; if (maxSkuMultiPriceOnline < sku.new_price) maxSkuMultiPriceOnline = sku.new_price; if (pb.Props[0].Values[j].id == null || pb.Props[0].Values[j].id.Contains("null")) continue; int onsale = sku.number == 0 || sku.price == 0 ? 0 : 1; if (skuApiString.Contains(pb.Props[0].Values[j].id + "]")) continue; int quantity = UploadPinduoduoMain.LimitBuy; if (!UploadPinduoduoMain.isDefaultQun) { quantity = sku.number; } skuString += ",{\"is_onsale\":" + onsale + ",\"limit_quantity\":" + quantity + ",\"quantity_delta\":" + quantity + ",\"thumb_url\":\"" + sku.pinduoduo_image + "\"," + "\"multi_price\":" + sku.new_price + ",\"price\":" + sku.online_price + ",\"out_sku_sn\":\"" + out_goods_id + "\",\"id\":0,\"spec\":" + "[{\"parent_name\":\"" + pb.Props[0].name + "\",\"parent_id\":" + pb.Props[0].id + ",\"spec_name\":\"" + pb.Props[0].Values[j].name_pinduoduo + "\",\"spec_id\":" + pb.Props[0].Values[j].id + "}],\"weight\":1000}"; if (UploadPinduoduoMain.LowPriceQ && skuMin != null && sku.id == skuMin.id) { skuApiString += ",{\"is_onsale\":" + onsale + ",\"limit_quantity\":" + quantity + ",\"price\":\"" + sku.online_price + "\",\"weight\":1000,\"multi_price\":\"" + sku.new_price + "\",\"thumb_url\":\"" + sku.pinduoduo_image + "\",\"out_sku_sn\":\"" + out_goods_id + "\",\"quantity\":" + UploadPinduoduoMain.LowPriceStock + ",\"spec_id_list\":\"[" + pb.Props[0].Values[j].id + "]\"}"; } else { skuApiString += ",{\"is_onsale\":" + onsale + ",\"limit_quantity\":" + quantity + ",\"price\":\"" + sku.online_price + "\",\"weight\":1000,\"multi_price\":\"" + sku.new_price + "\",\"thumb_url\":\"" + sku.pinduoduo_image + "\",\"out_sku_sn\":\"" + out_goods_id + "\",\"quantity\":" + quantity + ",\"spec_id_list\":\"[" + pb.Props[0].Values[j].id + "]\"}"; } if (UploadPinduoduoMain.LowPriceSku&&sku.id==skuMin.id) { skuMinString = "{\"is_onsale\":" + onsale + ",\"limit_quantity\":" + quantity + ",\"price\":\"" + (skuMinBackPrice+100) + "\",\"weight\":1000,\"multi_price\":\"" + skuMinBackPrice + "\",\"thumb_url\":\"" + sku.pinduoduo_image + "\",\"out_sku_sn\":\"" + out_goods_id + "\",\"quantity\":" + quantity + ",\"spec_id_list\":\"[" + pb.Props[0].Values[j].id + "]\"}"; } pb.Props[0].Values[j].is_used = true; out_goods_id = ""; } // 临时关闭剪刀手 if (UploadPinduoduoMain.CutHand && maxEndPrice > 800 && !string.IsNullOrEmpty(UploadPinduoduoMain.CutHandPath) && !string.IsNullOrEmpty(UploadPinduoduoMain.CutHandName))//价格剪刀手 { string imgUrl = UploadPinduoduoMain.CutHandImage; if (string.IsNullOrEmpty(UploadPinduoduoMain.CutHandImage)) { var imgx = File.ReadAllBytes(UploadPinduoduoMain.CutHandPath); ib = new ImageBuild(imgx); imgx = ib.BuildNewSize(640, 640, 100); imgUrl = UploadImg(UploadPinduoduoMain.CutHandPath, ref imgx, false); UploadPinduoduoMain.CutHandImage = imgUrl; } PinduoduoApiPropId apix = new PinduoduoApiPropId(Shop); string htmlx = apix.GetPropId(pb.Props[0].pinduoduo_id, UploadPinduoduoMain.CutHandName); string spec_id = BaseRegex.GetStringJson(ref htmlx, "spec_id"); if (!string.IsNullOrEmpty(spec_id) && !string.IsNullOrEmpty(imgUrl)) { int multi_price = (int)(maxEndPrice / dd * 10); skuApiString += ",{\"is_onsale\":1,\"limit_quantity\":" + UploadPinduoduoMain.LimitBuy + ",\"price\":\"" + (multi_price + 100) + "\",\"weight\":1000,\"multi_price\":\"" + multi_price + "\",\"thumb_url\":\"" + imgUrl + "\",\"out_sku_sn\":\"" + out_goods_id + "\",\"quantity\":" + UploadPinduoduoMain.CutHandStock + ",\"spec_id_list\":\"[" + spec_id + "]\"}"; } } } if (pb.Props.Count == 2) { for (int j = 0; j < pb.Props[0].Values.Count; j++) { for (int k = 0; k < pb.Props[1].Values.Count; k++) { string sm = "{\"parent_name\":\"" + pb.Props[0].pinduoduo_name + "\",\"parent_id\":" + pb.Props[0].pinduoduo_id + ",\"spec_name\":\"" + (string.IsNullOrEmpty(pb.Props[0].Values[j].name_pinduoduo) ? pb.Props[0].Values[j].name : pb.Props[0].Values[j].name_pinduoduo) + "\",\"spec_id\":" + pb.Props[0].Values[j].id + "},{\"parent_name\":\"" + pb.Props[1].pinduoduo_name + "\",\"parent_id\":\"" + pb.Props[1].pinduoduo_id + "\",\"spec_name\":\"" + (string.IsNullOrEmpty(pb.Props[1].Values[k].name_pinduoduo) ? pb.Props[1].Values[k].name : pb.Props[1].Values[k].name_pinduoduo) + "\",\"spec_id\":\"" + pb.Props[1].Values[k].id + "\"}"; var sku = new SkuMapBase(); for (int l = 0; l < pb.SkuMaps.Count; l++) { string[] li = pb.SkuMaps[l].name.Split(';'); if (li.Length == 2) { string n1 = li[0].Substring(li[0].IndexOf(":") + 1).Trim(); string n2 = li[1].Substring(li[1].IndexOf(":") + 1).Trim(); if (t.FromType == "微店") { n1 = li[0].Substring(li[0].IndexOf(":") + 1).Trim().Replace(" ", "+"); n2 = li[1].Substring(li[1].IndexOf(":") + 1).Trim().Replace(" ", "+"); } if (pb.Props[0].Values[j].name == n1 && pb.Props[1].Values[k].name == n2 || pb.Props[0].Values[j].name == n2 && pb.Props[1].Values[k].name == n1) { sku = pb.SkuMaps[l]; break; } } if (li.Length == 3) { string n1 = li[0].Substring(li[0].IndexOf(":") + 1).Trim(); string n2 = li[1].Substring(li[1].IndexOf(":") + 1).Trim(); string n3 = li[2].Substring(li[2].IndexOf(":") + 1).Trim(); if (t.FromType == "微店") { n1 = li[0].Substring(li[0].IndexOf(":") + 1).Trim().Replace(" ", "+"); n2 = li[1].Substring(li[1].IndexOf(":") + 1).Trim().Replace(" ", "+"); n3 = li[2].Substring(li[2].IndexOf(":") + 1).Trim().Replace(" ", "+"); } if (pb.Props[0].Values[j].name == n1 && pb.Props[1].Values[k].name == n2 || pb.Props[0].Values[j].name == n2 && pb.Props[1].Values[k].name == n1 || pb.Props[0].Values[j].name == n1 && pb.Props[1].Values[k].name == n3 || pb.Props[0].Values[j].name == n3 && pb.Props[1].Values[k].name == n1 || pb.Props[0].Values[j].name == n2 && pb.Props[1].Values[k].name == n3 || pb.Props[0].Values[j].name == n3 && pb.Props[1].Values[k].name == n2) { sku = pb.SkuMaps[l]; break; } } if (li.Length == 4) { string n1 = li[0].Substring(li[0].IndexOf(":") + 1).Trim(); string n2 = li[1].Substring(li[1].IndexOf(":") + 1).Trim(); string n3 = li[2].Substring(li[2].IndexOf(":") + 1).Trim(); string n4 = li[3].Substring(li[3].IndexOf(":") + 1).Trim(); if (t.FromType == "微店") { n1 = li[0].Substring(li[0].IndexOf(":") + 1).Trim().Replace(" ", "+"); n2 = li[1].Substring(li[1].IndexOf(":") + 1).Trim().Replace(" ", "+"); n3 = li[2].Substring(li[2].IndexOf(":") + 1).Trim().Replace(" ", "+"); n4 = li[3].Substring(li[3].IndexOf(":") + 1).Trim().Replace(" ", "+"); } if (pb.Props[0].Values[j].name == n1 && pb.Props[1].Values[k].name == n2 || pb.Props[0].Values[j].name == n2 && pb.Props[1].Values[k].name == n1 || pb.Props[0].Values[j].name == n1 && pb.Props[1].Values[k].name == n3 || pb.Props[0].Values[j].name == n3 && pb.Props[1].Values[k].name == n1 || pb.Props[0].Values[j].name == n2 && pb.Props[1].Values[k].name == n3 || pb.Props[0].Values[j].name == n3 && pb.Props[1].Values[k].name == n2) { sku = pb.SkuMaps[l]; break; } if (pb.Props[0].Values[j].name == n3 && pb.Props[1].Values[k].name == n4 || pb.Props[0].Values[j].name == n4 && pb.Props[1].Values[k].name == n3 || pb.Props[0].Values[j].name == n1 && pb.Props[1].Values[k].name == n4 || pb.Props[0].Values[j].name == n4 && pb.Props[1].Values[k].name == n1 || pb.Props[0].Values[j].name == n2 && pb.Props[1].Values[k].name == n4 || pb.Props[0].Values[j].name == n4 && pb.Props[1].Values[k].name == n2) { sku = pb.SkuMaps[l]; break; } } } if (string.IsNullOrEmpty(sku.pinduoduo_image)) { sku.pinduoduo_image = firstSkuImage; } if (sku.new_price == 0) { sku.new_price = (int)maxPriceNew; sku.number = 0; } if (sku.new_price > sku.online_price - 100) sku.online_price = sku.new_price + 100; if (maxSkuPriceOnline < sku.online_price) maxSkuPriceOnline = sku.online_price; if (maxSkuMultiPriceOnline < sku.new_price) maxSkuMultiPriceOnline = sku.new_price; if (pb.Props[1].Values[k].id == null || pb.Props[0].Values[j].id == null || pb.Props[1].Values[k].id.Contains("null") || pb.Props[0].Values[j].id.Contains("null")) continue; int onsale = sku.number == 0 || sku.price == 0 ? 0 : 1; if (skuApiString.Contains(pb.Props[0].Values[j].id + "," + pb.Props[1].Values[k].id + "]")) continue; int quantity = UploadPinduoduoMain.LimitBuy; if (!UploadPinduoduoMain.isDefaultQun) { quantity = sku.number; } skuString += ",{\"is_onsale\":" + onsale + ",\"limit_quantity\":" + quantity + ",\"quantity_delta\":" + quantity + ",\"thumb_url\":\"" + sku.pinduoduo_image + "\"," + "\"multi_price\":" + sku.new_price + ",\"price\":" + sku.online_price + ",\"out_sku_sn\":\"" + out_goods_id + "\",\"id\":0,\"spec\":" + "[" + sm + "],\"weight\":1000}"; if (UploadPinduoduoMain.LowPriceQ && skuMin != null && sku.id == skuMin.id) { skuApiString += ",{\"is_onsale\":" + onsale + ",\"limit_quantity\":" + quantity + ",\"price\":\"" + sku.online_price + "\",\"weight\":1000,\"multi_price\":\"" + sku.new_price + "\",\"thumb_url\":\"" + sku.pinduoduo_image + "\",\"out_sku_sn\":\"" + out_goods_id + "\",\"quantity\":" + UploadPinduoduoMain.LowPriceStock + ",\"spec_id_list\":\"[" + pb.Props[0].Values[j].id + "," + pb.Props[1].Values[k].id + "]\"}"; } else { skuApiString += ",{\"is_onsale\":" + onsale + ",\"limit_quantity\":" + quantity + ",\"price\":\"" + sku.online_price + "\",\"weight\":1000,\"multi_price\":\"" + sku.new_price + "\",\"thumb_url\":\"" + sku.pinduoduo_image + "\",\"out_sku_sn\":\"" + out_goods_id + "\",\"quantity\":" + quantity + ",\"spec_id_list\":\"[" + pb.Props[0].Values[j].id + "," + pb.Props[1].Values[k].id + "]\"}"; } if (UploadPinduoduoMain.LowPriceSku && sku.id == skuMin.id) { skuMinString = "{\"is_onsale\":" + onsale + ",\"limit_quantity\":" + quantity + ",\"price\":\"" + (skuMinBackPrice + 100) + "\",\"weight\":1000,\"multi_price\":\"" + skuMinBackPrice + "\",\"thumb_url\":\"" + sku.pinduoduo_image + "\",\"out_sku_sn\":\"" + out_goods_id + "\",\"quantity\":" + quantity + ",\"spec_id_list\":\"[" + pb.Props[0].Values[j].id + "," + pb.Props[1].Values[k].id + "]\"}"; } pb.Props[0].Values[j].is_used = true; pb.Props[1].Values[k].is_used = true; out_goods_id = ""; } } } if (maxSkuPriceOnline > 0 && maxSkuPriceOnline < maxPriceOnline) market_price = (int)(maxSkuPriceOnline * UploadPinduoduoMain.BeforePrice); if (!string.IsNullOrEmpty(skuString)) skuString = skuString.Substring(1); if (!string.IsNullOrEmpty(skuApiString)) skuApiString = skuApiString.Substring(1); string content = string.IsNullOrEmpty(pb.content_pinduoduo) ? pb.name : pb.content_pinduoduo; if (pb.from_site_id == 1 || pb.from_site_id == 3 || pb.from_site_id == 4) { content = ""; for (int i = 0; i < pb.Prop.Count && content.Length < 450; i++) { if (pb.Prop[i].Key.Contains("生产") || pb.Prop[i].Key.Contains("联系") || pb.Prop[i].Key.Contains("厂名") || pb.Prop[i].Key.Contains("厂址") || pb.Prop[i].Key.Contains("生产") || pb.Prop[i].Key.Contains("保质期")) continue; if (pb.Prop[i].Key.Contains("价") || pb.Prop[i].Value.Contains("元") || pb.Prop[i].Value.Contains("预售") || pb.Prop[i].Value.Contains("品牌")) continue; if (pb.Prop[i].Key.Contains("主要下游平台")) continue; content += pb.Prop[i].Key + ":" + pb.Prop[i].Value.Replace("2016", "2019").Replace("2017", "2019").Replace("2018", "2019").Trim() + ";"; } if (content.Length < 10) content = pb.name; content = content.Replace("\"", "\\\"").Replace("/", "\\/"); } if (content.Length < 40) content += pb.name; int mallId = Shop != null ? Shop.MallId : BaseClass.MallId; string addContent = UploadPinduoduoMain.AddType(ref pb, Shop.MainCatId, Cookies, mallId); bool again = false; string error_msg = ""; content += UploadPinduoduoMain.RandDesc ? Randomx.GetWord(1) + Randomx.GetNumber(1) : ""; if (pb.from_id == 0) pb.from_id = t.FromId; if (pb.from_id == 0) { t.Message = "上家编码异常,请联系管理员"; Error("上家编码异常:" + t.Titlte, t.Message); return; } t.ShopName = Shop.Name; bool replaceFrist = true; string skuStringx = "", skuApiStringx = ""; //生成新的价格 for (int i = 0; i < pb.SkuMaps.Count; i++) { if (maxPriceNewx < pb.SkuMaps[i].new_price) maxPriceNewx = pb.SkuMaps[i].new_price; if (minPriceNewx > pb.SkuMaps[i].new_price) minPriceNewx = pb.SkuMaps[i].new_price; } if (maxPriceNewx == 0) { maxPriceNewx = maxPriceNew; minPriceNewx = maxPriceNew; } long upid = Randomx.GetId(100000, 9999999) * (long)Randomx.GetId(10000, 99999); content = content.Replace("阳台", "").Replace("运费险", "").Replace("QQ", "").Replace("限量", "").Replace("成人", "").Replace("货到付款", "").Replace("老人", "").Replace("定金", "").Replace("抽奖", "").Replace("VX", "").Replace("★", "").Replace("?", "").Replace("天猫", "").Replace("淘宝", ""); var mcontent = BaseRegex.GetMatchRegex(ref content, @"品牌[^>]+?[;|;]"); if (mcontent != null && mcontent.Count > 0) content = content.Replace(mcontent[0].Groups[0].Value, ""); pb.name = ReplaceTitle(pb.name); string startname = pb.name.Substring(0, 1); if (startname == "@") pb.name = pb.name.Substring(1); string tiny_name = pb.name.Length <= 10 ? pb.name : pb.name.Substring(0, 10); if (content.Length > 500) content = content.Substring(0, 500); //if (t.FromType == "拼多多" || t.FromType == "内部数据") // goto UserMmc; //API接口 PinduoduoApiGetProduct api = null; //UploadPinduoduoMain.isDefaultMoni = true;//测试模拟接口使用,请勿提交 by ttzhao 2020.7.4 if (UploadPinduoduoMain.isDefaultMoni) goto UserMmc; api = new PinduoduoApiGetProduct(Shop); if (us != null) { api.Data.Add("goods_id", us.GoodsId.ToString()); } else if (UploadPinduoduoMain.isLowPriceApplied && !string.IsNullOrEmpty(skuApiString)) { decimal times = GetCatTimes(catId); if (times != 0) { var lowPriceSkus = string.Empty; decimal lowPrice = maxSkuMultiPriceOnline / (times * 100); var json = api.GetProductInfoByCatAndPrice(catId, lowPrice); JObject jObj = JObject.Parse(json); if (jObj["goods_search_response"] != null) { int retryTimes = 0; //生成特定低价引流spec,名称为“1” List lowPriceSpecs = new List(); for (int i = 0; i < pb.Props.Count; i++) { var specId = pb.Props[i].pinduoduo_id; var generatedSpec = api.GetSpecId(specId, "1"); var generatedSpecId = BaseRegex.GetStringJson(ref generatedSpec, "spec_id"); if (!pb.Props[i].Values.Any(sp => sp.id == generatedSpecId)) { lowPriceSpecs.Add(generatedSpecId); } } if (lowPriceSpecs.Count > 0) { foreach (var item in jObj["goods_search_response"]["goods_list"]) { if (retryTimes++ < 10 && lowPriceSkus == string.Empty) { var token = PinduoduoProductCollect.GetRandomPDDAccessToken(p => p.ProductDetailStatus == 1); if (!string.IsNullOrEmpty(token)) { lowPriceSkus = PinduoduoProductCollect.GenerateLowPriceSkus(item["goods_id"].ParseToLong(), lowPrice, pb.Props, lowPriceSpecs, token); } } else { break; } } skuApiString += lowPriceSkus; } } } } if (UploadPinduoduoMain.isfruit) api.Data.Add("bad_fruit_claim", "1"); api.Data.Add("goods_name", pb.name); api.Data.Add("goods_type", "1"); api.Data.Add("goods_desc", content); api.Data.Add("cat_id", catId.ToString()); api.Data.Add("tiny_name", tiny_name); api.Data.Add("country_id", "0"); api.Data.Add("market_price", market_price.ToString()); if (UploadPinduoduoMain.isPreSale) { api.Data.Add("pre_sale_time", UploadPinduoduoMain.endAdvanceTimex.ToString()); api.Data.Add("is_pre_sale", "true"); } else { api.Data.Add("is_pre_sale", "false"); } api.Data.Add("shipment_limit_second", "172800"); api.Data.Add("cost_template_id", Shop.ExpressId.ToString()); api.Data.Add("customer_num", UploadPinduoduoMain.GroupCount.ToString()); //团购人数 if (!UploadPinduoduoMain.limitCount) { api.Data.Add("buy_limit", UploadPinduoduoMain.BuyLimit.ToString()); api.Data.Add("order_limit", UploadPinduoduoMain.OrderLimit.ToString()); } if (UploadPinduoduoMain.isSevNoRea) api.Data.Add("is_refundable", "true"); else api.Data.Add("is_refundable", "false"); if(BaseClass.UserVersion == 110) // 特殊版本默认七天无理由退货 api.Data["is_refundable"] = "true"; if (catId == 18230 || catId == 18141 || catId == 18159 || UploadPinduoduoMain.isfolt) api.Data.Add("is_folt", "false"); else api.Data.Add("is_folt", "true"); if (!string.IsNullOrEmpty(addContent)) { int fabric = BaseRegex.GetIntJson(ref addContent, "fabric"); int fabric_content = BaseRegex.GetIntJson(ref addContent, "fabric_content"); api.Data.Add("fabric", fabric.ToString()); api.Data.Add("fabric_content", fabric_content.ToString()); } if (UploadPinduoduoMain.isSecond) { api.Data.Add("second_hand", "true"); } else { api.Data.Add("second_hand", "false"); } if (Shop.MainCatName == "海淘进口" && (pb.main_cat_name == "海淘进口" || pb.main_cid == 8)) { if (string.IsNullOrEmpty(Shop.bondedWarehouseName)) { Shop.CanUpload = false; error_msg = "没有获取到保税区信息"; Shop.Message = error_msg; UploadPinduoduoMain.ShopTemp.Add(Shop); Error("提交异常:" + t.Titlte, error_msg); return; } if (UploadPinduoduoMain.CountryList.Count == 0) { string urlx = "https://mms.pinduoduo.com/glide/v2/mms/query/country/list"; string htmlx = GetPostTaobaoHtml.GetJsonPost(urlx, urlx, true, "", Shop.Cookies); var mxt = BaseRegex.GetMatchRegex(ref htmlx, "{[^}]+?}"); for (int j = 0; j < mxt.Count; j++) { string list = mxt[j].Groups[0].Value; string country_id = BaseRegex.GetStringJson(ref list, "country_id"); string country_name = BaseRegex.GetStringJson(ref list, "country_name"); if (!UploadPinduoduoMain.CountryList.ContainsKey(country_id)) UploadPinduoduoMain.CountryList.Add(country_id, country_name); } } var countryid = UploadPinduoduoMain.CountryList.FirstOrDefault(q => q.Value == t.country || t.country.Contains(q.Value)).Key; if (string.IsNullOrEmpty(countryid)) countryid = "233"; api.Data.Remove("goods_type"); api.Data.Remove("country_id"); api.Data.Remove("shipment_limit_second"); api.Data.Add("goods_type", "3"); api.Data.Add("country_id", countryid); api.Data.Add("origin_country_id", countryid); api.Data.Add("shipment_limit_second", "432000"); api.Data.Add("oversea_goods", "{\"bonded_warehouse_key\":\"" + Shop.bondedWarehouseKey + "\",\"customs_broker\":null,\"hs_code\":null,\"value_added_tax_rate\":null,\"consumption_tax_rate\":null}"); } api.Data.Add("sku_list", "[" + (string.IsNullOrEmpty(skuApiStringx) ? skuApiString : skuApiStringx) + "]"); if (UploadPinduoduoMain.defaultPid) { string code = ""; if (pb.from_site_id == 1) code = "tb-"; if (pb.from_site_id == 2) code = "pd-"; if (pb.from_site_id == 3) code = "al-"; code += pb.from_id; api.Data.Add("out_goods_id", code); } else { api.Data.Add("out_goods_id", ""); } //api.Data.Add("hd_thumb_url", img400); //api.Data.Add("thumb_url", img200); //api.Data.Add("image_url", mainImageUrl); api.Data.Add("carousel_gallery", "[" + apiImageString.Substring(1) + "]"); api.Data.Add("detail_gallery", "[" + apiContentString + "]"); if (t.GoodsId < 0) t.GoodsId = 0; if (",983,".Contains("," + catId + ","))//卷纸 { api.Data.Add("paper_net_weight", "100"); api.Data.Add("paper_length", "100"); api.Data.Add("paper_width", "100"); api.Data.Add("paper_plies_num", "1"); } if (",2,6586,6785,6883,6758,6536,6630,6398,,63,64,65,92,95,99,101,3853,3862,3867,3872,3876,3900,898,897,3993,1079,".Contains("," + t.Cat1 + ",")) //食品 { api.Data.Add("shelf_life", "300"); api.Data.Add("start_production_date", BaseClass.GetTime(DateTime.Today).ToString()); api.Data.Add("end_production_date", BaseClass.GetTime(DateTime.Today).ToString()); } string mustCode = ""; string properties = ""; if (UploadPinduoduoMain.ismaterial) { properties = UploadPinduoduoProperties.GetNew(catId, t.Cat1, ref pb, ref Shop, out mustCode, true); } else { //UploadPinduoduoProperties.GetGuoJian(0,"",Shop); properties = UploadPinduoduoProperties.GetNew(catId, t.Cat1, ref pb, ref Shop, out mustCode, false); } if (!string.IsNullOrEmpty(properties)) { //api.Data.Remove("goods_properties"); api.Data["goods_properties"] = "[" + properties.Substring(1) + "]"; } api.Data["gallery"] = imageString; //api.Data.Add("skus", "[" + (string.IsNullOrEmpty(skuStringx) ? skuString : skuStringx.Substring(1)) + "]"); t.Price = pb.price; //==================================图片缓存======================== string temp = ""; foreach (KeyValuePair item in picUped) { temp += Math.Abs(item.Key) + "," + item.Value + ";"; } if (!string.IsNullOrEmpty(temp)) { url = BaseClass.LoginApiUrl + "?obj=upshopid/image_pinduoduo&act=add"; data = UserLogin.GetSignaturex() + "&data=" + temp; html = GetHtml.PostUtf8(url, data); } //==================================图片缓存 结束======================== if (BaseClass.UserApi)//是否启用API上传 BaseClass.UseApiFirst { try { if (us != null) //修改 { t.GoodsId = us.GoodsId; UploadPinduoduoDeleteSku upx = new UploadPinduoduoDeleteSku(Name, Shop, us, skuString, skuApiString); upx.pb = pb; upx.Cat1 = t.Cat1; upx.MaxPrice = maxPriceNewx; upx.MinPrice = minPriceNewx; upx.NewUpId = upid; upx.skus = "[" + (string.IsNullOrEmpty(skuStringx) ? skuString : skuStringx.Substring(1)) + "]"; foreach (KeyValuePair key in api.Data) { upx.Data.Add(key.Key, key.Value); } bool success = upx.GetNew(); if (!upx.CanUpload) { Shop.CanUpload = false; Shop.Message = "高风险店铺、惩罚中或需要设置运费模板"; UploadPinduoduoMain.ShopReplaceTemp.Add(Shop); } if (!success) { t.Message = "替换审核失败"; Error("提交异常:" + t.Titlte, t.Message); //setOffProduct(us.GoodsId); //error_msg += " 自动下架成功"; return; } api.Data["cat_id"] = catId.ToString(); } } catch { } if (t.ViGoodsName == "6" || string.IsNullOrEmpty(t.ViGoodsName) && (pb.from_site_id == 1 || pb.from_site_id == 3 || pb.from_site_id == 4 || pb.from_site_id == 6) && UploadPinduoduoMain.MultiPrice <= 8 && UploadPinduoduoMain.Postage <= 0) //if ((!string.IsNullOrEmpty(t.ViGoodsName)&&t.ViGoodsId>0&&t.ViPriceMin>0&&t.ViPriceMax>0) ||( string.IsNullOrEmpty(t.ViGoodsName) && (pb.from_site_id == 1 || pb.from_site_id == 3) && UploadPinduoduoMain.MultiPrice <= 8 && UploadPinduoduoMain.Postage <= 0)) api.FromWeiDian = true; if (UploadPinduoduoMain.isPriceModel) api.FromWeiDian = true; if (us != null) //修改 { t.GoodsId = us.GoodsId; //if (api.Data.ContainsKey("skus")) // api.Data.Remove("skus"); if (Shop.SignErrorTimes.ContainsKey(DateTime.Now.ToString("yyyy-MM-dd")) && Shop.SignErrorTimes[DateTime.Now.ToString("yyyy-MM-dd")] > 3) return; html = api.Updata(); if (html.Contains("该类目商品不允许设置限购,请设置单次限量为999999")) { if (api.Data.ContainsKey("buy_limit")) { api.Data["buy_limit"] = "999999"; api.Data["order_limit"] = "999999"; } else { api.Data.Add("buy_limit", "999999"); api.Data.Add("order_limit", "999999"); } html = api.Updata(); } if (html.Contains("存在多余或重复输入")) { api.Data["goods_desc"] = pb.name; html = api.Updata(); } if (!string.IsNullOrEmpty(html) && html.Contains("\"is_success\"")) { error_msg = "正在检测是否替换成功"; t.Message = error_msg; Error("正在检测:" + t.Titlte, t.Message); Thread.Sleep(1000); long goods_commit_id = BaseRegex.GetLongJson(ref html, "goods_commit_id"); int goods_status = 1; for (int i = 0; goods_commit_id > 0 && i < 300 && goods_status == 1; i++) { html = new PinduoduoApiGetProduct(Shop).GetCommitDetail(goods_commit_id); goods_status = BaseRegex.GetIntJson(ref html, "goods_status"); if (goods_status == 1) Thread.Sleep(1 * 1000); } if (goods_commit_id > 0) new PinduoduoApiGetProduct(Shop).DeleteCommitDetail(goods_commit_id); if (goods_status != 2 && goods_status != 4) { error_msg = "替换审核失败"; goto ErrorEnd; } api = new PinduoduoApiGetProduct(Shop); SetUpProduct(t.GoodsId, upProductId); int siteId = pb.from_site_id; if (t.ViGoodsName == "4") siteId = 4; if (t.ViGoodsName == "5") siteId = 5; if (t.ViGoodsName == "6") siteId = 6; if (string.IsNullOrEmpty(t.ViGoodsName) && (pb.from_site_id == 2 || UploadPinduoduoMain.MultiPrice > 8 || UploadPinduoduoMain.Postage > 0)) { new GetNewTaobaoUpId(Shop).Get(t.GoodsId, t.FromId, imageByte, (int)minPriceNewx, (int)maxPriceNewx, beforeTitle); } else { if (t.ViGoodsId <= 0) { if (beforePriceMin > beforePriceMax) { int tempPrice = beforePriceMin; beforePriceMin = beforePriceMax; beforePriceMax = tempPrice; } html = api.Relationx(t.GoodsId, t.FromId, beforePriceMin, beforePriceMax, expressPrcie, siteId); } else { if (t.ViPriceMin > t.ViPriceMax) { int tempPrice = t.ViPriceMin; t.ViPriceMin = t.ViPriceMax; t.ViPriceMax = tempPrice; } html = api.Relationx(t.GoodsId, t.ViGoodsId, t.ViPriceMin, t.ViPriceMax, t.ViExpressPrice, siteId);//4 京东 5苏宁 } } goto End; } error_msg = BaseRegex.GetStringJson(ref html, "error_msg") + BaseRegex.GetStringJson(ref html, "sub_msg"); ErrorEnd: if (UploadPinduoduoMain.ErrorDown) { new PinduoduoApiGetProduct(Shop).SetOnline(us.GoodsId, false); error_msg += " 自动下架成功"; } t.Message = error_msg; Error("提交异常:" + t.Titlte, t.Message); if (UploadPinduoduoMain.EditDayTemp.ContainsKey(t.GoodsId)) UploadPinduoduoMain.EditDayTemp[t.GoodsId] = DateTime.Now; else UploadPinduoduoMain.EditDayTemp.Add(t.GoodsId, DateTime.Now); string tempFile = "temp/upsame/" + Shop.ShopName + "edit.tjm"; temp = t.GoodsId + "," + DateTime.Now.ToString("yyyy-MM-dd") + "\r\n"; FileBase.AppendAllText(tempFile, temp); return; } //goto UserMmc;//使用第三方 if (Shop.SignErrorTimes.ContainsKey(DateTime.Now.ToString("yyyy-MM-dd")) && Shop.SignErrorTimes[DateTime.Now.ToString("yyyy-MM-dd")] > 3) return; #region 非微店模拟上家的,比较加价前sku最高和最低价和加价后sku最高和最低价格,超过108%去取微店缓存,如果取不到就报错 if (t.ViGoodsId <= 0) { if (beforePriceMin > beforePriceMax) { int tempPrice = beforePriceMin; beforePriceMin = beforePriceMax; beforePriceMax = tempPrice; } // 上家商品高低价格 int minFromProductPrice = beforePriceMin; int maxFromProcuctPrice = beforePriceMax; int minAfterProductPrice = 999999; int maxAfterProcuctPrice = 0; // 加价后商品高低价格 if (pb.SkuMaps.Count > 0) { minAfterProductPrice = pb.SkuMaps.Min(s => s.new_price); maxAfterProcuctPrice = pb.SkuMaps.Max(s => s.new_price); } else { minAfterProductPrice = maxAfterProcuctPrice = Convert.ToInt32(pb.price * 100); } if (minAfterProductPrice > minFromProductPrice * 1.08M + expressPrcie * 100 || maxAfterProcuctPrice > maxFromProcuctPrice * 1.08M + expressPrcie * 100) { var weidianCaches = ServerTemp.GetWeiDianCache(pb); weidianCaches = ServerTemp.FilteWeiDianProducts(weidianCaches, minAfterProductPrice * 93 / 100, maxAfterProcuctPrice * 93 / 100); if (weidianCaches.Count > 0) { t.ViGoodsName = "6"; t.ViGoodsId = Convert.ToInt64(weidianCaches[0].Item1); t.ViPriceMin = weidianCaches[0].Item2; t.ViPriceMax = weidianCaches[0].Item3; t.ViExpressPrice = 0; } else { Error("提交异常:" + t.Titlte, "商品加价差超过平台允许"); return; } } } #endregion //if (UploadPinduoduoMain.isDraft) //{ // html = api.AddDraft(); //} html = api.AddNew(); if (UploadPinduoduoMain.isMaxPrice&&html.Contains("价格")) { string skulist = api.Data["sku_list"]; long maxPrice = 0; var maxitem = ""; var mc = BaseRegex.GetMatchRegex(ref skulist, @"[,]?\{[\w\W]+?\}"); for (int i = 0;mc!=null&&i < mc.Count; i++) { var item = mc[i].Groups[0].Value; long multi= BaseRegex.GetLongJson(ref item, "multi_price"); if (multi > maxPrice) { maxPrice = multi; maxitem = item; } } skulist = skulist.Replace(maxitem,""); api.Data["sku_list"] = skulist; html = api.AddNew(); } //if (!html.Contains("goods_id") &&UploadPinduoduoMain.LowPriceSku && UploadPinduoduoMain.isUpSku) //{ // string skuStr = api.Data["sku_list"];//skuMinString // string specid = BaseRegex.GetMatchRegexString(ref skuMinString, @"""spec_id_list"":""\[([^}]+)\]"""); // var mc = BaseRegex.GetMatchRegex(ref skuStr, @"{[^}]+""spec_id_list"":""\["+specid+@"\]""}"); // var item = mc[0].Groups[0].Value; // skuStr = skuStr.Replace(item,skuMinString); // api.Data["sku_list"] = skuStr; // html = api.AddNew(); //} if (html.Contains("协议")) { string urlAdd = "https://mms.pinduoduo.com/earth/api/protocol/signProtocol"; string dataAdd = "{\"type\":0,\"signedStatus\":1}"; string htmlAdd = GetPostTaobaoHtml.UploadTaobaoPost(urlAdd, "https://mms.pinduoduo.com/mallcenter/protocol/index", true, dataAdd, Shop.Cookies); html = api.AddNew(); } if (html.Contains("分类调整已失效")) { FromTitleToCat.UserApi = true; FromTitleToCat.inShop = null; FromTitleToCat ft = new FromTitleToCat(); ft.TaobaoProduct = new TaobaoProductBase(); ft.Title = pb.name; ft.TaobaoProduct.Titlte = pb.name; ft.TaobaoProduct.FromId = pb.from_id; ft.TaobaoCatId = pb.from_cat_id; ft.JustGetCat = true; ft.AgainCat = true; ft.Get(); if (!string.IsNullOrEmpty(ft.Cat1) && ft.Cat1 != "0") { pb.cat1 = int.Parse(ft.Cat1); pb.cat2 = int.Parse(ft.Cat2); pb.cat3 = int.Parse(ft.Cat3); pb.cat4 = int.Parse(ft.Cat4); int cat3 = int.Parse(ft.Cat3); int cat4= pb.cat4 = int.Parse(ft.Cat4); catId = cat4 > 0 ? cat4 : cat3; //catId = PinduoduoCatList.GetNewCat3(catId); api.Data["cat_id"] = catId.ToString(); api.Data.Remove("goods_properties"); string goods_properties = UploadPinduoduoProperties.GetNew(catId, pb.cat1, ref pb, ref Shop, out mustCode, true); if (goods_properties.Length > 0) //by ttzhao 2020.6.29 api.Data.Add("goods_properties", "[" + goods_properties.Substring(1) + "]"); html = api.AddNew(); } ft.AgainCat = false; } if (html.Contains("流行元素校验错误:最多可选1个")) { var template = UploadPinduoduoProperties.CatTemplate[catId].open_api_response; var p = template.properties.Find(px => px.name.Contains("流行元素") || px.name_alias.Contains("流行元素")); string goods_properties = api.Data["goods_properties"]; api.Data.Remove("goods_properties"); var mc = BaseRegex.GetMatchRegex(ref goods_properties, @",{""template_pid"":" + p.id + @",[\w\W]+?}"); var item = mc[0].Groups[0].Value; goods_properties = goods_properties.Replace(item, ""); api.Data["goods_properties"] = goods_properties; html = api.AddNew(); } //if (!string.IsNullOrEmpty(html) && html.Contains("当前运费模板已绑定商品数超过限制,请更换运费模板")) //增加"请选择配送地区"的条件 by ttzhao 2020.6.23 if (!string.IsNullOrEmpty(html) && (html.Contains("当前运费模板已绑定商品数超过限制,请更换运费模板") || html.Contains("请选择配送地区"))) { Shop.ExpressId = new UpdatePinduoduoExpressSet().GetRandx(Shop.Cookies, Shop.MallId, Shop); if (Shop.ExpressId == 0) { Thread.Sleep(10000); Shop.ExpressId = new UpdatePinduoduoExpressSet().GetRandx(Shop.Cookies, Shop.MallId, Shop); } if (Shop.ExpressId == 0) { LogSave.Add(Name, "未找到新运费模板"); Shop.Message = "运费模板超过商品数限制,请设置新的运费模板"; UploadPinduoduoMain.ShopTemp.Add(Shop); return; } api.Data.Remove("cost_template_id"); api.Data["cost_template_id"] = Shop.ExpressId.ToString(); html = api.AddNew(); } if (!string.IsNullOrEmpty(html) && html.Contains("对联分类因")) { api.Data["cat_id"] = "19511"; html = api.AddNew(); } if (!string.IsNullOrEmpty(html) && html.Contains("红包/利是封分类因")) { api.Data["cat_id"] = "19497"; html = api.AddNew(); } if (!string.IsNullOrEmpty(html) && html.Contains("该类目下假一罚十必选")) { api.Data["is_folt"] = "true"; html = api.AddNew(); } if (html.Contains("请输入必填规格:电池容量")) { var template = UploadPinduoduoProperties.CatTemplate[catId].open_api_response; var p = template.properties.Find(px => px.name.Contains("电池容量") || px.name_alias.Contains("电池容量")); string goods_properties = api.Data["goods_properties"]; api.Data.Remove("goods_properties"); var porps = pb.Props.Find(pr => pr.name.Contains("容量")); var tempplaeItem= template.properties.Find(pr => pr.name.Contains("容量")|| pr.name_alias.Contains("容量")); if (porps != null) { temp = ""; for (int i = 0; i < porps.Values.Count; i++) { var c = porps.Values[i]; var v = p.values.Find(vt => vt.spec_id == long.Parse(c.id)); temp += ",{\"template_pid\":"+ tempplaeItem.id+ ",\"vid\":" + v.vid + ",\"value\":\"\",\"value_unit\":\"\",\"parent_spec_id\":"+ tempplaeItem.spec_id+ ",\"spec_id\":" + c.id + "}"; } properties = properties + temp; api.Data.Add("goods_properties", "[" + properties.Substring(1) + "]"); html = api.AddNew(); } } if (html.Contains("属性净含量校验错误:无效单位")) { var template = UploadPinduoduoProperties.CatTemplate[catId].open_api_response; var p = template.properties.Find(px => px.name.Contains("产品重量") || px.name_alias.Contains("净含量")); string goods_properties = api.Data["goods_properties"]; api.Data.Remove("goods_properties"); var mc = BaseRegex.GetMatchRegex(ref goods_properties, @",{""template_pid"":" + p.id + @",[\w\W]+?}"); var item = mc[0].Groups[0].Value; var itemreplace = item.Replace("\"value_unit\":\"g\"", "\"value_unit\":\"mL\""); goods_properties = goods_properties.Replace(item, ""); api.Data["goods_properties"] = goods_properties; html = api.AddNew(); } if (html.Contains("属性生产日期校验错误") && html.Contains("不可选")) { var template = UploadPinduoduoProperties.CatTemplate[catId].open_api_response; var p = template.properties.Find(px => px.name.Contains("生产日期")); string goods_properties = api.Data["goods_properties"]; api.Data.Remove("goods_properties"); var mc = BaseRegex.GetMatchRegex(ref goods_properties, @",{""template_pid"":" + p.id + @",[\w\W]+?}"); var item = mc[0].Groups[0].Value; goods_properties = goods_properties.Replace(item, ""); api.Data["goods_properties"] = goods_properties; html = api.AddNew(); //html = ResetProp(catId,"生产日期",api); } if (html.Contains("属性保质期校验错误:属性值") && html.Contains("不可选")) { var template = UploadPinduoduoProperties.CatTemplate[catId].open_api_response; var p = template.properties.Find(px => px.name.Contains("保质期")); string goods_properties = api.Data["goods_properties"]; api.Data.Remove("goods_properties"); var mc = BaseRegex.GetMatchRegex(ref goods_properties, @",{""template_pid"":" + p.id + @",[\w\W]+?}"); var item = mc[0].Groups[0].Value; goods_properties = goods_properties.Replace(item, ""); api.Data["goods_properties"] = goods_properties; html = api.AddNew(); } if (html.Contains("属性化妆品批准文号校验错误:该属性必须填写")) { var template = UploadPinduoduoProperties.CatTemplate[catId].open_api_response; var p = template.properties.Find(px => px.name.Contains("批准文号")); string goods_properties = api.Data["goods_properties"]; api.Data.Remove("goods_properties"); string lastitem = ",{\"template_pid\":" + p.id + ",\"vid\":0,\"value\":\"2018004353\",\"value_unit\":\"\"}"; goods_properties = goods_properties.Substring(0, goods_properties.Length - 1) + lastitem + "]"; api.Data["goods_properties"] = goods_properties; html = api.AddNew(); } if (html.Contains("属性化妆品批准文号校验错误:该属性必须填写")) { var template = UploadPinduoduoProperties.CatTemplate[catId].open_api_response; var p = template.properties.Find(px => px.name.Contains("批准文号")); string goods_properties = api.Data["goods_properties"]; api.Data.Remove("goods_properties"); string lastitem = ",{\"template_pid\":" + p.id + ",\"vid\":0,\"value\":\"2018004353\",\"value_unit\":\"\"}"; goods_properties = goods_properties.Substring(0, goods_properties.Length - 1) + lastitem + "]"; api.Data["goods_properties"] = goods_properties; html = api.AddNew(); } if (html.Contains("属性化妆品批准文号校验错误")) { var template = UploadPinduoduoProperties.CatTemplate[catId].open_api_response; var p = template.properties.Find(px => px.name.Contains("是否为特殊用途化妆品")); string goods_properties = api.Data["goods_properties"]; api.Data.Remove("goods_properties"); var mc = BaseRegex.GetMatchRegex(ref goods_properties, @",{""template_pid"":" + p.id + @",[\w\W]+?}"); if (mc != null && mc.Count == 1) { var item = mc[0].Groups[0].Value; string lastitem = ",{\"template_pid\":" + p.id + ",\"vid\":325891,\"value\":\"是\",\"value_unit\":\"\"}"; goods_properties = goods_properties.Replace(item, lastitem); } api.Data["goods_properties"] = goods_properties; html = api.AddNew(); } if (html.Contains("属性厂名不符合关联规则,不允许填写")) { var template = UploadPinduoduoProperties.CatTemplate[catId].open_api_response; var p = template.properties.Find(px => px.name.Contains("厂名")); string goods_properties = api.Data["goods_properties"]; api.Data.Remove("goods_properties"); var mc = BaseRegex.GetMatchRegex(ref goods_properties, @",{""template_pid"":" + p.id + @",[\w\W]+?}"); if (mc != null && mc.Count == 1) { var item = mc[0].Groups[0].Value; goods_properties = goods_properties.Replace(item, ""); p = template.properties.Find(px => px.name.Contains("厂址")); mc = BaseRegex.GetMatchRegex(ref goods_properties, @",{""template_pid"":" + p.id + @",[\w\W]+?}"); } if (mc != null && mc.Count == 1) { var item = mc[0].Groups[0].Value; goods_properties = goods_properties.Replace(item, ""); } api.Data["goods_properties"] = goods_properties; html = api.AddNew(); } if (FromTitleToCat.MainCat[1].Value1.Contains(t.Cat1.ToString()) && (html.Contains("属性成分含量校验错误") || html.Contains("材质") || html.Contains("面料"))) { api.Data.Remove("goods_properties"); string goods_properties = UploadPinduoduoProperties.GetNew(catId, t.Cat1, ref pb, ref Shop, out mustCode, true); if (goods_properties.Length > 0) //by ttzhao 2020.6.29 api.Data.Add("goods_properties", "[" + goods_properties.Substring(1) + "]"); html = api.AddNew(); } if (html.Contains("属性净含量校验错误:无效单位")) { string goods_properties = api.Data["goods_properties"]; api.Data.Remove("goods_properties"); goods_properties = goods_properties.Replace("克", "g"); api.Data["goods_properties"] = goods_properties; html = api.AddNew(); } if (html.Contains("3C认证证书编号")) { error_msg = BaseRegex.GetMatchRegexString(ref html, @"""3C认证证书编号:([\w\W]+?),格式不正确"""); if (!string.IsNullOrEmpty(error_msg)) { string goods_properties = api.Data["goods_properties"]; api.Data.Remove("goods_properties"); string[] scs = { "2018152203021070", "2013010717593387", "2016010717879090", "2017152204017993" }; int randx = new Random(Guid.NewGuid().GetHashCode()).Next(0, scs.Length); goods_properties = goods_properties.Replace(error_msg.Trim(), scs[randx]); api.Data["goods_properties"] = goods_properties; html = api.AddNew(); } } if (html.Contains("属性3C认证证书编号不符合关联规则")) { var template = UploadPinduoduoProperties.CatTemplate[catId].open_api_response; var p = template.properties.Find(px => px.name.Contains("3C认证")); string goods_properties = api.Data["goods_properties"]; api.Data.Remove("goods_properties"); var mc = BaseRegex.GetMatchRegex(ref goods_properties, @",{""template_pid"":" + p.id + @",[\w\W]+?}"); var item = mc[0].Groups[0].Value; goods_properties = goods_properties.Replace(item, ""); api.Data["goods_properties"] = goods_properties; html = api.AddNew(); } if (html.Contains("属性工业产品生产许可证编号不符合关联规则")) { var template = UploadPinduoduoProperties.CatTemplate[catId].open_api_response; var p = template.properties.Find(px => px.name.Contains("工业")); string goods_properties = api.Data["goods_properties"]; api.Data.Remove("goods_properties"); var mc = BaseRegex.GetMatchRegex(ref goods_properties, @",{""template_pid"":" + p.id + @",[\w\W]+?}"); var item = mc[0].Groups[0].Value; goods_properties = goods_properties.Replace(item, ""); api.Data["goods_properties"] = goods_properties; html = api.AddNew(); } if (html.Contains("该类目商品不允许设置限购,请设置单次限量为999999")) { if (api.Data.ContainsKey("buy_limit")) { api.Data["buy_limit"] = "999999"; api.Data["order_limit"] = "999999"; } else { api.Data.Add("buy_limit", "999999"); api.Data.Add("order_limit", "999999"); } html = api.AddNew(); } if (html.Contains("存在多余或重复输入") && !string.IsNullOrEmpty(mustCode)) { var str1 = api.Data["sku_list"]; api.Data["goods_properties"] = "[" + mustCode.Substring(1) + "]"; api.Data["sku_list"] = str1; html = api.AddNew(); } if (html.Contains("调用过于频繁")) { Thread.Sleep(2000); html = api.AddNew(); Thread.Sleep(2000); } if (html.Contains("调用过于频繁")) { Thread.Sleep(2000); html = api.AddNew(); Thread.Sleep(2000); } if (html.Contains("调用过于频繁")) { Thread.Sleep(5000); html = api.AddNew(); Thread.Sleep(1000); } Thread.Sleep(200); api.Data.Remove("goods_properties"); error_msg = BaseRegex.GetStringJson(ref html, "error_msg") + BaseRegex.GetStringJson(ref html, "sub_msg"); if (error_msg.Contains("该属性必须填写")) { } //if (error_msg.Contains("access_token") || error_msg.Contains("client_id")) //{ // Shop.CanUpload = false; // Shop.Message = error_msg; // UploadPinduoduoMain.ShopTemp.Add(Shop); // Error("提交异常:", error_msg); // return; //} if (!string.IsNullOrEmpty(html) && html.Contains("\"goods_id\":")) { if (UploadPinduoduoMain.ShopTitles.ContainsKey(Shop.ShopName)) UploadPinduoduoMain.ShopTitles[Shop.ShopName].Add(t.Titlte); t.GoodsId = BaseRegex.GetLongJson(ref html, "goods_id"); goodsId = t.GoodsId; SetUpProduct(t.GoodsId, upProductId, true); api = new PinduoduoApiGetProduct(Shop); int siteId = pb.from_site_id; if (t.ViGoodsName == "1") siteId = 1; if (t.ViGoodsName == "4") siteId = 4; if (t.ViGoodsName == "5") siteId = 5; if (t.ViGoodsName == "6") siteId = 6; if (string.IsNullOrEmpty(t.ViGoodsName) && (pb.from_site_id == 2 || UploadPinduoduoMain.MultiPrice > 8 || UploadPinduoduoMain.Postage > 0)) { new GetNewTaobaoUpId(Shop).Get(t.GoodsId, t.FromId, imageByte, (int)minPriceNewx, (int)maxPriceNewx, beforeTitle); } else { if (t.ViGoodsId <= 0) { if (beforePriceMin > beforePriceMax) { int tempPrice = beforePriceMin; beforePriceMin = beforePriceMax; beforePriceMax = tempPrice; } html = api.Relationx(t.GoodsId, t.FromId, beforePriceMin, beforePriceMax, pb.express_price, siteId); } else { if (t.ViPriceMin > t.ViPriceMax) { int tempPrice = t.ViPriceMin; t.ViPriceMin = t.ViPriceMax; t.ViPriceMax = tempPrice; } html = api.Relationx(t.GoodsId, t.ViGoodsId, t.ViPriceMin, t.ViPriceMax, t.ViExpressPrice, siteId);//4 京东 5苏宁 } int relationCount = 1; Again: if (!html.Contains("\"is_success\":true") && html.Contains("调用过于频繁")) { int randx = new Random(Guid.NewGuid().GetHashCode()).Next(10, 20); Thread.Sleep(randx * 1000); html = api.Relationx(t.GoodsId, t.ViGoodsId, t.ViPriceMin, t.ViPriceMax, t.ViExpressPrice, siteId);//4 京东 5苏宁 } if (!html.Contains("\"is_success\":true") && html.Contains("调用过于频繁")) { relationCount++; if (relationCount < 10) goto Again; } if (!html.Contains("\"is_success\":true")) { error_msg = "关联异常:" + BaseRegex.GetStringJson(ref html, "error_msg"); Error("关联异常:" + t.Titlte, error_msg); } } if (UploadPinduoduoMain.WhiteBack && !string.IsNullOrEmpty(imageUrlx)) { //if (UploadPinduoduoMain.imgList.Count > 100) //{ // Thread.Sleep(3000); // LogSave.Add(Name, "白底图队列已满,等待3秒继续"); //} UploadPinduoduoMain.imgList.Add(Shop.ShopName + "@" + goodsId + "@" + imageUrlx); } goto End; } if (!string.IsNullOrEmpty(error_msg) && error_msg.Contains("上限")) { FullToday = true; Shop.CanUpload = false; Shop.Message = error_msg; UploadPinduoduoMain.ShopTemp.Add(Shop); Error("提交异常:" + t.Titlte, error_msg); return; } if (!string.IsNullOrEmpty(error_msg) && error_msg.Contains("分类调整")) { Error("分类失效:" + catId + ":" + error_msg, error_msg); return; } if (!string.IsNullOrEmpty(error_msg) && (error_msg.Contains("惩罚") || error_msg.Contains("新协议") || error_msg.Contains("店铺资质") && !error_msg.Contains("出于监管要求") || error_msg.Contains("通过审核"))) { Punish = true; Shop.CanUpload = false; Shop.Message = error_msg; UploadPinduoduoMain.ShopTemp.Add(Shop); Error("提交异常:" + t.Titlte, error_msg); return; } if (error_msg.Contains("授权失败")) { Shop.CanUpload = false; Shop.Message = error_msg; if (us == null) UploadPinduoduoMain.ShopTemp.Add(Shop); else UploadPinduoduoMain.ShopReplaceTemp.Add(Shop); } Error("提交异常:" + t.Titlte, error_msg); return; } UserMmc: //模拟接口 if (Shop.UpCount++ > 150) { LogSave.Add(Name, "店铺" + Shop.ShopName + ",上传数据已经达到上限"); return; } long pinId; if (us != null) { url = "https://mms.pinduoduo.com/glide/v2/mms/edit/commit/create_by_sn"; data = "{\"goods_id\":" + us.GoodsId + "}"; html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data, Shop.Cookies); pinId = BaseRegex.GetLongJson(ref html, "goods_commit_id"); if (pinId == 0) { Thread.Sleep(30 * 1000); html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data, Shop.Cookies); pinId = BaseRegex.GetLongJson(ref html, "goods_commit_id"); } } else { url = "https://mms.pinduoduo.com/glide/v2/mms/edit/commit/create_new"; data = "{}"; html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data, Shop.Cookies); pinId = BaseRegex.GetLongJson(ref html, "goods_commit_id"); if (pinId == 0) { Thread.Sleep(30 * 1000); html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data, Shop.Cookies); pinId = BaseRegex.GetLongJson(ref html, "goods_commit_id"); } } if (!string.IsNullOrEmpty(html) && html.Contains("达到上限")) { error_msg = BaseRegex.GetStringJson(ref html, "error_msg") + BaseRegex.GetStringJson(ref html, "sub_msg"); FullToday = true; Shop.CanUpload = false; Shop.Message = error_msg; UploadPinduoduoMain.ShopTemp.Add(Shop); Error("提交异常:" + t.Titlte, error_msg); return; } if (pinId == 0) { Error("创建异常:" + t.Titlte + " 无法获取编辑ID ", "无法获取编辑ID"); return; } if (",2,6586,6785,6883,6758,6536,6630,6398,".Contains("," + t.Cat1 + ","))//食品 { addContent += ",\"shelf_life\":300,\"start_production_date\":" + BaseClass.GetTime(DateTime.Now.AddDays(-5)) + ",\"end_production_date\":" + BaseClass.GetTime(DateTime.Now); } else { addContent += ",\"shelf_life\":\"\",\"start_production_date\":\"\",\"end_production_date\":\"\""; } string strTime = BaseClass.GetTime(DateTime.Now).ToString() + "000"; string str = ""; for (int i = 0; i < 16; i++) { str += new Random(Guid.NewGuid().GetHashCode()).Next(9); } string strToken = str + "-" + strTime; string strNumber = ""; string temp2 = strTime + "," + strToken + "," + strNumber; string fun2 = string.Format(@"getEncode('{0}','{1}','{2}')", strTime, strToken, strNumber); string codex = ""; //using (IJsEngine jsEngine = new V8JsEngine()) //{ // jsEngine.Execute(GetProductOnlineClass.JsCodeGetSms); // codex = jsEngine.CallFunction("aaa", "").ToString(); //} string goodProperties = UploadPinduoduoProperties.GetNew(catId, t.Cat1, ref pb, ref Shop, out mustCode); if (!string.IsNullOrEmpty(goodProperties)) goodProperties = "[" + goodProperties.Substring(1) + "]"; else goodProperties = "[]"; long limit = 999999;//UploadPinduoduoMain.BuyLimit UploadPinduoduoMain.OrderLimit //content = content.Replace("阳台", "").Replace("成人", "").Replace("老人", "").Replace("定金", "").Replace("抽奖", "").Replace("VX", "").Replace("★", "").Replace("?", ""); string dataUp = "{\"cat_id\":" + catId + ",\"crawlerInfo\":\"" + codex + "\",\"goods_type\":\"1\",\"country\":\"\",\"country_id\":\"\"," + "\"warehouse\":\"\",\"customs\":\"\",\"is_customs\":0,\"is_pre_sale\":0,\"pre_sale_time\":\"\"," + "\"is_refundable\":1,\"shipment_limit_second\":172800,\"event_type\":\"0\",\"is_folt\":\"1\"," + "\"goods_name\":\"" + pb.name + "\",\"tiny_name\":\"" + tiny_name + "\",\"market_price\":" + market_price + ",\"share_desc\":\"" + content + ":\",\"goods_desc\":\"" + content + "\"," + "\"image_url\":\"\"," + "\"gallery\":[" + imageString + "],\"cost_template_id\":\"" + Shop.ExpressId.ToString() + "\",\"weight\":\"1.00\",\"warm_tips\":\"\"," + "\"skus\":[" + (string.IsNullOrEmpty(skuStringx) ? skuString : skuStringx.Substring(1)) + "],\"out_goods_sn\":\"" + out_goods_id + "\",\"groups\":{\"customer_num\":" + UploadPinduoduoMain.GroupCount + "," + "\"buy_limit\":" + limit + ",\"order_limit\":" + limit + "},\"production_license\":\"\",\"production_standard_number\":\"\"" + addContent + ",\"goods_commit_id\":\"" + pinId + "\",\"goods_properties\":" + goodProperties + "}"; url = "https://mms.pinduoduo.com/glide/v2/mms/edit/commit/update"; html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, dataUp, Cookies); error_msg = BaseRegex.GetStringJson(ref html, "error_msg"); if (string.IsNullOrEmpty(error_msg)) error_msg = BaseRegex.GetStringJson(ref html, "errorMsg"); error_msg += BaseRegex.GetStringJson(ref html, "sub_msg"); if (string.IsNullOrEmpty(html) || !html.Contains("{\"success\":")) { Thread.Sleep(20 * 1000); if (!string.IsNullOrEmpty(error_msg) && error_msg.Contains("规格错误")) { Error("保存异常:" + t.Titlte + " " + error_msg, error_msg); return; } if (!string.IsNullOrEmpty(error_msg) && error_msg.Contains("过于频繁")) { LogSave.Add(Name, "太快了,休眠1分钟"); Thread.Sleep(100 * 1000); } html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, dataUp, Cookies); error_msg = BaseRegex.GetStringJson(ref html, "error_msg"); if (string.IsNullOrEmpty(error_msg)) error_msg = BaseRegex.GetStringJson(ref html, "errorMsg"); } if (string.IsNullOrEmpty(html) || !html.Contains("{\"success\":true")) { Thread.Sleep(20 * 1000); if (!string.IsNullOrEmpty(error_msg) && error_msg.Contains("过于频繁")) Thread.Sleep(100 * 1000); html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, dataUp, Cookies); error_msg = BaseRegex.GetStringJson(ref html, "error_msg"); if (string.IsNullOrEmpty(error_msg)) error_msg = BaseRegex.GetStringJson(ref html, "errorMsg"); error_msg += BaseRegex.GetStringJson(ref html, "sub_msg"); } if (string.IsNullOrEmpty(html) || !html.Contains("{\"success\":true")) { Error("保存异常:" + t.Titlte + " " + error_msg, error_msg); return; } url = "https://mms.pinduoduo.com/glide/v2/mms/query/goods/is_commit_available/" + pinId; html = GetPostTaobaoHtml.UploadTaobao(url, refere, true, Cookies); error_msg = BaseRegex.GetStringJson(ref html, "error_msg"); if (string.IsNullOrEmpty(error_msg)) error_msg = BaseRegex.GetStringJson(ref html, "errorMsg"); if (string.IsNullOrEmpty(html) || !html.Contains("{\"success\":true")) { if (!string.IsNullOrEmpty(error_msg) && error_msg.Contains("过于频繁")) Thread.Sleep(100 * 1000); Thread.Sleep(10 * 1000); html = GetPostTaobaoHtml.UploadTaobao(url, refere, true, Cookies); error_msg = BaseRegex.GetStringJson(ref html, "error_msg"); if (string.IsNullOrEmpty(error_msg)) error_msg = BaseRegex.GetStringJson(ref html, "errorMsg"); } if (string.IsNullOrEmpty(html) || !html.Contains("{\"success\":true")) { Error("保存异常,校验失败:" + t.Titlte, error_msg); return; } url = "https://mms.pinduoduo.com/glide/v2/mms/query/commit/detail/" + pinId; html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, "", Cookies); t.GoodsId = BaseRegex.GetLongJson(ref html, "goods_id"); url = "https://mms.pinduoduo.com/glide/v2/mms/edit/commit/submit"; //using (IJsEngine jsEngine = new V8JsEngine()) //{ // jsEngine.Execute(GetProductOnlineClass.JsCodeGetSms); // codex = jsEngine.CallFunction("aaa", "").ToString(); //} data = "{\"goods_commit_id\":\"" + pinId + "\",\"crawlerInfo\":\"" + codex + "\"}"; html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, Cookies); error_msg = BaseRegex.GetStringJson(ref html, "error_msg"); if (string.IsNullOrEmpty(error_msg)) error_msg = BaseRegex.GetStringJson(ref html, "errorMsg"); if (string.IsNullOrEmpty(html) || !html.Contains("{\"success\":true")) { if (!string.IsNullOrEmpty(error_msg) && error_msg.ToLower().Contains("sku")) { Error("提交异常:" + t.Titlte, error_msg); return; } if (!string.IsNullOrEmpty(error_msg) && error_msg.Contains("敏感词")) { Error("提交异常:" + t.Titlte, error_msg); return; } //if (!string.IsNullOrEmpty(error_msg) && error_msg.Contains("账号安全")) //{ // FullToday = true; // Shop.CanUpload = false; // Error("提交异常:" + t.Titlte, error_msg); // return; //} if (!string.IsNullOrEmpty(error_msg) && error_msg.Contains("数量上限")) { FullToday = true; Shop.CanUpload = false; Error("提交异常:" + t.Titlte, error_msg); return; } if (!string.IsNullOrEmpty(error_msg) && (error_msg.Contains("二级惩罚") || error_msg.Contains("店铺资质") || error_msg.Contains("通过审核"))) { Punish = true; Shop.CanUpload = false; Error("提交异常:" + t.Titlte, error_msg); return; } Thread.Sleep(10 * 1000); html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, Cookies); error_msg = BaseRegex.GetStringJson(ref html, "error_msg"); if (string.IsNullOrEmpty(error_msg)) error_msg = BaseRegex.GetStringJson(ref html, "errorMsg"); } if (string.IsNullOrEmpty(html) || !html.Contains("{\"success\":true")) { Error("提交异常:" + t.Titlte, error_msg); return; } if (UploadPinduoduoMain.SingleThreadCount > 1 || !BaseClass.UserApi) Thread.Sleep(10 * 1000); else Thread.Sleep(5 * 1000); End: try { if (UploadPinduoduoMain.EditDayTemp.ContainsKey(t.GoodsId)) UploadPinduoduoMain.EditDayTemp[t.GoodsId] = DateTime.Now; else UploadPinduoduoMain.EditDayTemp.Add(t.GoodsId, DateTime.Now); string shopName = string.IsNullOrEmpty(BaseClass.ShopName) && Shop != null ? Shop.Name : BaseClass.ShopName; if (UploadProductAllShop.UpToDown) { if (!UploadProductAllShop.JustUpload.ContainsKey(shopName)) UploadProductAllShop.JustUpload.Add(shopName, new List()); if (!UploadProductAllShop.JustUpload[shopName].Contains(t.GoodsId)) UploadProductAllShop.JustUpload[shopName].Add(t.GoodsId); } string tempFile = "temp/upsame/" + shopName + "edit.tjm"; temp = t.GoodsId + "," + DateTime.Now.ToString("yyyy-MM-dd") + "\r\n"; FileBase.AppendAllText(tempFile, temp); } catch { } Shop.UpCount++; if (us == null) UploadPinduoduoMain.ShopTemp.Add(Shop); else UploadPinduoduoMain.ShopReplaceTemp.Add(Shop); t.Message = "提交成功"; if (!string.IsNullOrEmpty(error_msg) && error_msg.Contains("关联异常")) { UploadPinduoduoMain.RelErrorMessage = ""; if (UploadPinduoduoMain.RelErrorCount > 10) { UploadPinduoduoMain.RelErrorMessage = "平台服务出现异常,\r\n"+ Md5Base.EncryptEncode(Shop.ClientId); } UploadPinduoduoMain.RelErrorCount++; if (!UploadPinduoduoMain.isDefaultMoni) { if (api == null) api = new PinduoduoApiGetProduct(Shop); html = api.SetOnline(t.GoodsId, false); Thread.Sleep(3000); html = api.DelGoods("[" + t.GoodsId + "]"); } Error("提交异常:" + t.Titlte, "关联异常:" + error_msg); } else { Error("提交成功:" + t.Titlte, t.Message); } Success = true; } public string ResetProp(int catId, string propname, PinduoduoApiGetProduct api) { var template = UploadPinduoduoProperties.CatTemplate[catId].open_api_response; var p = template.properties.Find(px => px.name.Contains(propname)); string goods_properties = api.Data["goods_properties"]; api.Data.Remove("goods_properties"); var mc = BaseRegex.GetMatchRegex(ref goods_properties, @",{""template_pid"":" + p.id + @",[\w\W]+?}"); var item = mc[0].Groups[0].Value; goods_properties = goods_properties.Replace(item, ""); api.Data["goods_properties"] = goods_properties; string html = api.AddNew(); return html; } public decimal GetCatTimes(int cat) { decimal times = 0; string url = BaseClass.LoginApiUrl + "?obj=pinbaobao/cat&act=getCatTimes&cat_id=" + cat.ToString(); string data = UserLogin.GetSignaturex(); string html = GetHtml.PostUtf8(url, data); decimal.TryParse(html, out times); if (PinduoduoCatList.NewPriceSpaceCatIdx.ContainsKey(cat)) times = PinduoduoCatList.NewPriceSpaceCatIdx[cat]; return times; } //public static void CutImage() //{ // List ts = new List(); // while (true) // { // if (ImgDic.Count == 0) // { // Thread.Sleep(2000); // continue; // } // var p = ImgDic.FirstOrDefault(); // ImgDic.Remove(p.Key); // CutImage cutImage = new CutImage(Name, Shop); // cutImage.CurrentImage = p; // Threadx.ThreadListWait(ref ts, new Thread(cutImage.CutImageVaule), 20); // Thread.Sleep(200); // } // Threadx.ThreadListWait(ref ts); //} //public static void CutImage() //{ // try // { // GetPostTaobaoHtml.DownLoadImage(imageUrlx, out imageByte); // ImageBuild ib = new ImageBuild(imageByte); // bool isflag = ib.ImageCuteNoLogo(ref imageByte); // if (!isflag) // return; // string html = UploadImgCut(ref imageByte, goodsId); // if (html.Contains("false")) // LogSave.Add(Name, goodsId + "上传白底图失败"); // else // LogSave.Add(Name, goodsId + "上传白底图成功"); // } // catch // { // } //} public bool SetUpProduct(long pid, string upProductId, bool add = false) { string url = BaseClass.LoginApiUrl + "?obj=upshopid/upid&act=insert"; string data = "&pdd_id=" + pid + "&up_id=" + upProductId + "&table=" + (pid % 1024); data += add ? "&add=1" : ""; string html = GetHtml.PostUtf8(url, UserLogin.GetSignaturex(Shop.ShopId, Shop.ShopName) + data); if (html != "ok") { Thread.Sleep(30 * 1000); html = GetHtml.PostUtf8(url, UserLogin.GetSignaturex(Shop.ShopId, Shop.ShopName) + data); } if (html != "ok") { LogSave.Add(Name, "服务器记录" + pid + "上家ID异常,请联系客服"); Thread.Sleep(30 * 1000); } return html == "ok"; } /// 执行JS /// /// 参数体 /// JavaScript代码的字符串 /// public static string ExecuteScript(string sExpression, string sCode) { try { MSScriptControl.ScriptControl scriptControl = new MSScriptControl.ScriptControl(); scriptControl.UseSafeSubset = true; scriptControl.Language = "JScript"; scriptControl.AddCode(sCode); string str = scriptControl.Eval(sExpression).ToString(); return str; } catch (Exception ex) { string str = ex.Message; } return null; } public Dictionary PriceTemp = new Dictionary(); /// /// 白名单加价算法 /// /// /// /// /// public int WhitePriceBuild(decimal price, decimal addPrice, decimal postage, decimal postFree) { decimal addPricex = addPrice + UploadPinduoduoMain.MultiPricex; decimal free = postage + postFree; if (Shop == null)//|| !Shop.Explode { free = 0; if (addPricex > 8) addPricex = 8; } int p = (int)(price * (100 + addPricex) + free * 100); if (UploadPinduoduoMain.RandPrice) p -= Randomx.GetId(0, 10); if (UploadPinduoduoMain.SubCoupon > 0 && !string.IsNullOrEmpty(t.youHuei)) { decimal yh; if (decimal.TryParse(t.youHuei, out yh)) { p -= (int)(yh * 100 * UploadPinduoduoMain.SubCoupon / 100); } } return p; } /// /// 白名单加价算法 /// /// /// /// /// public int WhitePriceBuild(decimal price, decimal addPrice, decimal postFree) { decimal addPricex = addPrice + UploadPinduoduoMain.MultiPricex; decimal free = UploadPinduoduoMain.Postage + postFree; if (Shop == null)//|| !Shop.Explode { free = 0; if (addPricex > 8) addPricex = 8; } int p = (int)(price * (100 + addPricex) + free * 100); if (UploadPinduoduoMain.RandPrice) p -= Randomx.GetId(0, 10); if (UploadPinduoduoMain.SubCoupon > 0 && !string.IsNullOrEmpty(t.youHuei)) { decimal yh; if (decimal.TryParse(t.youHuei, out yh)) { p -= (int)(yh * 100 * UploadPinduoduoMain.SubCoupon / 100); } } return p; } /// /// 设置错误信息 /// /// /// public void Error(string messageShow, string message) { t.Message = message; if (us == null) { UploadPinduoduoMain.ProductTemp.Add(t); } else { UploadPinduoduoMain.ProductReplaceTemp.Add(t); } LogSave.Add(Name, messageShow); } public string UploadImg(string beforUrl, ref byte[] img, bool hadUp) { if (img == null || img.Length == 0) return ""; if (ImageTemp.ContainsKey(beforUrl)) return ImageTemp[beforUrl].Url; string imgUrl = "", html; long urlId = Math.Abs(BaseClass.GetLong(beforUrl)); if (BaseClass.UseApiFirst) { PinduoduoApiGetProduct p = new PinduoduoApiGetProduct(Shop); html = p.UploadImage(img); imgUrl = BaseRegex.GetStringJson(ref html, "image_url"); if (string.IsNullOrEmpty(imgUrl)) { if (!string.IsNullOrEmpty(html) && html.Contains("频繁")) Thread.Sleep(3000); Thread.Sleep(1000); html = p.UploadImage(img); imgUrl = BaseRegex.GetStringJson(ref html, "image_url"); } if (!string.IsNullOrEmpty(imgUrl)) { LogSave.Add(Name, "上传图片:" + imgUrl); if (hadUp) { if (!picUped.ContainsKey(urlId)) picUped.Add(urlId, imgUrl); if (!picsTemp.ContainsKey(urlId)) { try { picsTemp.Add(urlId, imgUrl); } catch { } } } } return imgUrl; } string url = "https://mms.pinduoduo.com/galerie/business/get_signature"; string refere = "https://mms.pinduoduo.com/goods/goods_add/index?id=5146155709&type=edit"; html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, "{\"bucket_tag\":\"mms-material-img\"}", Shop.Cookies);//"{\"bucket_tag\":\"pdd_goods\"}" {\"bucket_tag\":\"pdd_mms\"} //if (html.Contains("非法请求")) //{ // url = "https://mms.pinduoduo.com/galerie/business/get_signature"; // refere = "https://mms.pinduoduo.com/goods/goods_materials"; // string data = "{\"bucket_tag\":\"mms-material-img\"}"; // html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data, Shop.Cookies); // string sign = BaseRegex.GetStringJson(ref html, "signature"); // url = "https://file.pinduoduo.com/v3/store_image"; // refere = "https://mms.pinduoduo.com/goods/goods_materials"; // try // { // string fileName = Randomx.GetId(100000) + ".jpg"; // html = HttpPostDataImage(url, 30000, "image", fileName, img, sign, refere); // imgUrl = BaseRegex.GetStringJson(ref html, "url"); // if (imgUrl.Contains("null")) // imgUrl = ""; // } // catch // { // } //} //if (html.Contains("非法请求")) //{ // string urlx = "https://aid.pinduoduo.com/api/banner-intelligent/material/upload"; // string referex = "https://aid.pinduoduo.com/tools/matting?origin=goods_material"; // try // { // string fileName = Randomx.GetId(100000) + ".jpg"; // html = HttpPostData(urlx, 30000, "file", fileName, img, referex); // imgUrl = BaseRegex.GetStringJson(ref html, "result"); // if (imgUrl.Contains("null")) // imgUrl = ""; // } // catch // { // return ""; // } //} //if (html.Contains("非法请求"))//上传图片到客服chat文件夹里面了,可以用暂时不用 //{ // url = "https://mms.pinduoduo.com/chats/malls/" + Shop.MallId + "/get_upload_sign"; // refere = "https://mms.pinduoduo.com/chat-merchant/index.html"; // html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, "", Shop.Cookies); // //url = "https://mms.pinduoduo.com/plateau/file/pre_upload"; // //html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, "{\"chat_type_id\":1,\"file_usage\":1}", Shop.Cookies);//upload_signature //} if (html.Contains("signature")) { string sign = BaseRegex.GetStringJson(ref html, "signature"); if (string.IsNullOrEmpty(sign)) { return ""; } string data = "{\"upload_sign\":\"" + sign + "\",\"image\":\"data:image/jpeg;base64," + Convert.ToBase64String(img) + "\"}"; url = "https://file.yangkeduo.com/v2/store_image"; html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, Shop.Cookies); imgUrl = BaseRegex.GetStringJson(ref html, "url"); } if (string.IsNullOrEmpty(imgUrl)) { PinduoduoApiGetProduct p = new PinduoduoApiGetProduct(Shop); html = p.UploadImage(img); imgUrl = BaseRegex.GetStringJson(ref html, "image_url"); if (string.IsNullOrEmpty(imgUrl)) { if (!string.IsNullOrEmpty(html) && html.Contains("频繁")) Thread.Sleep(3000); Thread.Sleep(1000); html = p.UploadImage(img); imgUrl = BaseRegex.GetStringJson(ref html, "image_url"); } } if (!string.IsNullOrEmpty(imgUrl)) { LogSave.Add(Name, "上传图片:" + imgUrl); if (hadUp) { if (!picUped.ContainsKey(urlId)) picUped.Add(urlId, imgUrl); if (!picsTemp.ContainsKey(urlId)) { try { picsTemp.Add(urlId, imgUrl); } catch { } } } } LogSave.Add(Name, "上传图片:" + imgUrl); return imgUrl; } private string HttpPostDataImage(string url, int timeOut, string fileKeyName, string fileName, byte[] file, string sign, string referer) { string responseContent = ""; string cookie = Shop.Cookies; if (string.IsNullOrEmpty(cookie)) { return ""; } var memStream = new MemoryStream(); var webRequest = (HttpWebRequest)WebRequest.Create(url); // 边界符 var boundary = "----WebKitFormBoundary2yjyehYBjxWIyeiH"; // 边界符 var beginBoundary = Encoding.ASCII.GetBytes("--" + boundary + "\r\n"); // 边界符 var secondBoundary = Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n"); // 最后的结束符 var endBoundary = Encoding.ASCII.GetBytes("--" + boundary + "--"); // 设置属性 webRequest.Method = "POST"; webRequest.KeepAlive = true; webRequest.ContentType = "multipart/form-data; boundary=" + boundary; webRequest.Referer = referer; webRequest.Accept = "*/*"; webRequest.UserAgent = BaseClass.ChromeUserAgent; webRequest.Headers.Add("Cookie", cookie); webRequest.Headers.Add("Origin", @"https://mms.pinduoduo.com"); webRequest.Headers.Add("Sec-Fetch-Site", @"same-site"); webRequest.Headers.Add("Sec-Fetch-Mode", @"cors"); webRequest.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip, deflate, br"); webRequest.Headers.Set(HttpRequestHeader.AcceptLanguage, "zh-CN,zh;q=0.9"); webRequest.Headers.Set(HttpRequestHeader.Cookie, cookie); webRequest.ServicePoint.Expect100Continue = false; string first = "Content-Disposition: form-data; name=\"{0}\";\r\n\r\n" + sign + "\r\n"; var firstheader = string.Format(first, "upload_sign"); var firstheaderbytes = Encoding.UTF8.GetBytes(firstheader); string filePartHeader = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\n" + "Content-Type: image/jpeg\r\n\r\n"; var header = string.Format(filePartHeader, fileKeyName, fileName); //string temp = "--" + boundary+"\r\n"+ firstheader +"--" + boundary + "\r\n"+ header; var headerbytes = Encoding.UTF8.GetBytes(header); memStream.Write(beginBoundary, 0, beginBoundary.Length); memStream.Write(firstheaderbytes, 0, firstheaderbytes.Length); memStream.Write(beginBoundary, 0, beginBoundary.Length); memStream.Write(headerbytes, 0, headerbytes.Length); // 写入文件 memStream.Write(file, 0, file.Length); // 写入文件 string endPartHeader = "Content-Disposition: form-data; name=\"pic_operations\"\r\n\r\n"; var endheaderbytes = Encoding.UTF8.GetBytes(endPartHeader); memStream.Write(secondBoundary, 0, secondBoundary.Length); memStream.Write(endheaderbytes, 0, endheaderbytes.Length); var stringKeyHeader2 = "{\"rules\":[{\"rule\":\"imageMogr2/format/jpeg/quality/80|imageView2/2/w/2000/h/2000\"}]}\r\n"; byte[] formbytes = Encoding.UTF8.GetBytes(stringKeyHeader2); memStream.Write(formbytes, 0, formbytes.Length); // 写入最后的结束边界符 memStream.Write(endBoundary, 0, endBoundary.Length); webRequest.ContentLength = memStream.Length; using (Stream stream = webRequest.GetRequestStream()) { memStream.WriteTo(stream); } var httpWebResponse = (HttpWebResponse)webRequest.GetResponse(); if (httpWebResponse != null) { if (string.IsNullOrEmpty(responseContent)) responseContent = ReadResponsex(httpWebResponse); httpWebResponse.Close(); } return responseContent; } /// /// 发送post请求 /// /// /// /// /// /// /// private string HttpPostData(string url, int timeOut, string fileKeyName, string fileName, byte[] file, NameValueCollection stringDict, string referer) { string responseContent; string cookie = Shop.Cookies;// BaseClass.CookiesAllString.ContainsKey("taobao.com") ? BaseClass.CookiesAllString["taobao.com"] : ""; if (string.IsNullOrEmpty(cookie)) { return ""; } var memStream = new MemoryStream(); var webRequest = (HttpWebRequest)WebRequest.Create(url); // 边界符 var boundary = "----WebKitFormBoundaryHnaq59TH4KqN8876"; // 边界符 var beginBoundary = Encoding.ASCII.GetBytes("--" + boundary + "\r\n"); //var fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read); // 最后的结束符 var endBoundary = Encoding.ASCII.GetBytes("--" + boundary + "--\r\n"); // 设置属性 webRequest.Method = "POST"; webRequest.Timeout = timeOut; webRequest.Proxy = null; webRequest.ReadWriteTimeout = timeOut; webRequest.ContentType = "multipart/form-data; boundary=" + boundary; if (string.IsNullOrEmpty(referer)) referer = "https://tadget.taobao.com/redaction/manager.htm"; webRequest.Referer = referer; webRequest.UserAgent = BaseClass.ChromeUserAgent; //webRequest.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko"; webRequest.Headers.Add("Cookie", cookie); //webRequest.Headers.Add("Cookie", "v=0; cookie2=19bb7096a84354a4c14f57b3b139b358; _tb_token_=371a6e3e53673; existShop=MTQ5NTA4NzEwNQ%3D%3D; skt=07be2c7a4d43d4e3; publishItemObj=Ng%3D%3D; t=cdd5be62cd6b4e78434311371fbd7ff9; uc3=sg2=UtABdWdeGfXD%2FQkzzQhDSLQGa8sMw6MWHGmZA5%2Fz1oY%3D&nk2=G4mgLCefCRJZu5RKow%3D%3D&id2=W8nWsIU9pmPl&vt3=F8dARVDUXtcYdighsV4%3D&lg2=VFC%2FuZ9ayeYq2g%3D%3D; tracknick=xiaotui930904; _cc_=UIHiLt3xSw%3D%3D; tg=0; thw=cn; ali_ab=36.7.115.240.1486373819164.2; miid=805014732159802464; mt=np=&ci=1_1&cyk=2_0; hng=CN%7Czh-CN%7CCNY; cna=FBaXEKHXWGsCASQ5jXreM7Bn; l=Alpa9EIFIfaqKZPIW3nvwNBw6g58A95l; isg=AoGB_EtuvM235dDxcXm4k6uxmM2obfWgjhNWjuPW9AjnyqCcK_uCcC2I-ody; lgc=xiaotui930904; uss=BxExuOuBMGTSmmLusncTQzrc54qNGyvc44m3KpvMw%2FDqvz12lH2jkCfx; _m_user_unitinfo_=unit|unsz; _m_h5_tk=0e98a920393ab7ef74949cb428e8cbf8_1495072723582; _m_h5_tk_enc=c01cbddf709302868d28a398ddc7a464; _m_unitapi_v_=1492572565585; uc1=cookie14=UoW%2BvfobS%2FYyFQ%3D%3D&lng=zh_CN&cookie16=UtASsssmPlP%2Ff1IHDsDaPRu%2BPw%3D%3D&existShop=true&cookie21=UIHiLt3xSixwH1aenGUFEQ%3D%3D&tag=8&cookie15=WqG3DMC9VAQiUQ%3D%3D&pas=0; sg=482; cookie1=AVZ7NzilkILAckSZh3aH1rY3cLn%2F1CTS%2FTys%2FR09hPk%3D; unb=802158228; _l_g_=Ug%3D%3D; _nk_=xiaotui930904; cookie17=W8nWsIU9pmPl; JSESSIONID=3667ED995D0FA3DF2C4B9D2848FBECFB; apushcff39d705ee654f2389a8c5fb80067dd=%7B%22ts%22%3A1495087171963%2C%22parentId%22%3A1495087120835%7D"); //webRequest.Headers.Add("X-Requested-With", "ShockwaveFlash/23.9.9.999"); //webRequest.Headers.Add("x-flash-version", "25,0,0,148"); //if (string.IsNullOrEmpty(ShopName)) // ShopName = BaseClass.ShopName; //if (string.IsNullOrEmpty(ShopName)) //{ // ShopName = BaseRegex.GetMatchRegexString(ref cookie, "_nk_=([^;]+);"); //} // 写入文件 string filePartHeader = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\n" + "Content-Type: image/jpeg\r\n\r\n"; if (url.Contains("s.taobao.com/image")) { filePartHeader = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\n" + "Content-Type: image/jpeg\r\n\r\n"; } var header = string.Format(filePartHeader, fileKeyName, fileName); var headerbytes = Encoding.UTF8.GetBytes(header); memStream.Write(beginBoundary, 0, beginBoundary.Length); memStream.Write(headerbytes, 0, headerbytes.Length); //while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0) //{ // memStream.Write(buffer, 0, bytesRead); //} memStream.Write(file, 0, file.Length); // 写入字符串的Key var stringKeyHeader = "\r\n--" + boundary + "\r\nContent-Disposition: form-data; name=\"{0}\"" + "\r\n\r\n\r\n"; foreach (byte[] formitembytes in from string key in stringDict.Keys select string.Format(stringKeyHeader, key, stringDict[key]) into formitem select Encoding.UTF8.GetBytes(formitem)) { memStream.Write(formitembytes, 0, formitembytes.Length); } //var stringKeyHeader2 = "{\"rules\":[{\"rule\":\"imageMogr2/format/jpeg/quality/80|imageView2/2/w/2000/h/2000\"}]}"; //byte[] formbytes = Encoding.UTF8.GetBytes(stringKeyHeader2); //memStream.Write(formbytes, 0, formbytes.Length); // 写入最后的结束边界符 memStream.Write(endBoundary, 0, endBoundary.Length); webRequest.ContentLength = memStream.Length; var requestStream = webRequest.GetRequestStream(); memStream.Position = 0; var tempBuffer = new byte[memStream.Length]; memStream.Read(tempBuffer, 0, tempBuffer.Length); memStream.Close(); requestStream.Write(tempBuffer, 0, tempBuffer.Length); requestStream.Close(); var httpWebResponse = (HttpWebResponse)webRequest.GetResponse(); using (var httpStreamReader = new StreamReader(httpWebResponse.GetResponseStream(), Encoding.GetEncoding("utf-8"))) { responseContent = httpStreamReader.ReadToEnd(); } httpWebResponse.Close(); webRequest.Abort(); return responseContent; } /// /// 发送post请求 /// /// /// /// /// /// /// private string HttpPostData(string url, int timeOut, string fileKeyName, string fileName, byte[] file, string referer) { string pjtoken; if (WhiteBaseMap.ShopToken.ContainsKey(Shop.ShopName)) { pjtoken = WhiteBaseMap.ShopToken[Shop.ShopName]; } else { pjtoken = GetToken(); } bool falg = true; Again: string cookie = Shop.Cookies;// BaseClass.CookiesAllString.ContainsKey("taobao.com") ? BaseClass.CookiesAllString["taobao.com"] : ""; cookie += "ptj_token="+ pjtoken + ""; if (string.IsNullOrEmpty(cookie)) { return ""; } var webRequest = (HttpWebRequest)WebRequest.Create(url); // 边界符 var boundary = "----WebKitFormBoundaryPVCVkeltmosCsFhB"; // 设置属性 webRequest.KeepAlive = true; webRequest.Method = "POST"; webRequest.ContentType = "multipart/form-data; boundary=" + boundary; webRequest.Referer = referer; webRequest.UserAgent = BaseClass.ChromeUserAgent; webRequest.Accept = "*/*"; webRequest.Headers.Add("Anti-Content", CpsSetAllGoods.getAnti0aon()); webRequest.Headers.Add("Origin", @"https://aid.pinduoduo.com"); webRequest.Headers.Add("Sec-Fetch-Site", @"same-origin"); webRequest.Headers.Add("Sec-Fetch-Mode", @"cors"); webRequest.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip, deflate, br"); webRequest.Headers.Set(HttpRequestHeader.AcceptLanguage, "zh-CN,zh;q=0.9"); webRequest.Headers.Set(HttpRequestHeader.Cookie, cookie); webRequest.ServicePoint.Expect100Continue = false; var memStream = new MemoryStream(); // 边界符 var beginBoundary = Encoding.ASCII.GetBytes("--" + boundary+"\r\n"); // 最后的结束符 var endBoundary = Encoding.ASCII.GetBytes("\r\n--" + boundary + "--"); // 写入文件 string filePartHeader = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\n" + "Content-Type: image/jpeg\r\n\r\n"; var header = string.Format(filePartHeader, fileKeyName, fileName); var headerbytes = Encoding.UTF8.GetBytes(header); memStream.Write(beginBoundary, 0, beginBoundary.Length); memStream.Write(headerbytes, 0, headerbytes.Length); memStream.Write(file, 0, file.Length); // 写入最后的结束边界符 memStream.Write(endBoundary, 0, endBoundary.Length); webRequest.ContentLength = memStream.Length; using (Stream stream = webRequest.GetRequestStream()) { memStream.WriteTo(stream); } //memStream.Position = 0; //var tempBuffer = new byte[memStream.Length]; //memStream.Read(tempBuffer, 0, tempBuffer.Length); //memStream.Close(); //requestStream.Write(tempBuffer, 0, tempBuffer.Length); //requestStream.Close(); string responseText = ""; var httpWebResponse = (HttpWebResponse)webRequest.GetResponse(); if (httpWebResponse != null) { if (string.IsNullOrEmpty(responseText)) responseText = ReadResponsex(httpWebResponse); httpWebResponse.Close(); } if (responseText.Contains("\"success\":false") &&falg) { falg = false; pjtoken = GetToken(); goto Again; } return responseText; } public string GetToken() { string urlxm = "https://mms.pinduoduo.com/janus/api/subSystem/generateAccessToken"; string referem = "https://mms.pinduoduo.com/goods/goods_materials?tab=0"; string dataxm = "{\"mallId\":" + Shop.MallId + ",\"redirectUrl\":\"https://aid.pinduoduo.com\"}"; string htmlxm = WhiteBaseMapInstance.Request_mms_pinduoduo_com(urlxm, urlxm, Shop.Cookies, dataxm, WhiteBaseMapInstance.getAnti0aon()); //GetPostTaobaoHtml.GetJsonPost(urlxm, referem, true, dataxm, Shop.Cookies); string accessToken = BaseRegex.GetStringJson(ref htmlxm, "accessToken"); string cookies = "ptj_token=" + accessToken + ";"; htmlxm = WhiteBaseMapInstance.GetJsonPostURL("https://aid.pinduoduo.com/auth?redirectUrl=https%3A%2F%2Faid.pinduoduo.com%2Ftools%2Fmatting%3Forigin%3Dgoods_material&accessToken=" + accessToken, "", true, "", cookies); string pjtoken = BaseRegex.GetMatchRegexString(ref htmlxm, "ptj_token=([^;]+?);"); if (WhiteBaseMap.ShopToken.ContainsKey(Shop.ShopName)) { WhiteBaseMap.ShopToken[Shop.ShopName] = pjtoken; } else { WhiteBaseMap.ShopToken.Add(Shop.ShopName, pjtoken); } return pjtoken; } public static string ReadResponsex(HttpWebResponse response) { using (Stream responseStream = response.GetResponseStream()) { Stream streamToRead = responseStream; if (response.ContentEncoding.ToLower().Contains("gzip")) { streamToRead = new GZipStream(streamToRead, CompressionMode.Decompress); } else if (response.ContentEncoding.ToLower().Contains("deflate")) { streamToRead = new DeflateStream(streamToRead, CompressionMode.Decompress); } using (StreamReader streamReader = new StreamReader(streamToRead, Encoding.UTF8)) { return streamReader.ReadToEnd(); } } } public string UploadImgCut(ref byte[] img, long goodId) { if (img == null || img.Length == 0) return ""; //if (ImageTemp.ContainsKey(beforUrl)) // return ImageTemp[beforUrl].Url; string imgUrl = "", html; if (BaseClass.UseApiFirst) { PinduoduoApiGetProduct p = new PinduoduoApiGetProduct(Shop); html = p.UploadImage(img); imgUrl = BaseRegex.GetStringJson(ref html, "image_url"); if (string.IsNullOrEmpty(imgUrl)) { if (!string.IsNullOrEmpty(html) && html.Contains("频繁")) Thread.Sleep(3000); Thread.Sleep(1000); html = p.UploadImage(img); imgUrl = BaseRegex.GetStringJson(ref html, "image_url"); } if (!string.IsNullOrEmpty(imgUrl)) LogSave.Add(Name, "上传图片:" + imgUrl); return imgUrl; } //string url = "https://mms.pinduoduo.com/earth/api/upload/getSignature"; //string refere = "https://mms.pinduoduo.com/goods/goods_add/index?id=5146155709&type=edit&from=category"; //html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, "{}", Shop.Cookies); string url = "https://mms.pinduoduo.com/galerie/business/get_signature"; string refere = "https://mms.pinduoduo.com/goods/goods_materials"; html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, "{\"bucket_tag\":\"pdd_goods\"}", Shop.Cookies); string sign = BaseRegex.GetStringJson(ref html, "signature"); if (string.IsNullOrEmpty(sign)) { return ""; } string data = "{\"upload_sign\":\"" + sign + "\",\"image\":\"data:image/jpeg;base64," + Convert.ToBase64String(img) + "\"}"; url = "https://file.yangkeduo.com/v2/store_image"; html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, Shop.Cookies); imgUrl = BaseRegex.GetStringJson(ref html, "url"); if (string.IsNullOrEmpty(imgUrl)) { PinduoduoApiGetProduct p = new PinduoduoApiGetProduct(Shop); html = p.UploadImage(img); imgUrl = BaseRegex.GetStringJson(ref html, "image_url"); if (string.IsNullOrEmpty(imgUrl)) { if (!string.IsNullOrEmpty(html) && html.Contains("频繁")) Thread.Sleep(3000); Thread.Sleep(1000); html = p.UploadImage(img); imgUrl = BaseRegex.GetStringJson(ref html, "image_url"); } if (!string.IsNullOrEmpty(imgUrl)) LogSave.Add(Name, "上传图片:" + imgUrl); return imgUrl; } //LogSave.Add(Name, "上传白底图:" + imgUrl); string upUrl = BaseRegex.GetStringJson(ref html, "url"); url = "https://mms.pinduoduo.com/giraffe/mms/material/create"; data = "{\"content\":\"" + upUrl + "\",\"goods_id\":" + goodId + ",\"type\":1}"; html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, Shop.Cookies); return html; } /// /// /// 添加到缓存 /// /// /// public static void AddImage(string key, string url, int width, int height) { if (string.IsNullOrEmpty(url)) return; if (ImageTemp.ContainsKey(key) && url.Contains("http:")) ImageTemp[key] = new ImageUrlBase(url, width, height); if (ImageTemp.ContainsKey(key) || string.IsNullOrEmpty(key) || string.IsNullOrEmpty(url)) return; try { ImageTemp.Add(key, new ImageUrlBase(url, width, height)); } catch { } } public static string ReplaceTitle(string title) { string[] l = @"([\d\.]+[\s*]+元) qq 预售 限量 ".Split('\n'); foreach (string s in l) { if (string.IsNullOrEmpty(s)) continue; string m = s.Trim(); if (m.Contains("(")) BaseRegex.Relpace(ref title, m, ""); else title = title.Replace(m, ""); } return title; } } public class CutImage { public long goodsId; public string url; public string Name; public ShopChatBase Shop; public CutImage(string name, ShopChatBase shop) { Name = name; Shop = shop; } public void CutImageVaule() { try { byte[] imageByte = new byte[0]; GetPostTaobaoHtml.DownLoadImage(url, out imageByte); ImageBuild ib = new ImageBuild(imageByte); if (ib.Width < 480 || ib.Width > 1500 || ib.Height < 480 || ib.Height > 1500) { LogSave.Add(Name, goodsId + "白底图大小不合适,跳过"); return; } bool isflag = ib.ImageCuteNoLogo(); if (!isflag) return; if (ib.Width != 480 || ib.Height != 480) imageByte = ib.BuildNewSize(480, 480, 500, 100); string html = UploadImgCut(ref imageByte, goodsId); if (html.Contains("false")) LogSave.Add(Name, goodsId + "上传白底图失败"); else LogSave.Add(Name, goodsId + "上传白底图成功"); } catch { } } public string UploadImgCut(ref byte[] img, long goodId) { if (img == null || img.Length == 0) return ""; //if (ImageTemp.ContainsKey(beforUrl)) // return ImageTemp[beforUrl].Url; string imgUrl = "", html; //if (BaseClass.UseApiFirst) //{ // PinduoduoApiGetProduct p = new PinduoduoApiGetProduct(Shop); // html = p.UploadImage(img); // imgUrl = BaseRegex.GetStringJson(ref html, "image_url"); // if (string.IsNullOrEmpty(imgUrl)) // { // if (!string.IsNullOrEmpty(html) && html.Contains("频繁")) // Thread.Sleep(3000); // Thread.Sleep(1000); // html = p.UploadImage(img); // imgUrl = BaseRegex.GetStringJson(ref html, "image_url"); // } // if (!string.IsNullOrEmpty(imgUrl)) // LogSave.Add(Name, "上传图片:" + imgUrl); // return imgUrl; //} //string url = "https://mms.pinduoduo.com/earth/api/upload/getSignature"; //string refere = "https://mms.pinduoduo.com/goods/goods_add/index?id=5146155709&type=edit&from=category"; //html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, "{}", Shop.Cookies); string url = "https://mms.pinduoduo.com/galerie/business/get_signature"; string refere = "https://mms.pinduoduo.com/goods/goods_materials"; html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, "{\"bucket_tag\":\"mms-material-img\"}", Shop.Cookies);//"{\"bucket_tag\":\"pdd_goods\"}" string sign = BaseRegex.GetStringJson(ref html, "signature"); if (string.IsNullOrEmpty(sign)) { return ""; } string data = "{\"upload_sign\":\"" + sign + "\",\"image\":\"data:image/jpeg;base64," + Convert.ToBase64String(img) + "\"}"; url = "https://file.yangkeduo.com/v2/store_image"; html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, Shop.Cookies); imgUrl = BaseRegex.GetStringJson(ref html, "url"); if (string.IsNullOrEmpty(imgUrl)) { PinduoduoApiGetProduct p = new PinduoduoApiGetProduct(Shop); html = p.UploadImage(img); imgUrl = BaseRegex.GetStringJson(ref html, "image_url"); if (string.IsNullOrEmpty(imgUrl)) { if (!string.IsNullOrEmpty(html) && html.Contains("频繁")) Thread.Sleep(3000); Thread.Sleep(1000); html = p.UploadImage(img); imgUrl = BaseRegex.GetStringJson(ref html, "image_url"); } if (!string.IsNullOrEmpty(imgUrl)) LogSave.Add(Name, "上传图片:" + imgUrl); } string pjtoken = ""; if (WhiteBaseMap.ShopToken.ContainsKey(Shop.ShopName)) { pjtoken = WhiteBaseMap.ShopToken[Shop.ShopName]; } else { pjtoken = GetToken(); } string cookie = Shop.Cookies;// BaseClass.CookiesAllString.ContainsKey("taobao.com") ? BaseClass.CookiesAllString["taobao.com"] : ""; cookie += "ptj_token=" + pjtoken + ""; string temp = ",{\"imageUrl\":\"" + imgUrl + "\",\"goodsId\":\"" + goodId + "\"}"; url = "https://aid.pinduoduo.com/api/banner-intelligent/matting/save"; data = "{\"images\":[" + temp.Substring(1, temp.Length - 1) + "],\"white\":true}"; html = GetPostTaobaoHtml.GetJsonPost(url, url, true, data, cookie); if (!html.Contains("\"success\":true,")) { pjtoken = GetToken(); html = GetPostTaobaoHtml.GetJsonPost(url, url, true, data, cookie); } if (!html.Contains("\"success\":true,")) return "false"; url = "https://mms.pinduoduo.com/garner/mms/file/list"; refere = "https://mms.pinduoduo.com/goods/goods_materials"; data = "{\"file_type_desc\":\"pic\",\"file_name\":\"" + goodId + "\",\"order_by\":\"create_time desc\",\"page\":1,\"page_size\":10,\"check_status_list\":[2]}"; html = GetPostTaobaoHtml.GetJsonPost(url, url, true, data, Shop.Cookies); string upUrl = BaseRegex.GetStringJson(ref html, "url"); string id = BaseRegex.GetStringJson(ref html, "id"); url = "https://mms.pinduoduo.com/giraffe/mms/material/create"; data = "{\"content\":\"" + upUrl + "\",\"goods_id\":" + goodId + ",\"type\":1,\"mall_file_id\":"+id+",\"source\":4}"; //"{\"content\":\"" + upUrl + "\",\"goods_id\":" + goodId + ",\"type\":1}"; html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, Shop.Cookies, data, CpsSetAllGoods.getAnti0aon()); //GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, Shop.Cookies); return html; } public string GetToken() { string urlxm = "https://mms.pinduoduo.com/janus/api/subSystem/generateAccessToken"; string referem = "https://mms.pinduoduo.com/goods/goods_materials?tab=0"; string dataxm = "{\"mallId\":" + Shop.MallId + ",\"redirectUrl\":\"https://aid.pinduoduo.com\"}"; string htmlxm = WhiteBaseMapInstance.Request_mms_pinduoduo_com(urlxm, urlxm, Shop.Cookies, dataxm, WhiteBaseMapInstance.getAnti0aon()); //GetPostTaobaoHtml.GetJsonPost(urlxm, referem, true, dataxm, Shop.Cookies); string accessToken = BaseRegex.GetStringJson(ref htmlxm, "accessToken"); string cookies = "ptj_token=" + accessToken + ";"; htmlxm = WhiteBaseMapInstance.GetJsonPostURL("https://aid.pinduoduo.com/auth?redirectUrl=https%3A%2F%2Faid.pinduoduo.com%2Ftools%2Fmatting%3Forigin%3Dgoods_material&accessToken=" + accessToken, "", true, "", cookies); string pjtoken = BaseRegex.GetMatchRegexString(ref htmlxm, "ptj_token=([^;]+?);"); if (WhiteBaseMap.ShopToken.ContainsKey(Shop.ShopName)) { WhiteBaseMap.ShopToken[Shop.ShopName] = pjtoken; } else { WhiteBaseMap.ShopToken.Add(Shop.ShopName, pjtoken); } return pjtoken; } } }