如何使用koa2搭建微信第三方公眾平臺

這次給大家?guī)砣绾问褂胟oa2搭建微信第三方公眾平臺,使用koa2搭建微信第三方公眾平臺的注意事項有哪些,下面就是實戰(zhàn)案例,一起來看一下。愛掏網(wǎng) - it200.com

在寫之前我想先說說koa,koa相比express,在執(zhí)行流程,以及組件方面優(yōu)秀的多,koa本身沒有提供過多的擴展組建,但是它便捷的組建擴展,可以讓你自由的發(fā)揮,可以想寫其他語言一樣并行執(zhí)行代碼,如果說promise解放了繁瑣的callback,那么 koa 編寫 web 應用,通過組合不同的 generator,可以免除重復繁瑣的回調(diào)函數(shù)嵌套,并極大地提升錯誤處理的效率。愛掏網(wǎng) - it200.comkoa 不在內(nèi)核方法中綁定任何中間件,它僅僅提供了一個輕量優(yōu)雅的函數(shù)庫,使得編寫 Web 應用變得得心應手,nodejs的天生的異步處理流程,使得它很適合微信公眾號這種頻繁的消息互動,再加上pm2的多進程管理,可以說已經(jīng)很大程度的滿足大號的消息轉(zhuǎn)發(fā)互動已經(jīng)公眾號內(nèi)部紅包玩法。愛掏網(wǎng) - it200.com

在使用koa2搭建微信第三方公眾平臺是,首先要解決的是如果獲取微信返回的xml流,以及如何返回對應的XML體給微信。愛掏網(wǎng) - it200.com
由于本身koa不是一個框架,所以得益于網(wǎng)上眾多的中間件,自己搭建了一個類似于express的框架,本框架已經(jīng)開源,詳情請看我的git地址:https://github.com/yxz1025/koa-lana,所有的微信接發(fā)消息均在此框架中,請讀者自行下載!

好了,首先,我們看看如何獲取微信返回的xml流:

======tool.js=====
//截獲微信返回的xml流文件
const?Promise?=?require('bluebird');
//普通post流轉(zhuǎn)化為promise
var?Tool?=?{
??convertPost:?function(req)?{
????let?post_data?=?"";
????return?new?Promise(function(resolve,?reject){
??????req.on('data',?function(chunk)?{
????????post_data?+=?chunk;
??????});
??????req.on('end',?function()?{
????????resolve(post_data);
??????});
????});
??},
};
module.exports?=?Tool;
=====weichat.js======
//微信響應主體文件
const?router?=?require('koa-router')();
const?parseMessage?=?require('../common/parseMessage');
const?config?=?require('../config');
const?WXBizMsgCrypt?=?require('wechat-crypto');
const?middleware?=?require('../model/middleware');
const?validator?=?require('validator');
const?Aes?=?require('../common/aes');
const?Tool?=?require('../common/tool');
const?cryptor?=?new?WXBizMsgCrypt(config.component_config.token,?config.component_config.key,?config.component_config.component_appid);
//第三方授權(quán)路徑?/:appid/callback??/wechat/100234/callback
router.post('/:appid/callback',?async?function(ctx,?next)?{
??let?post_data?=?"";
??let?req?=?ctx.req;
??post_data?=?await?Tool.convertPost(req);
??let?xml?=?parseMessage(post_data);
??let?signature?=?cryptor.getSignature(ctx.query.timestamp,?ctx.query.nonce,?xml.encrypt);
??if?(ctx.query.msg_signature?!=?signature)?{
????ctx.body?=?'Auth?failed!';?//?指紋碼不匹配時返回錯誤信息,禁止后面的消息接受及發(fā)送
??}
??let?message?=?middleware.decryptXml(xml);
??let?appid?=?ctx.params.appid;
??message.appId?=?appid;
??//發(fā)送消息隊列
??switch?(message.msgType)?{
????case?'text':
??????//測試
??????if?(message.toUserName?==?"gh_3c884a361561")?{
????????if?(message.content?==?"TESTCOMPONENT_MSG_TYPE_TEXT")?{
??????????let?text?=?middleware.text(message,?message.content?+?"_callback");
??????????let?reply?=?middleware.encryptXml(text);
??????????return?ctx.body?=?reply;
????????}
????????let?content?=?message.content;
????????if?(content.indexOf("QUERY_AUTH_CODE")?!=?-1)?{
??????????ctx.body?=?"";
??????????let?code_li?=?content.split(":");
??????????await?middleware.customSend(message.fromUserName,?code_li[1]);
??????????return;
????????}
??????}
??????let?keywords?=?validator.trim(message.content).toLowerCase();
??????let?member_config?=?await?middleware.getMemberConfig(message.toUserName,?keywords);
??????if?(!member_config)?{
????????await?middleware.sendMnsQuene(message);
????????return?ctx.body?=?"success";
??????}else{
?????????//匹配成功
????????message.packetsId?=?parseInt(member_config.hongbaoId);
????????message.keywords?=?keywords;
????????await?middleware.sendMnsQuene(message);
????????let?data?=?{
??????????title:?member_config.news_title?||?'點我領紅包',
??????????description:?member_config.description?||?'第一輪紅包雨開始了,手快有,手慢無!',
??????????picurl:?member_config.picurl?||?'http://7xqomp.com2.z0.glb.qiniucdn.com/17269743.png'
????????};
????????let?key?=?{
??????????fromUserName:?message.fromUserName,
??????????toUserName:?message.toUserName,
??????????keywords:?keywords,
??????????appId:?appid
????????};
????????key?=?JSON.stringify(key);
????????key?=?Aes.encypt(key);
????????key?=?Aes.base64_encode(key);
????????//獲取授權(quán)域名
????????let?auth_url?=?await?middleware.packetDomain();
????????data.url?=?"http://"?+?appid?+?"."?+?auth_url?+?"/redPackets/koulin?key="?+?key;
????????let?news?=?middleware.news(message,?[data]);
????????let?reply?=?middleware.encryptXml(news);
????????ctx.body?=?reply;?
????????return;???????
??????}
??????break;
????case?'event':
??????await?middleware.sendMnsQuene(message);
??????//測試專用
??????if?(message.toUserName?==?"gh_3c884a361561")?{
????????let?text?=?middleware.text(message,?message.event?+?"from_callback");
????????let?reply?=?middleware.encryptXml(text);
????????ctx.body?=?reply;
????????return;
??????}
??????break;
????default:
??????await?middleware.sendMnsQuene(message);
??????ctx.body?=?"success";
??????return;
??};
});
module.exports?=?router;
登錄后復制

