新聞中心
這篇文章主要為大家展示了“nodejs微信開發(fā)之接入的示例分析”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“nodejs微信開發(fā)之接入的示例分析”這篇文章吧。
專注于為中小企業(yè)提供成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)安源免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了1000+企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
內(nèi)網(wǎng)穿透
由于微信開發(fā)的端口必須是80(最近貌似增加了443),所以一個(gè)內(nèi)網(wǎng)穿透工具還是很有必要的。我個(gè)人使用的是qq瀏覽器微信調(diào)試工具。
我也推薦這個(gè),畢竟一家的。
但是也有其他的選擇:
花生殼
這個(gè)速度還可以,但是只有window客戶端的,貌似還可以折騰路由器那邊的東西,我也沒深入折騰。
nat123
與花生殼類似,但是速度著實(shí)不太給力。經(jīng)常配置錯(cuò)誤。說(shuō)是免費(fèi)但是需要預(yù)充幾塊錢進(jìn)去,不是很推薦。
ngrok
一個(gè)開源軟件,可以自己在服務(wù)器上部署也可以使用現(xiàn)成的,其實(shí)qq瀏覽器的微信調(diào)試就是基于這個(gè)搭建的。算是比較好用的。
leancloud
為什么使用leancloud,其實(shí)是我沒太接觸其他的云服務(wù),也無(wú)從比較,另外一個(gè)就是heroku,但是國(guó)內(nèi)的訪問速度感人。
leancloud應(yīng)該是一個(gè)類似parse(其實(shí)parse我也不是很了解hhhh)的服務(wù),但還提供了托管web的云引擎。包括python和nodejs兩種,這里介紹nodejs的引擎。云引擎入門的話請(qǐng)看leancloud云引擎入門,畢竟比我講的強(qiáng)多了。
對(duì)于個(gè)人開發(fā)者,leancloud算是免費(fèi)的,限制不是很大,但是貌似最近出了個(gè)實(shí)名認(rèn)證,但是沒認(rèn)證好像也沒啥問題。但是對(duì)于面試用戶,如果應(yīng)用沒有請(qǐng)求,就是睡眠,所以如果應(yīng)用打不開多試兩次就行了,極有可能是睡眠了。
常用命令
lean new
新建項(xiàng)目lean app add [appname] [appid]
關(guān)聯(lián)項(xiàng)目到leancloud 云引擎lean up
啟動(dòng)服務(wù)lean deploy
部署應(yīng)用(貌似收費(fèi)用戶是部署到測(cè)試環(huán)境)lean publish
部署到開發(fā)環(huán)境(免費(fèi)用戶用不著)
云引擎簡(jiǎn)介
進(jìn)入控制臺(tái)后如圖所示:
存儲(chǔ)是數(shù)據(jù)庫(kù),各個(gè)功能如名字所說(shuō)。一些暫時(shí)用不著的功能就不提了。
主要是云引擎這個(gè)選項(xiàng),需要進(jìn)入設(shè)置中配置好域名。
數(shù)據(jù)庫(kù)
leancloud的數(shù)據(jù)庫(kù)是一個(gè)半殘的mongo,基本是夠用的。文檔在這js數(shù)據(jù)開發(fā)
公眾號(hào)的接入
我這邊使用的是公眾號(hào)測(cè)試號(hào),因?yàn)閭€(gè)人申請(qǐng)到的訂閱號(hào)的功能嚴(yán)重缺失。
首先看微信文檔
填寫服務(wù)器配置
也就上圖的接口配置信息,url是你服務(wù)部署的地方,圖中的url是微信調(diào)試工具生成的,所以有些亂,token是隨意填寫的,注意下面還是要用到的,注意保存好。
驗(yàn)證服務(wù)器地址的有效性
這里就是代碼部分了。先上目錄結(jié)構(gòu):
app
目錄放業(yè)務(wù)邏輯代碼。
config.js存放相關(guān)配置,包括微信公眾號(hào)的appId ,Token等
module.exports = { 'token': 'yourtoken',//配置中的token 'appId': 'your appid',//配置里的appid 'appSecret': 'your appsecret'//配置中的appsecret };
注:這部分引自微信公眾平臺(tái)文檔
開發(fā)者提交信息后,微信服務(wù)器將發(fā)送GET請(qǐng)求到填寫的服務(wù)器地址URL上,GET請(qǐng)求攜帶參數(shù)如下表所示:
通過檢驗(yàn)signature對(duì)請(qǐng)求進(jìn)行校驗(yàn)(下面有校驗(yàn)方式)。若確認(rèn)此次GET請(qǐng)求來(lái)自微信服務(wù)器,請(qǐng)?jiān)瓨臃祷豦chostr參數(shù)內(nèi)容,則接入生效,成為開發(fā)者成功,否則接入失敗。加密/校驗(yàn)流程如下:
1)將token、timestamp、nonce三個(gè)參數(shù)進(jìn)行字典序排序
2)將三個(gè)參數(shù)字符串拼接成一個(gè)字符串進(jìn)行sha1加密
3)開發(fā)者獲得加密后的字符串可與signature對(duì)比,標(biāo)識(shí)該請(qǐng)求來(lái)源于微信
這部分的代碼如下:
const crypto = require('crypto'); const path = require('path'); const url = require('url'); //import config const config = require('../../config'); //進(jìn)行sha1加密 function sha1(str) { var shasum = crypto.createHash("sha1"); shasum.update(str); str = shasum.digest("hex"); return str; } function wechatAuth(req, res) { var query = url.parse(req.url, true).query; var signature = query.signature; var echostr = query.echostr; var timestamp = query['timestamp']; var nonce = query.nonce; var reqArray = [nonce, timestamp, config.token]; //對(duì)數(shù)組進(jìn)行字典排序 reqArray.sort(); var sortStr = reqArray.join('');//連接數(shù)組 var sha1Str = sha1(sortStr); if (signature === sha1Str) { res.end(echostr); } else { res.end("false"); console.log("授權(quán)失敗!"); } } module.exports = wechatAuth;
相信代碼說(shuō)的總是比我清楚,首先獲取請(qǐng)求url中的四個(gè)參數(shù),對(duì)nonce,timestamp, 和token進(jìn)行字典排序也就是Array.sort()
,然后進(jìn)行字符串拼接,進(jìn)行sha1加密,如果結(jié)果和signature相等則成功,(順便說(shuō)一句,其實(shí)直接返回echostr也是可以成功的,不過后面的請(qǐng)求就不太好辦了?)。
這樣來(lái)說(shuō)接入應(yīng)該就算是成功了。
以上是“nodejs微信開發(fā)之接入的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
網(wǎng)頁(yè)題目:nodejs微信開發(fā)之接入的示例分析
網(wǎng)址分享:http://fisionsoft.com.cn/article/gisooi.html