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

    這次給大家帶來如何使用koa2搭建微信第三方公眾平臺,使用koa2搭建微信第三方公眾平臺的注意事項有哪些,下面就是實戰案例,一起來看一下。愛掏網 - it200.com

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

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

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

    ======tool.js=====
    //截獲微信返回的xml流文件
    const?Promise?=?require('bluebird');
    //普通post流轉化為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);
    //第三方授權路徑?/: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!';?//?指紋碼不匹配時返回錯誤信息,禁止后面的消息接受及發送
    ??}
    ??let?message?=?middleware.decryptXml(xml);
    ??let?appid?=?ctx.params.appid;
    ??message.appId?=?appid;
    ??//發送消息隊列
    ??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);
    ????????//獲取授權域名
    ????????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;
    登錄后復制

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

    推薦閱讀:

    如何操作Koa2微信公眾號開發之本地開發調試環境搭建

    如何操作Koa2微信公眾號實現消息管理

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

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

    返回頂部

    主站蜘蛛池模板: 一区二区无码免费视频网站| 一区二区三区电影网| 亚洲国产精品成人一区| 久久4k岛国高清一区二区| 北岛玲在线一区二区| 中文字幕无线码一区2020青青| 久久精品国产亚洲一区二区三区| 精品国产一区二区三区av片| 91久久精品无码一区二区毛片 | AV天堂午夜精品一区二区三区| 国产在线精品一区二区中文| 亚洲成人一区二区| 精品一区精品二区| 视频一区二区三区在线观看| 成人区人妻精品一区二区三区 | 色婷婷亚洲一区二区三区| 日韩免费一区二区三区在线播放| 亚洲图片一区二区| 久久精品午夜一区二区福利| 夜色福利一区二区三区| 精品三级AV无码一区| 中文字幕日韩一区| 国产午夜精品片一区二区三区| 中文字幕精品一区影音先锋| 国产一区二区成人| eeuss鲁片一区二区三区| 日韩在线一区视频| 国产成人一区二区三区电影网站 | 成人无码一区二区三区| 不卡一区二区在线| 无码av免费一区二区三区| 精品无码人妻一区二区三区| 伊人色综合一区二区三区影院视频| 亚洲欧洲专线一区| 精品综合一区二区三区| 精品国产日韩亚洲一区| 久久一区二区三区免费播放| 精品香蕉一区二区三区| 国产一区二区三区视频在线观看| 国产高清一区二区三区四区| 亚洲AV美女一区二区三区|