Skip to content

Commit

Permalink
Squashed 'src/Senparc.Weixin.WxOpen/' changes from b46bde71b..d8c85736c
Browse files Browse the repository at this point in the history
d8c85736c Merge pull request #42 from JeffreySu/Developer
6c68657e5 更新引用
90cc0c594 Merge pull request #41 from JeffreySu/Developer
6cdc99625 Merge branch 'Developer' of https://github.com/JeffreySu/WeiXinMPSDK into Developer
24c7cb59f 更新NET Core 2.2 sample
3abf7b7cc .net 4.5 sample 升级最新 nuget 包
fa348566c modify
4966e37a4 x.102 发布正式版
c2c000ed7 Sample v4.6.0 添加小程序订阅消息演示
6edf21b8e WxOpen v3.7.102 添加订阅消息接口 #1997 感谢 @luoxy123
4b7bd5405 x.102-preview7.8.1  小程序审核事件移动到Senparc.Weixin.WxOpen,第三方平台-扫码关注组件,小程序支付后获取unionid #1991 感谢 @mc7246
43bd27ba6 Merge pull request #1991 from mc7246/master
85fa4a979 更新Sample
1f71d8015 更新 .net core 2.2 Demo
54af590ea 使用新版本 NeuChar,提升 MessageHandler 处理效率 2 倍以上(异步方法)
eeecbcf5d 小程序审核事件移动到Senparc.Weixin.WxOpen,第三方平台-扫码关注组件,小程序支付后获取unionid
251a37551 改造消息模拟器,使用异步方法,提高测试准确性
2a69c91d2 调整组测过程,避免可能出现的因为注册顺序问题导致的缓存异常
a99a68a33 preivew v7.7.8
e827adaaf 使用新版本 CO2NET 和 NeuChar
8284580bc Sample v4.5.6, 修改 OnlyAllowEcryptMessage 提示信息
1d0e76d5e preview 7.7,Sample v4.5.6,完成加密消息转发
00a307380 添加 onlyAllowEcryptMessage 属性,进一步提高安全性,同时优化了 RequestMessage 日志储存机制
30798ede2 Sample v4.5.5 使用 MessageHandler.OnlyAllowEcryptMessage 属性,进一步提高安全级别
cfab4e935 Sample v4.5.4 提高安全性
95a08f07f 使用 NeuChar v1.0.102-preview7.5,更新示例
a61d3b11a preview7.1
eda668697 更新 NeuChar v1.0.102-preview7.4.4,继续测试优化企业微信消息ji
caac57d73 升级到 NeuChar v1.0.102-preview7.4.4,解决企业号等验证问题
87856aac9 新版本.102 preview7;Sample v4.5.0,,公众号、小程序、企业微信全面支持中间件消息处理,并开始以异步方法优先,进行升级
6fc01a56c 优化 Work 消息加密相关代码
2198c4722 升级NeuChar新版,更新中间件消息验证页面的提示内容
02bfd9d79 完善异步方法改写
8c9b66f5b WxOpen 部分完成异步MessageHandler改造
45ad3ad71 升级到 NeuChar 新版本,开始异步方法优先
b4cd15eb8 升级到新版本NeuChar,提供更好的验证提示
2915535c6 完成企业号MessageHandler中间件
e5f07a05f Sample v4.4.12,小程序 MessageHandler 使用中间件
f2d2999ca Sample v4.4.11,完善消息模拟器,使用新版本 MessageAgent
8e9790358 升级 NeuChar;Sample v4.4.10
590008f6d 优化 MessageHandler 中间件,完成 MP 中间件搭建,配置代码可简化到1行
07b9923e1 完成 Messagehandler 中间件升级
d8e76da7b 更新 NeuChar,升级 中间件,测试成功,继续优化
0cb372848 进一步抽象中间件,将扩展方法移植到NeuChar
6b50c7186 中间件基类移植到NeuChar,其他模块以此作为基类进行扩展
53b002625 升级到NeuChar preview3
c0cc79bbd Register 注册过程自动添加更多 SenparcSettingItem 信息
c959f6f51 提供 MP MessageHandler 中间件配置方式(测试版)
35dc1f95b 修改小程序 代码
a02d2f24a 更新小程序Demo
5745cff57 升级 Cache 相关 的 .net core 3.0 独立项目
2843ae30d 升级 .net core 3.0 独立项目 csproj 文件
b8a48d667 升级 .net core 3.0 独立项目 csproj 文件
e6d4e4218 添加  NETCOREAPP3_0 条件编译
25e3aada3 WxOpen v3.7.101 提供 .Net Core 3.0 独立版本
4d372848a 升级到最新NeuChar版本
54b874cae Merge branch 'Developer' of https://github.com/JeffreySu/WeiXinMPSDK into Developer
b0b7ee1a2 修改 .NET Core 3.0 单元测试项目
2154c9e01 更新 .net 4.5 项目版本号
e5bd1e99d Senparc.Weixin SDK v6.6.0 使用最新版本 Neuchar、CO2NET,支持 .NET Core 3.0
e320a0563 fix bug:MessageContext.GetRequestEntityMappingResult() 方法可能出现的空值情况 #1929 #1930 感谢  @tangyangming @gendou
b7c01e426 更新 NeuChar、CO2NET,支持 .NET Core 3.0
fd3050697 升级新版本 NeuChar,解决上下文缓存反序列化时APP状态的一个 bug
b24b8eb6e .net 4.5 sample 同步新版本号
4cab1d29d Merge branch 'Developer' of https://github.com/JeffreySu/WeiXinMPSDK into Developer
5f3217f6e .net 4.5 Sample 更新 NeuChar 库
80511ef68 Merge branch 'Developer' of https://github.com/JeffreySu/WeiXinMPSDK into Developer
a96421d58 .net core Sample 升级 NeuChar 包
852458a07 .net 4.5 项目完成分布式上下文升级。单元测试通过。
9306e8f58 更新 neuchar
c3726feea .net 4.5 升级基础库,支持分布式上下文
84a4415f2 提供带符号的 nuget 包(.snupkg)
d2db98338 preview4
a5f285007 优化 MessageHandler 的上下文记录,统一到基类中。
0009461d2 升级NeuChar库
d9d3c4b07 升级SDK
8018903f6 WxOpen完成新MessageHandler;添加备注
7871b4d7a 更新SDK,使用新的MessageHandler进行去重
97350ff60 升级 Senparc SDK;完善 MP GetResponseEntityMappingResult()
3b8377552 全面升级异步上下文消息,发布preview3 (ResponseMessage)尚未处理
e8c02f1aa 升级Senparc系列SDK
433ba51a9 全面升级 CO2NET 版本,升级 Senparc.Weixin.dll vv6.4.14
e4d3b5030 Update readme.md
ab94b04da Merge pull request #40 from JeffreySu/Developer
fa78058fd WxOpen v3.5.4 修正 UniformSendData 参数 #1901 @Dysheng
f79fb31db 更新版本号
e26032c2a 更新 .net 4.5 Sample 的 nuget 引用
80ee4bc8a Merge branch 'Developer' of https://github.com/JeffreySu/WeiXinMPSDK into Developer
4e143b788 更新 .net 4.5 项目版本号
948aa6130 WxOpen v3.5.3 引用最新版本 CO2NET 和 Senparc.Weixin
c683cc428 Merge pull request #39 from JeffreySu/Developer
06e1e3b98 合并 WxOpen 代码
75fd43ff8 Update README.md
bc78d5321 修正代码
532b57caa 添加注释
a8b835d26 全民升级版本,引用最新的 CO2NET
138e020f3 Sample v3.8.5 添加 EncryptHelper.DecodeUserInfoBySessionId() 异常调试日志记录
487947132 完善 AES_Decrypt,处理偶然出现的 adding is invalid and cannot be removed 问题(未发现规律);同时完善单元测试
99d32044b modify
1d3444a15 测试 EncryptHelper.DecodeEncryptedData() 方法
66fe7dfc1 创建单元测试 for #1869
ddd98b1b6 创建单元测试 for #1825
701a2cc02 更新版本号

