简单接入微信公众号开发:实现自动回复

一、前提

先申请微信公众号的授权,找到或配置几个关键的信息(开发者ID、开发者密码、IP白名单、令牌和消息加解密密钥等)。

二、基本配置信息解读

开发者ID:固定的;

开发者密码:自己扫一下就可以看到;

IP白名单:设置自己配置服务器的地址;

服务器地址(URL):稍后详解;

令牌:随便写,按规则;

消息加解密密钥:随便写,或者随机生成;

三、配置服务器地址(URL)

服务器地址(URL)应该怎么配置呢?图片上的配置的地址是:http://www.nidie.com.cn/wechat ,那么它对应的控制器应该是怎么样子的呢?

在这里,我使用了第三方的包,需要通过 Nuget 来安装:

接下来新建一个 WeChatController.cs:

usingSystem.Threading.Tasks;usingSystem.Web.Mvc;usingSenparc.Weixin.MP;usingSenparc.Weixin.MP.Entities.Request;usingSenparc.Weixin.MP.MvcExtension;usingWen.MvcDemo.Application.WeChat.MessageHandlers.CustomMessageHandlers;usingWen.MvcDemo.Infrastructure.Configuration;namespaceWen.MvcDemo.Web.Controllers

{///

///微信///

public classWeChatController : Controller

{#region private static field

private static readonly string AppId =ApplicationSettingsFactory.GetApplicationSettings().WeChatAppId;private static readonly string EncodingAesKey =ApplicationSettingsFactory.GetApplicationSettings().WeChatEncodingAesKey;private static readonly string Token =ApplicationSettingsFactory.GetApplicationSettings().WeChatToken;#endregion private static field

///

///微信后台验证地址///

///

///

///

///

///

[HttpGet]public ActionResult Index(string signature, string timestamp, string nonce, stringechostr)

{returnContent(echostr);

}///

///处理用户发送消息后///

///

///

[HttpPost]public async TaskIndex(PostModel postModel)

{//校验签名

if (!CheckSignature.Check(postModel.Signature, postModel.Timestamp, postModel.Nonce, Token))return new WeixinResult("参数错误!");

postModel.AppId=AppId;

postModel.EncodingAESKey=EncodingAesKey;

postModel.Token=Token;//接收消息,自定义 MessageHandler,对微信请求进行处理

var messageHandler = newCustomMessageHandler(Request.InputStream, postModel);//执行微信处理过程

awaitmessageHandler.ExecuteAsync();//返回处理结果

return newFixWeixinBugWeixinResult(messageHandler);

}

}

}

代码分析:

里面主要包含了三个静态字段和两个 Index 方法。

其中静态字段对应的就是基本配置信息里面对应的几个参数,平常都是写入配置文件中来进行读取。

其中一个标识特性为 HttpGet 的 Index 方法,它是用来通过服务器地址(URL)验证的,当你成功部署到你的服务器后,再点击提交认证就可以通过了。注意的是,需要将代码先提交到服务器,再进行提交确认。

可能你看到该方法好像只返回 return Content(echostr); 这么简单的代码感到质疑:这能行吗?“我”记得官方文档好像要调用很复杂的方法进行校验才行的!?

上图就是官方文档,但是我只关心通过配置提交认证,也就是我用红圈着色的部分,即原样返回 echostr 参数内容即可。

第二个是实现 Post 请求的 Index 方法,在这里我进行了签名校验(也就是上图文档的校验逻辑),因为使用了第三方库,我们知道传哪些参数过去就可以了,签名通过后就是读取请求信息并进行后续处理的步骤了。

四、请求处理

在上面的处理请求信息的代码中,我自定义了一个类 CustomMessageHandler 来处理消息。

usingSystem;usingSystem.Collections.Generic;usingSystem.IO;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Xml.Linq;usingSenparc.Weixin.MP.AppStore;usingSenparc.Weixin.MP.AppStore.Utility;usingSenparc.Weixin.MP.Entities;usingSenparc.Weixin.MP.Entities.Request;usingSenparc.Weixin.MP.MessageHandlers;namespaceWen.MvcDemo.Application.WeChat.MessageHandlers.CustomMessageHandlers

