diff --git a/Samples/net45-mvc/Senparc.Weixin.MP.Sample.CommonService/Senparc.Weixin.NetCore3Sample.CommonService.csproj b/Samples/net45-mvc/Senparc.Weixin.MP.Sample.CommonService/Senparc.Weixin.NetCore3Sample.CommonService.csproj index 2b9defd05b..4fdd34c4f8 100644 --- a/Samples/net45-mvc/Senparc.Weixin.MP.Sample.CommonService/Senparc.Weixin.NetCore3Sample.CommonService.csproj +++ b/Samples/net45-mvc/Senparc.Weixin.MP.Sample.CommonService/Senparc.Weixin.NetCore3Sample.CommonService.csproj @@ -14,7 +14,7 @@ - + diff --git a/Samples/netcore3.0-mvc/Senparc.Weixin.Sample.NetCore3/Senparc.Weixin.Sample.NetCore3.csproj b/Samples/netcore3.0-mvc/Senparc.Weixin.Sample.NetCore3/Senparc.Weixin.Sample.NetCore3.csproj index e2a7eeeaa8..3c00679569 100644 --- a/Samples/netcore3.0-mvc/Senparc.Weixin.Sample.NetCore3/Senparc.Weixin.Sample.NetCore3.csproj +++ b/Samples/netcore3.0-mvc/Senparc.Weixin.Sample.NetCore3/Senparc.Weixin.Sample.NetCore3.csproj @@ -2,7 +2,7 @@ netcoreapp3.1 - 5.600.7 + 5.600.8 @@ -39,8 +39,8 @@ - - + + diff --git a/Samples/netcore3.0-mvc/Senparc.Weixin.Sample.NetCore3/Startup.cs b/Samples/netcore3.0-mvc/Senparc.Weixin.Sample.NetCore3/Startup.cs index b98449d725..489131eedc 100644 --- a/Samples/netcore3.0-mvc/Senparc.Weixin.Sample.NetCore3/Startup.cs +++ b/Samples/netcore3.0-mvc/Senparc.Weixin.Sample.NetCore3/Startup.cs @@ -218,7 +218,7 @@ public void Configure(IApplicationBuilder app, IWebHostEnvironment env, { app.UseEnyimMemcached(); weixinRegister.UseSenparcWeixinCacheMemcached(); - } // DPBMARK_END + } // DPBMARK_END #endregion @@ -227,7 +227,7 @@ public void Configure(IApplicationBuilder app, IWebHostEnvironment env, weixinRegister //注册公众号(可注册多个) -- DPBMARK MP - .RegisterMpAccount(senparcWeixinSetting.Value, "【盛派网络小助手】公众号")// DPBMARK_END + .RegisterMpAccount(senparcWeixinSetting.Value, "【盛派网络小助手】公众号") // DPBMARK_END //注册多个公众号或小程序(可注册多个) -- DPBMARK MiniProgram @@ -352,7 +352,12 @@ public void Configure(IApplicationBuilder app, IWebHostEnvironment env, //使用公众号的 MessageHandler 中间件(不再需要创建 Controller) --DPBMARK MP app.UseMessageHandlerForMp("/WeixinAsync", CustomMessageHandler.GenerateMessageHandler, options => { - //说明:此代码块中演示了较为全面的功能点,简化的使用可以参考下面小程序和企业微信 + /* 说明: + * 1、此代码块中演示了较为全面的功能点,简化的使用可以参考下面小程序和企业微信 + * 2、使用中间件也支持多账号,可以使用 URL 添加参数的方式(如:/Weixin?id=1), + * 在options.AccountSettingFunc = context => {...} 中,从 context.Request 中获取 [id] 值, + * 并反馈对应的 senparcWeixinSetting 信息 + */ #region 配置 SenparcWeixinSetting 参数,以自动提供 Token、EncodingAESKey 等参数 diff --git a/Samples/netcore3.0-mvc/Senparc.Weixin.Sample.NetCore3/Views/Shared/_Layout.cshtml b/Samples/netcore3.0-mvc/Senparc.Weixin.Sample.NetCore3/Views/Shared/_Layout.cshtml index 97463bf293..c424ef4399 100644 --- a/Samples/netcore3.0-mvc/Senparc.Weixin.Sample.NetCore3/Views/Shared/_Layout.cshtml +++ b/Samples/netcore3.0-mvc/Senparc.Weixin.Sample.NetCore3/Views/Shared/_Layout.cshtml @@ -117,9 +117,9 @@ @*2017年6月16日已发布新版本,改进诸多功能,并发布企业微信(Senparc.Weixin.Work)测试版,支持 .net core / .net 4.5。点击这里查看*@ @*Senparc 官方微信开发教程《微信开发深度解析:公众号、小程序高效开发秘籍》已经出版,点击这里购买正版*@ + Senparc 官方微信开发视频教程《微信公众号+小程序快速开发(一)》已全部上线,【点击这开始学习】
+ Senparc 官方微信开发教程《微信开发深度解析:公众号、小程序高效开发秘籍》已经出版(已第 8 次印刷),【点击这里购买正版】
Sample 项目自动生成工具 v1.6 正式版已发布。【点击这里查看】
- Senparc 官方微信开发视频教程《微信公众号+小程序快速开发》已经上线,陆续更新中,【点击这开始学习】
- Senparc 官方微信开发教程《微信开发深度解析:公众号、小程序高效开发秘籍》已经出版(已第 4 次印刷),【点击这里购买正版】
diff --git a/Samples/netcore3.0-mvc/Senparc.Weixin.Sample.NetCore3/WebSocket/Hubs/SenparcHub.cs b/Samples/netcore3.0-mvc/Senparc.Weixin.Sample.NetCore3/WebSocket/Hubs/SenparcHub.cs index b1a36a380e..c3eb27a34b 100644 --- a/Samples/netcore3.0-mvc/Senparc.Weixin.Sample.NetCore3/WebSocket/Hubs/SenparcHub.cs +++ b/Samples/netcore3.0-mvc/Senparc.Weixin.Sample.NetCore3/WebSocket/Hubs/SenparcHub.cs @@ -1,4 +1,6 @@ -using Microsoft.AspNetCore.SignalR; +//DPBMARK_FILE WebSocket + +using Microsoft.AspNetCore.SignalR; using Senparc.WebSocket.SignalR; using System.Threading.Tasks; diff --git a/src/Senparc.WebSocket/src/Senparc.WebSocket/Senparc.WebSocket/Senparc.WebSocket.netcore3.csproj b/src/Senparc.WebSocket/src/Senparc.WebSocket/Senparc.WebSocket/Senparc.WebSocket.netcore3.csproj index c5a7ee7df1..70e85add38 100644 --- a/src/Senparc.WebSocket/src/Senparc.WebSocket/Senparc.WebSocket/Senparc.WebSocket.netcore3.csproj +++ b/src/Senparc.WebSocket/src/Senparc.WebSocket/Senparc.WebSocket/Senparc.WebSocket.netcore3.csproj @@ -1,7 +1,7 @@ net45;netstandard2.0;netstandard2.1;netcoreapp3.1 - 0.10.600 + 0.11.101 Senparc.WebSocket Senparc.WebSocket true diff --git a/src/Senparc.Weixin.AspNet/Senparc.Weixin.AspNet.netcore3.csproj b/src/Senparc.Weixin.AspNet/Senparc.Weixin.AspNet.netcore3.csproj index 6e44af313f..eb1d5c3943 100644 --- a/src/Senparc.Weixin.AspNet/Senparc.Weixin.AspNet.netcore3.csproj +++ b/src/Senparc.Weixin.AspNet/Senparc.Weixin.AspNet.netcore3.csproj @@ -1,7 +1,7 @@ net45;netstandard2.0;netstandard2.1;netcoreapp3.1 - 0.1.600 + 0.2.101 Senparc.Weixin.AspNet Senparc.Weixin.AspNet true @@ -82,7 +82,7 @@
- + diff --git a/src/Senparc.Weixin.Cache/Senparc.Weixin.Cache.CsRedis/Senparc.Weixin.Cache.CsRedis.netcore3.csproj b/src/Senparc.Weixin.Cache/Senparc.Weixin.Cache.CsRedis/Senparc.Weixin.Cache.CsRedis.netcore3.csproj index 3475e84b69..da194118ca 100644 --- a/src/Senparc.Weixin.Cache/Senparc.Weixin.Cache.CsRedis/Senparc.Weixin.Cache.CsRedis.netcore3.csproj +++ b/src/Senparc.Weixin.Cache/Senparc.Weixin.Cache.CsRedis/Senparc.Weixin.Cache.CsRedis.netcore3.csproj @@ -1,7 +1,7 @@ net45;net461;netstandard2.0;netstandard2.1 - 0.1.600 + 0.2.101 Senparc.Weixin.Cache.CsRedis Senparc.Weixin.Cache.CsRedis true diff --git a/src/Senparc.Weixin.Cache/Senparc.Weixin.Cache.Memcached/Senparc.Weixin.Cache.Memcached.netcore3.csproj b/src/Senparc.Weixin.Cache/Senparc.Weixin.Cache.Memcached/Senparc.Weixin.Cache.Memcached.netcore3.csproj index 815a850d5b..32a38c926d 100644 --- a/src/Senparc.Weixin.Cache/Senparc.Weixin.Cache.Memcached/Senparc.Weixin.Cache.Memcached.netcore3.csproj +++ b/src/Senparc.Weixin.Cache/Senparc.Weixin.Cache.Memcached/Senparc.Weixin.Cache.Memcached.netcore3.csproj @@ -1,7 +1,7 @@ net45;netstandard2.0;netstandard2.1 - 2.6.600 + 2.7.101 Senparc.Weixin.Cache.Memcached Senparc.Weixin.Cache.Memcached 微信公众账号 - Memcached 模块 diff --git a/src/Senparc.Weixin.Cache/Senparc.Weixin.Cache.Redis/Senparc.Weixin.Cache.Redis.netcore3.csproj b/src/Senparc.Weixin.Cache/Senparc.Weixin.Cache.Redis/Senparc.Weixin.Cache.Redis.netcore3.csproj index 850740231d..88e6c96cdb 100644 --- a/src/Senparc.Weixin.Cache/Senparc.Weixin.Cache.Redis/Senparc.Weixin.Cache.Redis.netcore3.csproj +++ b/src/Senparc.Weixin.Cache/Senparc.Weixin.Cache.Redis/Senparc.Weixin.Cache.Redis.netcore3.csproj @@ -1,7 +1,7 @@ net45;net461;netstandard2.0;netstandard2.1 - 2.8.600 + 2.9.101 Senparc.Weixin.Cache.Redis Senparc.Weixin.Cache.Redis true diff --git a/src/Senparc.Weixin.MP.Middleware/Senparc.Weixin.MP.Middleware.netcore3.csproj b/src/Senparc.Weixin.MP.Middleware/Senparc.Weixin.MP.Middleware.netcore3.csproj index 408f1f2a62..4226901831 100644 --- a/src/Senparc.Weixin.MP.Middleware/Senparc.Weixin.MP.Middleware.netcore3.csproj +++ b/src/Senparc.Weixin.MP.Middleware/Senparc.Weixin.MP.Middleware.netcore3.csproj @@ -1,7 +1,7 @@ net45;netstandard2.0;netstandard2.1;netcoreapp3.1 - 0.1.600 + 0.2.101 Senparc.Weixin.MP.Middleware Senparc.Weixin.MP.Middleware true @@ -82,7 +82,7 @@ - + diff --git a/src/Senparc.Weixin.MP.MvcExtension/Senparc.Weixin.MP.MvcExtension/Senparc.Weixin.MP.MvcExtension.netcore3.csproj b/src/Senparc.Weixin.MP.MvcExtension/Senparc.Weixin.MP.MvcExtension/Senparc.Weixin.MP.MvcExtension.netcore3.csproj index a5113d73a0..702750d267 100644 --- a/src/Senparc.Weixin.MP.MvcExtension/Senparc.Weixin.MP.MvcExtension/Senparc.Weixin.MP.MvcExtension.netcore3.csproj +++ b/src/Senparc.Weixin.MP.MvcExtension/Senparc.Weixin.MP.MvcExtension/Senparc.Weixin.MP.MvcExtension.netcore3.csproj @@ -1,7 +1,7 @@ net45;netstandard2.0;netstandard2.1;netcoreapp3.1 - 7.5.600 + 7.6.101 Senparc.Weixin.MP.MvcExtension Senparc.Weixin.MP.MvcExtension true @@ -163,7 +163,7 @@ - + diff --git a/src/Senparc.Weixin.MP/Senparc.Weixin.MP.Test/CommonAPIs/CommonApiTest.Menu.cs b/src/Senparc.Weixin.MP/Senparc.Weixin.MP.Test/CommonAPIs/CommonApiTest.Menu.cs index 042b0962c8..780f288136 100644 --- a/src/Senparc.Weixin.MP/Senparc.Weixin.MP.Test/CommonAPIs/CommonApiTest.Menu.cs +++ b/src/Senparc.Weixin.MP/Senparc.Weixin.MP.Test/CommonAPIs/CommonApiTest.Menu.cs @@ -32,11 +32,9 @@ namespace Senparc.Weixin.MP.Test.CommonAPIs { public partial class CommonApiTest { - [TestMethod] + //[TestMethod]//已经通过测试 public void CreateMenuTest() { - return;//已经通过测试 - //var accessToken = AccessTokenContainer.GetAccessToken(_appId); ButtonGroup bg = new ButtonGroup(); diff --git a/src/Senparc.Weixin.MP/Senparc.Weixin.MP.Test/CommonAPIs/CommonApiTest.cs b/src/Senparc.Weixin.MP/Senparc.Weixin.MP.Test/CommonAPIs/CommonApiTest.cs index c0eb9a4829..4e985f4a65 100644 --- a/src/Senparc.Weixin.MP/Senparc.Weixin.MP.Test/CommonAPIs/CommonApiTest.cs +++ b/src/Senparc.Weixin.MP/Senparc.Weixin.MP.Test/CommonAPIs/CommonApiTest.cs @@ -49,7 +49,7 @@ and limitations under the License. namespace Senparc.Weixin.MP.Test.CommonAPIs { //已通过测试 - //[TestClass] + [TestClass] public partial class CommonApiTest : BaseTest { private dynamic _appConfig; diff --git a/src/Senparc.Weixin.MP/Senparc.Weixin.MP.Test/MessageHandlers/MessageHandlers_OmitRepeatMessageTest.cs b/src/Senparc.Weixin.MP/Senparc.Weixin.MP.Test/MessageHandlers/MessageHandlers_OmitRepeatMessageTest.cs index f89497a855..a5b4d9d94d 100644 --- a/src/Senparc.Weixin.MP/Senparc.Weixin.MP.Test/MessageHandlers/MessageHandlers_OmitRepeatMessageTest.cs +++ b/src/Senparc.Weixin.MP/Senparc.Weixin.MP.Test/MessageHandlers/MessageHandlers_OmitRepeatMessageTest.cs @@ -26,6 +26,7 @@ and limitations under the License. using Senparc.Weixin.MP.Entities; using Senparc.Weixin.MP.Entities.Request; using Senparc.Weixin.MP.MessageHandlers; +using Senparc.WeixinTests; namespace Senparc.Weixin.MP.Test.MessageHandlers { @@ -34,12 +35,12 @@ public class OmitRepeatMessageMessageHandlers : MessageHandler diff --git a/src/Senparc.Weixin.MP/Senparc.Weixin.MP/Containers/AccessTokenContainer.cs b/src/Senparc.Weixin.MP/Senparc.Weixin.MP/Containers/AccessTokenContainer.cs index 4840d4ce2d..cb0ecbbb41 100644 --- a/src/Senparc.Weixin.MP/Senparc.Weixin.MP/Containers/AccessTokenContainer.cs +++ b/src/Senparc.Weixin.MP/Senparc.Weixin.MP/Containers/AccessTokenContainer.cs @@ -118,45 +118,9 @@ namespace Senparc.Weixin.MP.Containers public class AccessTokenBag : BaseContainerBag, IBaseContainerBag_AppId { public string AppId { get; set; } - // { - // get { return _appId; } - //#if NET35 || NET40 - // set { this.SetContainerProperty(ref _appId, value, "AppId"); } - //#else - // set { this.SetContainerProperty(ref _appId, value); } - //#endif - // } - public string AppSecret { get; set; } - // { - // get { return _appSecret; } - //#if NET35 || NET40 - // set { this.SetContainerProperty(ref _appSecret, value, "AppSecret"); } - //#else - // set { this.SetContainerProperty(ref _appSecret, value); } - //#endif - // } - public DateTimeOffset AccessTokenExpireTime { get; set; } - // { - // get { return _accessTokenExpireTime; } - //#if NET35 || NET40 - // set { this.SetContainerProperty(ref _accessTokenExpireTime, value, "AccessTokenExpireTime"); } - //#else - // set { this.SetContainerProperty(ref _accessTokenExpireTime, value); } - //#endif - // } - public AccessTokenResult AccessTokenResult { get; set; } - // { - // get { return _accessTokenResult; } - //#if NET35 || NET40 - // set { this.SetContainerProperty(ref _accessTokenResult, value, "AccessTokenResult"); } - //#else - // set { this.SetContainerProperty(ref _accessTokenResult, value); } - //#endif - // } - //private AccessTokenResult _accessTokenResult; //private DateTimeOffset _accessTokenExpireTime; //private string _appSecret; @@ -286,6 +250,10 @@ public static async Task RegisterAsync(string appId, string appSecret, string na if (!name.IsNullOrEmpty()) { + /* + * 注意:此处会修改全局的 WeixinAppId 和 WeixinAppSecret 的值,如果小程序从这里注册(并且没有提供 name),就会影响到公众号的参数 + * https://github.com/JeffreySu/WeiXinMPSDK/pull/2261/files + */ Senparc.Weixin.Config.SenparcWeixinSetting.Items[name].WeixinAppId = appId; Senparc.Weixin.Config.SenparcWeixinSetting.Items[name].WeixinAppSecret = appSecret; } diff --git a/src/Senparc.Weixin.MP/Senparc.Weixin.MP/Containers/JsApiTicketContainer.cs b/src/Senparc.Weixin.MP/Senparc.Weixin.MP/Containers/JsApiTicketContainer.cs index 4cc8c75315..12c9da0c60 100644 --- a/src/Senparc.Weixin.MP/Senparc.Weixin.MP/Containers/JsApiTicketContainer.cs +++ b/src/Senparc.Weixin.MP/Senparc.Weixin.MP/Containers/JsApiTicketContainer.cs @@ -100,43 +100,9 @@ namespace Senparc.Weixin.MP.Containers public class JsApiTicketBag : BaseContainerBag, IBaseContainerBag_AppId { public string AppId { get; set; } - // { - // get { return _appId; } - //#if NET35 || NET40 - // set { this.SetContainerProperty(ref _appId, value, "AppId"); } - //#else - // set { this.SetContainerProperty(ref _appId, value); } - //#endif - // } public string AppSecret { get; set; } - // { - // get { return _appSecret; } - //#if NET35 || NET40 - // set { this.SetContainerProperty(ref _appSecret, value, "AppSecret"); } - //#else - // set { this.SetContainerProperty(ref _appSecret, value); } - //#endif - // } - public JsApiTicketResult JsApiTicketResult { get; set; } - // { - // get { return _jsApiTicketResult; } - //#if NET35 || NET40 - // set { this.SetContainerProperty(ref _jsApiTicketResult, value, "JsApiTicketResult"); } - //#else - // set { this.SetContainerProperty(ref _jsApiTicketResult, value); } - //#endif - // } - public DateTimeOffset JsApiTicketExpireTime { get; set; } - // { - // get { return _jsApiTicketExpireTime; } - //#if NET35 || NET40 - // set { this.SetContainerProperty(ref _jsApiTicketExpireTime, value, "JsApiTicketExpireTime"); } - //#else - // set { this.SetContainerProperty(ref _jsApiTicketExpireTime, value); } - //#endif - // } /// /// 只针对这个AppId的锁 diff --git a/src/Senparc.Weixin.MP/Senparc.Weixin.MP/Containers/WxCardApiTicketContainer.cs b/src/Senparc.Weixin.MP/Senparc.Weixin.MP/Containers/WxCardApiTicketContainer.cs index 6b7b02d4e1..b80cfc8f14 100644 --- a/src/Senparc.Weixin.MP/Senparc.Weixin.MP/Containers/WxCardApiTicketContainer.cs +++ b/src/Senparc.Weixin.MP/Senparc.Weixin.MP/Containers/WxCardApiTicketContainer.cs @@ -70,69 +70,9 @@ namespace Senparc.Weixin.MP.Containers public class WxCardApiTicketBag : BaseContainerBag, IBaseContainerBag_AppId { public string AppId { get; set; } - // { - // get - // { - // return _appId; - // } - //#if NET35 || NET40 - // set { this.SetContainerProperty(ref _appId, value, "AppId"); } - //#else - // set - // { - // this.SetContainerProperty(ref _appId, value); - // } - //#endif - // } - public string AppSecret { get; set; } - // { - // get - // { - // return _appSecret; - // } - //#if NET35 || NET40 - // set { this.SetContainerProperty(ref _appSecret, value, "AppSecret"); } - //#else - // set - // { - // this.SetContainerProperty(ref _appSecret, value); - // } - //#endif - // } - public JsApiTicketResult WxCardApiTicketResult { get; set; } - // { - // get - // { - // return _WxCardApiTicketResult; - // } - //#if NET35 || NET40 - // set { this.SetContainerProperty(ref _WxCardApiTicketResult, value, "WxCardApiTicketResult"); } - //#else - // set - // { - // this.SetContainerProperty(ref _WxCardApiTicketResult, value); - // } - //#endif - // } - public DateTimeOffset WxCardApiTicketExpireTime { get; set; } - // { - // get - // { - // return _WxCardApiTicketExpireTime; - // } - //#if NET35 || NET40 - // set { this.SetContainerProperty(ref _WxCardApiTicketExpireTime, value, "WxCardApiExpireTime"); } - //#else - // set - // { - // this.SetContainerProperty(ref _WxCardApiTicketExpireTime, value); - // } - //#endif - // } - /// /// 只针对这个AppId的锁 /// diff --git a/src/Senparc.Weixin.MP/Senparc.Weixin.MP/Enums.cs b/src/Senparc.Weixin.MP/Senparc.Weixin.MP/Enums.cs index 3c3760dde5..270abc6a25 100644 --- a/src/Senparc.Weixin.MP/Senparc.Weixin.MP/Enums.cs +++ b/src/Senparc.Weixin.MP/Senparc.Weixin.MP/Enums.cs @@ -96,6 +96,9 @@ and limitations under the License. 修改标识:Senparc - 20191206 修改描述:AutoReplyType 添加卡券(card)枚举 + 修改标识:Senparc - 20201211 + 修改描述:v1.6.101.1 修改 TenPayV3Type 过期提示 + ----------------------------------------------------------------*/ using System; @@ -991,7 +994,7 @@ public enum QrCode_ActionName /// 支付类型 /// - [Obsolete("请使用 Senparc.Weixin.TenPay.dll,Senparc.Weixin.TenPay.V3 中的对应方法")] + [Obsolete("请使用 Senparc.Weixin.TenPay.dll,Senparc.Weixin.TenPay 中的对应方法")] public enum TenPayV3Type { /// diff --git a/src/Senparc.Weixin.MP/Senparc.Weixin.MP/Senparc.Weixin.MP.netcore3.csproj b/src/Senparc.Weixin.MP/Senparc.Weixin.MP/Senparc.Weixin.MP.netcore3.csproj index a4f6a4822c..e44eb25faa 100644 --- a/src/Senparc.Weixin.MP/Senparc.Weixin.MP/Senparc.Weixin.MP.netcore3.csproj +++ b/src/Senparc.Weixin.MP/Senparc.Weixin.MP/Senparc.Weixin.MP.netcore3.csproj @@ -1,7 +1,7 @@ net45;netstandard2.0;netstandard2.1 - 16.10.601 + 16.11.101 Senparc.Weixin.MP Senparc.Weixin.MP true @@ -499,7 +499,7 @@ v16.10.502.3 "获取授权页链接数据开票来源"属性的枚举类型序列化字符串优化 v16.10.502.3 完善“新增永久视频素材”接口参数 v16.10.601 MASSSENDJOBFINISH事件增加 ArticleUrlResult 节点 - + https://github.com/JeffreySu/WeiXinMPSDK @@ -558,8 +558,8 @@ - - + + diff --git a/src/Senparc.Weixin.Open/Senparc.Weixin.Open/Containers/ComponentContainer.cs b/src/Senparc.Weixin.Open/Senparc.Weixin.Open/Containers/ComponentContainer.cs index 410d1c5fa3..8890a797b7 100644 --- a/src/Senparc.Weixin.Open/Senparc.Weixin.Open/Containers/ComponentContainer.cs +++ b/src/Senparc.Weixin.Open/Senparc.Weixin.Open/Containers/ComponentContainer.cs @@ -112,121 +112,38 @@ public class ComponentBag : BaseContainerBag /// 第三方平台AppId /// public string ComponentAppId { get; set; } - // { - // get { return _componentAppId; } - //#if NET35 || NET40 - // set { this.SetContainerProperty(ref _componentAppId, value, "ComponentAppId"); } - //#else - // set { this.SetContainerProperty(ref _componentAppId, value); } - //#endif - // } - /// /// 第三方平台AppSecret /// public string ComponentAppSecret { get; set; } - // { - // get { return _componentAppSecret; } - //#if NET35 || NET40 - // set { this.SetContainerProperty(ref _componentAppSecret, value, "ComponentAppSecret"); } - //#else - // set { this.SetContainerProperty(ref _componentAppSecret, value); } - //#endif - // } - /// /// 第三方平台ComponentVerifyTicket(每隔10分钟微信会主动推送到服务器,IP必须在白名单内) /// public string ComponentVerifyTicket { get; set; } - // { - // get { return _componentVerifyTicket; } - //#if NET35 || NET40 - // set { this.SetContainerProperty(ref _componentVerifyTicket, value, "ComponentVerifyTicket"); } - //#else - // set { this.SetContainerProperty(ref _componentVerifyTicket, value); } - //#endif - // } - /// /// 第三方平台ComponentVerifyTicket过期时间(实际上过期之后仍然可以使用一段时间) /// public DateTimeOffset ComponentVerifyTicketExpireTime { get; set; } - // { - // get { return _componentVerifyTicketExpireTime; } - //#if NET35 || NET40 - // set { this.SetContainerProperty(ref _componentVerifyTicketExpireTime, value, "ComponentVerifyTicketExpireTime"); } - //#else - // set { this.SetContainerProperty(ref _componentVerifyTicketExpireTime, value); } - //#endif - - // } - /// /// ComponentAccessTokenResult /// public ComponentAccessTokenResult ComponentAccessTokenResult { get; set; } - // { - // get { return _componentAccessTokenResult; } - //#if NET35 || NET40 - // set { this.SetContainerProperty(ref _componentAccessTokenResult, value, "ComponentAccessTokenResult"); } - //#else - // set { this.SetContainerProperty(ref _componentAccessTokenResult, value); } - //#endif - // } - /// /// ComponentAccessToken过期时间 /// public DateTimeOffset ComponentAccessTokenExpireTime { get; set; } - // { - // get { return _componentAccessTokenExpireTime; } - //#if NET35 || NET40 - // set { this.SetContainerProperty(ref _componentAccessTokenExpireTime, value, "ComponentAccessTokenExpireTime"); } - //#else - // set { this.SetContainerProperty(ref _componentAccessTokenExpireTime, value); } - //#endif - // } - - /// /// PreAuthCodeResult 预授权码结果 /// public PreAuthCodeResult PreAuthCodeResult { get; set; } - // { - // get { return _preAuthCodeResult; } - //#if NET35 || NET40 - // set { this.SetContainerProperty(ref _preAuthCodeResult, value, "PreAuthCodeResult"); } - //#else - // set { this.SetContainerProperty(ref _preAuthCodeResult, value); } - //#endif - // } - /// /// 预授权码过期时间 /// public DateTimeOffset PreAuthCodeExpireTime { get; set; } - // { - // get { return _preAuthCodeExpireTime; } - //#if NET35 || NET40 - // set { this.SetContainerProperty(ref _preAuthCodeExpireTime, value, "PreAuthCodeExpireTime"); } - //#else - // set { this.SetContainerProperty(ref _preAuthCodeExpireTime, value); } - //#endif - // } - /// /// AuthorizerAccessToken /// public string AuthorizerAccessToken { get; set; } - // { - // get { return _authorizerAccessToken; } - //#if NET35 || NET40 - // set { this.SetContainerProperty(ref _authorizerAccessToken, value, "AuthorizerAccessToken"); } - //#else - // set { this.SetContainerProperty(ref _authorizerAccessToken, value); } - //#endif - // } - /// /// 只针对这个AppId的锁 /// diff --git a/src/Senparc.Weixin.Open/Senparc.Weixin.Open/Senparc.Weixin.Open.netcore3.csproj b/src/Senparc.Weixin.Open/Senparc.Weixin.Open/Senparc.Weixin.Open.netcore3.csproj index d88cfd9d33..52804b8b3d 100644 --- a/src/Senparc.Weixin.Open/Senparc.Weixin.Open/Senparc.Weixin.Open.netcore3.csproj +++ b/src/Senparc.Weixin.Open/Senparc.Weixin.Open/Senparc.Weixin.Open.netcore3.csproj @@ -1,7 +1,7 @@ net45;netstandard2.0;netcoreapp3.0 - 4.7.600 + 4.8.101 Senparc.Weixin.Open Senparc.Weixin.Open true @@ -232,7 +232,7 @@ - + diff --git a/src/Senparc.Weixin.TenPay/Senparc.Weixin.TenPay/Register.cs b/src/Senparc.Weixin.TenPay/Senparc.Weixin.TenPay/Register.cs index 2b6f2631ac..07b35bb1ad 100644 --- a/src/Senparc.Weixin.TenPay/Senparc.Weixin.TenPay/Register.cs +++ b/src/Senparc.Weixin.TenPay/Senparc.Weixin.TenPay/Register.cs @@ -13,6 +13,9 @@ 修改标识:15989221023 - 20200416 修改描述:v1.5.402 添加 Version 参数 https://github.com/JeffreySu/WeiXinMPSDK/pull/2151 + 修改标识:Senparc - 20201210 + 修改描述:v1.6.101 删除 TenpayV3ProtfitRequestDataVersion 的定义,并非全局都需要用到 + ----------------------------------------------------------------*/ using Senparc.CO2NET.RegisterServices; @@ -28,10 +31,12 @@ namespace Senparc.Weixin.TenPay { public static class Register { + /* /// /// 接口版本号 version 是 String(32) 1.0 新增字段,接口版本号,区分原接口,默认填写1.0。入参新增version后,则支付通知接口也将返回单品优惠信息字段promotion_detail,请确保支付通知的签名验证能通过。 /// public static string TenpayV3ProtfitRequestDataVersion { get; set; } = "1.0"; + */ /// /// 注册微信支付Tenpay(注意:新注册账号请使用RegisterTenpayV3! diff --git a/src/Senparc.Weixin.TenPay/Senparc.Weixin.TenPay/Senparc.Weixin.TenPay.netcore3.csproj b/src/Senparc.Weixin.TenPay/Senparc.Weixin.TenPay/Senparc.Weixin.TenPay.netcore3.csproj index c6ddd043e0..849b927a34 100644 --- a/src/Senparc.Weixin.TenPay/Senparc.Weixin.TenPay/Senparc.Weixin.TenPay.netcore3.csproj +++ b/src/Senparc.Weixin.TenPay/Senparc.Weixin.TenPay/Senparc.Weixin.TenPay.netcore3.csproj @@ -1,7 +1,7 @@ net45;netstandard2.0;netstandard2.1 - 1.5.601-beta1 + 1.6.101.1 Senparc.Weixin.TenPay Senparc.Weixin.TenPay true @@ -50,7 +50,11 @@ v1.5.403 增加服务商模式SubAppId、SubMchId字段重载 v1.5.502.4 添加支付退款详情列表 v1.5.601 修正企业红包支付功能中的加密过程 - + v1.6.100 更新 TenPayV3UnifiedorderRequestData 构造函数,version 为空时忽略 https://github.com/JeffreySu/WeiXinMPSDK/issues/2277 + v1.6.101 + 1、更新 TenPayV3UnifiedorderRequestData 构造函数,单独提供 version 参数,修正问题:https://github.com/JeffreySu/WeiXinMPSDK/pull/2151 + 2、删除 TenpayV3ProtfitRequestDataVersion 的定义 + https://github.com/JeffreySu/WeiXinMPSDK diff --git a/src/Senparc.Weixin.TenPay/Senparc.Weixin.TenPay/V3/Universal/Entities/Request/TenPayV3UnifiedorderRequestData.cs b/src/Senparc.Weixin.TenPay/Senparc.Weixin.TenPay/V3/Universal/Entities/Request/TenPayV3UnifiedorderRequestData.cs index 50f87d73a4..afd1b60ab0 100644 --- a/src/Senparc.Weixin.TenPay/Senparc.Weixin.TenPay/V3/Universal/Entities/Request/TenPayV3UnifiedorderRequestData.cs +++ b/src/Senparc.Weixin.TenPay/Senparc.Weixin.TenPay/V3/Universal/Entities/Request/TenPayV3UnifiedorderRequestData.cs @@ -57,6 +57,14 @@ and limitations under the License. 修改标识:hesi815 - 20200318 修改描述:v1.5.401 实现分账接口 + + 修改标识:Senparc - 20201209 + 修改描述:v1.6.100 更新 TenPayV3UnifiedorderRequestData 构造函数,version 为空时忽略 https://github.com/JeffreySu/WeiXinMPSDK/issues/2277 + + 修改标识:Senparc - 20201210 + 修改描述:v1.6.101 更新 TenPayV3UnifiedorderRequestData 构造函数,单独提供 version 参数,修正问题:https://github.com/JeffreySu/WeiXinMPSDK/pull/2151 + + ----------------------------------------------------------------*/ using Senparc.Weixin.TenPay; @@ -208,6 +216,10 @@ public class TenPayV3UnifiedorderRequestData /// 普通商户需要 产品中心-我的产品 中开通分账功能; /// public string ProfitSharing { get; set; } + /// + /// 统一下单接口参数,参考:https://pay.weixin.qq.com/wiki/doc/api/danpin.php?chapter=9_203&index=6 + /// + public string Version { get; private set; } /// /// @@ -310,6 +322,7 @@ public TenPayV3UnifiedorderRequestData() { } /// 并且特约商户需要在 产品中心-我授权的商品中给服务商授权才可以使用分账功能; /// 普通商户需要 产品中心-我的产品 中开通分账功能; /// + /// 统一下单接口参数,参考:https://pay.weixin.qq.com/wiki/doc/api/danpin.php?chapter=9_203&index=6 public TenPayV3UnifiedorderRequestData( string appId, string mchId, string subappid, string submchid, string body, string outTradeNo, int totalFee, string spbillCreateIp, string notifyUrl, TenPayV3Type tradeType, string openid, string subOpenid, string key, string nonceStr, @@ -317,7 +330,7 @@ public TenPayV3UnifiedorderRequestData( string detail = null, string attach = null, string feeType = "CNY", string goodsTag = null, string productId = null, bool limitPay = false, TenPayV3UnifiedorderRequestData_SceneInfo sceneInfo = null, - string profitSharing = null + string profitSharing = null,string version=null ) { AppId = appId; @@ -346,7 +359,7 @@ public TenPayV3UnifiedorderRequestData( SubOpenid = subOpenid; SceneInfo = sceneInfo; ProfitSharing = profitSharing; - + Version = version; #region 设置RequestHandler @@ -357,7 +370,7 @@ public TenPayV3UnifiedorderRequestData( //设置package订单参数 //以下设置顺序按照官方文档排序,方便维护:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1 - PackageRequestHandler.SetParameter("version", Register.TenpayV3ProtfitRequestDataVersion); + PackageRequestHandler.SetParameterWhenNotNull("version", Version); PackageRequestHandler.SetParameter("appid", this.AppId); //公众账号ID PackageRequestHandler.SetParameter("mch_id", this.MchId); //商户号 PackageRequestHandler.SetParameterWhenNotNull("sub_appid", this.SubAppId); //子商户公众账号ID diff --git a/src/Senparc.Weixin.TenPay/Senparc.Weixin.TenPay/V3/Universal/Entities/Request/TenpayV3ProfitShareingRequestData.cs b/src/Senparc.Weixin.TenPay/Senparc.Weixin.TenPay/V3/Universal/Entities/Request/TenpayV3ProfitShareingRequestData.cs index 269d24439c..347eb2bbcf 100644 --- a/src/Senparc.Weixin.TenPay/Senparc.Weixin.TenPay/V3/Universal/Entities/Request/TenpayV3ProfitShareingRequestData.cs +++ b/src/Senparc.Weixin.TenPay/Senparc.Weixin.TenPay/V3/Universal/Entities/Request/TenpayV3ProfitShareingRequestData.cs @@ -38,6 +38,8 @@ and limitations under the License. 修改标识:Senparc - 20200601 修改描述:v1.5.502.3 fix bug:必须指定待分账的接收方列表 判断有误 https://github.com/JeffreySu/WeiXinMPSDK/issues/2184 + 修改标识:Senparc - 20201209 + 修改描述:v1.6.100 更新 TenPayV3UnifiedorderRequestData 构造函数,version 为空时忽略 https://github.com/JeffreySu/WeiXinMPSDK/issues/2277 ----------------------------------------------------------------*/ using Newtonsoft.Json; @@ -636,6 +638,10 @@ public class TenpayV3ProfitShareingRemoveReceiverRequestData /// 分账接收方对象,json格式 /// public TenpayV3ProfitShareing_ReceiverInfo Receiver { get; set; } + /// + /// 统一下单接口参数,参考:https://pay.weixin.qq.com/wiki/doc/api/danpin.php?chapter=9_203&index=6 + /// + public string Version { get; set; } /// @@ -654,11 +660,11 @@ public TenpayV3ProfitShareingRemoveReceiverRequestData() /// 子商户号 /// /// - /// 需要删除的的分账接收方对象 - /// + /// 需要删除的的分账接收方对象 + /// 统一下单接口参数,参考:https://pay.weixin.qq.com/wiki/doc/api/danpin.php?chapter=9_203&index=6 public TenpayV3ProfitShareingRemoveReceiverRequestData( string appId, string mchId, string subappid, string submchid, string key, string nonceStr, - TenpayV3ProfitShareing_ReceiverInfo receiver + TenpayV3ProfitShareing_ReceiverInfo receiver, string version = null ) { AppId = appId; @@ -668,6 +674,7 @@ TenpayV3ProfitShareing_ReceiverInfo receiver SubAppId = subappid; SubMchId = submchid; Receiver = receiver; + Version = version; if (Receiver == null) { throw new ArgumentNullException("必须指定待删除的分账接收方"); @@ -684,21 +691,21 @@ TenpayV3ProfitShareing_ReceiverInfo receiver //设置package订单参数 //以下设置顺序按照官方文档排序,方便维护:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1 - PackageRequestHandler.SetParameter("version", Register.TenpayV3ProtfitRequestDataVersion); - PackageRequestHandler.SetParameter("appid", this.AppId); //公众账号ID - PackageRequestHandler.SetParameter("mch_id", this.MchId); //商户号 - PackageRequestHandler.SetParameterWhenNotNull("sub_appid", this.SubAppId); //子商户公众账号ID - PackageRequestHandler.SetParameterWhenNotNull("sub_mch_id", this.SubMchId); //子商户号 - PackageRequestHandler.SetParameter("nonce_str", this.NonceStr); //随机字符串 - PackageRequestHandler.SetParameter("sign_type", this.SignType); //签名类型,默认为MD5 + PackageRequestHandler.SetParameterWhenNotNull("version", Version); + PackageRequestHandler.SetParameter("appid", this.AppId); //公众账号ID + PackageRequestHandler.SetParameter("mch_id", this.MchId); //商户号 + PackageRequestHandler.SetParameterWhenNotNull("sub_appid", this.SubAppId); //子商户公众账号ID + PackageRequestHandler.SetParameterWhenNotNull("sub_mch_id", this.SubMchId); //子商户号 + PackageRequestHandler.SetParameter("nonce_str", this.NonceStr); //随机字符串 + PackageRequestHandler.SetParameter("sign_type", this.SignType); //签名类型,默认为MD5 JsonSerializerSettings setting = new JsonSerializerSettings(); setting.NullValueHandling = NullValueHandling.Ignore; - PackageRequestHandler.SetParameter("receiver", Receiver.ToJson(false, setting)); //场景信息 + PackageRequestHandler.SetParameter("receiver", Receiver.ToJson(false, setting));//场景信息 Sign = PackageRequestHandler.CreateSha256Sign("key", this.Key); - PackageRequestHandler.SetParameter("sign", Sign); //签名 + PackageRequestHandler.SetParameter("sign", Sign); //签名 #endregion } diff --git a/src/Senparc.Weixin.Work.Middleware/Senparc.Weixin.Work.Middleware.netcore3.csproj b/src/Senparc.Weixin.Work.Middleware/Senparc.Weixin.Work.Middleware.netcore3.csproj index 1200d26954..d038e9015b 100644 --- a/src/Senparc.Weixin.Work.Middleware/Senparc.Weixin.Work.Middleware.netcore3.csproj +++ b/src/Senparc.Weixin.Work.Middleware/Senparc.Weixin.Work.Middleware.netcore3.csproj @@ -1,7 +1,7 @@ net45;netstandard2.0;netstandard2.1;netcoreapp3.1 - 0.1.600 + 0.2.101 Senparc.Weixin.Work.Middleware Senparc.Weixin.Work.Middleware true @@ -82,7 +82,7 @@ - + diff --git a/src/Senparc.Weixin.Work/Senparc.Weixin.Work/Containers/AccessTokenContainer.cs b/src/Senparc.Weixin.Work/Senparc.Weixin.Work/Containers/AccessTokenContainer.cs index eb08d41125..7205e502b4 100644 --- a/src/Senparc.Weixin.Work/Senparc.Weixin.Work/Containers/AccessTokenContainer.cs +++ b/src/Senparc.Weixin.Work/Senparc.Weixin.Work/Containers/AccessTokenContainer.cs @@ -112,54 +112,18 @@ public class AccessTokenBag : BaseContainerBag [Obsolete("请使用 CorpId 属性")] public string CoprId { get { return CorpId; } set { CorpId = value; } } - // { - // get { return _corpId; } - //#if NET35 || NET40 - // set { this.SetContainerProperty(ref _corpId, value, "CorpId"); } - //#else - // set { this.SetContainerProperty(ref _corpId, value); } - //#endif - // } - /// /// CorpSecret /// public string CorpSecret { get; set; } - // { - // get { return _corpSecret; } - //#if NET35 || NET40 - // set { this.SetContainerProperty(ref _corpSecret, value, "CorpSecret"); } - //#else - // set { this.SetContainerProperty(ref _corpSecret, value); } - //#endif - // } - /// /// 过期时间 /// public DateTimeOffset ExpireTime { get; set; } - // { - // get { return _expireTime; } - //#if NET35 || NET40 - // set { this.SetContainerProperty(ref _expireTime, value, "ExpireTime"); } - //#else - // set { this.SetContainerProperty(ref _expireTime, value); } - //#endif - // } - /// /// AccessTokenResult /// public AccessTokenResult AccessTokenResult { get; set; } - // { - // get { return _accessTokenResult; } - //#if NET35 || NET40 - // set { this.SetContainerProperty(ref _accessTokenResult, value, "AccessTokenResult"); } - //#else - // set { this.SetContainerProperty(ref _accessTokenResult, value); } - //#endif - // } - /// /// 只针对这个CorpId的锁 /// diff --git a/src/Senparc.Weixin.Work/Senparc.Weixin.Work/Containers/JsApiTicketContainer.cs b/src/Senparc.Weixin.Work/Senparc.Weixin.Work/Containers/JsApiTicketContainer.cs index be2d285cf8..7f93955762 100644 --- a/src/Senparc.Weixin.Work/Senparc.Weixin.Work/Containers/JsApiTicketContainer.cs +++ b/src/Senparc.Weixin.Work/Senparc.Weixin.Work/Containers/JsApiTicketContainer.cs @@ -113,45 +113,9 @@ public class JsApiTicketBag : BaseContainerBag [Obsolete("请使用 CorpId 属性")] public string CoprId { get { return CorpId; } set { CorpId = value; } } - // { - // get { return _appId; } - //#if NET35 || NET40 - // set { this.SetContainerProperty(ref _appId, value, "AppId"); } - //#else - // set { this.SetContainerProperty(ref _appId, value); } - //#endif - // } - public string CorpSecret { get; set; } - // { - // get { return _appSecret; } - //#if NET35 || NET40 - // set { this.SetContainerProperty(ref _appSecret, value, "AppSecret"); } - //#else - // set { this.SetContainerProperty(ref _appSecret, value); } - //#endif - // } - public JsApiTicketResult JsApiTicketResult { get; set; } - // { - // get { return _jsApiTicketResult; } - //#if NET35 || NET40 - // set { this.SetContainerProperty(ref _jsApiTicketResult, value, "JsApiTicketResult"); } - //#else - // set { this.SetContainerProperty(ref _jsApiTicketResult, value); } - //#endif - // } - public DateTimeOffset ExpireTime { get; set; } - // { - // get { return _expireTime; } - //#if NET35 || NET40 - // set { this.SetContainerProperty(ref _expireTime, value, "ExpireTime"); } - //#else - // set { this.SetContainerProperty(ref _expireTime, value); } - //#endif - // } - /// /// 只针对这个AppId的锁 /// diff --git a/src/Senparc.Weixin.Work/Senparc.Weixin.Work/Containers/ProviderTokenContainer.cs b/src/Senparc.Weixin.Work/Senparc.Weixin.Work/Containers/ProviderTokenContainer.cs index a0e92e5c70..ba101f25e1 100644 --- a/src/Senparc.Weixin.Work/Senparc.Weixin.Work/Containers/ProviderTokenContainer.cs +++ b/src/Senparc.Weixin.Work/Senparc.Weixin.Work/Containers/ProviderTokenContainer.cs @@ -100,54 +100,18 @@ public class ProviderTokenBag : BaseContainerBag /// CorpId /// public string CorpId { get; set; } - // { - // get { return _corpId; } - //#if NET35 || NET40 - // set { this.SetContainerProperty(ref _corpId, value, "CorpId"); } - //#else - // set { this.SetContainerProperty(ref _corpId, value); } - //#endif - // } - /// /// CorpSecret /// public string CorpSecret { get; set; } - // { - // get { return _corpSecret; } - //#if NET35 || NET40 - // set { this.SetContainerProperty(ref _corpSecret, value, "CorpSecret"); } - //#else - // set { this.SetContainerProperty(ref _corpSecret, value); } - //#endif - // } - /// /// 过期时间 /// public DateTimeOffset ExpireTime { get; set; } - // { - // get { return _expireTime; } - //#if NET35 || NET40 - // set { this.SetContainerProperty(ref _expireTime, value, "ExpireTime"); } - //#else - // set { this.SetContainerProperty(ref _expireTime, value); } - //#endif - // } - /// /// ProviderTokenResult /// public ProviderTokenResult ProviderTokenResult { get; set; } - // { - // get { return _providerTokenResult; } - //#if NET35 || NET40 - // set { this.SetContainerProperty(ref _providerTokenResult, value, "ProviderTokenResult"); } - //#else - // set { this.SetContainerProperty(ref _providerTokenResult, value); } - //#endif - // } - /// /// 只针对这个CorpId的锁 /// diff --git a/src/Senparc.Weixin.Work/Senparc.Weixin.Work/Entities/Request/ThirdPartyInfo/RequestMessager_Register_Corp.cs b/src/Senparc.Weixin.Work/Senparc.Weixin.Work/Entities/Request/ThirdPartyInfo/RequestMessager_Register_Corp.cs new file mode 100644 index 0000000000..12955b020a --- /dev/null +++ b/src/Senparc.Weixin.Work/Senparc.Weixin.Work/Entities/Request/ThirdPartyInfo/RequestMessager_Register_Corp.cs @@ -0,0 +1,60 @@ +/*---------------------------------------------------------------- + Copyright (C) 2020 Senparc + + 文件名:RequestMessager_Register_Corp.cs + 文件功能描述:推广二维码注册企业微信完成通知 + + + 创建标识:Billzjh - 20201210 + +----------------------------------------------------------------*/ + +using Senparc.NeuChar.Entities; + +namespace Senparc.Weixin.Work.Entities +{ + /// + /// 推广二维码注册企业微信完成通知 + /// + public class RequestMessager_Register_Corp : ThirdPartyInfoBase, IThirdPartyInfoBase + { + //public override RequestMsgType MsgType + //{ + // get { return RequestMsgType.Unknown; } + //} + + public ThirdPartyInfo InfoType + { + get { return ThirdPartyInfo.REGISTER_CORP; } + } + /// + /// 服务商corpid + /// + public string ServiceCorpId { get; set; } + public string TimeStamp { get; set; } + /// + /// 创建企业对应的注册码 + /// + public string RegisterCode { get; set; } + /// + /// 注册成功的企业corpid + /// + public string AuthCorpId { get; set; } + /// + /// 授权管理员的信息 + /// + public ContactSyncToken ContactSync { get; set; } + /// + /// 授权管理员的userid + /// + public AuthUserInfoModel AuthUserInfo { get; set; } + /// + /// 用户自定义的状态值,参数值由接口 获取注册码 指定。若未指定,则无该字段 + /// + public string State { get; set; } + /// + /// 推广包ID + /// + public string TemplateId { get; set; } + } +} diff --git a/src/Senparc.Weixin.Work/Senparc.Weixin.Work/Enums.cs b/src/Senparc.Weixin.Work/Senparc.Weixin.Work/Enums.cs index a81c10581f..f01316b5fa 100644 --- a/src/Senparc.Weixin.Work/Senparc.Weixin.Work/Enums.cs +++ b/src/Senparc.Weixin.Work/Senparc.Weixin.Work/Enums.cs @@ -191,7 +191,12 @@ public enum ThirdPartyInfo /// /// 外部联系人变更通知 /// - CHANGE_EXTERNAL_CONTACT + CHANGE_EXTERNAL_CONTACT, + + /// + /// 推广码注册完成通知 + /// + REGISTER_CORP } diff --git a/src/Senparc.Weixin.Work/Senparc.Weixin.Work/MessageHandlers/WorkMessageHandler.cs b/src/Senparc.Weixin.Work/Senparc.Weixin.Work/MessageHandlers/WorkMessageHandler.cs index 68601f233c..6874a3d53f 100644 --- a/src/Senparc.Weixin.Work/Senparc.Weixin.Work/MessageHandlers/WorkMessageHandler.cs +++ b/src/Senparc.Weixin.Work/Senparc.Weixin.Work/MessageHandlers/WorkMessageHandler.cs @@ -51,6 +51,9 @@ OnThirdPartyEvent_Contact_Sync 改名为 OnThirdPartyEvent_Change_Contact() 修改标识:gokeiyou - 20201013 修改描述:v3.7.604 添加外部联系人管理 > 客户管理相关接口 + 修改标识:Billzjh - 20201210 + 修改描述:v3.8.101 添加 OnThirdPartyEvent_REGISTER_CORP() 事件 + ----------------------------------------------------------------*/ using System; @@ -742,6 +745,8 @@ private string OnThirdPartyEvent(IThirdPartyInfoBase thirdPartyInfo) return OnThirdPartyEvent_Create_Auth((RequestMessageInfo_Create_Auth)thirdPartyInfo); case ThirdPartyInfo.CHANGE_CONTACT: return OnThirdPartyEvent_Change_Contact((RequestMessageInfo_Change_Contact)thirdPartyInfo); + case ThirdPartyInfo.REGISTER_CORP: + return OnThirdPartyEvent_REGISTER_CORP((RequestMessager_Register_Corp)thirdPartyInfo); case ThirdPartyInfo.CHANGE_EXTERNAL_CONTACT: { var cecRequestMessage = RequestMessage as IRequestMessageEvent_Change_ExternalContact_Base; @@ -779,6 +784,11 @@ protected virtual string OnThirdPartyEvent_Change_Contact(RequestMessageInfo_Cha return ThirdPartyEventSuccessResult; } + protected virtual string OnThirdPartyEvent_REGISTER_CORP(RequestMessager_Register_Corp thirdPartyInfo) + { + return ThirdPartyEventSuccessResult; + } + protected virtual string OnThirdPartyEvent_Create_Auth(RequestMessageInfo_Create_Auth thirdPartyInfo) { return ThirdPartyEventSuccessResult; diff --git a/src/Senparc.Weixin.Work/Senparc.Weixin.Work/Senparc.Weixin.Work.netcore3.csproj b/src/Senparc.Weixin.Work/Senparc.Weixin.Work/Senparc.Weixin.Work.netcore3.csproj index e4edad8289..c69a49e717 100644 --- a/src/Senparc.Weixin.Work/Senparc.Weixin.Work/Senparc.Weixin.Work.netcore3.csproj +++ b/src/Senparc.Weixin.Work/Senparc.Weixin.Work/Senparc.Weixin.Work.netcore3.csproj @@ -2,7 +2,7 @@ net45;netstandard2.0;netstandard2.1 $(Net35FrameworkPathOverride) - 3.7.604 + 3.8.101 Senparc.Weixin.Work Senparc.Weixin.Work true @@ -155,7 +155,7 @@ 1、企业微信通讯录模块下 成员 实体 更新实体新增别名、MemberBase移除isleader 2、新增is_leader_in_dept v3.7.604 添加外部联系人管理 > 客户管理相关接口 - + https://github.com/JeffreySu/WeiXinMPSDK False @@ -233,7 +233,7 @@ - + diff --git a/src/Senparc.Weixin.WxOpen.Middleware/Senparc.Weixin.WxOpen.Middleware.netcore3.csproj b/src/Senparc.Weixin.WxOpen.Middleware/Senparc.Weixin.WxOpen.Middleware.netcore3.csproj index da1b0164f8..63ce03e324 100644 --- a/src/Senparc.Weixin.WxOpen.Middleware/Senparc.Weixin.WxOpen.Middleware.netcore3.csproj +++ b/src/Senparc.Weixin.WxOpen.Middleware/Senparc.Weixin.WxOpen.Middleware.netcore3.csproj @@ -1,7 +1,7 @@ net45;netstandard2.0;netstandard2.1;netcoreapp3.1 - 0.1.600 + 0.2.101 Senparc.Weixin.WxOpen.Middleware Senparc.Weixin.WxOpen.Middleware true @@ -82,7 +82,7 @@ - + diff --git a/src/Senparc.Weixin.MP/Senparc.WeixinTests/WeixinRegisterTests.cs b/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen.Tests/WeixinRegisterTests.cs similarity index 98% rename from src/Senparc.Weixin.MP/Senparc.WeixinTests/WeixinRegisterTests.cs rename to src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen.Tests/WeixinRegisterTests.cs index b74718614b..f63c14a1c6 100644 --- a/src/Senparc.Weixin.MP/Senparc.WeixinTests/WeixinRegisterTests.cs +++ b/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen.Tests/WeixinRegisterTests.cs @@ -14,7 +14,7 @@ using System.IO; using System.Text; -namespace Senparc.WeixinTests +namespace Senparc.Weixin.WxOpen.Tests { [TestClass] public class WeixinRegisterTests @@ -132,6 +132,7 @@ public void TestRegisterMpAccount() logs.Add("********************** End configuration the senparcSDK **********************"); File.AppendAllLines(logFile, logs, Encoding.UTF8); + Console.WriteLine(string.Join("\r\n",logs)); } } } diff --git a/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/WxApp/WxAppApi.cs b/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/WxApp/WxAppApi.cs index 9ce1f494c6..1be97361fa 100644 --- a/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/WxApp/WxAppApi.cs +++ b/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/WxApp/WxAppApi.cs @@ -302,14 +302,15 @@ public static WxJsonResult CheckSession(string accessTokenOrAppId, string openId /// /// [ApiBind(NeuChar.PlatformType.WeChat_MiniProgram, "WxAppApi.AddNearbyPoi", true)] - public static AddNearbyPoiJsonResult AddNearbyPoi(string accessTokenOrAppId, string pic_list, string service_infos, string store_name,string hour, string credential, string address, string company_name, string qualification_list="", string kf_info="", string poi_id="", int timeOut = Config.TIME_OUT) + public static AddNearbyPoiJsonResult AddNearbyPoi(string accessTokenOrAppId, string pic_list, string service_infos, string store_name, string hour, string credential, string address, string company_name, string qualification_list = "", string kf_info = "", string poi_id = "", int timeOut = Config.TIME_OUT) { return WxOpenApiHandlerWapper.TryCommonApi(accessToken => { string urlFormat = Config.ApiMpHost + "/wxa/addnearbypoi?access_token={0}"; string url = string.Format(urlFormat, accessToken); - var data = new { + var data = new + { is_comm_nearby = "1", //必填,写死为"1" pic_list = pic_list, service_infos = service_infos, @@ -620,7 +621,27 @@ public static WxJsonResult GetPaidUnionid(string accessTokenOrAppId, string open }, accessTokenOrAppId); } + /// + /// 风险用户扫描 + /// 快速发现使用小程序的风险用户,提升小程序运营安全 + /// 根据提交的用户信息数据获取用户的安全等级 risk_rank,无需用户授权。 + /// https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/safety-control-capability/getuserriskrank.html + /// + /// + /// + /// + /// + [ApiBind(NeuChar.PlatformType.WeChat_MiniProgram, "WxAppApi.GetUserRiskRank", true)] + public static GetUserRiskRankResult GetUserRiskRank(string accessTokenOrAppId, GetUserRiskRankParam data, int timeOut = Config.TIME_OUT) + { + return WxOpenApiHandlerWapper.TryCommonApi(accessToken => + { + string urlFormat = Config.ApiMpHost + "/wxa/getuserriskrank?access_token={0}"; + var url = urlFormat.FormatWith(accessToken); + return CommonJsonSend.Send(accessToken, url, data, timeOut: timeOut); + }, accessTokenOrAppId); + } #endregion @@ -997,7 +1018,7 @@ public static async Task ImgSecCheckAsync(string accessTokenOrAppI var url = urlFormat.FormatWith(accessToken); var fileDic = new Dictionary(); fileDic["media"] = filePath; - return await CO2NET.HttpUtility.Post.PostFileGetJsonAsync(CommonDI.CommonSP,url, fileDictionary: fileDic, timeOut: timeOut).ConfigureAwait(false); + return await CO2NET.HttpUtility.Post.PostFileGetJsonAsync(CommonDI.CommonSP, url, fileDictionary: fileDic, timeOut: timeOut).ConfigureAwait(false); }, accessTokenOrAppId).ConfigureAwait(false); } @@ -1182,8 +1203,27 @@ public static async Task GetPaidUnionidAsync(string accessTokenOrA }, accessTokenOrAppId).ConfigureAwait(false); } + /// + /// 风险用户扫描 + /// 快速发现使用小程序的风险用户,提升小程序运营安全 + /// 根据提交的用户信息数据获取用户的安全等级 risk_rank,无需用户授权。 + /// https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/safety-control-capability/getuserriskrank.html + /// + /// + /// + /// + /// + [ApiBind(NeuChar.PlatformType.WeChat_MiniProgram, "WxAppApi.GetUserRiskAsync", true)] + public static async Task GetUserRiskAsync(string accessTokenOrAppId, GetUserRiskRankParam data, int timeOut = Config.TIME_OUT) + { + return await WxOpenApiHandlerWapper.TryCommonApiAsync(async accessToken => + { + string urlFormat = Config.ApiMpHost + "/wxa/getuserriskrank?access_token={0}"; + var url = urlFormat.FormatWith(accessToken); - + return await CommonJsonSend.SendAsync(accessToken, url, data, timeOut: timeOut); + }, accessTokenOrAppId).ConfigureAwait(false); + } #endregion } } \ No newline at end of file diff --git a/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/WxApp/WxAppJson/GetUserRiskRankParam.cs b/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/WxApp/WxAppJson/GetUserRiskRankParam.cs new file mode 100644 index 0000000000..896e072e17 --- /dev/null +++ b/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/WxApp/WxAppJson/GetUserRiskRankParam.cs @@ -0,0 +1,40 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Senparc.Weixin.WxOpen.AdvancedAPIs.WxApp.WxAppJson +{ + public class GetUserRiskRankParam + { + /// + /// 小程序appid(必填) + /// + public string appid { get; set; } + /// + /// 用户的openid(必填) + /// + public string openid { get; set; } + /// + /// 场景值,0:注册,1:营销作弊(必填) + /// + public int scene { get; set; } + /// + /// 用户手机号 + /// + public string mobile_no { get; set; } + /// + /// 用户访问源ip(必填) + /// + public string client_ip { get; set; } + /// + /// 用户邮箱地址 + /// + public string email_address { get; set; } + /// + /// 额外补充信息 + /// + public string extended_info { get; set; } + } +} diff --git a/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/WxApp/WxAppJson/GetUserRiskRankResult.cs b/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/WxApp/WxAppJson/GetUserRiskRankResult.cs new file mode 100644 index 0000000000..d01bef6756 --- /dev/null +++ b/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/WxApp/WxAppJson/GetUserRiskRankResult.cs @@ -0,0 +1,17 @@ +using Senparc.Weixin.Entities; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Senparc.Weixin.WxOpen.AdvancedAPIs.WxApp.WxAppJson +{ + public class GetUserRiskRankResult : WxJsonResult + { + /// + /// 用户风险等级 + /// + public int risk_rank { get; set; } + } +} diff --git a/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/Containers/AccessTokenContainer.cs b/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/Containers/AccessTokenContainer.cs index e1f5b7a28c..18b6813ebc 100644 --- a/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/Containers/AccessTokenContainer.cs +++ b/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/Containers/AccessTokenContainer.cs @@ -1,8 +1,35 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +#region Apache License Version 2.0 +/*---------------------------------------------------------------- + +Copyright 2020 Jeffrey Su & Suzhou Senparc Network Technology Co.,Ltd. + +Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file +except in compliance with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under the +License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, +either express or implied. See the License for the specific language governing permissions +and limitations under the License. + +Detail: https://github.com/JeffreySu/WeiXinMPSDK/blob/master/license.md + +----------------------------------------------------------------*/ +#endregion Apache License Version 2.0 + +/*---------------------------------------------------------------- + Copyright (C) 2020 Senparc + + 文件名:AccessTokenContainer.cs + 文件功能描述:小程序的通用接口 AccessToken 容器,用于自动管理 AccessToken,如果过期会重新获取 + + + 修改标识:gokeiyou - 20201230 + 修改描述:新建 WxOpen 专属的 AccessTokenContainer + +----------------------------------------------------------------*/ + using Senparc.CO2NET.Extensions; using Senparc.Weixin.Containers; using Senparc.Weixin.Entities; @@ -10,10 +37,15 @@ using Senparc.Weixin.MP.CommonAPIs; using Senparc.Weixin.MP.Entities; using Senparc.Weixin.Utilities.WeixinUtility; +using System; +using System.Threading.Tasks; namespace Senparc.Weixin.WxOpen.Containers { + /// + /// 小程序 AccessToken 包 + /// public class AccessTokenBag : BaseContainerBag { public string WxOpenAppId { get; set; } @@ -22,6 +54,9 @@ public class AccessTokenBag : BaseContainerBag public AccessTokenResult AccessTokenResult { get; set; } } + /// + /// 小程序的通用接口 AccessToken 容器,用于自动管理 AccessToken,如果过期会重新获取 + /// public class AccessTokenContainer : BaseContainer { const string LockResourceName = "WxOpen.AccessTokenContainer"; diff --git a/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/Containers/SessionContainer.cs b/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/Containers/SessionContainer.cs index 2d7e4f6e3a..924db28316 100644 --- a/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/Containers/SessionContainer.cs +++ b/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/Containers/SessionContainer.cs @@ -66,55 +66,20 @@ public class SessionBag : BaseContainerBag /// Session的Key(3rd_session / sessionId) /// public new string Key { get; set; } - // { - // get { return _key; } - //#if NET35 || NET40 - // set { this.SetContainerProperty(ref _key, value, "Key"); } - //#else - // set { this.SetContainerProperty(ref _key, value); } - //#endif - // } - /// /// OpenId /// public string OpenId { get; set; } - // { - // get { return _openId; } - //#if NET35 || NET40 - // set { this.SetContainerProperty(ref _openId, value, "OpenId"); } - //#else - // set { this.SetContainerProperty(ref _openId, value); } - //#endif - // } - public string UnionId { get; set; } /// /// SessionKey /// public string SessionKey { get; set; } - // { - // get { return _sessionKey; } - //#if NET35 || NET40 - // set { this.SetContainerProperty(ref _sessionKey, value, "SessionKey"); } - //#else - // set { this.SetContainerProperty(ref _sessionKey, value); } - //#endif - // } - /// /// 过期时间 /// public DateTimeOffset ExpireTime { get; set; } - // { - // get { return _expireTime; } - //#if NET35 || NET40 - // set { this.SetContainerProperty(ref _expireTime, value, "ExpireTime"); } - //#else - // set { this.SetContainerProperty(ref _expireTime, value); } - //#endif - // } //private string _key; //private string _openId; diff --git a/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/Register.cs b/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/Register.cs index aa1bc902cc..2edbf96117 100644 --- a/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/Register.cs +++ b/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/Register.cs @@ -32,6 +32,9 @@ and limitations under the License. 修改标识:Senparc - 20191003 修改描述:注册过程自动添加更多 SenparcSettingItem 信息 + + 修改标识:gokeiyou - 20201230 + 修改描述:新建 WxOpen 专属的 AccessTokenContainer ----------------------------------------------------------------*/ diff --git a/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen.netcore3.csproj b/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen.netcore3.csproj index 23f129f85f..666754ea68 100644 --- a/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen.netcore3.csproj +++ b/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen.netcore3.csproj @@ -1,7 +1,7 @@ net45;netstandard2.0;netstandard2.1 - 3.8.601 + 3.10.101 Senparc.Weixin.WxOpen Senparc.Weixin.WxOpen true @@ -148,6 +148,7 @@ 1、小程序 WxOpenMessageHandler 增加 OnImageRequestAsync 和 OnTextRequestAsync 2、调整 MessageHandler 异步方法执行代码 v3.8.512 添加解密到实例信息方法 + v3.10.101 新增 WxOpen 专属 AccessTokenContainer,解决没有提供 name 参数的情况下,Register 过程和公众号注册信息发生冲突的问题 https://github.com/JeffreySu/WeiXinMPSDK @@ -200,7 +201,7 @@ - + diff --git a/src/Senparc.Weixin/Senparc.Weixin/Containers/BaseContainerBag.cs b/src/Senparc.Weixin/Senparc.Weixin/Containers/BaseContainerBag.cs index a7a8789f50..4145025506 100644 --- a/src/Senparc.Weixin/Senparc.Weixin/Containers/BaseContainerBag.cs +++ b/src/Senparc.Weixin/Senparc.Weixin/Containers/BaseContainerBag.cs @@ -98,28 +98,10 @@ public class BaseContainerBag : /*BindableBase, */IBaseContainerBag /// 用于标记,方便后台管理 /// public string Name { get; set; } -// { -// get { return _name; } -//#if NET35 || NET40 -// set { this.SetContainerProperty(ref _name, value, "Name"); } -//#else -// set { this.SetContainerProperty(ref _name, value); } -//#endif - //} - /// /// 通常为AppId /// public string Key { get; set; } -// { -// get { return _key; } -//#if NET35 || NET40 -// set { this.SetContainerProperty(ref _key, value, "Key"); } -//#else -// set { this.SetContainerProperty(ref _key, value); } -//#endif - //} - /// /// 缓存时间,不使用属性变化监听 /// diff --git a/src/Senparc.Weixin/Senparc.Weixin/Enums.cs b/src/Senparc.Weixin/Senparc.Weixin/Enums.cs index 76fe6a3f04..2c658df69e 100644 --- a/src/Senparc.Weixin/Senparc.Weixin/Enums.cs +++ b/src/Senparc.Weixin/Senparc.Weixin/Enums.cs @@ -84,6 +84,9 @@ and limitations under the License. 修改标识:Senparc - 20200430 修改描述:v6.7.502 添加 40164 错误编码 + 修改标识:Billzjh - 20201210 + 修改描述:v6.8.101 完善 ReturnCode_Work 枚举类型 + ----------------------------------------------------------------*/ @@ -650,6 +653,8 @@ public enum ReturnCode_Work 不合法的文件大小 = 40006, 不合法的媒体文件id = 40007, 不合法的消息类型 = 40008, + 上传图片大小不是有效值 = 40009, + 上传视频大小不是有效值 = 40011, 不合法的corpid = 40013, 不合法的access_token = 40014, 不合法的菜单类型 = 40015, @@ -707,10 +712,27 @@ public enum ReturnCode_Work 不合法的永久授权码 = 40084, 不合法的suiteticket = 40085, 不合法的第三方应用appid = 40086, + jobid不存在 = 40088, + 批量任务的结果已清理 = 40089, 导入文件存在不合法的内容 = 40092, 不合法的跳转target = 40093, 不合法的URL = 40094, 修改失败_并发冲突 = 40095, + 不合法的外部联系人userid = 40096, + 该成员尚未离职 = 40097, + 成员尚未实名认证 = 40098, + 外部联系人的数量已达上限 = 40099, + 此用户的外部联系人已经在转移流程中 = 40100, + 域名或IP不可与应用市场上架应用重复 = 40102, + 上传临时图片素材图片格式非法 = 40123, + 推广活动里的sn禁止绑定 = 40124, + 无效的openuserid参数 = 40125, + 企业标签个数达到上限最多为3000个 = 40126, + 不支持的urischema = 40127, + 客户转接过于频繁90天内只允许转接一次同一个客户最多只能转接两次 = 40128, + 当前客户正在转接中 = 40129, + 原跟进人与接手人一样不可继承 = 40130, + andover_userid并不是外部联系人的跟进人 = 40131, 请勿添加其他公众号的主页链接 = 40155, 缺少access_token参数 = 41001, 缺少corpid参数 = 41002, @@ -735,8 +757,36 @@ public enum ReturnCode_Work 缺少suiteticket = 41023, 缺少suitesecret = 41024, 缺少永久授权码 = 41025, + 缺少description参数 = 41033, 缺少login_ticket = 41034, 缺少跳转target = 41035, + 不合法的企业对外简称 = 41036, + 缺少联系我type参数 = 41037, + 缺少联系我scene参数 = 41038, + 无效的联系我type参数 = 41039, + 无效的联系我scene参数 = 41040, + 联系我使用人数超过限制 = 41041, + 无效的联系我style参数 = 41042, + 缺少联系我config_id参数 = 41043, + 无效的联系我config_id参数 = 41044, + API添加联系我达到数量上限 = 41045, + 缺少企业群发消息id = 41046, + 无效的企业群发消息id = 41047, + 无可发送的客户 = 41048, + 缺少欢迎语code参数 = 41049, + 无效的欢迎语code = 41050, + 客户和服务人员已经开始聊天了 = 41051, + 无效的发送时间 = 41052, + 客户未同意聊天存档 = 41053, + 该用户尚未激活 = 41054, + 群欢迎语模板数量达到上限 = 41055, + 外部联系人id类型不正确 = 41056, + 企业或服务商未绑定微信开发者账号 = 41057, + 缺少moment_id参数 = 41059, + 不合法的moment_id参数 = 41060, + 不合法朋友圈发送成员userid = 41061, + 企业创建的朋友圈尚未被成员userid发表 = 41062, + 缺少菜单名 = 41102, access_token过期 = 42001, refresh_token过期 = 42002, oauth_code过期 = 42003, @@ -744,6 +794,17 @@ public enum ReturnCode_Work 预授权码失效 = 42007, 临时授权码失效 = 42008, suitetoken失效 = 42009, + jsapi_ticket不可用 = 42012, + 小程序未登陆或登录态已经过期 = 42013, + 任务卡片消息的task_id不合法 = 42014, + 更新的消息的应用与发送消息的应用不匹配 = 42015, + 更新的task_id不存在 = 42016, + 按钮key值不存在 = 42017, + 按钮key值不合法 = 42018, + 缺少按钮key值不合法 = 42019, + 缺少按钮名称 = 42020, + device_access_token过期 = 42021, + code已经被使用过 = 42022, 需要GET请求 = 43001, 需要POST请求 = 43002, 需要HTTPS = 43003, @@ -752,6 +813,7 @@ public enum ReturnCode_Work 需要订阅 = 43006, 需要授权 = 43007, 需要支付授权 = 43008, + 企业未验证主体 = 43009, 需要处于接收消息模式 = 43010, 需要企业授权 = 43011, 应用对成员不可见 = 43013, @@ -781,9 +843,12 @@ public enum ReturnCode_Work 素材数量超过上限 = 45028, media_id对该应用不可见 = 45029, 作者名字长度超过限制 = 45032, + 接口并发调用超过限制 = 45033, + url必须有协议头 = 45034, 不存在媒体数据 = 46001, 不存在的菜单版本 = 46002, 不存在的菜单数据 = 46003, + 菜单未设置 = 46003, 不存在的成员 = 46004, 解析JSON_XML内容错误 = 47001, Api未授权 = 48001, @@ -791,6 +856,8 @@ public enum ReturnCode_Work suitetoken无效 = 48003, 授权关系无效 = 48004, Api已废弃 = 48005, + 接口权限被收回 = 48006, + 群已经解散 = 49008, redirect_uri未授权 = 50001, 成员不在权限范围 = 50002, 应用已停用 = 50003, @@ -815,6 +882,7 @@ public enum ReturnCode_Work 不允许设置企业 = 60017, 不允许设置应用地理位置上报开关 = 60019, 访问ip不在白名单之中 = 60020, + userid不在应用可见范围内 = 60021, 已授权的应用不允许企业管理组调用接口修改菜单 = 60023, 主页型应用不支持的消息类型 = 60025, 不支持第三方修改主页型应用字段 = 60027, @@ -849,20 +917,152 @@ public enum ReturnCode_Work 字段不合法_可能存在主键冲突或者格式错误 = 60128, 用户设置了拒绝邀请 = 60129, 不合法的职位长度 = 60131, + is_leader_in_dept和department的元素个数不一致 = 60132, + 记录不存在 = 60136, + 家长手机号重复 = 60137, + 不合法的模版ID = 60203, + 模版状态不可用 = 60204, + 模版关键词不匹配 = 60205, + 该种类型的消息只支持第三方独立应用使用 = 60206, + 第三方独立应用只允许发送模板消息 = 60207, + 第三方独立应用不支持指定all = 60208, + 学校已经迁移 = 65000, + 无效的关注模式 = 65001, + 导入家长信息数量过多 = 65002, + 学校尚未迁移 = 65003, + 组织架构不存在 = 65004, + 无效的同步模式 = 65005, + 无效的管理员类型 = 65006, + 无效的家校部门类型 = 65007, + 无效的入学年份 = 65008, + 无效的标准年级类型 = 65009, + 此userid并不是学生 = 65010, + 家长userid数量超过限制 = 65011, + 学生userid数量超过限制 = 65012, + 学生已有家长 = 65013, + 非学校企业 = 65014, + 父部门类型不匹配 = 65015, + 家长人数达到上限 = 65018, + 发票已被其他公众号锁定 = 72023, + 发票状态错误 = 72024, + 存在发票不属于该用户 = 72037, 可信域名不匹配_或者可信域名没有IPC备案_后续将不能在该域名下正常使用jssdk_ = 80001, + 部门下的结点数超过限制 = 81001, + 部门最多15层 = 81002, 邀请额度已用完 = 81003, 部门数量超过上限 = 81004, + 无权限操作标签 = 81011, + 缺失可见范围 = 81012, + UserID部门ID标签ID全部非法或无权限 = 81013, + 标签添加成员单次添加user或party过多 = 81014, + 邮箱域名需要跟企业邮箱域名一致 = 81015, + logined_userid字段缺失 = 81016, + items字段大小超过限制 = 81017, + 该服务商可获取名字数量配额不足 = 81018, + items数组成员缺少id字段 = 81019, + items数组成员缺少type字段 = 81020, + items数组成员的type字段不合法 = 81021, 发送消息或者邀请的参数全部为空或者全部不合法 = 82001, 不合法的PartyID列表长度 = 82002, 不合法的TagID列表长度 = 82003, 微信版本号过低 = 82004, + 成员票据过期 = 84014, + 成员票据无效 = 84015, + 缺少templateid参数 = 84019, + templateid不存在 = 84020, + 缺少register_code参数 = 84021, + 无效的register_code参数 = 84022, + 不允许调用设置通讯录同步完成接口 = 84023, + 无注册信息 = 84024, + 不符合的state参数 = 84025, + 缺少caller参数 = 84052, + 缺少callee参数 = 84053, + 缺少auth_corpid参数 = 84054, + 超过拨打公费电话频率 = 84055, + 被拨打用户安装应用时未授权拨打公费电话权限 = 84056, + 公费电话余额不足 = 84057, + caller呼叫号码不支持 = 84058, + 号码非法 = 84059, + callee呼叫号码不支持 = 84060, + 不存在外部联系人的关系 = 84061, + 未开启公费电话应用 = 84062, + caller不存在 = 84063, + callee不存在 = 84064, + caller跟callee电话号码一致 = 84065, + 服务商拨打次数超过限制 = 84066, + 管理员收到的服务商公费电话个数超过限制 = 84067, + 拨打方被限制拨打公费电话 = 84069, + 不支持的电话号码 = 84070, + 不合法的外部联系人授权码 = 84071, + 应用未配置客服 = 84072, + 客服userid不在应用配置的客服列表中 = 84073, + 没有外部联系人权限 = 84074, + 不合法或过期的authcode = 84075, + 缺失authcode = 84076, + 订单价格过高无法受理 = 84077, + 购买人数不正确 = 84078, + 价格策略不存在 = 84079, + 订单不存在 = 84080, + 存在未支付订单 = 84081, + 存在申请退款中的订单 = 84082, + 非服务人员 = 84083, + 非跟进用户 = 84084, + 应用已下架 = 84085, + 订单人数超过可购买最大人数 = 84086, + 打开订单支付前禁止关闭订单 = 84087, + 禁止关闭已支付的订单 = 84088, + 订单已支付 = 84089, + 缺失user_ticket = 84090, + 订单价格不可低于下限 = 84091, + 无法发起代下单操作 = 84092, + 代理关系已占用无法代下单 = 84093, + 该应用未配置代理分润规则请先联系应用服务商处理 = 84094, + 免费试用版无法扩容 = 84095, + 免费试用版无法续期 = 84096, + 当前企业有未处理订单 = 84097, + 固定总量无法扩容 = 84098, + 非购买状态无法扩容 = 84099, + 未购买过此应用无法续期 = 84100, + 企业已试用付费版本无法全新购买 = 84101, + 企业当前应用状态已过期无法扩容 = 84102, + 仅可修改未支付订单 = 84103, + 订单已支付无法修改 = 84104, + 订单已被取消无法修改 = 84105, + 企业含有该应用的待支付订单无法代下单 = 84106, + 企业含有该应用的退款中订单无法代下单 = 84107, + 企业含有该应用的待生效订单无法代下单 = 84108, + 订单定价不能未0 = 84109, + 新安装应用不在试用状态无法升级为付费版 = 84110, + 无足够可用优惠券 = 84111, + 无法关闭未支付订单 = 84112, + 无付费信息 = 84113, + 虚拟版本不支持下单 = 84114, + 虚拟版本不支持扩容 = 84115, + 虚拟版本不支持续期 = 84116, + 在虚拟正式版期内不能扩容 = 84117, + 虚拟正式版期内不能变更版本 = 84118, + 当前企业未报备无法进行代下单 = 84119, + 当前应用版本已删除 = 84120, + 应用版本已删除无法扩容 = 84121, + 应用版本已删除无法续期 = 84122, + 非虚拟版本无法升级 = 84123, + 非行业方案订单不能添加部分应用版本的订单 = 84124, + 购买人数不能少于最少购买人数 = 84125, + 购买人数不能多于最大购买人数 = 84126, + 无应用管理权限 = 84127, + 无该行业方案下全部应用的管理权限 = 84128, + 付费策略已被删除无法下单 = 84129, + 订单生效时间不合法 = 84130, + 文件转译解析错误 = 84200, 包含不合法的词语 = 85002, + 每企业每个月设置的可信域名不可超过20个 = 85004, 不合法的会话ID = 86001, 不存在的会话ID = 86003, 不合法的会话名 = 86004, 不合法的会话管理员 = 86005, 不合法的成员列表大小 = 86006, 不存在的成员_86007 = 86007, + 非法操作非自己创建的群 = 86008, 需要会话管理员权限 = 86101, 缺少会话ID = 86201, 缺少会话名 = 86202, @@ -885,6 +1085,7 @@ public enum ReturnCode_Work 非法会话操作者 = 86220, 单聊模式下_发件人与收件人不能为同一人 = 86221, 不允许消息服务访问的API = 86222, + 不是受限群不允许使用该接口 = 86224, 不合法的消息类型_86304 = 86304, 客服服务未启用 = 86305, 缺少发送人 = 86306, @@ -910,6 +1111,106 @@ public enum ReturnCode_Work 摇一摇周边ticket参数不合法 = 90003, 摇一摇周边ticket过期 = 90004, 未开启摇一摇周边服务 = 90005, + + 非法的对外属性类型 = 90100, + 对外属性文本类型长度不合法 = 90101, + 对外属性网页类型标题长度不合法 = 90102, + 对外属性网页url不合法 = 90103, + 对外属性小程序类型标题长度不合法 = 90104, + 对外属性小程序类型pagepath不合法 = 90105, + 对外属性请求参数不合法 = 90106, + 缺少小程序appid参数 = 90200, + 小程序通知的content_item个数超过限制 = 90201, + 小程序通知中的key长度不合法 = 90202, + 小程序通知中的value长度不合法 = 90203, + 小程序通知中的page参数不合法 = 90204, + 小程序未关联到企业中 = 90206, + 不合法的小程序appid = 90207, + 小程序appid不匹配 = 90208, + orderid不合法 = 90300, + 付费应用已过期 = 90302, + 付费应用超过最大使用人数 = 90303, + 订单中心服务异常请稍后重试 = 90304, + 参数错误errmsg中有提示具体哪个参数有问题 = 90305, + 商户设置不合法详情请见errmsg = 90306, + 登录态过期 = 90307, + 在开启IP鉴权的前提下识别为无效的请求IP = 90308, + 订单已经存在请勿重复下单 = 90309, + 找不到订单 = 90310, + 关单失败 = 90311, + 退款请求失败, 详情请看errmsg = 90312, + 退款调用频率限制超过规定的阈值 = 90313, + 订单状态错误可能未支付或者当前状态操作受限 = 90314, + 退款请求失败主键冲突请核实退款refund_id是否已使用 = 90315, + 退款原因编号不对 = 90316, + 尚未注册成为供应商 = 90317, + 参数nonce_str为空或者重复判定为重放攻击 = 90318, + 时间戳为空或者与系统时间间隔太大 = 90319, + 订单token无效 = 90320, + 订单token已过有效时间 = 90321, + 旧套件_包含多个应用的套件_不支持支付系统 = 90322, + 单价超过限额 = 90323, + 商品数量超过限额 = 90324, + 预支单已经存在 = 90325, + 预支单单号非法 = 90326, + 该预支单已经结算下单 = 90327, + 结算下单失败详情请看errmsg = 90328, + 该订单号已经被预支单占用 = 90329, + 创建供应商失败 = 90330, + 更新供应商失败 = 90331, + 还没签署合同 = 90332, + 创建合同失败 = 90333, + 已经过了可退款期限 = 90338, + 供应商主体名包含非法字符 = 90339, + 创建客户失败可能信息真实性校验失败 = 90340, + 退款金额大于付款金额 = 90341, + 退款金额超过账户余额 = 90342, + 退款单号已经存在 = 90343, + 指定的付款渠道无效 = 90344, + 超过5w人民币不可指定微信支付渠道 = 90345, + 同一单的退款次数超过限制 = 90346, + 退款金额不可为0 = 90347, + 管理端没配置支付密钥 = 90348, + 记录数量太大 = 90349, + 银行信息真实性校验失败 = 90350, + 应用状态异常 = 90351, + 延迟试用期天数超过限制 = 90352, + 预支单列表不可为空 = 90353, + 预支单列表数量超过限制 = 90354, + 关联有退款预支单不可删除 = 90355, + 不能0金额下单 = 90356, + 代下单必须指定支付渠道 = 90357, + 预支单或代下单不支持部分退款 = 90358, + 预支单与下单者企业不匹配 = 90359, + 参数refunded_credit_orderid不合法 = 90381, + 必须指定组织者 = 90456, + 日历ID异常 = 90457, + 日历ID列表不能为空 = 90458, + 日历已删除 = 90459, + 日程已删除 = 90460, + 日程ID异常 = 90461, + 日程ID列表不能为空 = 90462, + 不能变更组织者 = 90463, + 参与者数量超过限制 = 90464, + 不支持的重复类型 = 90465, + 不能操作别的应用创建的日历日程 = 90466, + 星期参数异常 = 90467, + 不能变更组织者_ = 90468, + 每页大小超过限制 = 90469, + 页数异常 = 90470, + 提醒时间异常 = 90471, + 没有日历日程操作权限 = 90472, + 颜色参数异常 = 90473, + 组织者不能与参与者重叠 = 90474, + 不是组织者的日历 = 90475, + 不允许操作用户创建的日程 = 90479, + 群主并未离职 = 90500, + 该群不是客户群 = 90501, + 群主已经离职 = 90502, + 满人99个微信成员没办法踢要客户端确认 = 90503, + 群主没变 = 90504, + 离职群正在继承处理中 = 90507, + 离职群已经继承 = 90508, 卡券已被核销 = 91004, 无效的code = 91011, 缺少卡券详情 = 91014, @@ -949,6 +1250,20 @@ public enum ReturnCode_Work 卡券提醒超过16个汉字 = 91053, 卡券描述超过1024个汉字 = 91054, 卡券副标题长度超过18个汉字 = 91055, + 成员不在应用可见范围之内 = 92000, + 应用没有敏感信息权限 = 92001, + 不允许跨企业调用 = 92002, + 机器人webhookurl不合法或者机器人已经被移除出群 = 93000, + 机器人被停用 = 93004, + 不在群里 = 93008, + 应用未开启工作台自定义模式 = 94000, + 不合法的type类型 = 94001, + 缺少keydata字段 = 94002, + keydata的items列表长度超出限制 = 94003, + 缺少list字段 = 94005, + list的items列表长度超出限制 = 94006, + 缺少webview字段 = 94007, + 应用未设置自定义工作台模版类型 = 94008, 应用id已存在 = 301001, accesstoken不允许操作其它应用 = 301002, 不允许删除超级管理员 = 301004, @@ -957,12 +1272,18 @@ public enum ReturnCode_Work 主页型应用不允许做此操作 = 301008, 应用发送消息没有接收主体 = 301009, 部门名已存在 = 301010, + 参数position不合法 = 301012, 座机不合法 = 301013, 英文名称不合法 = 301014, + 参数mediaid不合法 = 301015, + 上传语音文件不符合系统要求 = 301016, + 上传语音文件仅支持AMR格式 = 301017, userid错误 = 301021, 获取打卡数据失败 = 301022, useridlist非法或超过限额 = 301023, 获取打卡记录时间间隔超限 = 301024, + 审批开放接口参数错误 = 301025, + 不允许更新该用户的userid = 301036, 批量同步成员存在userid为空的用户 = 302001, 管理员userid不存在 = 302002, 存在重复的userid = 302003, @@ -971,6 +1292,97 @@ public enum ReturnCode_Work /// 组织架构不合法 = 302004, + 批量导入系统失败请重新尝试导入 = 302005, + 批量导入任务的文件中partyid有重复 = 302006, + 批量导入任务的文件中同一个部门下有两个子部门名字一样 = 302007, + CorpId参数无效 = 2000002, + 不合法的sn = 600001, + 设备已注册 = 600002, + 不合法的硬件activecode = 600003, + 该硬件尚未授权任何企业 = 600004, + 硬件Secret无效 = 600005, + 缺少硬件sn = 600007, + 缺少nonce参数 = 600008, + 缺少timestamp参数 = 600009, + 缺少signature参数 = 600010, + 签名校验失败 = 600011, + 长连接已经注册过设备 = 600012, + 缺少activecode参数 = 600013, + 设备未网络注册 = 600014, + 缺少secret参数_ = 600015, + 设备未激活 = 600016, + 无效的起始结束时间 = 600018, + 设备未登录 = 600020, + 设备sn已存在 = 600021, + 时间戳已失效 = 600023, + 固件大小超过5M = 600024, + 固件名为空或者超过20字节 = 600025, + 固件信息不存在 = 600026, + 非法的固件参数 = 600027, + 固件版本已存在 = 600028, + 非法的固件版本 = 600029, + 缺少固件版本参数 = 600030, + 硬件固件不允许升级 = 600031, + 无法解析硬件二维码 = 600032, + 设备型号id冲突 = 600033, + 指纹数据大小超过限制 = 600034, + 人脸数据大小超过限制 = 600035, + 设备sn冲突 = 600036, + 缺失设备型号id = 600037, + 设备型号不存在 = 600038, + 不支持的设备类型 = 600039, + 打印任务id不存在 = 600040, + 无效的offset或limit参数值 = 600041, + 无效的设备型号id = 600042, + 门禁规则未设置 = 600043, + 门禁规则不合法 = 600044, + 设备已订阅企业信息 = 600045, + 操作id和用户userid不匹配 = 600046, + secretno的status非法 = 600047, + 无效的指纹算法 = 600048, + 无效的人脸识别算法 = 600049, + 无效的算法长度 = 600050, + 设备过期 = 600051, + 无效的文件分块 = 600052, + 该链接已经激活 = 600053, + 该链接已经订阅 = 600054, + 无效的用户类型 = 600055, + 无效的健康状态 = 600056, + 缺少体温参数 = 600057, + 永久二维码超过每个员工5000的限制 = 610001, + scene参数不合法 = 610003, + userid不在客户联系配置的使用范围内 = 610004, + 微盘不存在当前空间 = 640001, + 文件不存在 = 640002, + 文件已删除 = 640003, + 无权限访问 = 640004, + 成员不在空间内 = 640005, + 超出当前成员拥有的容量 = 640006, + 超出微盘的容量 = 640007, + 没有空间权限 = 640008, + 非法文件名 = 640009, + 超出空间的最大成员数 = 640010, + json格式不匹配 = 640011, + 非法的userid = 640012, + 非法的departmentid = 640013, + 空间没有有效的管理员 = 640014, + 不支持设置预览权限 = 640015, + 不支持设置文件水印 = 640016, + 微盘管理端未开通API权限 = 640017, + 微盘管理端未设置编辑权限 = 640018, + API调用次数超出限制 = 640019, + 非法的权限类型 = 640020, + 非法的fatherid = 640021, + 非法的文件内容的base64 = 640022, + 非法的权限范围 = 640023, + 非法的fileid = 640024, + 非法的space_name = 640025, + 非法的spaceid = 640026, + 参数错误 = 640027, + 空间设置了关闭成员邀请链接 = 640028, + 只支持下载普通文件不支持下载文件夹等其他非文件实体类型 = 640029, + 非法的output_file_format = 844001, + #pragma warning restore CS1591 // 缺少对公共可见类型或成员的 XML 注释 } diff --git a/src/Senparc.Weixin/Senparc.Weixin/Senparc.Weixin.netcore3.csproj b/src/Senparc.Weixin/Senparc.Weixin/Senparc.Weixin.netcore3.csproj index 74d8abf6cd..8c8d6cd49b 100644 --- a/src/Senparc.Weixin/Senparc.Weixin/Senparc.Weixin.netcore3.csproj +++ b/src/Senparc.Weixin/Senparc.Weixin/Senparc.Weixin.netcore3.csproj @@ -2,7 +2,7 @@ net45;netstandard2.0;netstandard2.1 $(Net35FrameworkPathOverride) - 6.7.600 + 6.8.101 Senparc.Weixin Senparc.Weixin true @@ -332,14 +332,6 @@ prompt MinimumRecommendedRules.ruleset - - ..\..\Senparc.Weixin.MP.BuildOutPut\ - ..\..\Senparc.Weixin.MP.BuildOutPut\net35\Senparc.Weixin.xml - - - ..\..\Senparc.Weixin.MP.BuildOutPut\ - ..\..\Senparc.Weixin.MP.BuildOutPut\net40\Senparc.Weixin.xml - ..\..\Senparc.Weixin.MP.BuildOutPut\ ..\..\Senparc.Weixin.MP.BuildOutPut\net45\Senparc.Weixin.xml @@ -363,31 +355,7 @@ - - - - - - - - - - - - - - - - - - - - - - - - - +