ホームページ > 記事 > WeChat アプレット > NodeJs が WeChat パブリック アカウント WeChat イベント インタラクションのサンプル コードを開発
この記事では、NodeJs を使用して WeChat パブリック アカウントの WeChat イベント インタラクションの例を開発することに関する関連情報を主に紹介します。必要な友人はそれを参照してください。
WeChat パブリック アカウントには、開発者モードをオンにすると、すべてのルールが適用されます。他の通常の機能が必要です。呼び出しは インターフェース を通じて完了します。たとえば、カスタム メニュー 関数は、投稿リクエスト を送信して生成する必要があります。この章では、フォローからフォロー解除までのプロセス全体を通じて、nodejs が WeChat とどのように対話するかについて説明します。これらの機能への入り口は、テスト公式アカウントに入力した URL (以下では /login/wechat に置き換えます) です。
イベントインタラクション
QRコードをスキャンしてWeChat公式アカウントをフォローすると、WeChatはインターフェース/ログイン/wechatを呼び出し、xmlメッセージを添付します。最初にいくつかの署名を取得し、暗号化する必要があります。入力した TOKEN と一致するかどうかを確認します。一致する場合は、XML を解析します。ノードが XML を解析するときは、最初にモジュールを参照する必要があります。したがって、まず XML 解析モジュール
//xml解析模块 var XMLJS = require('xml2js'); //解析,将xml解析为json var parser = new XMLJS.Parser(); //重组,将json重组为xml var builder = new XMLJS.Builder();
を導入して、req の監視データを通じて WeChat によって送信された XML パッケージを取得します。以下は、新しいユーザーが公式アカウントをフォローした後に WeChat によってバックエンド インターフェース (/yourapi) に送信される XML パッケージ データです。解析後の構造は次のとおりです。
tousername: Recipient [ここに公開 WeChat ID]
fromusername: 送信者 [ここにユーザー openid]
createTime: 送信時刻
msgtype: メッセージ タイプ [event (応答イベント)、text (プッシュ メッセージ)、image (プッシュ グラフィック メッセージ) 、など]
event: メッセージ名 [ここがフォローです]
eventkey: Web ページを設定するときにカスタマイズできるカスタマイズされたキーについては、記事の後半で説明します
以上です。ユーザーが注意を払うと、WeChat はデータ パケットをインターフェースに送信します。上記で役立つのは、フォロワーの openid である fromusername です。フォローするときにユーザーの openid を取得すると、WeChat (https://api.weixin.qq.com/) が提供する特定のインターフェイスを使用できます。 cgi-bin/ user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN) ユーザーのアバター、性別、ニックネームなどの情報を取得して、アプリの信頼できるデータベースを構築します。
コード実装
//微信事件推送的入口 app.post('/yourapi', function(req, res, next) { //获取参数 var query = req.query; //签名 var signature = query.signature; //输出的字符,你填写的TOKEN var echostr = query.echostr; //时间戳 var timestamp = query['timestamp']; //随机字符串 var nonce = query.nonce; var oriArray = new Array(); oriArray[] = nonce; oriArray[] = timestamp; oriArray[] = appConfig.token; //排序参数 oriArray.sort(); var original = oriArray[]+oriArray[]+oriArray[]; //加密 var scyptoString = sha(original); //判断是否与你填写TOKEN相等 if (signature == scyptoString) { //获取xml数据 req.on("data", function(data) { //将xml解析 parser.parseString(data.toString(), function(err, result) { var body = result.xml; var messageType = body.MsgType[]; //用户点击菜单响应事件 if(messageType === 'event') { var eventName = body.Event[]; (EventFunction[eventName]||function(){})(body, req, res); //自动回复消息 }else if(messageType === 'text') { EventFunction.responseNews(body, res); //第一次填写URL时确认接口是否有效 }else { res.send(echostr); } }); }); } else { //认证失败,非法操作 res.send("Bad Token!"); } }); //微信客户端各类回调用接口 var EventFunction = { //关注 subscribe: function(result, req, res) { //存入openid 通过微信的接口获取用户的信息同时存入数据库。 }, //注销 unsubscribe: function(openid, req, res) { //删除对应id }, //打开某个网页 VIEW: function() { //根据需求,处理不同的业务 }, //自动回复 responseNews: function(body, res) { //组装微信需要的json var xml = {xml: { ToUserName: body.FromUserName, FromUserName: body.ToUserName, CreateTime: + new Date(), MsgType: 'text', Content: '编辑@+您想说的话,我们可以收到' }}; var reciviMessage = body.Content[] if(/^\@.*/.test(reciviMessage)) { xml.xml.Content = '已经收到您的建议,会及时处理!' }<br>//将json转为xml xml = builder.buildObject(xml);<br>//发送给微信 res.send(xml); } }
ここでは、JSデザインパターンの戦略パターンを使用して、openidパラメータを使用してリクエストを送信することで、ユーザーが WeChat ID をフォローすると、ユーザーの情報のいくつかがデータベースに保存され、セッションが確立されます。これにより、ユーザーが次回 Web ページを開くときに、再度認証する必要がなく、openid を比較してデータベースにクエリを実行するだけで済みます。
以上がNodeJs が WeChat パブリック アカウント WeChat イベント インタラクションのサンプル コードを開発の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。