{///

///自定义消息处理///

public class CustomMessageHandler : MessageHandler{public CustomMessageHandler(Stream inputStream, PostModel postModel = null, int maxRecordCount = 0, DeveloperInfo developerInfo = null) : base(inputStream, postModel, maxRecordCount, developerInfo)

{

}public CustomMessageHandler(XDocument requestDocument, PostModel postModel = null, int maxRecordCount = 0, DeveloperInfo developerInfo = null) : base(requestDocument, postModel, maxRecordCount, developerInfo)

{

}public CustomMessageHandler(RequestMessageBase requestMessageBase, PostModel postModel = null, int maxRecordCount = 0, DeveloperInfo developerInfo = null) : base(requestMessageBase, postModel, maxRecordCount, developerInfo)

{

}///

///默认///

///

///

public overrideIResponseMessageBase DefaultResponseMessage(IRequestMessageBase requestMessage)

{var responseMessage = base.CreateResponseMessage(); //ResponseMessageText也可以是News等其他类型

responseMessage.Content = $"您好,目前使用的微信公众号仍处于开发阶段,现已接入了【图灵机器人】,您可以尝试和他(她)交流。";returnresponseMessage;

}

}

}

CustomMessageHandler 类继承了 MessageHandler 类,然后重写了 DefaultResponseMessage() 方法,返回固定的文本值。base.CreateResponseMessage() 方法可以返回多种不同类型的结果值,如:

ResponseMessageText -对应文本消息

ResponseMessageNews-对应图文消息

ResponseMessageMusic-对应音乐消息

ResponseMessageXXX- 其他类型以此类推

上述方法只是一种默认的消息处理,我们也可以专门针对不同的请求类型做出不同的回应,比如重写 OnTextRequest(),其它重载需要自己观察基类成员:

///

///文本请求///

///

///

public overrideIResponseMessageBase OnTextRequest(RequestMessageText requestMessage)

{var responseMessage = base.CreateResponseMessage();

responseMessage.Content= $"您刚才发送的文字信息是:{requestMessage.Content}。"; //\r\n用于换行,requestMessage.Content即用户发过来的文字内容

returnresponseMessage;

}

因为在继承 MessageHandler 类的同时,我创建了一个 CustomMessageContext 自定义消息上下文的类,该类内容如下,并没有包含其它方法,直接继承 MessageContext 即可:

usingSenparc.Weixin.Context;usingSenparc.Weixin.MP.Entities;namespaceWen.MvcDemo.Application.WeChat.MessageHandlers.CustomMessageHandlers

{///

///自定义消息上下文///

public class CustomMessageContext : MessageContext{

}

}

这样,就完成了所有代码的编写,现在我们再次把代码部署好之后就可以开始进行测试了。

因为我除了部署自己的站点之外,还接入了【图灵机器人】回复,所以你看到了两条信息。

原文:https://www.cnblogs.com/liqingwen/p/9219454.html

