优惠券,大人推广相关内容

This commit is contained in:
wule_5900x committed 2026-02-16 01:07:22 +08:00
1 parent 4038b0390a
commit 7b06707a40
15 files changed
+4426 -379

No files matched your search

+1
View File
@@ -195,6 +195,7 @@
<Compile Include="Model\Param\PDDCouponParam\PDDActivityMarketingParam.cs" />
<Compile Include="Model\Param\PDDCouponParam\PDDCouponParam.cs" />
<Compile Include="Model\Param\OutServerGoodsParam.cs" />
<Compile Include="Model\Param\WXParam\WXCoupon.cs" />
<Compile Include="Model\Param\WXParam\WXGetShortTitleParam.cs" />
<Compile Include="Model\Param\WXParam\WXUploadProductInitParam.cs" />
<Compile Include="Model\Param\WXParam\WXUploadProductParam.cs" />
+1 -1
View File
@@ -27,7 +27,7 @@ namespace AllBase
/// <summary>
/// 版本ID
/// </summary>
public static int VersionCount = 855;
public static int VersionCount = 860;
//public static int VersionCount = 613;
/// <summary>
+145
View File
@@ -0,0 +1,145 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace AllBase.Model.Param.WXParam
{
public class WXCouponParamBase
{
public WXCouponParam coupon { get; set; } = new WXCouponParam();
public bool? check { get; set; } // true
}
public class WXCouponParam
{
public WXCouponKeyParam couponKey { get; set; } = new WXCouponKeyParam();
public WXCouponInfoParam couponInfo { get; set; } = new WXCouponInfoParam();
public int? status { get; set; } // 2-生效中 4-已作废 5-已删除
}
public class WXCouponInfoParam
{
/// <summary>
/// 活动名称,使用商品ID
/// </summary>
public string name { get; set; } // "10000509758262",
public promoteInfoParam promoteInfo { get; set; } = new promoteInfoParam();
public receiveInfoParam receiveInfo { get; set; } = new receiveInfoParam();
public extInfoParam extInfo { get; set; } = new extInfoParam();
public CouponValidInfoParam validInfo { get; set; } = new CouponValidInfoParam();
public discountInfoParam discountInfo { get; set; } = new discountInfoParam();
public mmpayShakeInfoParam mmpayShakeInfo { get; set; } = new mmpayShakeInfoParam();
}
public class mmpayShakeInfoParam
{
public string productName { get; set; } = "";
public string productHeadImgUrl { get; set; } = "";
public string productBackgroundImgUrl { get; set; } = "";
public List<string> productDetailImgUrlList { get; set; } = new List<string>();
}
public class discountInfoParam
{
/// <summary>
/// 统一折扣或条件折扣的折扣
/// </summary>
public string discountNum { get; set; } = ""; // "9.9" // 99折;
/// <summary>
/// 满xx减yy的yy
/// </summary>
public string discountFee { get; set; } = "0"; // "1";
/// <summary>
/// 满减是否可累进(每满xx减yy)
/// </summary>
public bool? isCanUp { get; set; } = false; // false-满xx减yy true-每满xx减yy
public discountConditionParam discountCondition { get; set; } = new discountConditionParam();
}
public class discountConditionParam
{
/// <summary>
/// 参加活动的商品ID列表
/// </summary>
public List<long> productIds { get; set; } = new List<long>(); // [10000509758262],
public List<object> excludeProductIds { get; set; } = new List<object>();
/// <summary>
/// 条件折扣件数 满xx件打yy折的xx 如果不是条件折扣,填0
/// </summary>
public int? productCnt { get; set; } = 0; // 0,
/// <summary>
/// 满xx减yy的xx,如果是直减,填"0"
/// </summary>
public string productPrice { get; set; } = "0"; // "50",
public List<object> productExtInfoList { get; set; } = new List<object>();
}
public class CouponValidInfoParam
{
/// <summary>
/// 使用时间 1-和领取时间一致
/// </summary>
public string validType { get; set; } = "1";
/// <summary>
/// 领取后有效天数
/// </summary>
public string validDayNum { get; set; } = "";
/// <summary>
/// 有效期开始
/// </summary>
public long? startTime { get; set; } // 1770912000,
/// <summary>
/// 有效期结束
/// </summary>
public long? endTime { get; set; } // 1774886400,
public extRstrInfoParam extRstrInfo { get; set; } = new extRstrInfoParam();
public bool? isSameAsReceiveTime { get; set; } = true;
}
public class extRstrInfoParam
{
public bool? needLiving { get; set; } = false;
}
public class extInfoParam
{
public long? autoValidTime { get; set; } // 1770912000
}
public class receiveInfoParam
{
/// <summary>
/// 每人限领张数
/// </summary>
public int? limitNumOnePerson { get; set; } = 1;
/// <summary>
/// 总发行张数
/// </summary>
public string totalNum { get; set; } = "100";
public long? startTime { get; set; } // 1770912000,
public long? endTime { get; set; } // 1774886400,
public string payOrderCnt { get; set; } = ""; // "",
public int? minVipLevel { get; set; } = 0; // 0,
public List<object> repurchaseProductList { get; set; } = new List<object>(); // [ ],
public int? repurchaseProductType { get; set; } = 0;
}
public class promoteInfoParam
{
public int? promoteType { get; set; } = 1;
public int? promoteChannel { get; set; } = 0; // 0,
public List<object> finderList { get; set; } = new List<object>(); // [ ],
public List<object> officialAccountList { get; set; } = new List<object>(); // [ ],
public List<object> promoterAgencyList { get; set; } = new List<object>(); // [ ]
}
public class WXCouponKeyParam
{
public int? couponId { get; set; } = 0;
public int? type { get; set; } // 1-条件折扣:满xx件打yy折 2-满减/每满减 3-统一折扣 4-直减
}
}
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<UseIISExpress>true</UseIISExpress>
@@ -8,7 +8,7 @@
<IISExpressWindowsAuthentication />
<IISExpressUseClassicPipelineMode />
<UseGlobalApplicationHostFile />
<LastActiveSolutionConfig>Release|Any CPU</LastActiveSolutionConfig>
<LastActiveSolutionConfig>Debug|Any CPU</LastActiveSolutionConfig>
<ProjectView>ShowAllFiles</ProjectView>
</PropertyGroup>
<ProjectExtensions>
+4 -3
View File
@@ -132,10 +132,11 @@ namespace TemuKJD.BLL
"&shop_ids='" + string.Join("','", shop_ids) + "'";
data += "&page_size=200";
var html = GetHtml.PostUtf8(url, data);
if (string.IsNullOrEmpty(html) || !html.Contains("\"code\":200"))
html = GetHtml.PostUtf8(url, data);
if (string.IsNullOrEmpty(html) || !html.Contains("\"code\":200"))
for (int i = 0; i < 5 && (string.IsNullOrEmpty(html) || !html.Contains("\"code\":200")); i++)
{
html = GetHtml.PostUtf8(url, data);
System.Threading.Thread.Sleep(200);
}
if (string.IsNullOrEmpty(html)
|| !html.Contains("shop_id") || !html.Contains("shop_account") || !html.Contains("login_pass"))
{
+9
View File
@@ -185,6 +185,12 @@
<Compile Include="WXForms\ProductForms\WXDBProdUploadCacheForm.Designer.cs">
<DependentUpon>WXDBProdUploadCacheForm.cs</DependentUpon>
</Compile>
<Compile Include="WXForms\ProductForms\WXProdCouponOrderBoomForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="WXForms\ProductForms\WXProdCouponOrderBoomForm.Designer.cs">
<DependentUpon>WXProdCouponOrderBoomForm.cs</DependentUpon>
</Compile>
<Compile Include="WXForms\ProductForms\WXProdPreSaleForm.cs">
<SubType>Form</SubType>
</Compile>
@@ -1084,6 +1090,9 @@
<EmbeddedResource Include="WXForms\ProductForms\WXDBProdUploadCacheForm.resx">
<DependentUpon>WXDBProdUploadCacheForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="WXForms\ProductForms\WXProdCouponOrderBoomForm.resx">
<DependentUpon>WXProdCouponOrderBoomForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="WXForms\ProductForms\WXProdPreSaleForm.resx">
<DependentUpon>WXProdPreSaleForm.cs</DependentUpon>
</EmbeddedResource>
@@ -187,8 +187,16 @@ namespace TemuKJD.WXForms.ProductForms
this.lblWaitToUp.Text = "待上传 " + lstTemuDBProductSelect.Count + " 件";
int prodCount = 0;
var list = GetRandomProductList(out prodCount, 1, 1);
lblGoodsCount.Text = "产品库 " + prodCount + " 件";
pbSelectProd.Visible = true;
Task.Run(() =>
{
GetRandomProductList(out prodCount, 1, 1);
Invoke(new Action(() =>
{
pbSelectProd.Visible = false;
lblGoodsCount.Text = "产品库 " + prodCount + " 件";
}));
});
this.panel1.SendToBack();
chkSelectAll = dgvShop.Columns["colSelect"].AddHeaderCheckBox(HorizontalAlignment.Center, 0, 0, null, null, false);
@@ -379,17 +387,17 @@ namespace TemuKJD.WXForms.ProductForms
private void btnRefreshShop_Click(object sender, EventArgs e)
{
pbLoadingShop.Visible = true;
RefreshDbProd();
RefreshShopAuth();
RefreshDbProdGroupAndCate();
RefreshShopLogin();
}
private void UserSelectDbProductForm_VisibleChanged(object sender, EventArgs e)
{
if (Visible == true)
{
RefreshShopAuth();
RefreshShopLogin();
updateAuthor();
RefreshDbProd();
RefreshDbProdGroupAndCate();
if (!isInit)
{
@@ -414,7 +422,7 @@ namespace TemuKJD.WXForms.ProductForms
}
}
private void RefreshDbProd()
private void RefreshDbProdGroupAndCate()
{
Task.Run(() =>
{
@@ -488,7 +496,7 @@ namespace TemuKJD.WXForms.ProductForms
}
}
private void RefreshShopAuth()
private void RefreshShopLogin()
{
// 店铺Id
var selectIds = dgvShop.Rows.Cast<DataGridViewRow>().Where(row
@@ -629,7 +637,7 @@ namespace TemuKJD.WXForms.ProductForms
{
shopLoginForm.openType = EnumOpenType.login;
shopLoginForm.ShowDialog();
RefreshShopAuth();
RefreshShopLogin();
}
else
{
@@ -683,7 +691,7 @@ namespace TemuKJD.WXForms.ProductForms
//shopLoginForm.prodUserSelectForm = this;
shopLoginForm.openType = EnumOpenType.login;
shopLoginForm.ShowDialog();
RefreshShopAuth();
RefreshShopLogin();
}
break;
case "进店":
@@ -3617,9 +3625,18 @@ namespace TemuKJD.WXForms.ProductForms
cmbCateFilter1.Text = "";
cmbWxSafe.Text = "安全+未校验";
cmbSourceType.Text = "厂商直采";
int prodCount;
GetRandomProductList(out prodCount, 1, 1);
lblGoodsCount.Text = "产品库 " + prodCount + " 件";
pbSelectProd.Visible = true;
Task.Run(() =>
{
GetRandomProductList(out prodCount, 1, 1);
Invoke(new Action(() =>
{
pbSelectProd.Visible = false;
lblGoodsCount.Text = "产品库 " + prodCount + " 件";
}));
});
}
private void 并发上传_Click(object sender, EventArgs e)
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,228 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="colSelect.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="colShopLoginName.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="colShopId.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="colShopNotes.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="colSelectProduct.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="colLoginStatus.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="colApi.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="colCanUse.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="colUploadCount.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="colOnSaleNum.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="colRemaining.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="colMessage.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="colCheck.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="colSelectId.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="colSupplierId.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="colSupplierName.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="colLogin.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="colInShop.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="colSpuId.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="colDraftId.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="colImgUrl.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="colProductSkcPic.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="colSkuFakeImgUrl.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="colSkuFakeImg.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="colProductName.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="colProductCat.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="colExtCode.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="colPrice.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="colSoldNum.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="colMsg.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="colNotes.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="colUserNotes.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="ColDelete.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="colAddTime.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="colCouponNum.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="colOpResult.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
</root>
+19 -338
View File
@@ -297,17 +297,15 @@ namespace TemuKJD.WXForms.ProductForms
private void btnRefreshShop_Click(object sender, EventArgs e)
{
pbLoadingShop.Visible = true;
RefreshDbProd();
RefreshShopAuth();
RefreshShopLogin();
}
private void UserSelectDbProductForm_VisibleChanged(object sender, EventArgs e)
{
if (Visible == true)
{
RefreshShopAuth();
RefreshShopLogin();
updateAuthor();
RefreshDbProd();
if (!isInit)
{
@@ -332,18 +330,7 @@ namespace TemuKJD.WXForms.ProductForms
}
}
private void RefreshDbProd()
{
Task.Run(() =>
{
Invoke(new Action(() =>
{
pbLoadingShop.Visible = false;
}));
});
}
private void RefreshShopAuth()
private void RefreshShopLogin()
{
// 店铺Id
var selectIds = dgvShop.Rows.Cast<DataGridViewRow>().Where(row
@@ -484,7 +471,7 @@ namespace TemuKJD.WXForms.ProductForms
{
shopLoginForm.openType = EnumOpenType.login;
shopLoginForm.ShowDialog();
RefreshShopAuth();
RefreshShopLogin();
}
else
{
@@ -538,7 +525,7 @@ namespace TemuKJD.WXForms.ProductForms
//shopLoginForm.prodUserSelectForm = this;
shopLoginForm.openType = EnumOpenType.login;
shopLoginForm.ShowDialog();
RefreshShopAuth();
RefreshShopLogin();
}
break;
case "进店":
@@ -556,7 +543,7 @@ namespace TemuKJD.WXForms.ProductForms
{
shopLoginForm.openType = EnumOpenType.login;
shopLoginForm.ShowDialog();
RefreshShopAuth();
RefreshShopLogin();
}
}
break;
@@ -811,7 +798,7 @@ namespace TemuKJD.WXForms.ProductForms
if (string.IsNullOrEmpty(PreType))
getProdOnSaleRst = WXPreSale.scanProductPreview(shop, page, nextKey, pageSize);
else
getProdOnSaleRst = WXPreSale.searchPreProduct(shop, page, PreType == "预售" ? 1 : 0, pageSize);
getProdOnSaleRst = WXPreSale.searchProduct(shop, page, PreType == "预售" ? 1 : 0, pageSize);
Thread.Sleep(Randomx.GetId(50, 100));
if (!getProdOnSaleRst.Contains("\"success\":true"))
{
@@ -1207,11 +1194,15 @@ namespace TemuKJD.WXForms.ProductForms
public class WXPreSale
{
public static string searchPreProduct(ShopLoginInfo shop, int pageNum, int presaleType = 1, int pageSize = 50)
public static string searchProduct(ShopLoginInfo shop, int pageNum, int? presaleType = null, int pageSize = 50, int? sortType = null)
{
//https://store.weixin.qq.com/shop-faas/mmchannelstradeproductcore/cgi/goods/searchProduct?token=&lang=zh_CN&pageSize=20&productStatus[]=-1&productSource=[1,16,32]&searchSource=1&useNew=true&pageNum=44&status[]=5&presaleType[]=1
string url = "https://store.weixin.qq.com/shop-faas/mmchannelstradeproductcore/cgi/goods/searchProduct?token=&lang=zh_CN&" +
"pageSize=" + pageSize + "&productStatus[]=-1&productSource=[1,16,32]&searchSource=1&useNew=true&pageNum=" + pageNum + "&status[]=5&presaleType[]=" + presaleType;
"pageSize=" + pageSize + "&productStatus[]=-1&productSource=[1,16,32]&searchSource=1&useNew=true&pageNum=" + pageNum + "&status[]=5";
if (presaleType != null)
url += "&presaleType[]=" + presaleType;
if (sortType != null)
url += "&sortType=" + sortType;
string refere = "https://store.weixin.qq.com/shop/goods/list?currentTab=PRODUCT_STATUS_ON";
var result = WXHttpResponseBLL.WeiXinGetResponse(shop, url, refere);
@@ -1232,6 +1223,12 @@ namespace TemuKJD.WXForms.ProductForms
return result;
}
/// <summary>
/// 下架商品
/// </summary>
/// <param name="shop"></param>
/// <param name="prodId"></param>
/// <returns></returns>
public static string DownProd(ShopLoginInfo shop, long prodId)
{
string url = "https://store.weixin.qq.com/shop-faas/mmecnodeproductlist/cgi/goods/BatchUnListing?token=&lang=zh_CN";
@@ -1240,322 +1237,6 @@ namespace TemuKJD.WXForms.ProductForms
var result = WXHttpResponseBLL.WeiXinPostResponse(shop, url, body, referer);
return result;
}
public static string getUploadTempImgAuth(ShopLoginInfo shop, int uploadScene = 3)
{
string url = "https://store.weixin.qq.com/shop-faas/mmecchannelspicture/cgi/getUploadTempImgAuth?token=&lang=zh_CN&uploadScene=" + uploadScene;
string refere = "https://store.weixin.qq.com/shop/goods/entry";
//{"code":0,"disK":"538c14e950da7b678ce9f5a12658c8acddd09e4b","disT":1767870926,"ext":"23aa0ecfb792a","url":"https://westore.video.qq.com/adtimageupload"}
var result = WXHttpResponseBLL.WeiXinGetResponse(shop, url, refere);
return result;
}
public static string adtimageupload(ShopLoginInfo shop, string imgBase64, string dis_k, long dis_t, string ext)
{
string url = "https://westorealpha.video.qq.com/adtimageupload";
string referer = "https://store.weixin.qq.com/";
string body = imgBase64;
var result = WXHttpResponseBLL.WeiXinImgPostResponse(shop, url, body, dis_k, dis_t, ext, referer);
return result;
}
public static string getProductClassify(ShopLoginInfo shop, string goodsName, List<string> goodImgUrlsLst)
{
string boundaryLetters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
string boundaryStr = "----WebKitFormBoundary";
for (int i = 0; i < 16; i++)
{
boundaryStr += boundaryLetters[Randomx.GetId(boundaryLetters.Length)];
}
string url = "https://store.weixin.qq.com/shop-faas/cgi/common/productClassify?from=B&title=" + GetHtml.UrlEncodeUtf8(goodsName) + "&token=&lang=zh_CN";
string referer = "https://store.weixin.qq.com/shop/goods/entry";
string body = @"--" + boundaryStr + @"
";
foreach (var imgFullPath in goodImgUrlsLst)
{
string fileName = imgFullPath.Split('\\').LastOrDefault();
body += @"Content-Disposition: form-data; name=""file""; filename=""" + fileName + @"""
Content-Type: image/jpeg
<!>" + imgFullPath + @"<!>
--" + boundaryStr;
}
body += @"--
";
var result = WXHttpResponseBLL.WeiXinUploadResponse(shop, url, body, boundaryStr, referer);
return result;
}
public static string getCategoryOnShelf(ShopLoginInfo shop, List<long> catIdLst)
{
string url = "https://store.weixin.qq.com/shop-faas/mmchannelstradecategory/cgi/product/getCategoryOnShelfV2?token=&lang=zh_CN";
string referer = "https://store.weixin.qq.com/shop/goods/entry";
string body = @"{""catIdList"":[" + string.Join(",", catIdLst) + @"],""brandId"":2100000000}";
var result = WXHttpResponseBLL.WeiXinPostResponse(shop, url, body, referer);
return result;
}
public static string batchCheckCategoryRelation(ShopLoginInfo shop, long catId)
{
string url = "https://store.weixin.qq.com/shop-faas/mmchannelstradecategory/cgi/product/batchCheckCategoryRelation?token=&lang=zh_CN";
string referer = "https://store.weixin.qq.com/shop/goods/entry";
string body = @"{""categoryIdList"":[" + catId + "]}";
var result = WXHttpResponseBLL.WeiXinPostResponse(shop, url, body, referer);
return result;
}
public static string addFinderCategoryV2(ShopLoginInfo shop, long catId)
{
string url = "https://store.weixin.qq.com/shop-faas/mmchannelstradecategory/cgi/addFinderCategoryV2?token=&lang=zh_CN";
string referer = "https://store.weixin.qq.com/shop/goods/entry";
string body = @"{""categoryInfo"":{""categories"":[{""id"":""" + catId + @"""}]},""brandIdList"":[],""leafCategoryId"":""" + catId + @""",""reuse"":0,""applyType"":1}";
var result = WXHttpResponseBLL.WeiXinPostResponse(shop, url, body, referer);
//{"categoryInfo":{"categories":[{"id":10000257},{"id":10000245},{"id":112888}],"categoryDeposit":"10000.00","isNewApplyCat":true,"licenseGroupList":[{"licenseGroupId":"17","license":{"licenseId":"5","cosIdList":["1768635607165-orc0V2WjFHdNvjNnk967_g14awFw-7487"],"licenseFieldList":[{"key":"audit_license_no","value":"新出发皖字第1027号"},{"key":"audit_license_validty_period","value":"2029-04-30"}],"isReuse":true}}],"ruleVersion":5234,"certificate":[]},"brandIdList":[],"leafCategoryId":112888,"reuse":0,"applyType":"normalApply"}
//{"code":0,"baseResp":{"errcode":0,"errmsg":"ok"},"auditId":"8362856529"}
//string body = @"{""categoryInfo"":{""categories"":[{""id"":10000257},{""id"":10000245},{""id"":112888}],""categoryDeposit"":""10000.00"",""isNewApplyCat"":true,""licenseGroupList"":[{""licenseGroupId"":""17"",""license"":{""licenseId"":""5"",""cosIdList"":[""1768635607165-orc0V2WjFHdNvjNnk967_g14awFw-7487""],""licenseFieldList"":[{""key"":""audit_license_no"",""value"":""新出发皖字第1027号""},{""key"":""audit_license_validty_period"",""value"":""2029-04-30""}],""isReuse"":true}}],""ruleVersion"":5234,""certificate"":[]},""brandIdList"":[],""leafCategoryId"":112888,""reuse"":0,""applyType"":""normalApply""}";
// request.Referer = "https://store.weixin.qq.com/shop/brandAndCat/category/apply?defaultCategoryIds=%5B%2210000257%22%2C%2210000245%22%2C%22112888%22%5D&source=goods&type=apply";
return result;
}
public static string genProductShortTitle(ShopLoginInfo shop, WXGetShortTitleParam getShortTitleParam)
{
string url = "https://store.weixin.qq.com/shop-faas/mmecnodeproductupload/common/cgi/goods/genProductShortTitle?token=&lang=zh_CN";
string referer = "https://store.weixin.qq.com/shop/goods/entry";
string body = JsonHelper.SerializeObject(getShortTitleParam);
//{"productTitle":"妈妈老年中年阔脚裤冬季秋季时尚牛仔裤","headImgUrls":["https://wst.wxapp.tc.qq.com/160/20304/snscosdownload/SH/reserved/6xykWLEnztKEVU0iahAM7HQ28puCia87zPkvSbFT8Fcia99g2ZNWRdy8licxD6qwsqV4bCicoxwQF9e6jh3qwibgzxuA?token=x5Y29zUxcibCe0pFyoSA8zb1aYVKnIBLkQ8ZUXMcwEq3qYHsko3TDzv2rsL2AfJPd&idx=1&expire=1768211170","https://wst.wxapp.tc.qq.com/160/20304/snscosdownload/SH/reserved/6xykWLEnztKEVU0iahAM7Hbwaw1AboTKxjGsLhJgVreuYNxwyQxrk9RtvCv3XsXSnic9WfBFMAIZYpNgYkWd7VDQ?token=x5Y29zUxcibCe0pFyoSA8zb1aYVKnIBLk4qWUsS2WZiaCjXhZLj0D6PYyddX71qNiat&idx=1&expire=1768211170","https://wst.wxapp.tc.qq.com/160/20304/snscosdownload/SH/reserved/6xykWLEnztKEVU0iahAM7HTa1Ej2xJpy6Ej84arVO7A3vxIDD1XP6ZRVw43OficKLXPcXPUvDNmc8A4lMHCgbic3A?token=x5Y29zUxcibCe0pFyoSA8zb1aYVKnIBLkhejArCiaiaLIEKtvOicA5chibIj1tfELV0Mm&idx=1&expire=1768211170"],"categories":[{"catId":"10000111","catName":"服饰内衣"},{"catId":"10000113","catName":"女装"},{"catId":"10000672","catName":"裤子"},{"catId":"547705","catName":"牛仔裤"}]}
var result = WXHttpResponseBLL.WeiXinPostResponse(shop, url, body, referer);
return result;
}
public static string getFreightTemplate(ShopLoginInfo shop)
{
string url = "https://store.weixin.qq.com/shop-faas/mmecnodeproductupload/express/cgi/goods/getFreightTemplate?token=&lang=zh_CN";
string referer = "https://store.weixin.qq.com/shop/goods/entry";
var result = WXHttpResponseBLL.WeiXinGetResponse(shop, url, referer);
return result;
}
/// <summary>
/// 取售后地址
/// </summary>
/// <param name="shop"></param>
/// <returns></returns>
public static string getAddress(ShopLoginInfo shop, string searchText="")
{
string url = "https://store.weixin.qq.com/shop-faas/mmchannelstradeexpress/cgi/getAddress?token=&lang=zh_CN";
if (!string.IsNullOrEmpty(searchText))
url = "https://store.weixin.qq.com/shop-faas/mmchannelstradeexpress/cgi/getAddress?searchStr=" + GetHtml.UrlEncodeUtf8(searchText) + "&token=&lang=zh_CN";
string referer = "https://store.weixin.qq.com/shop/goods/entry";
var result = WXHttpResponseBLL.WeiXinGetResponse(shop, url, referer);
return result;
}
public static string uploadProductDraft(ShopLoginInfo shop, WXUploadProductParam prodParam)
{
string url = "https://store.weixin.qq.com/shop-faas/mmecnodeproductupload/common/cgi/goods/uploadProductDraft?token=&lang=zh_CN";
string referer = "https://store.weixin.qq.com/shop/goods/entry";
JsonSerializerSettings jsonSetting = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore };
var prodStr = JsonConvert.SerializeObject(prodParam, jsonSetting);
JObject jObj = new JObject();
jObj.Add("data", prodStr);
string body = JsonHelper.SerializeObject(jObj);
var result = WXHttpResponseBLL.WeiXinPostResponse(shop, url, body, referer);
return result;
}
public static string upProductV2(ShopLoginInfo shop, WXUploadProductParam prodParam)
{
string url = "https://store.weixin.qq.com/shop-faas/mmchannelstradeproductcore/cgi/goods/upProductV2?token=&lang=zh_CN";
string referer = "https://store.weixin.qq.com/shop/goods/entry";
JsonSerializerSettings jsonSetting = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore };
var prodStr = JsonConvert.SerializeObject(prodParam, jsonSetting);
JObject jObj = new JObject();
jObj.Add("data", prodStr);
string body = JsonHelper.SerializeObject(jObj);
var result = WXHttpResponseBLL.WeiXinPostResponse(shop, url, body, referer);
return result;
}
public static string upProductJObjectV2(ShopLoginInfo shop, string prodStr)
{
string url = "https://store.weixin.qq.com/shop-faas/mmchannelstradeproductcore/cgi/goods/upProductV2?token=&lang=zh_CN";
string referer = "https://store.weixin.qq.com/shop/goods/entry";
//JsonSerializerSettings jsonSetting = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore };
//var prodStr = JsonConvert.SerializeObject(prodParam, jsonSetting);
JObject jObj = new JObject();
jObj.Add("data", prodStr);
string body = JsonHelper.SerializeObject(jObj);
var result = WXHttpResponseBLL.WeiXinPostResponse(shop, url, body, referer);
return result;
}
/// <summary>
/// 尝试免审 失败
/// </summary>
/// <param name="shop"></param>
/// <param name="productId"></param>
/// <returns></returns>
public static string getEditProductV2(ShopLoginInfo shop, string productId)
{
string url = "https://store.weixin.qq.com/shop-faas/mmchannelstradeproductcore/cgi/goods/getEditProductV2?token=&lang=zh_CN&productKey=%7B%22productId%22:" +
productId + "%7D&needRealStock=true&preview=false&release=false";
//url = "https://store.weixin.qq.com/shop-faas/mmchannelstradeproductcore/cgi/goods/getEditProductV2?token=&lang=zh_CN&productKey=%7B%22productId%22:" +
// productId + "%7D&needRealStock=true&preview=false&release=true";
string referer = "https://store.weixin.qq.com/shop/goods/entry?productId=" + productId + "&isUpdateAuditFree=0&source=list_edit&continueEditInfo={%22isEditingContinued%22:false,%22lastEditDraftTime%22:0,%22listingTime%22:0}";
//referer = "https://store.weixin.qq.com/shop/goods/entry?productId=" + productId + "&isUpdateAuditFree=1&source=list_audit_free&continueEditInfo={%22isEditingContinued%22:true,%22lastEditDraftTime%22:0,%22listingTime%22:0}";
var result = WXHttpResponseBLL.WeiXinGetResponse(shop, url, referer);
return result;
}
public static string initUploadPart(ShopLoginInfo shop, string submitJson, string prodId, int time1, int time2)
{
string url = "https://store.weixin.qq.com/shop-faas/mmecnodefiletransfer/filecos/initUploadPart?token=&lang=zh_CN";
string referer = "https://store.weixin.qq.com/shop/goods/entry?productId=" + prodId +
"&isUpdateAuditFree=1&source=list_audit_free&continueEditInfo=" +
"{%22isEditingContinued%22:true,%22lastEditDraftTime%22:" + time1 + "," +
"%22listingTime%22:" + time2 + "}";
string body = submitJson; //@"{""name"":""goods/10000456038253/2026-01-20/1768887306422/submit.json""}";
var result = WXHttpResponseBLL.WeiXinPostResponse(shop, url, body, referer);
return result;
}
public static string listingAuditFree(ShopLoginInfo shop, WXUploadProductParam prodParam, string prodId, int time1, int time2)
{
string url = "https://store.weixin.qq.com/shop-faas/mmchannelstradeproductcore/cgi/goods/listingAuditFree?token=&lang=zh_CN";
string referer = "https://store.weixin.qq.com/shop/goods/entry?productId=" + prodId +
"&isUpdateAuditFree=1&source=list_audit_free&continueEditInfo=" +
"{%22isEditingContinued%22:true,%22lastEditDraftTime%22:" + time1 + "," +
"%22listingTime%22:" + time2 + "}";
JsonSerializerSettings jsonSetting = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore };
var prodStr = JsonConvert.SerializeObject(prodParam, jsonSetting);
JObject jObj = new JObject();
jObj.Add("data", prodStr);
string body = JsonHelper.SerializeObject(jObj);
var result = WXHttpResponseBLL.WeiXinPostResponse(shop, url, body, referer);
return result;
}
public static string listingAuditFree(ShopLoginInfo shop, string prodStr, string prodId, int time1, int time2)
{
string url = "https://store.weixin.qq.com/shop-faas/mmchannelstradeproductcore/cgi/goods/listingAuditFree?token=&lang=zh_CN";
string referer = "https://store.weixin.qq.com/shop/goods/entry?productId=" + prodId +
"&isUpdateAuditFree=1&source=list_audit_free&continueEditInfo=" +
"{%22isEditingContinued%22:true,%22lastEditDraftTime%22:" + time1 + "," +
"%22listingTime%22:" + time2 + "}";
JsonSerializerSettings jsonSetting = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore };
JObject jObj = new JObject();
jObj.Add("data", prodStr);
string body = JsonHelper.SerializeObject(jObj);
var result = WXHttpResponseBLL.WeiXinPostResponse(shop, url, body, referer);
return result;
}
public static string uploadPartBinary(ShopLoginInfo shop, string initFileName, string blobPath, string uploadId, string prodId, int time1, int time2)
{
string boundaryLetters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
string boundaryStr = "----WebKitFormBoundary";
for (int i = 0; i < 16; i++)
{
boundaryStr += boundaryLetters[Randomx.GetId(boundaryLetters.Length)];
}
string url = "https://store.weixin.qq.com/shop-faas/mmecnodefiletransfer/filecos/uploadPartBinary?token=&lang=zh_CN";
string referer = "https://store.weixin.qq.com/shop/goods/entry?productId=" + prodId +
"&isUpdateAuditFree=1&source=list_audit_free&continueEditInfo=" +
"{%22isEditingContinued%22:true,%22lastEditDraftTime%22:" + time1 + "," +
"%22listingTime%22:" + time2 + "}";
string body = @"--" + boundaryStr + @"
Content-Disposition: form-data; name=""name""
" + initFileName + @"
--" + boundaryStr + @"
Content-Disposition: form-data; name=""uploadId""
" + uploadId + @"
--" + boundaryStr + @"
Content-Disposition: form-data; name=""partSeq""
1
--" + boundaryStr + @"
Content-Disposition: form-data; name=""file""; filename=""blob""
Content-Type: application/octet-stream
<!>" + blobPath + @"<!>
--" + boundaryStr + @"--
";
var result = WXHttpResponseBLL.WeiXinUploadResponse(shop, url, body, boundaryStr, referer);
return result;
}
public static string completeUploadPart(ShopLoginInfo shop, string completeJson, string prodId, int time1, int time2)
{
string url = "https://store.weixin.qq.com/shop-faas/mmecnodefiletransfer/filecos/completeUploadPart?token=&lang=zh_CN";
string referer = "https://store.weixin.qq.com/shop/goods/entry?productId=" + prodId +
"&isUpdateAuditFree=1&source=list_audit_free&continueEditInfo=" +
"{%22isEditingContinued%22:true,%22lastEditDraftTime%22:" + time1 + "," +
"%22listingTime%22:" + time2 + "}";
string body = completeJson; //{"name":"goods/10000466857488/2026-01-20/1768907711117/submit.json","uploadId":"176890774759894589c6096cab2210e0793688fb68b482b766a0387c8667d3280a36385109","etagList":["ade9671ce546efb4cb209f5aa7e5d597"],"partSeqList":[1]}
var result = WXHttpResponseBLL.WeiXinPostResponse(shop, url, body, referer);
return result;
}
/// <summary>
/// 商品列表
/// </summary>
/// <param name="shop"></param>
/// <param name="status"></param>
/// <param name="pageNum"></param>
/// <param name="pageSize"></param>
/// <returns></returns>
public static string scanProductPreview(ShopLoginInfo shop, string status = "5", int pageNum = 1, int pageSize = 20)
{
string url = "https://store.weixin.qq.com/shop-faas/mmchannelstradeproductcore/cgi/goods/scanProductPreview?token=&lang=zh_CN";
string referer = "https://store.weixin.qq.com/shop/goods/list?currentTab=PRODUCT_STATUS_ALL";
string body = @"{""pageSize"":" + pageSize + @",""productStatus"":[-1],""productSource"":""[1,16,32]"",""searchSource"":1,""useNew"":true,""pageNum"":" + pageNum +
@",""status"":[" + status + @"]}";
var result = WXHttpResponseBLL.WeiXinPostResponse(shop, url, body, referer);
return result;
}
/// <summary>
/// 添加售后地址
/// </summary>
public static string addAddress(ShopLoginInfo shop, string provinceName, string cityName, string countyName,
string detailInfo, string userName, string telNumber)
{
string url = "https://store.weixin.qq.com/shop-faas/mmchannelstradeexpress/address/addAddress?token=&lang=zh_CN";
string referer = "https://store.weixin.qq.com/shop/address/expressAddressMgmt";
string address = "{\"addressInfo\":{\"provinceName\":\"" + provinceName +
"\",\"cityName\":\"" + cityName + "\",\"countyName\":\"" + countyName +
"\",\"detailInfo\":\"" + detailInfo + "\",\"userName\":\"" + userName +
"\",\"telNumber\":\"" + telNumber + "\",\"location\":{}},\"defaultSend\":0,\"defaultRecv\":0}";
JObject obj = new JObject();
obj["data"] = address;
string body = JsonHelper.SerializeObject(obj);
var result = WXHttpResponseBLL.WeiXinPostResponse(shop, url, body, referer);
return result;
}
/// <summary>
/// 获取服务接口到期时间
/// </summary>
/// <param name="shop"></param>
/// <returns></returns>
public static string GetApiServiceList(ShopLoginInfo shop)
{
string url = "https://store.weixin.qq.com/shop-faas/mmecnodeservicemarket/service/GetMyServiceList?offset=0&limit=20&status=2&token=&lang=zh_CN";
string referer = "https://store.weixin.qq.com/shop/servicemarket/myServices?status=2";
var result = WXHttpResponseBLL.WeiXinGetResponse(shop, url, referer);
return result;
}
}
public class AddPriceRule2
+3 -3
View File
@@ -30,7 +30,7 @@
{
System.Windows.Forms.TreeNode treeNode1 = new System.Windows.Forms.TreeNode("选品上传");
System.Windows.Forms.TreeNode treeNode2 = new System.Windows.Forms.TreeNode("商品预售/下架");
System.Windows.Forms.TreeNode treeNode3 = new System.Windows.Forms.TreeNode("营销工具");
System.Windows.Forms.TreeNode treeNode3 = new System.Windows.Forms.TreeNode("爆单神器");
System.Windows.Forms.TreeNode treeNode4 = new System.Windows.Forms.TreeNode("商品管理", new System.Windows.Forms.TreeNode[] {
treeNode1,
treeNode2,
@@ -129,8 +129,8 @@
treeNode1.Text = "选品上传";
treeNode2.Name = "商品预售/下架";
treeNode2.Text = "商品预售/下架";
treeNode3.Name = "营销工具";
treeNode3.Text = "营销工具";
treeNode3.Name = "爆单神器";
treeNode3.Text = "爆单神器";
treeNode4.Name = "商品管理";
treeNode4.Text = "商品管理";
this.tv.Nodes.AddRange(new System.Windows.Forms.TreeNode[] {
@@ -18,7 +18,7 @@ namespace TemuKJD.WXForms.ProductForms
public static WXProductForm instance;
public Lazy<WXDBProdUploadForm> userSelectDbProductForm = new Lazy<WXDBProdUploadForm>();
public Lazy<WXProdPreSaleForm> wxProdPreSaleForm = new Lazy<WXProdPreSaleForm>();
//public Lazy<PDDProdCouponForm> prodCouponForm = new Lazy<PDDProdCouponForm>();
public Lazy<WXProdCouponOrderBoomForm> wxProdCouponForm = new Lazy<WXProdCouponOrderBoomForm>();
public WXProductForm()
{
@@ -28,7 +28,7 @@ namespace TemuKJD.WXForms.ProductForms
{
tv.SelectedNode = tv.Nodes[0].Nodes[0];
tv.ExpandGroup(tv.Nodes[0].Name);
List<string> hideName = new List<string>() { "商品列表", "营销工具" };
List<string> hideName = new List<string>() { "商品列表", "爆单神器1" };
if (BaseClass.GroupId == 3)
{
@@ -73,9 +73,9 @@ namespace TemuKJD.WXForms.ProductForms
case "商品预售/下架":
SetForm(wxProdPreSaleForm.Value);
break;
//case "营销工具":
// SetForm(prodCouponForm.Value);
// break;
case "爆单神器":
SetForm(wxProdCouponForm.Value);
break;
}
}));
}).Start();
+17 -7
View File
@@ -371,7 +371,7 @@ namespace TemuKJD.WXForms.ShopForms
this.btnImport.Enabled = true;
}
private void RefreshDataGridView(bool updateStatus=true)
private void RefreshDataGridView(bool updateStatus=true, List<ShopLoginInfo> shopUpdateLst = null)
{
if (isLoading)
{
@@ -404,8 +404,8 @@ namespace TemuKJD.WXForms.ShopForms
}));
var shopList = GlobalConfig.ShopLoginList.Where(s => !string.IsNullOrEmpty(s.ShopId)
|| GlobalConfig.ShopLoginList.Where(ss=>ss.LoginName == s.LoginName).Count() == 1)
/*.OrderBy(s=>s.LoginName)*/.ToList();
|| GlobalConfig.ShopLoginList.Where(ss=>ss.LoginName == s.LoginName).Count() == 1)
/*.OrderBy(s=>s.LoginName)*/.ToList();
Invoke(new Action(() =>
{
@@ -440,7 +440,11 @@ namespace TemuKJD.WXForms.ShopForms
List<string> shopIdList = GetCheckedShopIdList();
this.Invoke(new Action(() =>
{
this.dgvShop.Rows.Clear();
foreach(DataGridViewRow row in dgvShop.Rows.Cast<DataGridViewRow>())
{
if (!shopList.Any(s => s.ShopId == row.Cells["colShopId"].Value.ParseToString()))
this.dgvShop.Rows.Remove(row);
}
if (updateStatus)
this.statusBar.pgbTaskProgress.Maximum = shopList.Count; // 显示总数
}));
@@ -456,6 +460,10 @@ namespace TemuKJD.WXForms.ShopForms
this.statusBar.pgbTaskProgress.Text = (i + 1) + "/" + shopList.Count;
}));
}
if (shopUpdateLst != null && !shopUpdateLst.Contains(shopList[i]))
continue;
AddDataGridViewRow(shopList[i], true, shopIdList.Contains(shopList[i].ShopId));
}
if (this.Created)
@@ -545,7 +553,7 @@ namespace TemuKJD.WXForms.ShopForms
}
/// <summary>
/// 检测店铺授权状态
/// 检测店铺登录状态
/// </summary>
/// <param name="shopNames"></param>
/// <param name="isShowProgress"></param>
@@ -627,6 +635,7 @@ namespace TemuKJD.WXForms.ShopForms
UpdateServerShopCookies(shop); // 店铺cookie写入服务端,多店共用一个登录账号一组cookie
StartUp.SaveLocalShopLoginInfo();
}
if (this.Created && isShowProgress)
{
this.Invoke(new Action(() =>
@@ -784,7 +793,8 @@ namespace TemuKJD.WXForms.ShopForms
shopLoginForm.openType = EnumOpenType.login;
shopLoginForm.SaveComplete += shopLoginForm_SaveComplete;
shopLoginForm.ShowDialog();
btnRefreshCookie_Click(null, null);
//btnRefreshCookie_Click(null, null);
RefreshDataGridView(true, new List<ShopLoginInfo>() { shop });
}
IsOperate = false;
break;
@@ -846,7 +856,7 @@ namespace TemuKJD.WXForms.ShopForms
this.btnCheck.Enabled = false;
var t = Task.Run(() =>
{
UpdateShop();
//UpdateShop();
CheckShopListLogin(shopNameList.Distinct().ToArray());
RefreshDataGridView(false);
});
+43 -8
View File
@@ -141,11 +141,25 @@ namespace TemuKJD.WXForms.TalkForms
Thread.Sleep(1000);
if (DateTime.Now > nextRefreshTime)
{
Invoke(new Action(() => { pbLoading.Visible = true; }));
nextRefreshTime = DateTime.Now.AddMinutes(30);
RefreshCookie(true);
RefreshMsgCount();
RefreshAfterSale(true);
try
{
RefreshCookie(true);
}
catch (Exception ex) { BaseMsgForm.ShowError("刷新Cookie出错 " + ex.Message); }
try
{
RefreshMsgCount();
}
catch (Exception ex) { BaseMsgForm.ShowError("刷新客服统计出错 " + ex.Message); }
try
{
RefreshAfterSale(true);
}
catch (Exception ex) { BaseMsgForm.ShowError("刷新售后出错 " + ex.Message); }
Invoke(new Action(() => { pbLoading.Visible = false; }));
}
var deltaTime = nextRefreshTime - DateTime.Now;
@@ -434,11 +448,15 @@ namespace TemuKJD.WXForms.TalkForms
try
{
var summary = JsonHelper.SerializeObject(summaryObj);
if (summary.Contains("更新房间游标"))
continue;
// 会话结束,返回
if (summary.Contains("会话已结束"))
continue;
if (summary.Contains("用户已结束会话") || summary.Contains("客服已结束会话"))
continue;
if (summary.Contains("用户超时未回"))
continue;
// 最后一条是自己回复的,返回
var send_open_account = summaryObj["send_open_account"].ParseToString();
if (send_open_account == shop.ShopId)
@@ -470,8 +488,18 @@ namespace TemuKJD.WXForms.TalkForms
//{"finder_live_id":"","finder_username":"","finder_object_id":"","finder_nonce_id":"","app_id":"wxca8d4b8e8feedc2a","page_path":"main/pages/productDetail/productDetail.html?productId=10000444468035&realappid=wx2664a142d76831dd&cacheKey=4f69a37c98838eb27e484b6def86d0ca&cacheType=backup&businessId=1&requestId=4348991209208823817&subScene=1208","product_id":"10000444468035","cover_url":"https://wst.wxapp.tc.qq.com/161/20304/snscosdownload/SH/reserved/69677007000d0f3329fc594d77ef1b15000000a000004f50?imageView2/1/w/400/h/400/q/50","product_title":"保暖加绒中老年妈妈装棉服","market_price":"6980","selling_price":"6180","platform_head_img":"http://mmbiz.qpic.cn/mmbiz_jpg/cpXibyAIsexe8vObd8jWMktZk6sg1kKJgicdnzFiaxR1XvU0Kchlfdewsu7JETDF3lLp5cyULNNee94UPGeU1r9Rw/0?wx_fmt=jpeg/0","platform_name":"夜笙供应链","shop_window_id":"","live_status":"","flash_sale_price":0,"flash_sale_end_time":0,"ec_source":"","selling_price_wording":"","ext_conv":{"ext_conv_type":1,"ec_product_url":"https://channels.weixin.qq.com/shop?login_appid=wx2664a142d76831dd&redirect_url=%2Fgoods%2Fentry%3FproductId%3D10000444468035","context":""}}
try
{
if (responseData.Contains("更新房间游标"))
if (responseData.Contains("\"total_num\":0"))
return;
// 只有一条消息且是更新房间游标的直接退出
if (responseData.Contains("\"total_num\":1") && responseData.Contains("更新房间游标"))
return;
if (responseData.Contains("鉴权失败"))
{
return;
//WXShopListForm.Instance.CheckShopLogin(new ShopLoginInfo[] { shop }, false);
//LoadShop(new List<ShopLoginInfo>() { shop });
}
//{"base_resp":{"ret":30000,"err_msg":"鉴权失败"}}
var jObj = JsonHelper.JObjectParse(responseData);
if (jObj["total_num"].ParseToInt() <= 0)
@@ -479,18 +507,18 @@ namespace TemuKJD.WXForms.TalkForms
// 自己发的消息或者客服自动回复消息不闪烁提示且将表格颜色还原 -----------------------------------------------------------------------------------------------
// 您好!人工客服目前无法及时回复,您可以留言详细问题,我们会尽快为您服务!
//"send_open_account": "wxad4163db54e87b44",
var send_open_account = jObj["list"].LastOrDefault()?["send_open_account"].ParseToString();
var send_open_account = (jObj["list"].LastOrDefault(l => !JsonHelper.SerializeObject(l).Contains("更新房间游标"))?["send_open_account"]).ParseToString();
if (send_open_account == shop.ShopId)
{
row.DefaultCellStyle.BackColor = row.Tag is Color ? (Color)row.Tag : Color.White;
row.Cells["colMessage"].Value = "";
return;
}
var msg_kf_content = jObj["list"].LastOrDefault()?["msg_kf_content"].ParseToString();
var msg_kf_content = jObj["list"].LastOrDefault(l => !JsonHelper.SerializeObject(l).Contains("更新房间游标"))?["msg_kf_content"].ParseToString();
var contentObj = JsonHelper.JObjectParse(msg_kf_content);
var content = contentObj["content"].ParseToString();
if (content.Contains("更新房间游标"))
return;
//if (content.Contains("更新房间游标"))
// return;
// 处理 msg_type=5 的情况 (应该是系统提示消息,有些提示比如关闭会话的无需闪烁) ------------------------------------------------------
// 以下 "msg_type":5
@@ -501,6 +529,12 @@ namespace TemuKJD.WXForms.TalkForms
// {"base_resp":{"err_msg":"ok","ret":0},"kf_openid":"o9cq801T0m1dIivQzMyUwBvW5Znk","list":[{"accept_by_robot":0,"async_check_spam_stage":0,"client_ms":"1768806150100","create_time":"1768806150","create_time_ms":"1768806150100","encrypt_msg_kf_content":"","extra_info":"{\"head_img\":\"http:\\/\\/wx.qlogo.cn\\/mmhead\\/Q3auHgzwzM6vehibAAib9ia4ejxH7ibula7RuH4rTO7H7equgOZPVZl5Ew\\/64\",\"nickname\":\"Vader\",\"list\":[],\"qa_info_list\":[]}","id":"31","imunion_msg_id":"mmec-commkf-v2-4348898496719831040","insert_create_time_ms":"1768806150148","is_anonymous_msg":0,"is_delete":0,"is_expired":0,"is_fail":0,"is_hit_spam":0,"is_revoked":0,"is_sys_msg":1,"msg_direction":3,"msg_id":"4348898496719831040","msg_kf_content":"{\"type\":\"EndRoom\",\"content\":\"用户超时未回,会话已结束,两天内仍可再次联系\",\"room_id\":\"4348684483414425612\",\"msg_id\":\"4348898496719831040\",\"is_anonymous_msg\":0,\"need_update_summary\":1}","msg_type":5,"properties":"0","recv_open_account":"wxad4163db54e87b44","recv_openid":"o9cq801T0m1dIivQzMyUwBvW5Znk","reply_type":0,"room_id":"4348684483414425612","room_useruin":"0","scene":6,"send_open_account":"","send_openid":"o9cq802Ue5pCVRmzuzkFUcnoHjcM","send_scene":6,"session_id":"0","update_time":"1768806150"}],"total_num":1}
if (content.Contains("用户超时未回,会话已结束,两天内仍可再次联系"))
return;
if (content.Contains("会话已结束"))
return;
if (content.Contains("用户已结束会话") || content.Contains("客服已结束会话"))
return;
// {"base_resp":{"err_msg":"ok","ret":0},"kf_openid":"o9cq801T0m1dIivQzMyUwBvW5Znk","list":[{"accept_by_robot":0,"async_check_spam_stage":0,"client_ms":"1768808777632","create_time":"1768808777","create_time_ms":"1768808777632","encrypt_msg_kf_content":"","extra_info":"{\"head_img\":\"http:\\/\\/wx.qlogo.cn\\/mmhead\\/Q3auHgzwzM6vehibAAib9ia4ejxH7ibula7RuH4rTO7H7equgOZPVZl5Ew\\/64\",\"nickname\":\"Vader\",\"list\":[],\"qa_info_list\":[]}","id":"46","imunion_msg_id":"mmec-commkf-v2-4348942579357122569","insert_create_time_ms":"1768808777711","is_anonymous_msg":1,"is_delete":0,"is_expired":0,"is_fail":0,"is_hit_spam":0,"is_revoked":0,"is_sys_msg":1,"msg_direction":3,"msg_id":"4348942579357122569","msg_kf_content":"{\"type\":\"AcceptRoom\",\"content\":\"用户已接入\",\"room_id\":\"4348684483414425612\",\"msg_id\":\"4348942569912549377\",\"is_anonymous_msg\":1,\"need_update_summary\":0,\"summary_content\":\"{\\\"id\\\":\\\"2\\\",\\\"room_id\\\":\\\"4348684483414425612\\\",\\\"scene\\\":6,\\\"account\\\":\\\"3641079964\\\",\\\"send_scene\\\":6,\\\"send_account\\\":\\\"user_acct_2044334303_6\\\",\\\"send_uin\\\":2044334303,\\\"lastest_msg_id\\\":\\\"4348942543756476432\\\",\\\"lastest_msg_content\\\":\\\"\\\",\\\"unread_msg_num\\\":\\\"1\\\",\\\"update_time\\\":\\\"1768808774\\\",\\\"kf_uin\\\":1525084715,\\\"extra_info\\\":\\\"{\\\\\\\"head_img\\\\\\\":\\\\\\\"http:\\\\\\\\\\\\\\/\\\\\\\\\\\\\\/wx.qlogo.cn\\\\\\\\\\\\\\/mmhead\\\\\\\\\\\\\\/Q3auHgzwzM6vehibAAib9ia4ejxH7ibula7RuH4rTO7H7equgOZPVZl5Ew\\\\\\\\\\\\\\/64\\\\\\\",\\\\\\\"nickname\\\\\\\":\\\\\\\"Vader\\\\\\\",\\\\\\\"list\\\\\\\":[],\\\\\\\"qa_info_list\\\\\\\":[]}\\\",\\\"lastest_msg_kf_content\\\":\\\"{\\\\\\\"content\\\\\\\":\\\\\\\"测试\\\\\\\"}\\\",\\\"lastest_user_msg_time\\\":\\\"1768808774\\\",\\\"msg_type\\\":1,\\\"send_open_account\\\":\\\"\\\",\\\"recv_open_account\\\":\\\"wxad4163db54e87b44\\\",\\\"send_openid\\\":\\\"o9cq802Ue5pCVRmzuzkFUcnoHjcM\\\",\\\"recv_openid\\\":\\\"o9cq801T0m1dIivQzMyUwBvW5Znk\\\",\\\"is_delete\\\":0,\\\"star_label\\\":0,\\\"star_label_update_time\\\":\\\"0\\\",\\\"unreplied_msg_time\\\":\\\"1768808777\\\",\\\"kf_reply_status\\\":0,\\\"sync_id\\\":\\\"45\\\",\\\"is_pin\\\":0,\\\"is_pin_update_time\\\":\\\"0\\\",\\\"ext_info\\\":{},\\\"complaint_info\\\":{\\\"complaint_expire_time\\\":0,\\\"complaint_id\\\":\\\"\\\",\\\"complaint_status\\\":0},\\\"user_uin\\\":2044334303,\\\"is_expired\\\":0}\"}","msg_type":5,"properties":"0","recv_open_account":"wxad4163db54e87b44","recv_openid":"o9cq801T0m1dIivQzMyUwBvW5Znk","reply_type":0,"room_id":"4348684483414425612","room_useruin":"0","scene":6,"send_open_account":"","send_openid":"o9cq802Ue5pCVRmzuzkFUcnoHjcM","send_scene":6,"session_id":"0","update_time":"1768808777"}],"total_num":1}
//if (content.Contains("用户已接入"))
// return;
@@ -905,6 +939,7 @@ namespace TemuKJD.WXForms.TalkForms
{
// 登录小店
WXShopLoginForm lf = new WXShopLoginForm(shop);
lf.openType = EnumOpenType.login;
lf.ShowDialog();
}));