git-subtree-dir: src/Senparc.Weixin.WxOpen
git-subtree-split: d8c85736cafc993a4b5a97de99fb91652c2b6522
  • Loading branch information
JeffreySu committed Oct 28, 2019
1 parent ef1fdbb commit be9cbbc
Show file tree
Hide file tree
Showing 36 changed files with 1,608 additions and 274 deletions.
2 changes: 1 addition & 1 deletion README.md
Expand Up @@ -8,7 +8,7 @@
## 此库用途

1. 作为微信小程序的SDK,主要提供对所有微信小程序的服务器端API对接能力
2. 对小程序的各项功能进行深度优化(如常规通讯、WebScoket等等
2. 对小程序的各项功能进行深度优化(如常规通讯、WebSocket等等
3. 发布小程序的重要信息及新闻
4. 发布小程序的教程等其他资源

Expand Down
9 changes: 7 additions & 2 deletions src/Senparc.Weixin.WxOpen.AppDemo/app.js
Expand Up @@ -18,8 +18,13 @@ App({
// wx.setStorageSync('domainName', "http://localhost:58936")
// wx.setStorageSync('wssDomainName', "ws://localhost:58936")

wx.setStorageSync('domainName', "http://localhost:58936/VirtualPath")
wx.setStorageSync('wssDomainName', "ws://localhost:58936/VirtualPath")
//使用.NET Core 2.2 Sample(Senparc.Weixin.MP.Sample.vs2017.sln)配置:
// wx.setStorageSync('domainName', "http://localhost:58936/VirtualPath")
// wx.setStorageSync('wssDomainName', "ws://localhost:58936/VirtualPath")

//使用 .NET Core 3.0 Samole(Senparc.Weixin.Sample.NetCore3.vs2019.sln)配置:
wx.setStorageSync('domainName', "https://localhost:44381")
wx.setStorageSync('wssDomainName', "wss://localhost:44381")
}

// 打开调试
Expand Down
49 changes: 47 additions & 2 deletions src/Senparc.Weixin.WxOpen.AppDemo/pages/index/index.js
Expand Up @@ -3,7 +3,7 @@
var app = getApp()
Page({
data: {
motto: 'Senparc.Weixin SDK Demo v2019.7.7',
motto: 'Senparc.Weixin SDK Demo v2019.8.19',
userInfo: {},
hasUserInfo: false,
canIUse: wx.canIUse('button.open-type.getUserInfo')
Expand All @@ -17,7 +17,7 @@ Page({

bindWebsocketTap: function(){
wx.navigateTo({
url: '../websocket_signalr/websocket_signalr'
url: '../websocket_signalr/websocket_signalr'// 此页面对应 .net core demo,如果为 .net framework,请使用'../websocket_signalr/websocket'
})
},

Expand Down Expand Up @@ -280,17 +280,62 @@ Page({
}
})
},
//生成二维码
openLivePusher:function(){
wx.navigateTo({
url: '../LivePusher/LivePusher'
})
},
//生成二维码
openQrCodePage:function(e){
var codeType = e.target.dataset.codetype;
wx.navigateTo({
url: '../QrCode/QrCode?codeType=' + codeType
})
},
//订阅消息
subscribeMessage:function(){
var templateId = 'xWclWkOqDrxEgWF4DExmb9yUe10pfmSSt2KM6pY7ZlU';//根据微信小程序后台[功能]>[订阅消息]中订阅的唯一id进行填写,每一个都不一样
wx.requestSubscribeMessage({
tmplIds: [templateId],
success(res) {
console.log(res);
var acceptResult = res[templateId];//'accept'、'reject'、'ban'
wx.showModal({
title: '您点击了按钮',
content: '事件类型' + acceptResult+'\r\n'+'您将在几秒钟之后收到延迟的提示',
showCancel:false,
success:function(){
if (acceptResult == 'accept') {
wx.request({
url: wx.getStorageSync('domainName') + '/WxOpen/SubscribeMessage',
method: 'POST',
data: {
sessionId: wx.getStorageSync('sessionId'),
templateId: 'xWclWkOqDrxEgWF4DExmb9yUe10pfmSSt2KM6pY7ZlU'
},
header: { 'content-type': 'application/x-www-form-urlencoded' },
success(msgRes) {
if (msgRes.data.success) {
wx.showModal({
title: '操作成功!',
content: msgRes.data.msg,
})
} else {
wx.showModal({
title: '操作失败!',
content: msgRes.data.msg,
})
}
}
})

}
}
})
}
})
},
onLoad: function () {
console.log('onLoad')
var that = this
Expand Down
9 changes: 9 additions & 0 deletions src/Senparc.Weixin.WxOpen.AppDemo/pages/index/index.wxml
Expand Up @@ -79,6 +79,15 @@
</view>

<view class="flex-wrp" style="flex-direction:row;">
<view class="flex-item">
<!-- 一次性订阅消息 -->
<button bindtap='subscribeMessage' type="primary"
class="btn-DoRequest" hover-class="other-button-hover" >订阅消息</button>
</view>
</view>

<view class="flex-wrp" style="flex-direction:row;">

<view class="flex-item">
<!-- Live Pusher -->
<button bindtap="openLivePusher"
Expand Down
@@ -1,5 +1,5 @@
var signalR = require("../../utils/signalr.1.0.js")
var senparcWebsocket = require("../../utils/senparc.websocket.js")
var senparcWebsocket = require("../../utils/senparc.websocket.2.0.js")

var connection;// Signalr 连接
var app = getApp()
Expand Down
@@ -1,4 +1,5 @@
/* senparc.websocket.js - 20190716 - v1.0 */
/* 支持 .NET Core 2.2- SignalR。 */

var senparcWebSocketConnection;

Expand Down
41 changes: 41 additions & 0 deletions src/Senparc.Weixin.WxOpen.AppDemo/utils/senparc.websocket.2.0.js
@@ -0,0 +1,41 @@
/* senparc.websocket.js - 20191001 - v2.0 */
/* 支持 .NET Core 3.0+ SignalR。 */

var senparcWebSocketConnection;

function buildConnectionAndStart(hubUrl, signalR, onStart){
senparcWebSocketConnection = new signalR.HubConnectionBuilder()
.withUrl(hubUrl)
//.withAutomaticReconnect([0, 2000, 5000, 10000, 30000, 45000, 60000])
.build();
senparcWebSocketConnection.start(onStart()).then().catch(function (err) {
return console.error(err.toString());
});
return senparcWebSocketConnection;
}

function sendMessage(text,sessionId,formId){
//如果使用 Senparc.WebSocket,必须严格按照以下 submitData 数据字段发送(参数只能多不能少)
var submitData = JSON.stringify({
Message: text,//必填
SessionId: sessionId,//选填,不需要可输入''
FormId: formId//选填formId用于发送模板消息,不需要可输入''
});

//ReceiveMessage 为特殊约定的方法入口,请勿修改,如果使用其他名称,则会对应到 SenparcHub 下的其他自定义方法
senparcWebSocketConnection.invoke("ReceiveMessage", submitData).catch(function (err) {
return console.error(err.toString());
});
}

function onReceiveMessage(receive){
senparcWebSocketConnection.on("ReceiveMessage", function (res) {
receive(res);
});
}

module.exports = {
buildConnectionAndStart: buildConnectionAndStart,
sendMessage: sendMessage,
onReceiveMessage: onReceiveMessage
}
Expand Up @@ -110,7 +110,7 @@ public void CreateWxaQrCodeAsyncTest()
public void CreateWxaQrCodeAsyncTest2()
{
var dt1 = SystemTime.Now;
#if NETSTANDARD2_0 || NETCOREAPP2_0 || NETCOREAPP2_1 || NETCOREAPP2_2
#if NETSTANDARD2_0 || NETCOREAPP2_0 || NETCOREAPP2_1 || NETCOREAPP2_2 || NETCOREAPP3_0
var filePath = "../../../Config/qr-async2.jpg";
#else
var filePath = "../../Config/qr-async2.jpg";
Expand All @@ -136,7 +136,7 @@ public void CreateWxaQrCodeAsyncTest2()
public void GetWxaCodeUnlimitTest()
{
Console.WriteLine("GetWxaCodeUnlimitTest开始");
#if NETSTANDARD2_0 || NETCOREAPP2_0 || NETCOREAPP2_1 || NETCOREAPP2_2
#if NETSTANDARD2_0 || NETCOREAPP2_0 || NETCOREAPP2_1 || NETCOREAPP2_2 || NETCOREAPP3_0
var filePath = "../../../qr-wxopen.jpg";
#else
var filePath = "../../qr-wxopen.jpg";
Expand Down
81 changes: 78 additions & 3 deletions src/Senparc.Weixin.WxOpen.Tests/Helpers/EncryptHelperTests.cs
Expand Up @@ -30,11 +30,13 @@
using Senparc.Weixin.Helpers;
using Senparc.Weixin.WxOpen.Containers;
using Senparc.CO2NET.Helpers;
using Senparc.Weixin.WxOpen.AdvancedAPIs.Sns;
using Senparc.WeixinTests;

namespace Senparc.Weixin.WxOpen.Helpers.Tests
{
[TestClass()]
public class EncryptHelperTests
public class EncryptHelperTests : BaseTest
{
[TestMethod()]
public void GetSignatureTest()
Expand Down Expand Up @@ -69,8 +71,6 @@ public void GetSignatureTest()
public void CheckSignatureTest()
{
//储存Session


var sessionId = "7f3f7489cb904d20bd4b5e9443f1bcab";
var rawData = "{\"nickName\":\"苏震巍\",\"gender\":1,\"language\":\"zh_CN\",\"city\":\"Suzhou\",\"province\":\"Jiangsu\",\"country\":\"CN\",\"avatarUrl\":\"http://wx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEKXyjX4N6I5Vx1aeiaBeJ2iaTLy15n0HgvjNbWEpKA3ZbdgXkOhWK7OH8iar3iaLxsZia5Ha4DnRPlMerw/0\"}";
var sessionKey = "lEIWEBVlmAj/Ng0t54iahA==";
Expand Down Expand Up @@ -127,6 +127,81 @@ public void DecodeUserInfoBySessionIdTest()
Assert.AreEqual("wxfcb0a0031394a51c", userInfo.watermark.appid);

Console.WriteLine(SerializerHelper.GetJsonString(userInfo));

//测试 EncryptHelper.DecodeEncryptedData() 方法
var userInfoStr = EncryptHelper.DecodeEncryptedData(sessionKey, encryptedData, iv);
Console.WriteLine("userInfoStr:");
Console.WriteLine(SerializerHelper.GetJsonString(userInfoStr));
}

[TestMethod()]
public void DecodeUserInfoBySessionIdTest2()
{
//测试 issue:https://github.com/JeffreySu/WeiXinMPSDK/issues/1869
//var sessionId = "ABCDEFGHIJK";
var sessionKey = "0sVkQ4CtcaiYJtvoPLBecw==";
var encryptedData =
"GiW4s+17o7RSaPOwGX8Ir1+3c/RYbHKvRzBg8UFlmIIiArLtU0ctkzjq1LRR5MH5CSPs63Jt4qCoFScSlRKlQ4/RVXXJFQV+r/1L+qKv/PdHRvVDLb+8P6CvPTurEuHsxlLyXTnnlEIu6IFYFzZWBMIp6+SHEK85mEb1gw4BtMmEy9EitnMskNjsEnmpI3M9r8ItKyQ8hinJejuno0JPXn3trc+2gMheNt4+4NwMTM6mzzGVO6g40NP7NjK9Tl6+An2TjBe+GGVFdrkl5hpYDXE/YO2FsL909faX3Y08msSuCVk5AsMGMJiUwddiu44KODdxCYfwLxBaIgYJEY6xLygFmAMuDg/L2g4/wDabBrhA5BNsD6lrcRRbvrHK65Lu3xd1oTXyMGbfUGTD4GLlLSJUX2FhcG7ZmHwg1jQUuKFHJu/AMQgdoPa/JONAu5Hjp0hL7ahr5LC0ghwdTfTowg3X1Ko9IgRxxj755eGgXQK7AnsMwjXzt4X+4YpOYpCb2LVSrTV2t4QjVNPe+Rjmsg==";
var iv = "4y2ftkwAM2mF6Qc89HydpA==";
//var unionId = "";

//SessionContainer.UpdateSession(sessionId, "OpenId", sessionKey, unionId);
try
{
var userInfo = EncryptHelper.DecodeEncryptedData(sessionKey, encryptedData, iv);


//var userInfo = Senparc.Weixin.WxOpen.Helpers.EncryptHelper.DecodeUserInfoBySessionId(sessionId,
// encryptedData, iv);
Assert.IsNotNull(userInfo);
Console.WriteLine(userInfo);
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
throw;
}

//Assert.AreEqual("wxfcb0a0031394a51c", userInfo.watermark.appid);

//Console.WriteLine(SerializerHelper.GetJsonString(userInfo));
}


[TestMethod()]
public void DecodeUserInfoBySessionIdTest3()
{
//测试 issue:https://github.com/JeffreySu/WeiXinMPSDK/issues/1825
var sessionKey = "98195476102492321891401391061935624977242";
var encryptedData =
"deWfUALVVTxrux2cp0qeqLWotTHTIpRmIrpcuWoh3ngyr7vjCDYq1wh2Q0CE6Zj9P/V2ZVqtjkVAiGdBuBR8fSs9qpWhb9ieO5FoumuvgoM6HP5+7Eul6lm8njXJlbTZr+pODAIeMoBIwpQUPpCLwYtpSuKlQGKvsrmoVU5j5xgoKm4dyKmNwq3qcqE5Q+HUOV0r/c7GusFWZD0haaccduMjmKAyupCpbwdDu6kiVfEo1pVZdp5j4C5ihrZdE7gzeS9vOAFDaB+NXPB6Lz+H8js6BH8gVJ7tZ1KUAwqt+FIqHHBKsREKoyjePwREkRc1Sr/N+QR1vps2cFGpqp16NAoTyT/JFi2jNs8PgrrEYZkjVvyMUYFlDnq5BWNyyh5RX34JEq7EN62sc+wfAMB2Nrm/QEcBCtYLycP3xcQnCLasU2SQbpIr5GOUz7aiIu5rwMXMUDDg7jxCOA4+ORfSHUgS6OczRjY+QqrcfKmlA84=";
var iv = "116115241129461711788323441202601974169239";
var userInfo = EncryptHelper.DecodeEncryptedData(sessionKey, encryptedData, iv);
Assert.IsNotNull(userInfo);
Console.WriteLine(userInfo);
}

//[TestMethod]
//public void AES_DecryptTest()
//{
// JsCode2JsonResult result = Senparc.CO2NET.Helpers.SerializerHelper.GetObject<JsCode2JsonResult>(@"{""openid"":""o5mT-4xYKKfTYu4qjrZ6lpnZE7KY"",""session_key"":""0sVkQ4CtcaiYJtvoPLBecw=="",""unionid"":null,""errcode"":0,""ErrorCodeValue"":0,""errmsg"":null,""P2PData"":null}");
// //使用SessionContainer管理登录信息(推荐)
// var unionId = result.unionid;
// var sessionBag = SessionContainer.UpdateSession(null, result.openid, result.session_key, unionId);
// var sessionId = sessionBag.Key;


// var model = SerializerHelper.GetObject<dynamic>(@"{""Code"":""071GaTvK0UyoL92mO8yK0WlMvK0GaTvj"",""State"":""Csproj_wxOpen_Bind"",""ReturnUrl"":"""",""EncryptedData"":""GiW4s+17o7RSaPOwGX8Ir1+3c/RYbHKvRzBg8UFlmIIiArLtU0ctkzjq1LRR5MH5CSPs63Jt4qCoFScSlRKlQ4/RVXXJFQV+r/1L+qKv/PdHRvVDLb+8P6CvPTurEuHsxlLyXTnnlEIu6IFYFzZWBMIp6+SHEK85mEb1gw4BtMmEy9EitnMskNjsEnmpI3M9r8ItKyQ8hinJejuno0JPXn3trc+2gMheNt4+4NwMTM6mzzGVO6g40NP7NjK9Tl6+An2TjBe+GGVFdrkl5hpYDXE/YO2FsL909faX3Y08msSuCVk5AsMGMJiUwddiu44KODdxCYfwLxBaIgYJEY6xLygFmAMuDg/L2g4/wDabBrhA5BNsD6lrcRRbvrHK65Lu3xd1oTXyMGbfUGTD4GLlLSJUX2FhcG7ZmHwg1jQUuKFHJu/AMQgdoPa/JONAu5Hjp0hL7ahr5LC0ghwdTfTowg3X1Ko9IgRxxj755eGgXQK7AnsMwjXzt4X+4YpOYpCb2LVSrTV2t4QjVNPe+Rjmsg=="",""Iv"":""4y2ftkwAM2mF6Qc89HydpA=="",""RawData"":""{\""nickName\"":\""*Rebecca\"",\""gender\"":2,\""language\"":\""zh_CN\"",\""city\"":\""Qingdao\"",\""province\"":\""Shandong\"",\""country\"":\""China\"",\""avatarUrl\"":\""https://wx.qlogo.cn/mmopen/vi_32/DYAIOgq83epNuU1WTDS98s7OS06OmnNktDJyHkrjRmEJrDjheXnnETPOTtMcsMPP6q7Bn3TIorV28iaETTvl3sA/132\""}"",""Signature"":""4a9a68b855b73f5a448d2b169a697ee14de5cf06""}");

// var checkSuccess = EncryptHelper.CheckSignature(sessionId, model.RawData, model.Signature);
// if (!checkSuccess)
// {
// //throw new UserFriendlyException("签名校验失败");
// }

// var userInfo = EncryptHelper.DecodeUserInfoBySessionId(sessionId, model.EncryptedData, model.Iv);

//}

}
}
@@ -0,0 +1,36 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>netcoreapp3.0</TargetFramework>

<IsPackable>false</IsPackable>

<AssemblyName>Senparc.Weixin.WxOpen.Tests</AssemblyName>

<RootNamespace>Senparc.Weixin.WxOpen.Tests</RootNamespace>
</PropertyGroup>

<ItemGroup>
<Compile Remove="Properties\AssemblyInfo.cs" />
</ItemGroup>

<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.2.0" />
<PackageReference Include="MSTest.TestAdapter" Version="1.4.0" />
<PackageReference Include="MSTest.TestFramework" Version="1.4.0" />
</ItemGroup>

<ItemGroup>
<Folder Include="Properties\" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\..\..\Senparc.Weixin.Cache\Senparc.Weixin.Cache.Redis\Senparc.Weixin.Cache.Redis.netcore3.csproj" />
<ProjectReference Include="..\..\..\Senparc.Weixin.MP\Senparc.Weixin.MP.Test\Senparc.Weixin.MP.Test.NetCore3.csproj" />
<ProjectReference Include="..\..\..\Senparc.Weixin.MP\Senparc.Weixin.MP\Senparc.Weixin.MP.netcore3.csproj" />
<ProjectReference Include="..\..\..\Senparc.Weixin.MP\Senparc.WeixinTests\Senparc.WeixinTests.NetCore3.csproj" />
<ProjectReference Include="..\..\..\Senparc.Weixin\Senparc.Weixin\Senparc.Weixin.netcore3.csproj" />
<ProjectReference Include="..\Senparc.Weixin.WxOpen\Senparc.Weixin.WxOpen\Senparc.Weixin.WxOpen.netcore3.csproj" />
</ItemGroup>

</Project>
Expand Up @@ -10,12 +10,6 @@
<RootNamespace>Senparc.Weixin.WxOpen.Tests</RootNamespace>
</PropertyGroup>

<ItemGroup>
<Compile Remove="Config\**" />
<EmbeddedResource Remove="Config\**" />
<None Remove="Config\**" />
</ItemGroup>

<ItemGroup>
<Compile Remove="Properties\AssemblyInfo.cs" />
</ItemGroup>
Expand Down
Expand Up @@ -199,7 +199,7 @@ public static async Task<WxJsonResult> SendImageAsync(string accessTokenOrAppId,
/// <param name="timeOut"></param>
/// <returns></returns>
[ApiBind(NeuChar.PlatformType.WeChat_MiniProgram, "CustomApi.SendLinkAsnyc", true)]
public static async Task<WxJsonResult> SendLinkAsnyc(string accessTokenOrAppId, string openId, string title, string description, string url, string thumbUrl, int timeOut = Config.TIME_OUT)
public static async Task<WxJsonResult> SendLinkAsync(string accessTokenOrAppId, string openId, string title, string description, string url, string thumbUrl, int timeOut = Config.TIME_OUT)
{
object data = new
{
Expand Down

0 comments on commit be9cbbc

Please sign in to comment.