首頁 微信小程式 微信開發 如何使用koa2建構微信第三方公眾平台

如何使用koa2建構微信第三方公眾平台

May 29, 2018 am 11:22 AM
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微信公眾號開發之本地開發調試環境搭建

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

以上是如何使用koa2建構微信第三方公眾平台的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

熱門話題

Java教學
1665
14
CakePHP 教程
1424
52
Laravel 教程
1322
25
PHP教程
1270
29
C# 教程
1249
24
Vue框架下,如何快速建構統計圖表系統 Vue框架下,如何快速建構統計圖表系統 Aug 21, 2023 pm 05:48 PM

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

PyCharm使用指南:一鍵匯入第三方函式庫 PyCharm使用指南:一鍵匯入第三方函式庫 Feb 21, 2024 am 10:33 AM

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

霧鎖王國能野地搭建築嗎 霧鎖王國能野地搭建築嗎 Mar 07, 2024 pm 08:28 PM

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

CentOS 7下搭建web伺服器的最佳實務及注意事項 CentOS 7下搭建web伺服器的最佳實務及注意事項 Aug 25, 2023 pm 11:33 PM

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

在PyCharm中快速安裝PyTorch:簡易指南 在PyCharm中快速安裝PyTorch:簡易指南 Feb 24, 2024 pm 09:54 PM

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

了解edge瀏覽器的第三方插件安裝情況 了解edge瀏覽器的第三方插件安裝情況 Dec 23, 2023 pm 06:25 PM

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

抖音帳號怎麼搭建最好?帳號搭建五件套是什麼? 抖音帳號怎麼搭建最好?帳號搭建五件套是什麼? Apr 02, 2024 am 09:52 AM

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

帳號矩陣怎麼搭建?矩陣搭建有哪些作用? 帳號矩陣怎麼搭建?矩陣搭建有哪些作用? Mar 23, 2024 pm 06:46 PM

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

See all articles