Exemple d'événement de réponse de développement Node.js+Koa
Jun 25, 2017 am 09:15 AMLes événements du compte officiel WeChat incluent les événements d'abonnement/les événements d'analyse de code/les événements de clic/les événements de lien de saut, etc. Pour plus de détails, veuillez vous référer à la documentation.
Implémentons l'événement d'abonnement ici. Le processus de mise en œuvre des autres événements est similaire.
Lorsque quelqu'un s'abonne au compte public, le serveur WeChat envoie un événement à notre serveur. Cet événement est un paquet de données au format XML.
1. Nous implémentons la réponse post-événement sous routage d'index.
On peut comprendre que lorsque WeChat envoie un message à notre serveur, le message ira ici en premier.
/routes/index.js ajouté :
router.post('/', index_middleware.post(config.wechat));
2. Implémentez la méthode post dans index_middleware :
est la façon dont nous devrions gérer WeChat Postez la demande du serveur sur notre serveur.
Le processus général consiste à recevoir d'abord le paquet de données envoyé par le serveur WeChat, puis à analyser le paquet de données XML, puis à effectuer un traitement logique sur notre serveur en fonction des données reçues pour former un message de réponse au format XML. .
/wechat/index_middleware.js ajouté :
exports.post = function(opts) {return function *(next) {var token = opts.token;var signature = this.query.signature;var nonce = this.query.nonce;var timestamp = this.query.timestamp;var echostr = this.query.echostr;var str = [token, timestamp, nonce].sort().join('');var sha = sha1(str);if (sha !== signature) {this.body = 'wrong';return false; }var data = yield getRawBody(this.req, { length: this.length, limit: '1mb', encoding: this.charset });var message = yield util.parseXMLAsync(data);var xml = yield autoReply(message.xml, wechat); console.log(message); console.log(xml);this.status = 200;this.type = 'application/xml';this.body = xml; }; };
Les données ici sont le paquet de données que nous avons reçu, en utilisant le composant corps brut. En même temps, la fonction outil util et la fonction personnalisée autoReply sont utilisées.
Par conséquent, le code suivant doit être ajouté à /wechat/index_middleware.js :
var getRawBody = require('raw-body');var util = require('./util');var autoReply = require('./autoReply');
3. Implémentez la méthode parseXMLAsync dans la fonction de l'outil util. Sa fonction est de formater de manière asynchrone des données XML en données JSON.
/wechat/util.js :
var fs = require('fs');var xml2js = require('xml2js'); exports.parseXMLAsync = function(xml) {return new Promise(function(resolve, reject) { xml2js.parseString(xml, { trim: true, explicitArray: false}, function(err, content) {if (err) { reject(err); } resolve(content); }); }); };
Le composant xml2js est utilisé ici.
Quatrièmement, implémentez la fonction autoReply. Sa fonction est de traiter logiquement les paquets de données envoyés par le serveur WeChat pour former les données au format XML que nous devons envoyer à WeChat.
/wechat/autoReply.js :
var createXML = require('./createXML');function autoReply(message, wechat) {if (message.MsgType === 'event') {if (message.Event === 'subscribe') {if (message.EventKey) { console.log('扫码进入'); }var now = new Date().getTime();return Promise.resolve(createXML({ ToUserName: message.FromUserName, FromUserName: message.ToUserName, MsgType: 'text', Content: 'Hello!!'})); }else if (message.Event === 'unsubscribe') { console.log('取关');return Promise.resolve(''); } } }
Seuls les événements de suivi et de désabonnement sont implémentés ici, et la fonction createXML est également utilisée. Les données sont encapsulées au format XML :
/wechat/createXML.js:
function createXML(messageObj) {var { ToUserName, FromUserName, MsgType = 'text'} = messageObj;var CreateTime = new Date().getTime();var header = `<xml> <ToUserName><![CDATA[${ToUserName}]]></ToUserName> <FromUserName><![CDATA[${FromUserName}]]></FromUserName> <CreateTime>${CreateTime}</CreateTime> <MsgType><![CDATA[${MsgType}]]></MsgType>`;var content = '';switch(MsgType) {case 'text':var { Content } = messageObj; content = `<Content><![CDATA[${Content}]]></Content> </xml>`;break;case 'image':var { MediaId } = messageObj; content = `<Image> <MediaId><![CDATA[${MediaId}]]></MediaId> </Image> </xml>`;break;case 'voice':var { MediaId } = messageObj; content = `<Voice> <MediaId><![CDATA[${MediaId}]]></MediaId> </Voice> </xml>`;break;case 'video':var { MediaId, Title, Description } = messageObj; content = `<Video> <MediaId><![CDATA[${MediaId}]]></MediaId> <Title><![CDATA[${Title}]]></Title> <Description><![CDATA[${Description}]]></Description> </Video> </xml>`;break;case 'music':var { Title, Description, MusicUrl, HQMusicUrl, ThumbMediaId } = messageObj; content = `<Music> <Title><![CDATA[${Title}]]></Title> <Description><![CDATA[${Description}]]></Description> <MusicUrl><![CDATA[${MusicUrl}]]></MusicUrl> <HQMusicUrl><![CDATA[${HQMusicUrl}]]></HQMusicUrl> <ThumbMediaId><![CDATA[${ThumbMediaId}]]></ThumbMediaId> </Music> </xml>`;break;case 'news':var { Articles } = messageObj;var ArticleCount = Articles.length; content = `<ArticleCount>${ArticleCount}</ArticleCount><Articles>`;for (var i = 0; i < ArticleCount; i++) { content += `<item> <Title><![CDATA[${Articles[i].Title}]]></Title> <Description><![CDATA[${Articles[i].Description}]]></Description> <PicUrl><![CDATA[${Articles[i].PicUrl}]]></PicUrl> <Url><![CDATA[${Articles[i].Url}]]></Url> </item>`; } content += '</Articles></xml>';break;default: content = `<Content><![CDATA[Error]]></Content> </xml>`; } var xml = header + content;return xml; } module.exports = createXML;
Après avoir terminé le travail ci-dessus, démarrez notre serveur et suivez le compte officiel encore une fois, il devrait pouvoir recevoir un message Hello! ! information.
De cette manière, le traitement des événements d'intérêt est réalisé.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Article chaud

Outils chauds Tags

Article chaud

Tags d'article chaud

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Comment supprimer les notes Xiaohongshu

Quatre outils de programmation assistés par IA recommandés

Que dois-je faire si les notes que j'ai publiées sur Xiaohongshu sont manquantes ? Quelle est la raison pour laquelle les notes qu'il vient d'envoyer sont introuvables ?

Comment ajouter des liens de produits dans les notes dans Xiaohongshu Tutoriel sur l'ajout de liens de produits dans les notes dans Xiaohongshu

Quel programmeur IA est le meilleur ? Explorez le potentiel de Devin, Tongyi Lingma et de l'agent SWE

Introduction aux méthodes permettant aux particuliers de rejoindre WeChat d'entreprise

Apprenez à développer des applications mobiles en utilisant le langage Go

Résumé des cinq bibliothèques du langage Go les plus populaires : outils essentiels au développement
