使用Senparc.Weixin.WxOpen开发高可用的微信小程序

Senparc.Weixin SDK介绍

Senparc.Weixin SDk是目前.net平台上使用率最高的微信SDK,除硬件平台暂未发布以外覆盖了所有微信平台模块,自2013年免费开源起已经持续更新了4年,是GitHub上目前Star和Fork数最多的中国C#开源项目。

目前大多数模块都支持了.net 4.0 / .net 4.5 / .net core 三个版本,Senparc官方计划在2017年将新增.net 4.6.2版本,并着力强化.net core版本,在7月左右会停止对.net 4.0版本的更新。

其中,小程序的模块命名为Senparc.Weixin.WxOpen,Nuget地址:

https://www.nuget.org/packages/Senparc.Weixin.WxOpen

v1.0版本已于2017年1月9日凌晨同步上线!

Senparc.Wexin SDK系列库:

 

过去的4年时间,Senparc团队总共迭代发布了100多个稳定版本,目前总体框架已经比较完善,可以应对超高并发在内的各种系统环境。

以下是官方提供的一些资源:

官网:http://weixin.senparc.com/

源代码(包含Demo):https://github.com/JeffreySu/WeiXinMPSDK

在线Demo(包含Nuget项目入口):http://sdk.weixin.senparc.com/

Demo公众号:盛派网络小助手

公众号开发系列教程:http://www.cnblogs.com/szw/p/weixin-course-index.html 

下载类库chm帮助文档:http://sdk.weixin.senparc.com/Document

在线类库帮助文档:http://doc.weixin.senparc.com/

微信开发资源汇总项目:https://github.com/JeffreySu/WeixinResource

Senparc.Weixin SDK交流QQ群:342319110

小程序开发交流QQ群:108830388 


微信平台生态关系

加上小程序之后,整个公众号的平台生态又多了一环,根据开发代码体量和包含关系(尤其是核心重叠部分),目前大概是下面这样的场景:

整个2016年,开发者们被微信小程序吊足了胃口,每每微信官方有小程序的动态发布,都会被刷屏,大众对微信小程序的关注程度可见一斑。

对于开发者来说,无论微信小程序的实际商业应用广度或是被接受度如何,这都将是一块熟悉又陌生的广阔的处女地。

由于小程序的多数规则和微信公众号基本一致,因此我们的小程序模块(Senparc.Weixin.WxOpen.dll)多数代码是从公众号模块(Senparc.Weixin.MP.dll)移植过来的。

微信官方为小程序准备了比较细致的文档和教程(这一点和当初公众号相比简直不在一个级别上),以下是一些重要的线上资源:

  • 小程序开发文:https://mp.weixin.qq.com/debug/wxadoc/dev/

  • 小程序设计指南:https://mp.weixin.qq.com/debug/wxadoc/design/

  • 开发工具下载:
    https://mp.weixin.qq.com/debug/wxadoc/dev/devtools/download.html

下文将整理目前为止对小程序后端开发最为重要的知识点、注意点进行介绍,或给出对应资源的地址,并就和微信公众号相关的技能给出相关的索引。

对于一个在高并发场景下保持高可用性的小程序来说,这几个方面的处理细节是不可忽视的:

  • 消息处理

  • 上下文

  • 消息加密

  • AccessToken令牌处理

  • 高级接口

  • 异步开发

  • 分布式缓存

  • 同步锁

  • WebSocket

  • 跟踪日志及异常处理

消息处理

微信小程序在进入客服会话状态之后,即可与客服进行对话,可以发送文字或图片信息,和公众号不同的是,目前小程序的消息系统是不能进行直接回复的,必须使用异步的方式调用“客服接口”推送消息(下文会讲到),为此我们优化了Senparc.Weixin SDK中的消息处理流程:MessageHandler。

MessageHandler是一个信消息的处理模块,也是整个微信开发过程中不可缺少的一部分。在MessageHandler中,开发者可以非常轻松地处理所有类型的微信消息。小程序的MessageHandler类叫做WxOpenMessageHandler。

在ASP.NET MVC我们只需要如下几步就可实现对消息的处理(和微信公众号一致)。

第一步:创建上上下文类,CustomWxOpenMessageContext.cs:

有关WxOpenMessageContext(上下文)的内容下文会讲到。

CustomWxOpenMessageContext.cs 代码如下:

using Senparc.Weixin.Context;

using Senparc.Weixin.WxOpen.Entities;

namespace Senparc.Weixin.MP.Sample.CommonService.WxOpenMessageHandler

{

public class CustomWxOpenMessageContext : MessageContext<IRequestMessageBase,IResponseMessageBase>

{

public CustomWxOpenMessageContext()

{

base.MessageContextRemoved += CustomMessageContext_MessageContextRemoved;

}

/// <summary>

/// 当上下文过期,被移除时触发的时间

/// </summary>

/// <param name="sender"></param>

/// <param name="e"></param>

void CustomMessageContext_MessageContextRemoved(object sender, Senparc.Weixin.Context.WeixinContextRemovedEventArgs<IRequestMessageBase,IResponseMessageBase> e)

{

/* 注意,这个事件不是实时触发的(当然你也可以专门写一个线程监控)

* 为了提高效率,根据WeixinContext中的算法,这里的过期消息会在过期后下一条请求执行之前被清除

*/

var messageContext = e.MessageContext as CustomWxOpenMessageContext;

if (messageContext == null)

{

return;//如果是正常的调用,messageContext不会为null

}

//TODO:这里根据需要执行消息过期时候的逻辑,下面的代码仅供参考

//Log.InfoFormat("{0}的消息上下文已过期",e.OpenId);

//api.SendMessage(e.OpenId, "由于长时间未搭理客服,您的客服状态已退出!");

}

}

}

源码:

第二步:创建自定义 CustomWxOpenMessageHandler.cs:

CustomWxOpenMessageHandler.cs 代码如下:

using System.IO;

using System.Web.Configuration;

using Senparc.Weixin.

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值