Heim  >  Artikel  >  WeChat-Applet  >  So erstellen Sie mit koa2 eine öffentliche WeChat-Drittanbieterplattform

So erstellen Sie mit koa2 eine öffentliche WeChat-Drittanbieterplattform

php中世界最好的语言
php中世界最好的语言Original
2018-05-29 11:22:063325Durchsuche

Dieses Mal zeige ich Ihnen, wie Sie mit koa2 eine öffentliche WeChat-Plattform eines Drittanbieters erstellen Praktischer Fall, werfen wir einen Blick darauf. Bevor ich schreibe, möchte ich zunächst auf Koa eingehen. Im Vergleich zu Express ist Koa viel besser in Bezug auf den Ausführungsprozess und die Komponenten. Koa selbst bietet nicht zu viele Erweiterungen, aber es ist einfach, Erweiterungen einzurichten . Es ermöglicht Ihnen, frei zu spielen und Code parallel auszuführen, wie beim Schreiben anderer Sprachen. Wenn Sie Webanwendungen in Koa schreiben, können Sie durch die Kombination verschiedener Generatoren wiederholte umständliche

Callback-Funktionen

vermeiden Verschachtelung und verbessert die Effizienz der Fehlerbehandlung erheblich. koa bindet keine Middleware in die Kernel-Methode und bietet lediglich eine einfache und elegante Funktionsbibliothek, die das Schreiben von Webanwendungen erleichtert. Der natürliche asynchrone Verarbeitungsprozess von nodejs eignet sich sehr gut für häufige Transaktionen wie öffentliche WeChat-Konten Man kann sagen, dass die Interaktion in Verbindung mit der Multiprozessverwaltung von pm2 die Nachrichtenweiterleitungsinteraktion großer Konten und das interne Red-Envelope-Gameplay öffentlicher Konten weitgehend befriedigt hat. Wenn Sie koa2 zum Erstellen einer öffentlichen WeChat-Drittanbieterplattform verwenden, müssen Sie zunächst lösen, wie Sie den von WeChat zurückgegebenen XML-Stream erhalten und wie Sie den entsprechenden XML-Körper an WeChat zurückgeben.

Da Koa selbst kein Framework ist, habe ich dank der vielen Middlewares im Internet ein Framework erstellt, das Open Source ist. Weitere Informationen finden Sie unter meiner Git-Adresse:

https: //
github.com/yxz1025/koa-lana, alle WeChat-Nachrichten befinden sich in diesem Framework, bitte laden Sie es selbst herunter! Okay, schauen wir uns zunächst an, wie man den XML-Stream von WeChat zurückgibt:

======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;

Ich glaube, dass Sie die Methode beherrschen, nachdem Sie den Fall in diesem Artikel gelesen haben Informationen, bitte beachten Sie andere verwandte Themen im Artikel über die chinesische PHP-Website!

Empfohlene Lektüre:

Wie man die Entwicklung öffentlicher Koa2 WeChat-Konten betreibt und eine lokale Entwicklungs- und Debugging-Umgebung aufbaut

Wie man Koa2 bedient Implementierung des öffentlichen WeChat-Kontos Nachrichtenverwaltung

Das obige ist der detaillierte Inhalt vonSo erstellen Sie mit koa2 eine öffentliche WeChat-Drittanbieterplattform. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn