From c0c60d015135b5e917d7e01e32cef249ee18fe0b Mon Sep 17 00:00:00 2001 From: JeffreySu Date: Wed, 4 May 2022 11:37:06 +0800 Subject: [PATCH] =?UTF-8?q?WxOpen=20v3.15.3=20=20=20=201=E3=80=81=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E5=95=86=E6=88=B7=E5=AE=A2=E6=88=B7=E5=8F=82=E6=95=B0?= =?UTF-8?q?=EF=BC=88BusinessId=EF=BC=89=202=E3=80=81=E5=8D=95=E7=8B=AC?= =?UTF-8?q?=E4=B8=BA=E5=B0=8F=E7=A8=8B=E5=BA=8F=E6=B7=BB=E5=8A=A0=E2=80=9C?= =?UTF-8?q?=E5=AE=A2=E6=9C=8D=E8=BE=93=E5=85=A5=E7=8A=B6=E6=80=81=E2=80=9D?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=EF=BC=8C=E6=94=AF=E6=8C=81=E5=95=86=E6=88=B7?= =?UTF-8?q?=E5=AE=A2=E6=88=B7=E5=8F=82=E6=95=B0=20#2603=20=E6=84=9F?= =?UTF-8?q?=E8=B0=A2=20@lb0726?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AdvancedAPIs/Custom/CustomApi.cs | 8 +- .../AdvancedAPIs/Custom/CustomApi.cs | 122 ++++- .../AdvancedAPIs/DataCube/DataCubeApi.cs | 13 +- .../AdvancedAPIs/Message/MessageApi.cs | 1 - .../AdvancedAPIs/Template/TemplateApi.cs | 5 +- .../AdvancedAPIs/WxApp/WxAppApi.cs | 16 +- .../Entities/Request/RequestMessageText.cs | 9 + .../WxOpenMessageEntityEnlightener.cs | 7 +- .../Senparc.Weixin.WxOpen.net6.csproj | 432 +++++++++--------- 9 files changed, 350 insertions(+), 263 deletions(-) diff --git a/src/Senparc.Weixin.MP/Senparc.Weixin.MP/AdvancedAPIs/Custom/CustomApi.cs b/src/Senparc.Weixin.MP/Senparc.Weixin.MP/AdvancedAPIs/Custom/CustomApi.cs index 265ba074b4..fa1d644911 100644 --- a/src/Senparc.Weixin.MP/Senparc.Weixin.MP/AdvancedAPIs/Custom/CustomApi.cs +++ b/src/Senparc.Weixin.MP/Senparc.Weixin.MP/AdvancedAPIs/Custom/CustomApi.cs @@ -82,7 +82,7 @@ namespace Senparc.Weixin.MP.AdvancedAPIs /// /// 客服接口 /// - [NcApiBind(NeuChar.PlatformType.WeChat_OfficialAccount,true)] + [NcApiBind(NeuChar.PlatformType.WeChat_OfficialAccount, true)] public static class CustomApi { /// @@ -513,7 +513,7 @@ public static WxJsonResult SendCard(string accessTokenOrAppId, string openId, st /// /// /// - public static WxJsonResult SendMiniProgramPage(string accessTokenOrAppId, string openId, string title, string appid, string pagepath, string thumb_media_id, string kfAccount="", int timeOut = Config.TIME_OUT) + public static WxJsonResult SendMiniProgramPage(string accessTokenOrAppId, string openId, string title, string appid, string pagepath, string thumb_media_id, string kfAccount = "", int timeOut = Config.TIME_OUT) { object data = null; if (kfAccount.IsNullOrWhiteSpace()) @@ -525,8 +525,8 @@ public static WxJsonResult SendMiniProgramPage(string accessTokenOrAppId, string miniprogrampage = new { title = title, - appid=appid, - pagepath= pagepath, + appid = appid, + pagepath = pagepath, thumb_media_id = thumb_media_id } }; diff --git a/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/Custom/CustomApi.cs b/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/Custom/CustomApi.cs index 87c206881c..11265f1551 100644 --- a/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/Custom/CustomApi.cs +++ b/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/Custom/CustomApi.cs @@ -35,6 +35,8 @@ and limitations under the License. API地址:https://developers.weixin.qq.com/miniprogram/dev/api/custommsg/conversation.html */ +using Senparc.CO2NET.Extensions; +using Senparc.CO2NET.Helpers.Serializers; using Senparc.NeuChar; using Senparc.Weixin.CommonAPIs; using Senparc.Weixin.Entities; @@ -49,10 +51,36 @@ namespace Senparc.Weixin.WxOpen.AdvancedAPIs [NcApiBind(NeuChar.PlatformType.WeChat_MiniProgram, true)] public class CustomApi { + /* 商户客户参数文档: https://developers.weixin.qq.com/miniprogram/introduction/custom.html#%E6%8E%A5%E6%94%B6%E6%B6%88%E6%81%AF%E6%8E%A8%E9%80%81 */ + /// /// 客服消息统一请求地址格式 /// - public static readonly string UrlFormat = Config.ApiMpHost + "/cgi-bin/message/custom/send?access_token={0}"; + public static readonly string UrlFormat_Send = Config.ApiMpHost + "/cgi-bin/message/custom/send?access_token={0}"; + public static readonly string UrlFormat_Send_Business = Config.ApiMpHost + "/cgi-bin/message/custom/business/send?access_token={0}"; + public static readonly string UrlFormat_Typing = Config.ApiMpHost + "/cgi-bin/message/custom/typing?access_token={0}"; + public static readonly string UrlFormat_Typing_Business = Config.ApiMpHost + "/cgi-bin/message/custom/business/typing?access_token={0}"; + + + /// + /// 根据 BusinessId 获取 Send 接口的 UrlFormat + /// + /// + /// + private static string GetSendUrlFormat(string businessId = null) + { + return businessId.IsNullOrEmpty() ? UrlFormat_Send : UrlFormat_Send_Business; + } + + /// + /// 根据 BusinessId 获取 Typing 接口的 UrlFormat + /// + /// + /// + private static string GetTypingUrlFormat(string businessId = null) + { + return businessId.IsNullOrEmpty() ? UrlFormat_Typing : UrlFormat_Typing_Business; + } #region 同步方法 @@ -63,9 +91,10 @@ public class CustomApi /// AccessToken或AppId(推荐使用AppId,需要先注册) /// 普通用户(openid) /// 文本消息内容 + /// 添加 businessId 参数,则发送到子商户 /// 代理请求超时时间(毫秒) /// - public static WxJsonResult SendText(string accessTokenOrAppId, string openId, string content, + public static WxJsonResult SendText(string accessTokenOrAppId, string openId, string content, string businessId = null, int timeOut = Config.TIME_OUT) { object data = null; @@ -76,12 +105,15 @@ public static WxJsonResult SendText(string accessTokenOrAppId, string openId, st text = new { content = content - } + }, + businessid = businessId }; return WxOpenApiHandlerWapper.TryCommonApi(accessToken => { - return CommonJsonSend.Send(accessToken, UrlFormat, data, timeOut: timeOut); + var urlFormat = GetSendUrlFormat(businessId); + var jsonSetting = new JsonSetting() { IgnoreNulls = true }; + return CommonJsonSend.Send(accessToken, urlFormat, data, timeOut: timeOut, jsonSetting: jsonSetting); }, accessTokenOrAppId); } @@ -109,7 +141,7 @@ public static WxJsonResult SendImage(string accessTokenOrAppId, string openId, s return WxOpenApiHandlerWapper.TryCommonApi(accessToken => { - return CommonJsonSend.Send(accessToken, UrlFormat, data, timeOut: timeOut); + return CommonJsonSend.Send(accessToken, UrlFormat_Send, data, timeOut: timeOut); }, accessTokenOrAppId); } @@ -143,7 +175,7 @@ public static WxJsonResult SendLink(string accessTokenOrAppId, string openId, st return WxOpenApiHandlerWapper.TryCommonApi(accessToken => { - return CommonJsonSend.Send(accessToken, Senparc.Weixin.MP.AdvancedAPIs.CustomApi.UrlFormat, data, timeOut: timeOut); + return CommonJsonSend.Send(accessToken, UrlFormat_Send, data, timeOut: timeOut); }, accessTokenOrAppId); @@ -177,7 +209,36 @@ public static WxJsonResult SendMiniProgramPage(string accessTokenOrAppId, string return WxOpenApiHandlerWapper.TryCommonApi(accessToken => { - return CommonJsonSend.Send(accessToken, Senparc.Weixin.MP.AdvancedAPIs.CustomApi.UrlFormat, data, timeOut: timeOut); + return CommonJsonSend.Send(accessToken, UrlFormat_Send, data, timeOut: timeOut); + + }, accessTokenOrAppId); + } + + /// + /// 客服输入状态 + /// + /// + /// 普通用户(openid) + /// "Typing":对用户下发“正在输入"状态 "CancelTyping":取消对用户的”正在输入"状态 + /// 添加 businessId 参数,则发送到子商户 + /// + /// + public static WxJsonResult GetTypingStatus(string accessTokenOrAppId, string touser, string typingStatus, string businessId = null, int timeOut = Config.TIME_OUT) + { + return WxOpenApiHandlerWapper.TryCommonApi(accessToken => + { + var urlFormat = GetTypingUrlFormat(businessId); + + var data = new + { + touser = touser, + command = typingStatus, + businessid = businessId + }; + + var jsonSetting = new JsonSetting() { IgnoreNulls = true }; + + return CommonJsonSend.Send(accessToken, urlFormat, data, timeOut: timeOut, jsonSetting: jsonSetting); }, accessTokenOrAppId); } @@ -192,10 +253,10 @@ public static WxJsonResult SendMiniProgramPage(string accessTokenOrAppId, string /// AccessToken或AppId(推荐使用AppId,需要先注册) /// 普通用户(openid) /// 文本消息内容 + /// 添加 businessId 参数,则发送到子商户 /// 代理请求超时时间(毫秒) /// - public static async Task SendTextAsync(string accessTokenOrAppId, string openId, string content, - int timeOut = Config.TIME_OUT) + public static async Task SendTextAsync(string accessTokenOrAppId, string openId, string content, string businessId = null, int timeOut = Config.TIME_OUT) { object data = null; data = new @@ -205,12 +266,15 @@ public static async Task SendTextAsync(string accessTokenOrAppId, text = new { content = content - } + }, + businessid = businessId }; return await WxOpenApiHandlerWapper.TryCommonApiAsync(async accessToken => { - return await CommonJsonSend.SendAsync(accessToken, UrlFormat, data, timeOut: timeOut).ConfigureAwait(false); + var urlFormat = GetSendUrlFormat(businessId); + var jsonSetting = new JsonSetting() { IgnoreNulls = true }; + return await CommonJsonSend.SendAsync(accessToken, urlFormat, data, timeOut: timeOut, jsonSetting: jsonSetting).ConfigureAwait(false); }, accessTokenOrAppId); } @@ -239,7 +303,7 @@ public static async Task SendImageAsync(string accessTokenOrAppId, return await WxOpenApiHandlerWapper.TryCommonApiAsync(async accessToken => { - return await CommonJsonSend.SendAsync(accessToken, UrlFormat, data, timeOut: timeOut).ConfigureAwait(false); + return await CommonJsonSend.SendAsync(accessToken, UrlFormat_Send, data, timeOut: timeOut).ConfigureAwait(false); }, accessTokenOrAppId); } @@ -273,7 +337,7 @@ public static async Task SendLinkAsync(string accessTokenOrAppId, return await WxOpenApiHandlerWapper.TryCommonApiAsync(async accessToken => { - return await CommonJsonSend.SendAsync(accessToken, Senparc.Weixin.MP.AdvancedAPIs.CustomApi.UrlFormat, data, timeOut: timeOut).ConfigureAwait(false); + return await CommonJsonSend.SendAsync(accessToken, UrlFormat_Send, data, timeOut: timeOut).ConfigureAwait(false); }, accessTokenOrAppId).ConfigureAwait(false); @@ -307,10 +371,40 @@ public static async Task SendMiniProgramPageAsync(string accessTok return await WxOpenApiHandlerWapper.TryCommonApiAsync(async accessToken => { - return await CommonJsonSend.SendAsync(accessToken, Senparc.Weixin.MP.AdvancedAPIs.CustomApi.UrlFormat, data, timeOut: timeOut).ConfigureAwait(false); + return await CommonJsonSend.SendAsync(accessToken, UrlFormat_Send, data, timeOut: timeOut).ConfigureAwait(false); }, accessTokenOrAppId).ConfigureAwait(false); } + + /// + /// 【异步方法】客服输入状态 + /// + /// + /// 普通用户(openid) + /// "Typing":对用户下发“正在输入"状态 "CancelTyping":取消对用户的”正在输入"状态 + /// 添加 businessId 参数,则发送到子商户 + /// + /// + public static async Task GetTypingStatusAsync(string accessTokenOrAppId, string touser, string typingStatus, string businessId = null, int timeOut = Config.TIME_OUT) + { + return await WxOpenApiHandlerWapper.TryCommonApiAsync(async accessToken => + { + var urlFormat = GetTypingUrlFormat(businessId); + + var data = new + { + touser = touser, + command = typingStatus, + businessid = businessId + }; + + var jsonSetting = new JsonSetting() { IgnoreNulls = true }; + + return await CommonJsonSend.SendAsync(accessToken, urlFormat, data, timeOut: timeOut, jsonSetting: jsonSetting).ConfigureAwait(false); + + }, accessTokenOrAppId); + } + #endregion } } diff --git a/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/DataCube/DataCubeApi.cs b/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/DataCube/DataCubeApi.cs index ed869566f7..4ccf29f202 100644 --- a/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/DataCube/DataCubeApi.cs +++ b/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/DataCube/DataCubeApi.cs @@ -29,18 +29,9 @@ and limitations under the License. ----------------------------------------------------------------*/ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using System.Threading.Tasks; using Senparc.NeuChar; using Senparc.Weixin.CommonAPIs; -using Senparc.Weixin.Entities; -using Senparc.Weixin.Helpers; -using Senparc.Weixin.HttpUtility; -using Senparc.Weixin.MP; +using System.Threading.Tasks; namespace Senparc.Weixin.WxOpen.AdvancedAPIs.DataCube { @@ -63,7 +54,7 @@ public static class DataCubeApi /// 结束日期,限定查询1天数据,end_date允许设置的最大值为昨日,如:20170312 /// /// - public static GetWeAnalysisAppidDailySummaryTrendResultJson GetWeAnalysisAppidDailySummaryTrend(string accessTokenOrAppId,string beginDate, string endDate, int timeOut = Config.TIME_OUT) + public static GetWeAnalysisAppidDailySummaryTrendResultJson GetWeAnalysisAppidDailySummaryTrend(string accessTokenOrAppId, string beginDate, string endDate, int timeOut = Config.TIME_OUT) { return WxOpenApiHandlerWapper.TryCommonApi(accessToken => { diff --git a/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/Message/MessageApi.cs b/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/Message/MessageApi.cs index 95f71dec5d..4e7bb6e87a 100644 --- a/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/Message/MessageApi.cs +++ b/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/Message/MessageApi.cs @@ -44,7 +44,6 @@ and limitations under the License. using Senparc.Weixin.CommonAPIs; using Senparc.Weixin.Entities; using Senparc.Weixin.Entities.TemplateMessage; -using Senparc.Weixin.MP; using System.Threading.Tasks; namespace Senparc.Weixin.WxOpen.AdvancedAPIs diff --git a/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/Template/TemplateApi.cs b/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/Template/TemplateApi.cs index 9cd44e4ccc..dc6e445ada 100644 --- a/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/Template/TemplateApi.cs +++ b/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/Template/TemplateApi.cs @@ -48,12 +48,11 @@ and limitations under the License. API:https://mp.weixin.qq.com/debug/wxadoc/dev/api/notice.html#接口说明 */ -using System; -using System.Threading.Tasks; using Senparc.NeuChar; using Senparc.Weixin.CommonAPIs; using Senparc.Weixin.Entities; -using Senparc.Weixin.MP; +using System; +using System.Threading.Tasks; namespace Senparc.Weixin.WxOpen.AdvancedAPIs.Template { 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 acc0c69649..57c1811fa8 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 @@ -47,19 +47,17 @@ and limitations under the License. ----------------------------------------------------------------*/ -using System; -using System.IO; -using System.Threading.Tasks; -using Senparc.Weixin.CommonAPIs; -using Senparc.Weixin.Entities; using Senparc.CO2NET.Extensions; -using Senparc.CO2NET.HttpUtility; -using Senparc.Weixin.MP; -using Senparc.Weixin.WxOpen.AdvancedAPIs.WxApp.WxAppJson; using Senparc.CO2NET.Helpers; using Senparc.CO2NET.Helpers.Serializers; -using System.Collections.Generic; +using Senparc.CO2NET.HttpUtility; using Senparc.NeuChar; +using Senparc.Weixin.CommonAPIs; +using Senparc.Weixin.Entities; +using Senparc.Weixin.WxOpen.AdvancedAPIs.WxApp.WxAppJson; +using System.Collections.Generic; +using System.IO; +using System.Threading.Tasks; namespace Senparc.Weixin.WxOpen.AdvancedAPIs.WxApp { diff --git a/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/Entities/Request/RequestMessageText.cs b/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/Entities/Request/RequestMessageText.cs index 7a767c6ed6..9c7b70f169 100644 --- a/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/Entities/Request/RequestMessageText.cs +++ b/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/Entities/Request/RequestMessageText.cs @@ -26,6 +26,10 @@ and limitations under the License. 创建标识:Senparc - 20170106 + + 修改标识:Senparc - 20220504 + 修改描述:v3.15.2 添加小程序隐私权限审核结果推送 + ----------------------------------------------------------------*/ @@ -45,5 +49,10 @@ public override RequestMsgType MsgType /// 文本消息内容 /// public string Content { get; set; } + + /// + /// 代表消息是从子商户的会话中过来的 + /// + public string BusinessId { get; set; } } } diff --git a/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/MessageHandlers/WxOpenMessageEntityEnlightener.cs b/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/MessageHandlers/WxOpenMessageEntityEnlightener.cs index c390e54b41..dbfa0ef785 100644 --- a/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/MessageHandlers/WxOpenMessageEntityEnlightener.cs +++ b/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/MessageHandlers/WxOpenMessageEntityEnlightener.cs @@ -2,15 +2,10 @@ using Senparc.NeuChar.Exceptions; using Senparc.NeuChar.MessageHandlers; using Senparc.Weixin.WxOpen.Entities; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace Senparc.Weixin.WxOpen.MessageHandlers { - public class WxOpenMessageEntityEnlightener : MessageEntityEnlightener + public class WxOpenMessageEntityEnlightener : MessageEntityEnlightener { public static MessageEntityEnlightener Instance = new WxOpenMessageEntityEnlightener(NeuChar.PlatformType.WeChat_MiniProgram); diff --git a/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen.net6.csproj b/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen.net6.csproj index 48c134ff0c..5725027b87 100644 --- a/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen.net6.csproj +++ b/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen.net6.csproj @@ -1,217 +1,219 @@ - - net462;netstandard2.0;netstandard2.1 - 3.15.2 - Senparc.Weixin.WxOpen - Senparc.Weixin.WxOpen - true - - 微信 SDK - 微信小程序 模块 - - Senparc.Weixin SDK 开源项目: - https://github.com/JeffreySu/WeiXinMPSDK - - Senparc Copyright © 2004~2022 - 微信,weixin,小程序,wxopen,MiniProgram,公众号,WeChat,Senparc,盛派,SDK,C#,JSSDK,微信支付,分布式 - Jeffrey Su - Senparc - Apache-2.0 - https://github.com/JeffreySu/WeiXinMPSDK - Senparc.Weixin.WxOpen.dll - 微信公众号SDK for C# - https://github.com/JeffreySu/WeiXinMPSDK - icon.jpg - - v0.1.0 添加基础解决方案,包括模板消息API - - v0.1.0 添加基础库,已包含模板消息API - v0.2.0 - 1、添加WxOpenMessageHandler - 2、添加SuccessResponseMessage类型响应信息 - v0.3.0 根据MP的架构重构框架 - - v1.0.0 - 2017年1月9日,随小程序正式发布 - - v1.1.0 添加CreateWxQRCode重写方法,直接保存文件 - 添加SessionContainer,SessionHelper,EncryptHelper - - v1.2.0 添加消息解密方法 - fix bug:修改模板消息接口URL - - v1.2.1 fix bug:修改模板消息接口URL - - v1.3.0 支持.NET Core - - v1.4.0 完成接口开放平台-代码管理及小程序码获取 - - v1.4.1 - 1、增加GetWxaCodeUnlimit接口 - 2、为Tencent命名空间添加Senparc.Weixin.WxOpen前缀 - 3、添加JsCode2JsonResult.unionid - - - v1.5.0 - 1、支持.NET Core 2.0 - - v1.6.0 - 1、添加获取用户手机号方法(同时提供了Demo) - - v1.7.0-beta1 提供.NET 4.0支持 - v1.7.1 发布正式版;修复WxAppApi.GetWxaCodeUnlimit()方法参数错误的问题 - v1.7.2 支持Senparc.Weixin v4.18.5 可自定义API域名 - v1.7.3 修复ModifyDomainApi.ModifyDomain()方法判断问题 - v1.7.4 完善模板消息发送参数 - - v1.8.0 支持小程序 - 1、添加 WxAppApi.CheckSession() 接口,检验SessionKey - 2、添加 DataCubeApi,包含所有“数据”接口 - v1.8.1 新增附近的小程序API - v1.8.2 从 Open 中迁移模板消息过来,在 Senparc.Weixin.WxOpen.AdvancedAPIs.TemplateApi下 - - v1.9.0 - 1、停止对 .net core 1.1 生成的独立版本 - 2、待分配 WxAppApi.GetWxaCode()、GetWxaCodeUnlimit() 接口,添加获取小程序二维码时的颜色参数。 - v1.9.1 提供 RegisterServices 进行快捷注册 - v1.9.2 更新 WxAppApi.GetWxaCodeUnlimit() 参数引用 - - v1.10.0-rc1 支持 .NET Core 2.1.0-rc1-final - - v1.10.5 发布支持 .net core 2.1 的正式版 - - v2.0.0 引入 Senparc.CO2NET,支持 Senparc.Weixin v5.0 - V2.0.3 SessionBag 添加 UnionId 属性 - v2.0.6.1 支持 CO2NET v0.1.6.1 解决 XXE 漏洞 - v2.0.9 支持 CO2NET v0.1.9 - v2.0.10 支持 Senparc.Weixin v5.0.10 - v2.0.11 支持 Senparc.Weixin v5.0.11 - v2.0.11.1 添加 小程序码的接口缺少 is_hyaline 参数 - v2.0.11.2 修正 TemplateApi.Add() 方法返回类型 - v2.1.0 支持 Senparc.Weixin v5.1.0,重构 Container,提供新的缓存过期策略 - v2.1.1 fix bug 小程序“数据分析”接口 日趋势 字段类型 - v2.1.2 优化接口,支持 CO2NET v0.2.4 - v2.2.0 实现 SenparcWeixinSetting 自动注册 - v2.3.0 单独设立小程序客服接口(AdvancedAPIs.CustomApi),支持所有小程序客服消息类型 - v2.4.0 添加校验文字及图片是否含有违法内容的接口 - v2.4.1 fixbug:TemplateApi.LibraryGet() 方法修正 API 地址 - - v3.0.0 支持 NeuChar 标准 - v3.0.1 支持 Senparc.Weixin v6.0.1 - v3.1.0 支持 Senparc.NeuChar v0.0.5 - v3.1.4 支持 Senparc.NeuChar v0.1.2;新增小程序专属的WxOpenApiHandlerWapper - v3.1.6 支持 Senparc.NeuChar v0.1.4 - v3.1.7 支持 Senparc.NeuChar v0.2.1 - v3.1.9 支持 Senparc.Weixin 6.1.4 - v3.1.10 Senparc.NeuChar v0.2.7 - v3.1.12 支持 Senparc.NeuChar v0.2.9.1 - v3.1.13 提供 MessageHandler 的 NeuChar 对接能力 - v3.1.14 Senparc.NeuChar v0.2.11,升级 MessageHandler - v3.1.15.1 优化小程序 ResponseMessageText 的默认函数 - v3.1.16 MessageHandler 构造函数,提供 PostModel 默认值 - v3.2.0 使用 Senparc.CO2NET.APM - v3.2.1 支持 Senparc.NeuChar v0.4.4 - v3.2.2 优化 APM 和 MessageHandler 消息解密过程 - v3.3.0 支持最新基础库,使用 .NETStandard2.0 统一支持 .NET Core,放弃对 .NET Core 1.x 的单独适配 - v3.3.4 该场景 id 访问 uv 添加访问分析接口的 access_source_visit_uv 属性(该场景 id 访问 uv) - v3.3.9 支持最新版本 Senparc.Weixin - v3.4.0 - 1、支持异步 Container - 2、停止对 .NET 3.5 和 .NET 4.0 的支持 - 3、SessionBag 默认有效期由 2 天调整为 5 天,并提供外部设置参数 - v3.4.5 - 1、JsCode2Json 返回结果增加 unionid - 2、优化小程序 MessageHandler,可返回进入客服的响应消息 - v3.4.8 修复附近的小程序添加地点 - v3.4.9 添加开放平台小程序的普通链接二维码接口 - v3.5.0 SessionContainer 添加 AddDecodedUserInfo() 方法,SessionBag 提供 DecodedUserInfo 属性 - v3.5.1 优化 Container,修复在未注册的情况下直接尝试注册时可能造成线程死锁的情况 - v3.5.2 引用最新版本 CO2NET - v3.5.3 引用最新版本 CO2NET 和 Senparc.Weixin - v3.5.4 修正 UniformSendData 参数 - v3.5.5 引用最新版本 CO2NET 和 Senparc.Weixin - v3.6.0 - 1、消息上下文支持分布式缓存,支持最新版本 Senparc.Weixin - 2、提供带符号的 nuget 包(.snupkg) - v3.7.0 使用最新版本 Senparc.Weixin,支持 .NET Core 3.0 - v3.7.101 提供 .Net Core 3.0 独立版本 - v3.7.102 - 1、小程序审核事件移动到 WxOpen - 2、订阅消息接口 - v3.7.102.1 修复订阅消息参数问题 - v3.7.102.2 修复 GetWeAnalysisAppidUserPortraitResultJson 参数类型错误 - v3.7.104 引用新版本 NeuChar,优化 MessageHandler 同步方法兼容策略 - v3.7.104.2 添加小程序搜索接口 - v3.8.401 添加小程序UpdateIndex()、DatabaseAggregate()接口 - v3.8.501 fix bug:支付后获取用户 Unionid 接口没有传入 openId - v3.8.502.1 小程序实现订阅消息模板的管理 - v3.8.511 - 1、小程序 WxOpenMessageHandler 增加 OnImageRequestAsync 和 OnTextRequestAsync - 2、调整 MessageHandler 异步方法执行代码 - v3.8.512 添加解密到实例信息方法 - v3.10.101 新增 WxOpen 专属 AccessTokenContainer,解决没有提供 name 参数的情况下,Register 过程和公众号注册信息发生冲突的问题 - v3.10.102 修正 UniformSendData.Mp_Template_Msg.Miniprogram 参数 pagepath -> page - v3.10.103 修正 WxOpenApiHandlerWapper 正确引用 AccessTokenContainer - v3.10.104 添加 WxAppApi.GenerateScheme() 接口 - v3.10.401 升级 MessageApi.SendSubscribe() 方法参数 - v3.11.100 修改完善“附近的小程序”接口 - v3.13.500-preview4.1 添加“Short Link”接口 - v3.14 添加 ExpressApi 接口 - v3.14.2 添加“小程序违规和申诉管理”消息事件 - v3.14.3 添加 UrlLinkApi.Generate() 接口 - v3.14.4 添加 BusinessApi.GetUserPhoneNumber() 接口 - v3.14.5 修改“下发小程序和公众号统一的服务消息”接口参数,提升兼容性 - v3.14.10.1 修复 WxAppApi.GetWxaCodeUnlimitAsync() 接口参数错误 - v3.15.2 添加小程序隐私接口 - - https://github.com/JeffreySu/WeiXinMPSDK - - - ..\..\..\..\BuildOutPut - TRACE - - - ..\..\..\..\..\..\BuildOutPut - $(DefineConstants);RELEASE - ..\..\..\..\..\..\BuildOutPut\Senparc.Weixin.WxOpen.XML - true - pdbonly - prompt - MinimumRecommendedRules.ruleset - - - ..\..\..\..\BuildOutPut\ - ..\..\..\..\BuildOutPut\netstandard2.0\Senparc.Weixin.WxOpen.xml - - - ..\..\..\..\BuildOutPut\ - ..\..\..\..\BuildOutPut\netstandard2.1\Senparc.Weixin.WxOpen.xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + net462;netstandard2.0;netstandard2.1 + 3.15.3 + 9.0 + Senparc.Weixin.WxOpen + Senparc.Weixin.WxOpen + true + + 微信 SDK - 微信小程序 模块 + + Senparc.Weixin SDK 开源项目: + https://github.com/JeffreySu/WeiXinMPSDK + + Senparc Copyright © 2004~2022 + 微信,weixin,小程序,wxopen,MiniProgram,公众号,WeChat,Senparc,盛派,SDK,C#,JSSDK,微信支付,分布式 + Jeffrey Su + Senparc + Apache-2.0 + https://github.com/JeffreySu/WeiXinMPSDK + Senparc.Weixin.WxOpen.dll + 微信公众号SDK for C# + https://github.com/JeffreySu/WeiXinMPSDK + icon.jpg + + v0.1.0 添加基础解决方案,包括模板消息API + + v0.1.0 添加基础库,已包含模板消息API + v0.2.0 + 1、添加WxOpenMessageHandler + 2、添加SuccessResponseMessage类型响应信息 + v0.3.0 根据MP的架构重构框架 + + v1.0.0 + 2017年1月9日,随小程序正式发布 + + v1.1.0 添加CreateWxQRCode重写方法,直接保存文件 + 添加SessionContainer,SessionHelper,EncryptHelper + + v1.2.0 添加消息解密方法 + fix bug:修改模板消息接口URL + + v1.2.1 fix bug:修改模板消息接口URL + + v1.3.0 支持.NET Core + + v1.4.0 完成接口开放平台-代码管理及小程序码获取 + + v1.4.1 + 1、增加GetWxaCodeUnlimit接口 + 2、为Tencent命名空间添加Senparc.Weixin.WxOpen前缀 + 3、添加JsCode2JsonResult.unionid + + + v1.5.0 + 1、支持.NET Core 2.0 + + v1.6.0 + 1、添加获取用户手机号方法(同时提供了Demo) + + v1.7.0-beta1 提供.NET 4.0支持 + v1.7.1 发布正式版;修复WxAppApi.GetWxaCodeUnlimit()方法参数错误的问题 + v1.7.2 支持Senparc.Weixin v4.18.5 可自定义API域名 + v1.7.3 修复ModifyDomainApi.ModifyDomain()方法判断问题 + v1.7.4 完善模板消息发送参数 + + v1.8.0 支持小程序 + 1、添加 WxAppApi.CheckSession() 接口,检验SessionKey + 2、添加 DataCubeApi,包含所有“数据”接口 + v1.8.1 新增附近的小程序API + v1.8.2 从 Open 中迁移模板消息过来,在 Senparc.Weixin.WxOpen.AdvancedAPIs.TemplateApi下 + + v1.9.0 + 1、停止对 .net core 1.1 生成的独立版本 + 2、待分配 WxAppApi.GetWxaCode()、GetWxaCodeUnlimit() 接口,添加获取小程序二维码时的颜色参数。 + v1.9.1 提供 RegisterServices 进行快捷注册 + v1.9.2 更新 WxAppApi.GetWxaCodeUnlimit() 参数引用 + + v1.10.0-rc1 支持 .NET Core 2.1.0-rc1-final + + v1.10.5 发布支持 .net core 2.1 的正式版 + + v2.0.0 引入 Senparc.CO2NET,支持 Senparc.Weixin v5.0 + V2.0.3 SessionBag 添加 UnionId 属性 + v2.0.6.1 支持 CO2NET v0.1.6.1 解决 XXE 漏洞 + v2.0.9 支持 CO2NET v0.1.9 + v2.0.10 支持 Senparc.Weixin v5.0.10 + v2.0.11 支持 Senparc.Weixin v5.0.11 + v2.0.11.1 添加 小程序码的接口缺少 is_hyaline 参数 + v2.0.11.2 修正 TemplateApi.Add() 方法返回类型 + v2.1.0 支持 Senparc.Weixin v5.1.0,重构 Container,提供新的缓存过期策略 + v2.1.1 fix bug 小程序“数据分析”接口 日趋势 字段类型 + v2.1.2 优化接口,支持 CO2NET v0.2.4 + v2.2.0 实现 SenparcWeixinSetting 自动注册 + v2.3.0 单独设立小程序客服接口(AdvancedAPIs.CustomApi),支持所有小程序客服消息类型 + v2.4.0 添加校验文字及图片是否含有违法内容的接口 + v2.4.1 fixbug:TemplateApi.LibraryGet() 方法修正 API 地址 + + v3.0.0 支持 NeuChar 标准 + v3.0.1 支持 Senparc.Weixin v6.0.1 + v3.1.0 支持 Senparc.NeuChar v0.0.5 + v3.1.4 支持 Senparc.NeuChar v0.1.2;新增小程序专属的WxOpenApiHandlerWapper + v3.1.6 支持 Senparc.NeuChar v0.1.4 + v3.1.7 支持 Senparc.NeuChar v0.2.1 + v3.1.9 支持 Senparc.Weixin 6.1.4 + v3.1.10 Senparc.NeuChar v0.2.7 + v3.1.12 支持 Senparc.NeuChar v0.2.9.1 + v3.1.13 提供 MessageHandler 的 NeuChar 对接能力 + v3.1.14 Senparc.NeuChar v0.2.11,升级 MessageHandler + v3.1.15.1 优化小程序 ResponseMessageText 的默认函数 + v3.1.16 MessageHandler 构造函数,提供 PostModel 默认值 + v3.2.0 使用 Senparc.CO2NET.APM + v3.2.1 支持 Senparc.NeuChar v0.4.4 + v3.2.2 优化 APM 和 MessageHandler 消息解密过程 + v3.3.0 支持最新基础库,使用 .NETStandard2.0 统一支持 .NET Core,放弃对 .NET Core 1.x 的单独适配 + v3.3.4 该场景 id 访问 uv 添加访问分析接口的 access_source_visit_uv 属性(该场景 id 访问 uv) + v3.3.9 支持最新版本 Senparc.Weixin + v3.4.0 + 1、支持异步 Container + 2、停止对 .NET 3.5 和 .NET 4.0 的支持 + 3、SessionBag 默认有效期由 2 天调整为 5 天,并提供外部设置参数 + v3.4.5 + 1、JsCode2Json 返回结果增加 unionid + 2、优化小程序 MessageHandler,可返回进入客服的响应消息 + v3.4.8 修复附近的小程序添加地点 + v3.4.9 添加开放平台小程序的普通链接二维码接口 + v3.5.0 SessionContainer 添加 AddDecodedUserInfo() 方法,SessionBag 提供 DecodedUserInfo 属性 + v3.5.1 优化 Container,修复在未注册的情况下直接尝试注册时可能造成线程死锁的情况 + v3.5.2 引用最新版本 CO2NET + v3.5.3 引用最新版本 CO2NET 和 Senparc.Weixin + v3.5.4 修正 UniformSendData 参数 + v3.5.5 引用最新版本 CO2NET 和 Senparc.Weixin + v3.6.0 + 1、消息上下文支持分布式缓存,支持最新版本 Senparc.Weixin + 2、提供带符号的 nuget 包(.snupkg) + v3.7.0 使用最新版本 Senparc.Weixin,支持 .NET Core 3.0 + v3.7.101 提供 .Net Core 3.0 独立版本 + v3.7.102 + 1、小程序审核事件移动到 WxOpen + 2、订阅消息接口 + v3.7.102.1 修复订阅消息参数问题 + v3.7.102.2 修复 GetWeAnalysisAppidUserPortraitResultJson 参数类型错误 + v3.7.104 引用新版本 NeuChar,优化 MessageHandler 同步方法兼容策略 + v3.7.104.2 添加小程序搜索接口 + v3.8.401 添加小程序UpdateIndex()、DatabaseAggregate()接口 + v3.8.501 fix bug:支付后获取用户 Unionid 接口没有传入 openId + v3.8.502.1 小程序实现订阅消息模板的管理 + v3.8.511 + 1、小程序 WxOpenMessageHandler 增加 OnImageRequestAsync 和 OnTextRequestAsync + 2、调整 MessageHandler 异步方法执行代码 + v3.8.512 添加解密到实例信息方法 + v3.10.101 新增 WxOpen 专属 AccessTokenContainer,解决没有提供 name 参数的情况下,Register 过程和公众号注册信息发生冲突的问题 + v3.10.102 修正 UniformSendData.Mp_Template_Msg.Miniprogram 参数 pagepath -> page + v3.10.103 修正 WxOpenApiHandlerWapper 正确引用 AccessTokenContainer + v3.10.104 添加 WxAppApi.GenerateScheme() 接口 + v3.10.401 升级 MessageApi.SendSubscribe() 方法参数 + v3.11.100 修改完善“附近的小程序”接口 + v3.13.500-preview4.1 添加“Short Link”接口 + v3.14 添加 ExpressApi 接口 + v3.14.2 添加“小程序违规和申诉管理”消息事件 + v3.14.3 添加 UrlLinkApi.Generate() 接口 + v3.14.4 添加 BusinessApi.GetUserPhoneNumber() 接口 + v3.14.5 修改“下发小程序和公众号统一的服务消息”接口参数,提升兼容性 + v3.14.10.1 修复 WxAppApi.GetWxaCodeUnlimitAsync() 接口参数错误 + v3.15.2 添加小程序隐私接口 + v3.15.3 添加商户客户参数(BusinessId) + + https://github.com/JeffreySu/WeiXinMPSDK + + + ..\..\..\..\BuildOutPut + TRACE + + + ..\..\..\..\..\..\BuildOutPut + $(DefineConstants);RELEASE + ..\..\..\..\..\..\BuildOutPut\Senparc.Weixin.WxOpen.XML + true + pdbonly + prompt + MinimumRecommendedRules.ruleset + + + ..\..\..\..\BuildOutPut\ + ..\..\..\..\BuildOutPut\netstandard2.0\Senparc.Weixin.WxOpen.xml + + + ..\..\..\..\BuildOutPut\ + ..\..\..\..\BuildOutPut\netstandard2.1\Senparc.Weixin.WxOpen.xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file