ホームページ >WeChat アプレット >WeChatの開発 >koa2 を使用して WeChat サードパーティのパブリック プラットフォームを構築する方法

koa2 を使用して WeChat サードパーティのパブリック プラットフォームを構築する方法

php中世界最好的语言
php中世界最好的语言オリジナル
2018-05-29 11:22:063330ブラウズ

今回は、koa2 を使用して WeChat 上にサードパーティのパブリック プラットフォームを構築する方法を説明します。 koa2 を使用して WeChat 上にサードパーティのパブリック プラットフォームを構築する場合の 注意事項は何ですか。見て。

書く前に、koaはexpressと比較して、実行プロセスとコンポーネントの点ではるかに優れていますが、その便利な拡張機能により自由に使用できます。他の言語を書くのと同じように、コードを並行して実行するため、Promise によって煩雑なコールバックが解放されるのであれば、koa で Web アプリケーションを作成するときに、さまざまなジェネレーターを組み合わせることで、繰り返しの煩雑なコールバック関数

のネストを回避し、大幅に改善することができます エラー処理効率。 koa はカーネル メソッドでミドルウェアをバインドせず、軽量でエレガントな関数ライブラリのみを提供するため、nodejs の自然な非同期処理プロセスにより、WeChat パブリック アカウントなどの頻繁なトランザクションに非常に適しています。 pm2 のマルチプロセス管理と組み合わせたインタラクションは、大規模アカウントのメッセージ転送インタラクションとパブリック アカウントの内部の赤い封筒のゲームプレイをほぼ満たしていると言えます。 koa2 を使用して WeChat サードパーティのパブリック プラットフォームを構築する場合、最初に解決すべきことは、WeChat から返される XML ストリームを取得する方法と、対応する XML 本文を WeChat に返す方法です。

koa 自体はフレームワークではないため、インターネット上の多くのミドルウェアのおかげで、express に似たフレームワークを構築しました。詳細については、私の git アドレスを参照してください:

https://
github。 .com /yxz1025/koa-lana、すべての WeChat メッセージはこのフレームワークに含まれています。ご自身でダウンロードしてください。 それでは、まず、WeChat によって返される 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 中国語 Web サイトの記事をご覧ください。

推奨読書:

Koa2 WeChat パブリック アカウント開発を操作してローカル開発およびデバッグ環境を構築する方法

Koa2 WeChat パブリック アカウントを操作してメッセージ管理を実装する方法

以上がkoa2 を使用して WeChat サードパーティのパブリック プラットフォームを構築する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。