Skip to content

Commit

Permalink
31课时代码
Browse files Browse the repository at this point in the history
  • Loading branch information
JeffreySu committed Jul 5, 2018
1 parent e32c369 commit b616264
Show file tree
Hide file tree
Showing 13 changed files with 361 additions and 1 deletion.
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
using Senparc.WebSocket;
using Senparc.Weixin;
using Senparc.Weixin.MP.AdvancedAPIs.TemplateMessage;
using Senparc.Weixin.WxOpen.Containers;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SenparcClass.Service
{
/// <summary>
/// 自定义 WebSocket 处理类
/// </summary>
public class CustomWebSocketMessageHandler : WebSocketMessageHandler
{
public override Task OnConnecting(WebSocketHelper webSocketHandler)
{
//TODO:处理连接时的逻辑
return base.OnConnecting(webSocketHandler);
}

public override Task OnDisConnected(WebSocketHelper webSocketHandler)
{
//TODO:处理断开连接时的逻辑
return base.OnDisConnected(webSocketHandler);
}

public override async Task OnMessageReceiced(WebSocketHelper webSocketHandler, ReceivedMessage receivedMessage, string originalData)
{
if (receivedMessage == null || string.IsNullOrEmpty(receivedMessage.Message))
{
return;
}

var message = receivedMessage.Message;

await webSocketHandler.SendMessage("originalData:" + originalData);
await webSocketHandler.SendMessage("您发送了文字:" + message);
await webSocketHandler.SendMessage("正在处理中...");

await Task.Delay(1000);

//处理文字
var result = string.Concat(message.Reverse());
await webSocketHandler.SendMessage(result);

#if NET45
var appId = WebConfigurationManager.AppSettings["WxOpenAppId"];//与微信小程序账号后台的AppId设置保持一致,区分大小写。
#else
var appId = "WxOpenAppId";//与微信小程序账号后台的AppId设置保持一致,区分大小写。
#endif


try
{
//发送模板消息
var formId = receivedMessage.FormId;//发送模板消息使用,需要在wxml中设置<form report-submit="true">

var sessionBag = SessionContainer.GetSession(receivedMessage.SessionId);

//临时演示使用固定openId
var openId = sessionBag != null ? sessionBag.OpenId : "onh7q0DGM1dctSDbdByIHvX4imxA";// "用户未正确登陆";

await webSocketHandler.SendMessage("OpenId:" + openId);
//await webSocketHandler.SendMessage("FormId:" + formId);

if (sessionBag == null)
{
openId = "onh7q0DGM1dctSDbdByIHvX4imxA";//临时测试
}

//var data = new WxOpenTemplateMessage_PaySuccessNotice(
// "在线购买", DateTime.Now, "图书众筹", "1234567890",
// 100, "400-9939-858", "http://sdk.senparc.weixin.com");

var data = new
{
keyword1 = new TemplateDataItem("来自小程序WebSocket的模板消息"),
keyword2 = new TemplateDataItem(DateTime.Now.ToString()),
keyword3 = new TemplateDataItem("Name"),
keyword4 = new TemplateDataItem("Number"),
keyword5 = new TemplateDataItem(100.ToString("C")),
keyword6 = new TemplateDataItem("400-031-8816"),
};

var tmResult = Senparc.Weixin.WxOpen.AdvancedAPIs.Template.TemplateApi.SendTemplateMessage(appId, openId, "Ap1S3tRvsB8BXsWkiILLz93nhe7S8IgAipZDfygy9Bg", data, receivedMessage.FormId, "pages/websocket/websocket", "websocket",
null);
}
catch (Exception ex)
{
var msg = ex.Message + "\r\n\r\n" + originalData + "\r\n\r\nAPPID:" + appId;

await webSocketHandler.SendMessage(msg); //VS2017以下如果编译不通过,可以注释掉这一行

WeixinTrace.SendCustomLog("WebSocket OnMessageReceiced()过程出错", msg);
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,9 @@
<Reference Include="Newtonsoft.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.10.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="Senparc.WebSocket, Version=0.5.5.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Senparc.WebSocket.0.5.5\lib\net45\Senparc.WebSocket.dll</HintPath>
</Reference>
<Reference Include="Senparc.Weixin, Version=4.20.2.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Senparc.Weixin.4.20.2\lib\net45\Senparc.Weixin.dll</HintPath>
</Reference>
Expand All @@ -48,6 +51,7 @@
<Reference Include="System.Runtime.Serialization" />
<Reference Include="System.Web" />
<Reference Include="System.Web.Extensions" />
<Reference Include="System.Web.Routing" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
Expand All @@ -61,6 +65,7 @@
<Compile Include="Config.cs" />
<Compile Include="CustomMessageContext.cs" />
<Compile Include="CustomMessageHandler.cs" />
<Compile Include="CustomWebSocketMessageHandler.cs" />
<Compile Include="MessageQueueHandler.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="StorageModel.cs" />
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Newtonsoft.Json" version="10.0.3" targetFramework="net45" />
<package id="Senparc.WebSocket" version="0.5.5" targetFramework="net45" />
<package id="Senparc.Weixin" version="4.20.2" targetFramework="net45" />
<package id="Senparc.Weixin.MP" version="14.10.3" targetFramework="net45" />
<package id="Senparc.Weixin.WxOpen" version="1.9.1" targetFramework="net45" />
<package id="System.Net.Http" version="4.3.1" targetFramework="net45" />
</packages>
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
using Senparc.Weixin;
using Senparc.Weixin.Cache;
using Senparc.Weixin.Cache.Redis;
using SenparcClass.Service;
using System;
using System.Collections.Generic;
using System.Linq;
Expand All @@ -16,6 +17,10 @@ public class MvcApplication : System.Web.HttpApplication
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();

Senparc.WebSocket.WebSocketConfig.RegisterRoutes(RouteTable.Routes);
Senparc.WebSocket.WebSocketConfig.RegisterMessageHandler<CustomWebSocketMessageHandler>();

FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,9 @@
<Reference Include="Newtonsoft.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.10.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="Senparc.WebSocket, Version=0.5.5.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Senparc.WebSocket.0.5.5\lib\net45\Senparc.WebSocket.dll</HintPath>
</Reference>
<Reference Include="Senparc.Weixin, Version=4.20.2.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Senparc.Weixin.4.20.2\lib\net45\Senparc.Weixin.dll</HintPath>
</Reference>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,14 @@
<package id="Modernizr" version="2.6.2" targetFramework="net45" />
<package id="Newtonsoft.Json" version="10.0.3" targetFramework="net45" />
<package id="Respond" version="1.2.0" targetFramework="net45" />
<package id="Senparc.WebSocket" version="0.5.5" targetFramework="net45" />
<package id="Senparc.Weixin" version="4.20.2" targetFramework="net45" />
<package id="Senparc.Weixin.Cache.Redis" version="1.4.0-beta1" targetFramework="net45" />
<package id="Senparc.Weixin.Cache.Redis.RedLock" version="1.0.1-beta1" targetFramework="net45" />
<package id="Senparc.Weixin.MP" version="14.10.3" targetFramework="net45" />
<package id="Senparc.Weixin.MP.MVC" version="5.1.1" targetFramework="net45" />
<package id="Senparc.Weixin.WxOpen" version="1.9.1" targetFramework="net45" />
<package id="StackExchange.Redis" version="1.2.6" targetFramework="net45" />
<package id="System.Net.Http" version="4.3.1" targetFramework="net45" />
<package id="WebGrease" version="1.5.2" targetFramework="net45" />
</packages>
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@
"pages/index/index",
"pages/logs/logs",
"pages/userinfo/userinfo",
"pages/oauth/oauth"
"pages/oauth/oauth",
"pages/websocket/websocket"
],
"window": {
"backgroundTextStyle": "light",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,11 @@ Page({
canIUse: wx.canIUse('button.open-type.getUserInfo'),
currentTime:''
},
bindWebsocketTap: function () {
wx.navigateTo({
url: '../websocket/websocket'
})
},
//事件处理函数
bindViewTap1: function() {
wx.navigateTo({
Expand Down Expand Up @@ -82,6 +87,67 @@ Page({
}
})
},
wxPay: function () {
wx.request({
url: wx.getStorageSync('domainName') + '/WxOpen/GetPrepayid',//注意:必须使用https
data: {
sessionId: wx.getStorageSync('sessionId')
},
method: 'POST',
success: function (res) {
// success
var json = res.data;
console.log(res.data);

if (json.success) {
wx.showModal({
title: '得到预支付id',
content: 'package' + json.package,
showCancel: false
});

//开始发起微信支付
wx.requestPayment(
{
'timeStamp': json.timeStamp,
'nonceStr': json.nonceStr,
'package': json.package,
'signType': 'MD5',
'paySign': json.paySign,
'success': function (res) {
wx.showModal({
title: '支付成功!',
content: '请在服务器后台的回调地址中进行支付成功确认,不能完全相信UI!',
showCancel: false
});
},
'fail': function (res) {
console.log(res);
wx.showModal({
title: '支付失败!',
content: '请检查日志!',
showCancel: false
});
},
'complete': function (res) {
wx.showModal({
title: '支付流程结束!',
content: '执行 complete(),成功或失败都会执行!',
showCancel: false
});
}
})

} else {
wx.showModal({
title: '微信支付发生异常',
content: json.msg,
showCancel: false
});
}
}
});
},
onLoad: function () {
if (app.globalData.userInfo) {
this.setData({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,11 @@

<!-- 微信支付 -->
<button bindtap="wxPay" class="btn-DoRequest" hover-class="other-button-hover" >微信支付(1分钱)</button>

<!-- WebSocket -->
<button type="devalut" bindtap="bindWebsocketTap">
WebSocket
</button>

<view class="usermotto">
<text class="user-motto">{{motto}}</text>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
var app = getApp()
var socketOpen = false;//WebSocket 打开状态
Page({
data: {
messageTip: '',
messageTextArr: [],
messageContent: 'TEST',
userinfo: {}
},
//sendMessage
formSubmit: function (e) {
var that = this;
console.log('formSubmit', e);
var msg = e.detail.value.messageContent;//获得输入文字
console.log('send message:' + msg);
if (socketOpen) {

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

wx.sendSocketMessage({
data: submitData
});
that.setData({
messageContent: ''
})
} else {
that.setData({
messageTip: 'WebSocket 链接失败,请重新连接!'
})
}
},
onLoad: function () {
console.log('onLoad')
var that = this

//连接 Websocket
wx.connectSocket({
url: wx.getStorageSync('wssDomainName') + '/SenparcWebSocket',
header: {
'content-type': 'application/json'
},
method: "GET"
});
//WebSocket 连接成功
wx.onSocketOpen(function (res) {
console.log('WebSocket 连接成功!')
socketOpen = true;
that.setData({
messageTip: 'WebSocket 连接成功!'
})
})
//收到 WebSocket 推送消息
wx.onSocketMessage(function (res) {
console.log('收到服务器内容:' + res.data)
var jsonResult = JSON.parse(res.data);
var currentIndex = that.data.messageTextArr.length + 1;
var newArr = that.data.messageTextArr;
newArr.unshift(
{
index: currentIndex,
content: jsonResult.content,
time: jsonResult.time
});
console.log(that);
that.setData({
messageTextArr: newArr
});
})
//WebSocket 已关闭
wx.onSocketClose(function (res) {
console.log('WebSocket 已关闭!')
socketOpen = false;
})
//WebSocket 打开失败
wx.onSocketError(function (res) {
console.log('WebSocket连接打开失败,请检查!')
})
}
})
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{}
Loading

0 comments on commit b616264

Please sign in to comment.