微信公众号自动回复html,[.NET] 简单接入微信公众号开发:实现自动回复相关推荐

  1. 手把手教你简单接入微信SDK

    就看微信现在这么火的样子,如果你的APP不接入微信的SDK好像就有点脱离了时代大车轮一样.一个成功的APP,不单单凭借着一个好的想法,一个好的功能,最主要还是用户量.用户量就好像是水,我们的APP就一 ...

  2. 微信首页登录html页面,H5页面接入微信授权登录和分享

    前期准备 接入微信授权 分静默授权和非静默授权两种 静默授权: scope=snsapi_base,没有弹窗,只能获取用户的openId. 非静默授权: scope=snsapi_userinfo,有 ...

  3. 《从0到1上线微信小游戏》第十一节 接入微信小游戏广告

    第十一节 接入微信小游戏广告 申请公测 开通流量主并创建广告位 广告代码接入实战 广告组件审核 接入广告是小游戏实现盈利的一种方式.笔者会在这一小节讲解如何接入,并列出接入时需要注意的一些问题. 申请 ...

  4. android微信第三方登陆混淆,Android 第三方应用接入微信平台研究情况分享(二)

    微信平台开放后倒是挺火的,许多第三方应用都想试下,毕竟可以利用微信建立起来的关系链来拓展自己的应用还是挺不错的,可以节约很多在社交方面的开销,我最近由于实习需要也在研究这个东西,不过发现网上的相关资料 ...

  5. php 微信第三方登录demo,第三方登录 - 快速接入微信、QQ、微博等第三方登录方式 – 基于ThinkPHP和Bootstrap的极速后台开发框架...

    此插件基于FastAdmin和Thinkphp5开发的第三方登录插件,可用于对接微.微博.QQ等第三方登录,目前CMS中的小程序账号登录绑定就是基于此插件开发,在使用CMS中的小程序登录功能之前请务必 ...

  6. [Mac电脑版微信】双开方法,最简单的微信多开教程,不需要任何三方工具

    微信是我们日常生活中必不可少的社交软件,很多人不止有一个微信,但通常会面临一个问题,在电脑上只能同时打开一个微信,今天我闲来无事,写了一个在电脑上可以微信多开的脚本,最初使用的是bat脚本,但bat需 ...

  7. cocosjs微信头像本地服务器,Cocos creator游戏接入微信开放数据域,实现好友排行榜功能...

    微信小游戏加入排行榜功能,可以增加游戏微信好友参与,增加分数竞争氛围,官方的说明文档不怎么详细,也有坑.本文实战以cocos creator v2.2版本为例,供大家参考. 结果显示: 前提: 1.创 ...

  8. 微信公众号 php sdk,GitHub - yuanchenglu/wechat-php-sdk: 微信公众平台 PHP SDK

    微信公众平台 PHP SDK 介绍 简单的微信公众平台 PHP SDK ,通过调用相应的接口,使你可以轻松地开发微信 App .测试方法如下: Clone 或下载项目源码,上传至服务器. 进入微信公众 ...

  9. 接入微信登录---(由于微信的官方文档写的有点散,特此记录一下)

    最近app上Goole市场,三方登录这块原先用的是mob的,但是Goole那边检测到mob会自动收集手机用户的手机号码信息并上传到mob的后台,所以App被下架了,没办法就让直接对接微信登录.下面就是 ...

最新文章

  1. 在Ubuntu 16.04.3 TLS上玩转tls协议的简单demo
  2. python 获取你电脑纯文本文档内容!解决IndentationError: expected an indented block报错!
  3. centos 5.6安装及配置JDK环境变量
  4. Oracle SQL Developer - 智能提示
  5. 图形系统中的仿射变换
  6. 使用Blend开发Silverlight VSM
  7. LVS-DR,real-server为windows 2008的配置
  8. 弱网络环境下最优调度和优化传输层协议方案
  9. Ubuntu 10.04编译安装insigh-6.8-1
  10. 用于无人驾驶技术的车道线_自动驾驶汽车可用于查找车道的4种技术
  11. 云豹直播源码v8.2
  12. 【用python写一个简易的消息轰炸代码】
  13. 透过分布地图,看我中华大地!
  14. python画爱心 好看漂亮的表白代码
  15. 我的梦想就是不工作,有什么错?
  16. python opencv创建图像_打开国庆的正确方式,教你用OpenCV-Python轻松生成微信国庆版头像...
  17. mybatis-plus和mysql
  18. Python字符串连接
  19. 树莓派上编译安装hostapd
  20. 分析11.2.0.3 rac CRS-1714:Unable to discover any voting files

热门文章

  1. 【ElasticSearch】es 面试题 视频 笔记
  2. 40-400-044-运维-优化-MySQL order by 优化
  3. 【kafka】kafka 控制台 消费报错 cant rebalance afer 4 retries
  4. 【Antlr】rule expr: must label all alternatives or none
  5. 分布式任务调度平台XXL-JOB一
  6. 字节跳动面试流程和考点都在这儿
  7. 四张图,读懂 BIO、NIO、AIO、多路复用 IO 的区别
  8. Java并发编程:从源码分析几道必问线程池的面试题?
  9. Docker 容器安装vim
  10. Unity UGUI实现鼠标拖动图片