如何使用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ù)嵌套,并極大地提升錯(cuò)誤處理的效率。愛掏網(wǎng) - it200.comkoa 不在內(nèi)核方法中綁定任何中間件,它僅僅提供了一個(gè)輕量優(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不是一個(gè)框架,所以得益于網(wǎng)上眾多的中間件,自己搭建了一個(gè)類似于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!';?//?指紋碼不匹配時(shí)返回錯(cuò)誤信息,禁止后面的消息接受及發(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 條評論)
    暫無評論

    返回頂部

    主站蜘蛛池模板: 亚洲AV成人一区二区三区在线看 | 中文字幕在线观看一区二区三区| 女同一区二区在线观看| 中文无码AV一区二区三区| 成人免费视频一区| 国产一区二区三区影院| 国产在线精品一区免费香蕉| 国产在线精品观看一区| 天堂一区人妻无码| 亚洲欧洲日韩国产一区二区三区| 久久久综合亚洲色一区二区三区 | 无码一区二区三区免费| 插我一区二区在线观看| 国产成人精品a视频一区| 国产在线观看一区二区三区| 欧美日韩一区二区成人午夜电影| 精品无码成人片一区二区98| 亚洲日本精品一区二区| 日韩好片一区二区在线看| 亚洲av无码一区二区乱子伦as| 精品久久一区二区| 久久国产精品无码一区二区三区| 亚洲国产美国国产综合一区二区 | 精品无人区一区二区三区在线| 亚洲视频在线一区| 国内自拍视频一区二区三区| 国产经典一区二区三区蜜芽| 97se色综合一区二区二区| 日韩最新视频一区二区三| 亚洲AV无码一区二区三区电影| 国产精品99精品一区二区三区 | 激情亚洲一区国产精品| 亚洲日韩AV一区二区三区中文| 麻豆AV天堂一区二区香蕉| 在线|一区二区三区| 国产激情精品一区二区三区 | 99偷拍视频精品一区二区| 国产91精品一区| 国产日韩精品一区二区三区在线 | 中文字幕一区二区三区永久| 国产区精品一区二区不卡中文|