了解 Senparc 的消息处理机制

了解 Senparc 的消息处理机制

参考资料

消息分类与 MessageHandler 简介

微信公众平台对消息做了比较清晰的分类,最基本的包括请求(Request)响应(Response)两大类,每类又细分为文字、语音、图片等格式。

在 Senparc.Weixin.MP SDK 中,这些类型以枚举方式区分,并按照严格的命名规则定义了所有 RequestMessageResponseMessage 类。

如果不使用封装,开发者需要编写大量的 switch 或反射代码来区分消息类型。为了简化这一流程,从 v0.3.0 起,SDK 提供了 MessageHandler​ 抽象类。它内部已通过高效的方式处理了类型判断,开发者只需继承该类并重写对应方法即可。

使用 MessageHandler 的步骤

第一步:创建自定义 MessageHandler 类

新建 MyMessageHandler.cs,以 MessageHandler 为基类,重写所有方法:

  • 构造函数接收来自微信服务器的请求流(inputStream),也可传入 XDocument 调用基类对应构造函数。
  • 重写的方法对应不同的请求类型(如文字、图片等),命名规则清晰易懂。

第二步:在重写方法中实现业务逻辑

例如处理文字(Text)消息时,使用 ResponseMessageBase.CreateFromRequestMessage 初始化特定类型的响应消息,返回类型需基于 IResponseMessageBase

第三步:在 Controller 的 Action 中使用 MessageHandler

关键代码只需三步:

  1. 实例化自定义 MessageHandler
  2. 调用 await messageHandler.ExecuteAsync() 执行整个处理过程(内部会调用对应的 OnxxRequestAsync 方法)
  3. 返回响应结果

配置 AppId 和 AppSecret

Web.configappSettings 节点中添加配置:

<add key="WeixinAppId" value="你的AppId" />
<add key="WeixinAppSecret" value="你的AppSecret" />Code language: HTML, XML (xml)

在代码中读取:

private string appId = WebConfigurationManager.AppSettings["WeixinAppId"];
private string appSecret = WebConfigurationManager.AppSettings["WeixinAppSecret"];Code language: PHP (php)

注意:示例原文中 value="true" 仅为占位,实际应填写真实的 AppId 和 AppSecret。Token 建议使用数字+英文大小写组合,避免被破解伪造请求。

微信后台配置

在微信公众平台后台配置消息 URL 时,需要提供一个 GET 请求的 Action​ 用于验证(与之前握手阶段一致),以及一个 POST 请求的 Action​ 用于接收用户消息。

PostModel 实体类包含了 SignatureTimestampNonce(由微信通过 URL 参数传入)以及 AppIdTokenEncodingAESKey 等敏感信息,需自行传入。

常见问题:调试失败与 IP 白名单

如果一直调试失败,有可能是 IP 白名单的问题。

为提高接口调用安全性,微信对”获取 access_token”接口增加了 IP 白名单校验:只有将服务器 IP 地址加入公众号的 IP 白名单,才能成功调用该接口。

解决方法:登录微信公众平台 → 开发 → 基本配置 → 公众号开发信息 → 添加 IP 白名单,将部署服务器的公网 IP 添加进去。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注