今回は、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 サイトの他の関連記事を参照してください。