700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 微信公众号自动回复html [.NET] 简单接入微信公众号开发:实现自动回复

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

时间:2019-02-05 16:39:46

相关推荐

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

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

一、前提

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

二、基本配置信息解读

开发者ID:固定的;

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

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

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

令牌:随便写,按规则;

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

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

服务器地址(URL)应该怎么配置呢?图片上的配置的地址是:/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{

}

}

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

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

原文:/liqingwen/p/9219454.html

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。