亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

首頁(yè) 微信小程式 微信開發(fā) NodeJs開發(fā)微信公眾號(hào)微信事件互動(dòng)實(shí)例代碼

NodeJs開發(fā)微信公眾號(hào)微信事件互動(dòng)實(shí)例代碼

Mar 21, 2017 pm 04:00 PM

這篇文章主要介紹了使用NodeJs 開發(fā)微信公眾號(hào)微信事件交互實(shí)例的相關(guān)資料,需要的朋友可以參考下

微信公眾號(hào)有個(gè)規(guī)則,一旦開啟了開發(fā)者模式,其他的常規(guī)功能就都必須透過(guò)介面呼叫完成。比如說(shuō)自訂選單功能,必須透過(guò)發(fā)送post請(qǐng)求的方式產(chǎn)生。本章就透過(guò)關(guān)注到取消關(guān)注的整個(gè)過(guò)程來(lái)談一談nodejs是怎麼樣與微信互動(dòng)的。這些功能的入口就是你在測(cè)試公眾號(hào)裡面填寫的URL(以下用/login/wechat代替)。

事件互動(dòng)

#掃碼專注在微信公眾號(hào)後,微信會(huì)呼叫你的介面/login/wechat ,並且附帶一段xml信息,首先你需要獲取一些簽名,透過(guò)加密、排序比對(duì)是否與你填寫的TOKEN一致,如果一致則進(jìn)行xml的解析。 node解析xml時(shí)必須先引用模組。所以,先引入xml解析模組

//xml解析模塊
var XMLJS = require('xml2js');
//解析,將xml解析為json
var parser = new XMLJS.Parser();
//重組,將json重組為xml
var builder = new XMLJS.Builder();

透過(guò)req的監(jiān)聽data,來(lái)取得微信發(fā)送過(guò)來(lái)的xml包。以下是某個(gè)新用戶關(guān)注公眾號(hào)後微信向你的後臺(tái)接口(上一篇中提到的/yourapi)發(fā)送的xml包數(shù)據(jù),經(jīng)過(guò)解析後,他的結(jié)構(gòu)如下:

NodeJs開發(fā)微信公眾號(hào)微信事件互動(dòng)實(shí)例代碼

tousername:收信者【此處為公眾微訊號(hào)】

fromusername:寄信者【此處為使用者openid】

#createTime:傳送時(shí)間

msgtype:訊息類型【event(回應(yīng)事件)、text(推播訊息)、image(推播圖文訊息)等】

event :訊息名稱【此處為關(guān)注】

eventkey:自訂的key,在設(shè)定網(wǎng)頁(yè)時(shí)可以自訂後文中會(huì)講到

##以上就是當(dāng)一個(gè)用戶關(guān)注後微信往你介面發(fā)送的資料包。上面對(duì)我們有用的是fromusername,也就是關(guān)注人的openid,我們?cè)陉P(guān)注時(shí)獲取了用戶的該openid後可以透過(guò)微信提供的特定介面(https://api.weixin.qq.com/cgi-bin/ user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN)取得使用者的頭像,性別,暱稱等信息,為你的app建立一個(gè)可靠的資料庫(kù)。


程式碼實(shí)作

//微信事件推送的入口
app.post('/yourapi', function(req, res, next) {
//獲取參數(shù)
var query = req.query; 
//簽名
var signature = query.signature; 
//輸出的字符,你填寫的TOKEN 
var echostr = query.echostr; 
//時(shí)間戳
var timestamp = query['timestamp']; 
//隨機(jī)字符串
var nonce = query.nonce; 
var oriArray = new Array(); 
oriArray[] = nonce; 
oriArray[] = timestamp; 
oriArray[] = appConfig.token;
//排序參數(shù)
oriArray.sort(); 
var original = oriArray[]+oriArray[]+oriArray[]; 
//加密
var scyptoString = sha(original); 
//判斷是否與你填寫TOKEN相等
if (signature == scyptoString) {
//獲取xml數(shù)據(jù)
req.on("data", function(data) {
//將xml解析
parser.parseString(data.toString(), function(err, result) {
var body = result.xml;
var messageType = body.MsgType[];
//用戶點(diǎn)擊菜單響應(yīng)事件
if(messageType === 'event') {
var eventName = body.Event[];
(EventFunction[eventName]||function(){})(body, req, res);
//自動(dòng)回復(fù)消息
}else if(messageType === 'text') {
EventFunction.responseNews(body, res);
//第一次填寫URL時(shí)確認(rèn)接口是否有效
}else {
res.send(echostr);
}
});
});
} else { 
//認(rèn)證失敗,非法操作
res.send("Bad Token!"); 
}
});
//微信客戶端各類回調(diào)用接口
var EventFunction = {
//關(guān)注
subscribe: function(result, req, res) {
//存入openid 通過(guò)微信的接口獲取用戶的信息同時(shí)存入數(shù)據(jù)庫(kù)。
},
//注銷
unsubscribe: function(openid, req, res) {
//刪除對(duì)應(yīng)id
},
//打開某個(gè)網(wǎng)頁(yè)
VIEW: function() {
//根據(jù)需求,處理不同的業(yè)務(wù)
},
//自動(dòng)回復(fù)
responseNews: function(body, res) {
//組裝微信需要的json
var xml = {xml: {
ToUserName: body.FromUserName,
FromUserName: body.ToUserName,
CreateTime: + new Date(),
MsgType: 'text',
Content: '編輯@+您想說(shuō)的話,我們可以收到'
}};
var reciviMessage = body.Content[]
if(/^\@.*/.test(reciviMessage)) {
xml.xml.Content = '已經(jīng)收到您的建議,會(huì)及時(shí)處理!'
}<br>//將json轉(zhuǎn)為xml
xml = builder.buildObject(xml);<br>//發(fā)送給微信
res.send(xml);
}
}
此處,適合採(cǎi)用JS

設(shè)計(jì)模式中的策略模式,在subscribe方法裡面寫上你自己的業(yè)務(wù),透過(guò)發(fā)送帶有openid參數(shù)的請(qǐng)求,可以在使用者關(guān)注微訊號(hào)的時(shí)候?qū)⑵鋷妆举Y料存入資料庫(kù),並且建立會(huì)話。這樣在使用者接下來(lái)打開你的網(wǎng)頁(yè)的時(shí)候就不需要再認(rèn)證,只需要比對(duì)openid然後查詢資料庫(kù)就行了。

以上是NodeJs開發(fā)微信公眾號(hào)微信事件互動(dòng)實(shí)例代碼的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺(jué)化網(wǎng)頁(yè)開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1597
29
PHP教程
1488
72