国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 微信小程式 微信開發(fā) NodeJs開發(fā)微信公眾號微信事件互動實例代碼

NodeJs開發(fā)微信公眾號微信事件互動實例代碼

Mar 21, 2017 pm 04:00 PM

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

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

事件互動

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

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

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

NodeJs開發(fā)微信公眾號微信事件互動實例代碼

tousername:收信者【此處為公眾微訊號】

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

#createTime:傳送時間

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

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

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

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


程式碼實作

//微信事件推送的入口
app.post('/yourapi', function(req, res, next) {
//獲取參數(shù)
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;
//排序參數(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[];
//用戶點擊菜單響應(yīng)事件
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!"); 
}
});
//微信客戶端各類回調(diào)用接口
var EventFunction = {
//關(guān)注
subscribe: function(result, req, res) {
//存入openid 通過微信的接口獲取用戶的信息同時存入數(shù)據(jù)庫。
},
//注銷
unsubscribe: function(openid, req, res) {
//刪除對應(yīng)id
},
//打開某個網(wǎng)頁
VIEW: function() {
//根據(jù)需求,處理不同的業(yè)務(wù)
},
//自動回復
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 = '已經(jīng)收到您的建議,會及時處理!'
}<br>//將json轉(zhuǎn)為xml
xml = builder.buildObject(xml);<br>//發(fā)送給微信
res.send(xml);
}
}
此處,適合採用JS

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

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

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

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

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

Dreamweaver CS6

Dreamweaver CS6

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

SublimeText3 Mac版

SublimeText3 Mac版

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

熱門話題

Laravel 教程
1601
29
PHP教程
1502
276