修复微信上货 bug

This commit is contained in:
wule_5900x committed 2026-02-02 00:06:28 +08:00
1 parent 12f2037e54
commit c27063d704
3 files changed
+86 -31

No files matched your search

+1 -1
View File
@@ -27,7 +27,7 @@ namespace AllBase
/// <summary>
/// 版本ID
/// </summary>
public static int VersionCount = 819;
public static int VersionCount = 822;
//public static int VersionCount = 613;
/// <summary>
@@ -60,6 +60,11 @@ namespace AllBase.Model.Param.WXParam
public string thumbImg { get; set; } // "https://wst.wxapp.tc.qq.com/161/20304/snscosdownload/SH/reserved/695c85e9000a3bff29d22878fedda00b000000a000004f50",
public int? salePrice { get; set; } // 10000,
public string skuCode { get; set; } = "";
public string outSkuId { get; set; } = ""; // 模拟接口没有
public string out_sku_id { get; set; } = ""; // 模拟接口没有
/// <summary>
/// 条形码
/// </summary>
public string barCode { get; set; } = "";
public stockInfoParam stockInfo { get; set; } = new stockInfoParam();
public List<saleParamParam> saleParam { get; set; } = new List<saleParamParam>();
@@ -247,11 +252,14 @@ namespace AllBase.Model.Param.WXParam
public class skuKeyParam
{
public string skuId { get; set; } = ""; // "6134573242"
public productKeyDetailParam productKey { get; set; }
public productKeyParam productKey { get; set; }
public string skuSnapId { get; set; } // "1196674898",
public string outSkuId { get; set; } // ""
}
public class productKeyDetailParam
public class productKeyParam
{
public List<object> cashCouponSendKey = new List<object>();
public string productId { get; set; } // "10000408181873",
public string outProductId { get; set; } = "";
public string appid { get; set; } = "";
@@ -316,6 +324,8 @@ namespace AllBase.Model.Param.WXParam
/// extCode 货号
/// </summary>
public string spuCode { get; set; } = "";
public string outProductId { get; set; } = ""; // 模拟接口没有
public string out_product_id { get; set; } = ""; // 模拟接口没有
public int? asyncUpproductRet { get; set; } = 0;
public int? illegalRecordId { get; set; } = 0;
public string headImage { get; set; } = "";
@@ -814,12 +824,4 @@ namespace AllBase.Model.Param.WXParam
public string key { get; set; } // "reason"
public string value { get; set; } // ""
}
public class productKeyParam
{
/// <summary>
/// 商品id(保存草稿箱的时候才能获取到,提交上架的时候需要填写)
/// </summary>
public string productId { get; set; } // "10000408181873"
}
}
@@ -868,7 +868,14 @@ namespace TemuKJD.WXForms.ProductForms
break;
//将商品上传
result = UploadProduct(shop, kjdDbProd, selectProd, row.Cells["colOpResult"], startTime);
var kjdDbProdTmp = JsonHelper.DeserializeJsonToObject<KJDDBProduct>(JsonHelper.SerializeObject(kjdDbProd));
result = UploadProduct(shop, kjdDbProdTmp, selectProd, row.Cells["colOpResult"], startTime);
if (result.Contains("10020225") || result.Contains("10020226"))
{
kjdDbProdTmp = JsonHelper.DeserializeJsonToObject<KJDDBProduct>(JsonHelper.SerializeObject(kjdDbProd));
kjdDbProdTmp.wx_img_map_json = null;
result = UploadProduct(shop, kjdDbProdTmp, selectProd, row.Cells["colOpResult"], startTime);
}
Invoke(new Action(() =>
{
@@ -893,6 +900,17 @@ namespace TemuKJD.WXForms.ProductForms
}
Thread.Sleep(Randomx.GetId(100, 300));
// 记录失败商品
if (!result.Contains("success\":true"))
{
selectProd.wxDraftProduct = null;
selectProd.draft_id = BaseRegex.GetStringJson(ref result, "draftId");
selectProd.status = "上传失败";
selectProd.add_time = DateTime.Now;
upload_draft_product_lst.Add(selectProd);
NaiBa.Util.Helper.ConfigHelper.SaveConfig("wx_select_upload_draft_products", upload_draft_product_lst);
}
//额外等待时间(无论失败与否)
var waitTime = 0;
Invoke(new Action(() => { waitTime = txtWaitSeconds.Text.Trim().ParseToInt(); }));
@@ -915,6 +933,7 @@ namespace TemuKJD.WXForms.ProductForms
}
var error = BaseRegex.GetStringJson(ref result, "errMsg");
error = GetHtml.UrlDecode(error);
// 上传失败
if (!result.Contains("\"success\":true") && !result.Contains("上传成功"))
{
@@ -1314,6 +1333,27 @@ namespace TemuKJD.WXForms.ProductForms
}
#endregion
// 过滤重复图片
if (chkImgRandomBlock.Checked && (dbProd.main_cat_name == "图书" || dbProd.main_cat_name == "书籍/杂志/报纸"))
{
}
else
{
List<gallery_item> galls = new List<gallery_item>();
foreach (var gall in prodInfo.detail.galleries.Where(g => g.type == 1))
{
if (!galls.Any(g => g.url == gall.url)/* && !prodInfo.detail.sku.Any(s => s.thumb_url == gall.url)*/)
galls.Add(gall);
}
foreach (var gall in prodInfo.detail.galleries.Where(g => g.type == 2))
{
if (!galls.Any(g => g.url == gall.url)/* && !prodInfo.detail.sku.Any(s => s.thumb_url == gall.url)*/)
galls.Add(gall);
}
prodInfo.detail.galleries.Clear();
prodInfo.detail.galleries.AddRange(galls);
}
// 生成初始化上传商品对象
var upProdInitParam = new WXUploadProductInitParam();
// 生成上传商品对象
@@ -1335,6 +1375,9 @@ namespace TemuKJD.WXForms.ProductForms
extCode = "EC1" + dbProd.spu_id + "A";
}
upProdParam.product.info.spuCode = extCode;
upProdParam.product.info.outProductId = extCode;
upProdParam.product.info.out_product_id = extCode;
upProdParam.product.productKey.outProductId = extCode;
#endregion
#region 上传主图
@@ -1348,13 +1391,6 @@ namespace TemuKJD.WXForms.ProductForms
Thread.Sleep(Randomx.GetId(100, 300));
foreach (var gallery_item in prodInfo.detail.galleries.Where(g => g.type == 1).Take(9)) // 9张主图
{
// 先查主图缓存
if (wxImgMapDic.ContainsKey(BaseClass.GetMd5(gallery_item.url)))
{
upProdInitParam.product.info.headImg.Add(wxImgMapDic[BaseClass.GetMd5(gallery_item.url)]);
upProdParam.product.info.headImg.Add(wxImgMapDic[BaseClass.GetMd5(gallery_item.url)]);
continue;
}
try
{
@@ -1365,6 +1401,14 @@ namespace TemuKJD.WXForms.ProductForms
}
else
{
// 主图缓存盗链
if (wxImgMapDic.ContainsKey(BaseClass.GetMd5(gallery_item.url)))
{
upProdInitParam.product.info.headImg.Add(wxImgMapDic[BaseClass.GetMd5(gallery_item.url)]);
upProdParam.product.info.headImg.Add(wxImgMapDic[BaseClass.GetMd5(gallery_item.url)]);
continue;
}
// 使用接口链接传图
var urlImg = BaseClass.BuildPDDObjString("product/wx_api_upload_image");
var upDate = UserLogin.GetSignaturex();
@@ -1410,7 +1454,7 @@ namespace TemuKJD.WXForms.ProductForms
{
Invoke(new Action(() =>
{
cell.Value = "图片提报失败,正在重试。";
cell.Value = "图片提报失败,正在重试。" + (i + 1);
}));
Thread.Sleep(Randomx.GetId(3000, 6000));
upImgAuthRst = WXUpload.getUploadTempImgAuth(shop);
@@ -1420,7 +1464,7 @@ namespace TemuKJD.WXForms.ProductForms
var error = BaseRegex.GetStringJson(ref upImgAuthRst, "msg");
if (string.IsNullOrEmpty(error))
error = upImgAuthRst;
return "{\"success\":false,\"draftId\":0,\"status\":\"未上传\",\"errMsg\":\"申请上传主图失败 " + error + "\"}";
return "{\"success\":false,\"draftId\":0,\"status\":\"未上传\",\"errMsg\":\"申请上传主图失败 " + GetHtml.UrlEncodeUtf8(error) + "\"}";
}
string disK = BaseRegex.GetStringJson(ref upImgAuthRst, "disK");
long disT = BaseRegex.GetLongJson(ref upImgAuthRst, "disT");
@@ -1917,12 +1961,6 @@ namespace TemuKJD.WXForms.ProductForms
foreach (var gallery_item in detailGalleries)
{
if (wxImgMapDic.ContainsKey(BaseClass.GetMd5(gallery_item.url)))
{
upProdParam.product.info.detail.detailImg.Add(wxImgMapDic[BaseClass.GetMd5(gallery_item.url)]);
continue;
}
if (chkImgRandomBlock.Checked && (upProdParam.product.info.category.FirstOrDefault()?.name == "图书" || prodInfo.detail.cats.FirstOrDefault() == "书籍/杂志/报纸" ||
dbProd.main_cat_name == "图书" || dbProd.main_cat_name == "书籍/杂志/报纸"))
{
@@ -1930,6 +1968,13 @@ namespace TemuKJD.WXForms.ProductForms
}
else
{
// 盗链
if (wxImgMapDic.ContainsKey(BaseClass.GetMd5(gallery_item.url)))
{
upProdParam.product.info.detail.detailImg.Add(wxImgMapDic[BaseClass.GetMd5(gallery_item.url)]);
continue;
}
// 使用接口链接传图
var urlImg = BaseClass.BuildPDDObjString("product/wx_api_upload_image");
var upDate = UserLogin.GetSignaturex();
@@ -2232,7 +2277,7 @@ namespace TemuKJD.WXForms.ProductForms
foreach (var sku in prodInfo.detail.sku)
{
var spec = sku.spec[0];
if (!attrParam.items.Any(it => it.value == spec.spec_name))
if (!attrParam.items.Any(it => it.value == spec.spec_name) && !string.IsNullOrEmpty(sku.thumb_url))
{
if (wxImgMapDic.ContainsKey(BaseClass.GetMd5(sku.thumb_url)))
{
@@ -2370,6 +2415,12 @@ namespace TemuKJD.WXForms.ProductForms
// sku图
skuParam.productSkuInfo.thumbImg = upProdParam.product.info.productSaleAttrs[0].items.FirstOrDefault(a => a.value == skuInfo.spec[0].spec_name)?.imgUrl;
skuParam.productSkuInfo.skuCode = skuInfo.out_sku_sn;
skuParam.productSkuInfo.outSkuId = skuInfo.out_sku_sn;
skuParam.productSkuInfo.out_sku_id = skuInfo.out_sku_sn;
//skuParam.productSkuInfo.barCode = skuInfo.out_sku_sn; // 条形码
skuParam.skuKey.outSkuId = skuInfo.out_sku_sn;
skuParam.skuKey.productKey = new productKeyParam();
skuParam.skuKey.productKey.outProductId = upProdParam.product.info.spuCode;
// 库存
skuParam.productSkuInfo.stockInfo = new stockInfoParam() { stockNum = defaultAddPriceRule.StockNum };
skuParam.productSkuInfo.saleParam = new List<saleParamParam>();
@@ -2565,6 +2616,8 @@ namespace TemuKJD.WXForms.ProductForms
var error = BaseRegex.GetStringJson(ref uploadProdRst, "msg");
if (string.IsNullOrEmpty(error))
error = BaseRegex.GetStringJson(ref uploadProdRst, "errmsg");
if (string.IsNullOrEmpty(error))
error = BaseRegex.GetStringJson(ref uploadProdRst, "errcode");
if (string.IsNullOrEmpty(error))
error = uploadProdRst;
return "{\"success\":false,\"draftId\":" + upProdParam.product.productKey.productId + ",\"status\":\"草稿箱\",\"errMsg\":\"上架失败 " + error + "\"}";
@@ -2757,13 +2810,13 @@ namespace TemuKJD.WXForms.ProductForms
public string UploadImg(ShopLoginInfo shop, Bitmap img, DataGridViewCell cell = null)
{
var upImgAuthRst = WXUpload.getUploadTempImgAuth(shop);
for (int i = 0; i < 10 && upImgAuthRst.Contains("LogicError"); i++)
for (int i = 0; i < 20 && upImgAuthRst.Contains("LogicError"); i++)
{
if (cell != null)
{
Invoke(new Action(() =>
{
cell.Value = "图片提报失败,正在重试。";
cell.Value = "图片提报失败,正在重试。" + (i + 1);
}));
}
Thread.Sleep(Randomx.GetId(3000, 6000));
@@ -2774,7 +2827,7 @@ namespace TemuKJD.WXForms.ProductForms
var error = BaseRegex.GetStringJson(ref upImgAuthRst, "msg");
if (string.IsNullOrEmpty(error))
error = upImgAuthRst;
return "{\"success\":false,\"draftId\":0,\"status\":\"未上传\",\"errMsg\":\"申请上传图片失败 " + error + "\"}";
return "{\"success\":false,\"draftId\":0,\"status\":\"未上传\",\"errMsg\":\"申请上传图片失败 " + GetHtml.UrlEncodeUtf8(error) + "\"}";
}
string disK = BaseRegex.GetStringJson(ref upImgAuthRst, "disK");
long disT = BaseRegex.GetLongJson(ref upImgAuthRst, "disT");