关注分享主机优惠活动
国内外VPS云服务器

如何用koa2搭建微信第三方公众平台

这一次,我将向您展示如何使用koa2构建微信的第三方公众平台。使用koa2搭建微信第三方公众平台有哪些注意事项?以下是实际案例。让我们来看看。

写之前,我想说一下koa。与express相比,koa在执行流程和组件方面要好得多。koa本身并没有提供太多的扩展,但是构建扩展很方便,可以让你自由发挥,像写其他语言一样并行执行代码。如果promise解放了繁琐的回调,那么koa可以编写web应用,通过组合不同的生成器,可以避免回调函数重复繁琐的嵌套,大大提高错误处理的效率。Koa在内核方法中没有绑定任何中间件,只是提供了一个轻量级的优雅函数库,使得编写Web应用变得非常容易。nodejs天生的异步处理流程,使其非常适合微信微信官方账号频繁的消息交互,再加上pm2的多进程管理,可以说很大程度上满足了大规模消息转发交互的要求,在微信官方账号中得到了发挥。

在koa2中搭建微信的第三方公众平台,首先要解决的是如何获取微信返回的xml流,以及如何将对应的XML体返回给微信。因为koa本身并不是一个框架,感谢互联网上众多的中间件,我搭建了一个类似express的框架。这个框架是开源的。详情请看我的git地址:https://github.com/yxz1025/koa-lana.所有微信消息都在这个框架里。请自行下载!

好了,首先我们来看看如何获取微信返回的xml流:

= = = = = = tool . js = = = =//截取xml流文件const Promise = require(& # 039;蓝鸟& # 039;);//普通post流转换为promise var tool = { convert post:function(req){ let post _ data = " & quot;;return new Promise(function(resolve,reject){ req . on(& # 039;数据& # 039;,函数(chunk){ post _ data+= chunk;});req . on(& # 039;end & # 039,function(){ resolve(post _ data);});});},};module.exports = Tool= = = = = weichat . js = = = = =//微信响应正文文件const router = require(& # 039;KOA -路由器& # 039;)();const parse message = require(& # 039;../common/parse message & # 039;);const config = require(& # 039;../config & # 039;);const WXBizMsgCrypt = require(& # 039;微信-加密& # 039;);const middleware = require(& # 039;../模型/中间件& # 039;);const validator = require(& # 039;验证器& # 039;);const Aes = require(& # 039;../common/AES & # 039;);const Tool = require(& # 039;../common/tool & # 039;);const cryptor = new WXBizMsgCrypt(config . component _ config . token,config.component_config.key,config . component _ config . component _ appid);//第三方授权路径/:appid/callback/微信/100234/callback router . post(& # 039;/:appid/callback & # 039;,异步函数(ctx,next){ let post _ data = & quot;";let req = ctx.reqpost _ data = await tool . convert post(req);设XML = parse message(post _ data);let signature = cryptor . get signature(CTX . query . timestamp,ctx.query.nonce,XML . encrypt);if (ctx.query.msg_signature!=签名){ ctx.body = & # 039认证失败!';//当指纹码不匹配时,返回错误消息,禁止后续的消息接受和发送} let message = middleware . decrypt XML(XML);设appid = CTX . params . appid;message.appId = appid//发送消息队列开关(message . msgtype){ case & # 039;正文& # 039;://Test if(message . touser name = = " GH _ 3c 884 a 361561 & quot;){ if(message . content = = & quot;TESTCOMPONENT _ MSG _ TYPE _ TEXT & quot;){ let text = middleware.text(消息,消息.内容+& quot;_回调& quot);let reply = middleware . encrypt XML(text);return ctx.body = reply} let content = message.contentif(content . index of(& quot;查询_授权_代码& quot) != -1){ CTX . body = & quot;";let code _ Li = content . split(& quot;:& quot);await middleware . custom send(message . from username,code _ Li[1]);返回;} } let关键字= validator . trim(message . content)。toLowerCase();let member _ config = await middleware . getmemberconfig(message . to username,keywords);如果(!member _ config){ await middleware . sendmnsquene(message);return ctx.body = & quot成功& gt;;}else{ //匹配成功消息;数据包ID = parse int(member _ config;hongbaoid);message.keywords =关键字;await middleware . sendmnsquene(message);let data = { title:member _ config . news _ title | | & # 039;我得到一个红包& # 039;,description:member _ config . description | | & # 039;第一轮红包雨已经开始,快手慢手!',pic URL:member _ config . pic URL | | & # 039;http://7xqomp.com2.z0.glb.qiniucdn.com/17269743.png' };let key = { from username:message . from username,toUserName: message.toUserName,keywords: keywords,appId:appId };key = JSON . stringify(key);key = AES . ency pt(key);key = AES . base64 _ encode(key);//获取授权域名let auth _ URL = await middleware . packet domain();data.url = & quothttp://& quot;+appid+& quot;。"+身份验证URL+& quot;/redPackets/koulin?key = & quot+键;let news = middleware . news(message,[data]);let reply = middleware.encryptXml(新闻);ctx.body = reply返回;}破;案例& # 039;事件& # 039;:await middleware . sendmnsquene(message);//测试特殊if(message . touser name = = " GH _ 3c 884 a 361561 & quot;){ let text = middleware . text(message,message . event+& quot;from_callback&quot);let reply = middleware . encrypt XML(text);ctx.body = reply返回;}破;默认:await middleware . sendmnsquene(message);ctx.body = & quot成功& gt;;返回;};});module.exports =路由器;相信你看完这个案例已经掌握了方法。更多精彩请关注即时码站其他相关文章!

推荐阅读:

Koa2微信微信官方账号开发的本地开发调试环境如何操作

如何操作Koa2微信微信官方账号实现消息管理

未经允许不得转载:主机频道 » 如何用koa2搭建微信第三方公众平台

评论 抢沙发

评论前必须登录!