一区二区日本_久久久久久久国产精品_无码国模国产在线观看_久久99深爱久久99精品_亚洲一区二区三区四区五区午夜_日本在线观看一区二区

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

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

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

在使用koa2搭建微信第三方公眾平臺是,首先要解決的是如果獲取微信返回的xml流,以及如何返回對應(yīng)的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======
//微信響應(yīng)主體文件
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ā)送消息隊(duì)列
??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?||?'點(diǎn)我領(lǐng)紅包',
??????????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;
登錄后復(fù)制

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

推薦閱讀:

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

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

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

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

返回頂部

主站蜘蛛池模板: 亚洲视频一区二区三区 | 精品国产一区二区三区久久久久久 | 亚洲一区二区视频 | 99国产精品久久久久老师 | 久久久九九九九 | 亚洲欧美日韩网站 | 久草成人| 亚洲一区二区在线播放 | 91久久精品一区二区二区 | 国产日韩一区二区 | 国产高清视频在线观看 | 一级毛片免费视频 | 成人免费在线网 | 精品综合 | 日韩午夜 | 亚洲精品久久区二区三区蜜桃臀 | 四虎伊人 | 国产精品一二三区在线观看 | 国产视频一视频二 | 国产精品1区2区3区 中文字幕一区二区三区四区 | 欧美成人免费 | 黄色毛片在线看 | 国产精品久久久久久久久久免费看 | 国产美女在线精品免费 | 国产91亚洲精品一区二区三区 | 亚洲一区二区三区四区视频 | 波多野结衣一二三区 | 在线成人免费视频 | 男女网站免费观看 | 亚洲国产欧美在线人成 | 精品国产一区二区三区成人影院 | 国产精品区二区三区日本 | 欧美美乳| 国产精品18久久久久久久 | 中文字幕在线精品 | 成人精品视频在线观看 | 狠狠做深爱婷婷综合一区 | 午夜天堂精品久久久久 | 在线视频成人 | 久久国产精品偷 | 国产在线资源 |