相信看了本文案例你已經(jīng)掌握了方法,更多精彩請關注愛掏網(wǎng) - it200.com其它相關文章!

推薦閱讀:

如何操作Koa2微信公眾號開發(fā)之本地開發(fā)調(diào)試環(huán)境搭建

如何操作Koa2微信公眾號實現(xiàn)消息管理

以上就是如何使用koa2搭建微信第三方公眾平臺的詳細內(nèi)容,更多請關注愛掏網(wǎng) - it200.com其它相關文章!

聲明:所有內(nèi)容來自互聯(lián)網(wǎng)搜索結(jié)果,不保證100%準確性,僅供參考。如若本站內(nèi)容侵犯了原著者的合法權(quán)益,可聯(lián)系我們進行處理。
發(fā)表評論
更多 網(wǎng)友評論0 條評論)
暫無評論

返回頂部

主站蜘蛛池模板: 精品久久久无码中文字幕天天 | www国产精品| 色妞WW精品视频7777| 女人18毛片水真多国产| 污网站在线免费观看| 在线亚洲人成电影网站色www| 国产精品日韩欧美亚洲另类| 你懂的在线视频| a资源在线观看| 热久久最新视频| 国内精品一卡2卡3卡4卡三卡| 亚洲欧美日韩在线观看播放| 91精品91久久久久久| 欧美怡红院高清在线| 国产精品h在线观看| 久香草视频在线观看免费| 麻豆国产福利91在线| 波多野结衣1区| 国产自产21区| 亚洲sss视频| www.a级片| 波多野结衣电影thepemo| 国产精品高清一区二区三区| 亚洲国产成a人v在线| 黑人极品videos精品欧美裸| 日本高清免费aaaaa大片视频| 国产一区二区三区精品视频| 亚州免费一级毛片| 麻豆视传媒一区二区三区| 无码人妻一区二区三区在线 | 亚洲制服丝袜在线播放| 久久久久久久性| 精品久久久久久无码中文字幕| 天天综合色一区二区三区| 亚洲欧美成aⅴ人在线观看| 亚洲人成网站看在线播放| 日本欧美视频在线观看| 再深点灬舒服灬太大了网站| 99久久精品美女高潮喷水| 校霸把学霸往死里做| 在线观看xxx|