如何使用koa2建構微信第三方公眾平台
這次帶給大家如何使用koa2建立微信第三方公眾平台,使用koa2建構微信第三方公眾平台的注意事項有哪些,以下就是實戰案例,一起來看一下。
在寫之前我想先說說koa,koa相比express,在執行流程,以及組件方面優秀的多,koa本身沒有提供過多的擴展組建,但是它便捷的組建擴展,可以讓你自由的發揮,可以想寫其他語言一樣並行執行程式碼,如果說promise解放了繁瑣的callback,那麼koa 編寫web 應用,透過組合不同的generator,可以免除重複繁瑣的回呼函數嵌套,並大幅提升錯誤處理的效率。 koa 不在內核方法中綁定任何中間件,它僅僅提供了一個輕量級優雅的函數庫,使得編寫Web 應用變得得心應手,nodejs的天生的異步處理流程,使得它很適合微信公眾號這種頻繁的訊息互動,再加上pm2的多進程管理,可以說已經很大程度的滿足大號的消息轉發互動已經公眾號內部紅包玩法。
在使用koa2建立微信第三方公眾平台是,首先要解決的是如果獲取微信返回的xml流,以及如何返回對應的XML體給微信。
由於本身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;
相信看了本文案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!
推薦閱讀:
以上是如何使用koa2建構微信第三方公眾平台的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

在Vue框架下,如何快速建立統計圖表系統在現代網頁應用中,統計圖表是必不可少的組成部分。 Vue.js作為一個流行的前端框架,提供了許多方便的工具和元件,能夠幫助我們快速建立統計圖表系統。本文將介紹如何利用Vue框架以及一些外掛程式來建立一個簡單的統計圖表系統。首先,我們需要準備一個Vue.js的開發環境,包括安裝Vue腳手架以及一些相關的插件。在命令列中執行以下命

PyCharm是一款廣受開發者歡迎的整合開發環境,它提供了豐富的功能和工具,使得Python開發變得更有效率和便利。其中,一鍵導入第三方函式庫是PyCharm的一個非常實用的功能,可以幫助開發者快速匯入所需的外部函式庫,提高開發效率。本文將為大家介紹PyCharm的一鍵導入第三方函式庫的使用指南,並提供具體的程式碼範例。 1.打開PyCharm首先,打開PyCharm並進

玩家在霧鎖王國中進行遊戲時可以收集不同的材料用來建造建築,有很多玩家想知道野地搭建築嗎,霧鎖王國能野地是不能搭建築的,必須要在祭壇的範圍內才可以搭建。霧鎖王國能野地搭建築嗎答:不能。 1.霧鎖王國能野地是不能搭建築的。 2、建築必須要在祭壇的範圍內才可以搭建。 3、玩家可以自行放置靈火祭壇,但一旦離開了範圍,將無法進行建築搭建。 4.我們也可以直接在山上挖個洞當做我們的家,這樣不用耗建築材料。 5.玩家自己搭建的建築中,有舒適度機制,也就是說,內裝越好,舒適度越高。 6.高舒適度將為玩家帶來屬性加成,例如

CentOS7下搭建web伺服器的最佳實務及注意事項引言:在當今網路時代,web伺服器是建置和託管網站的核心元件之一。 CentOS7是一個強大的Linux發行版,廣泛應用於伺服器環境。本文將探討在CentOS7上建立web伺服器的最佳實務和注意事項,並提供一些程式碼範例以幫助您更好地理解。一、安裝ApacheHTTP伺服器Apache是使用最廣泛的w

PyTorch安裝指南:在PyCharm中快速搭建開發環境PyTorch是當前深度學習領域中備受歡迎的框架之一,具有易用性和靈活性的特點,深受開發者青睞。本文將為大家介紹如何在PyCharm中快速建置PyTorch的開發環境,方便大家開始深度學習專案的開發。步驟一:安裝PyTorch首先,我們需要安裝PyTorch。 PyTorch的安裝通常需要考慮到系統環境

edge瀏覽器上的擴充插件數量比較少很難滿足所有使用者的日常使用,這個時候就需要安裝第三方插件了,那麼可不可以在edge瀏覽器上安裝呢?下面就一起來看看吧。 edge瀏覽器可以安裝第三方外掛程式嗎:答:可以安裝。新版edge無法透過直接拖曳來快速安裝插件,將crx擴充檔案拖曳到開發者頁面時,edge會預設為另存文件,而導致無法直接安裝。 1.將檔案移到edge拓展應用程式資料夾然後重新命名為zip格式,並進行解壓縮。 2.新版edge的擴充功能點擊右上角的三個點就能在工作列中看到。 3.在拓展頁面開啟「開發人員模式

隨著行動互聯網的快速發展,短視訊應用程式抖音已成為人們日常生活中不可或缺的一部分。擁有一個高人氣的抖音帳號,不僅能吸引粉絲關注,還能帶來商業價值。那麼,如何搭建一個最好的抖音帳號呢?一、抖音帳號怎麼搭建最好? 1.定位清晰在創造抖音帳號之初,首先要明確自己的定位。你想成為搞笑幽默的段子手,還是專業知識分享者?明確定位有助於吸引精準粉絲,進而增加帳號的價值。 2.帳號命名一個好的帳號名字能讓粉絲一眼記得你。帳號名字應簡潔明了,與自己的定位相關,同時具有一定的創意。避免使用過於常見的名字,以免與他人混淆

在當下資訊充斥的時代,社群媒體平台成為人們獲取和分享資訊的主要途徑。對於個人和企業而言,建立一個有效的帳號網路以實現資訊的最大傳播和提升影響力,已成為亟需解決的挑戰。一、帳號矩陣怎麼搭建? 1.明確目標族群在建立帳號矩陣之前,關鍵在於明確目標受眾,深入了解他們的需求、興趣和消費習慣,這樣才能製定更具針對性的內容策略。 2.選擇合適的平台依照目標族群的特點,選擇適合的社群媒體平台進行佈局。目前主流的社群媒體平台有微博、微信、抖音、快手等,每個平台都有其獨特的使用者群體和傳播特點,需要根據實際情況進行選
