日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

教你如何用node.js开发微信公众号(一)

發(fā)布時(shí)間:2024/4/14 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 教你如何用node.js开发微信公众号(一) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

內(nèi)容簡介

本文章簡單介紹了如何用node.js開發(fā)微信公眾號(hào)。主要內(nèi)容包括微信公眾平臺(tái)的配置,signature的驗(yàn)證,以及用node.js去處理用戶主動(dòng)發(fā)起的行為。

準(zhǔn)備工作

開發(fā)前需要安裝好node.js,因?yàn)槲沂腔趀xpress框架開發(fā)的,所以裝了express(框架按自己的需求選擇),需要有一個(gè)微信公眾號(hào),不管是訂閱號(hào)還是服務(wù)號(hào)都可以(沒有的話可以用測(cè)試公眾號(hào)),還需要一個(gè)公網(wǎng)能訪問的服務(wù)器。基本的配置就這些,后面有需要的再補(bǔ)充。接下來,開始講如何開發(fā)。

一、微信公眾平臺(tái)配置

登錄微信公眾平臺(tái),沒有公眾號(hào)的話注冊(cè)一個(gè)測(cè)試公眾號(hào)(不會(huì)的點(diǎn)這里,掃碼登錄即可)。 進(jìn)入到公眾平臺(tái),你會(huì)看到如下界面:

基本配置

進(jìn)入到公眾平臺(tái)首頁,首先會(huì)有一個(gè)測(cè)試號(hào)信息的appID,appsecret;并且appID和appsecret是不可以修改的(自己注冊(cè)公眾號(hào)的appsecret是可以重置的,操作很簡單,這里不做說明);

接口配置

接口配置信息這個(gè)模塊,首次進(jìn)來的是空的,需要自己配置;這里需要配置兩個(gè)參數(shù),一個(gè)是URL,還有一個(gè)是Token;如果不知道怎么配置,具體的可以看微信的wiki文檔,我這里也給大家說一下我配置的時(shí)候遇到的一些坑吧!

首先,點(diǎn)擊修改的時(shí)候,會(huì)變成如下界面:

注意點(diǎn):

  • URL參數(shù)說明: url填的是一個(gè)公網(wǎng)上部署好的接口地址(是真實(shí)存在已經(jīng)部署好能夠請(qǐng)求的接口),接口必須以http://或https://開頭,僅支持80端口和443端口。
  • Token參數(shù)說明: token填的是自己定義的一個(gè)標(biāo)識(shí),需要注意的一點(diǎn)就是這邊配置好了以后,在上面那個(gè)url的接口里面設(shè)置的token需要和這個(gè)保持一致,不然配置是不會(huì)成功的。

具體的配置指南戳這里

當(dāng)你點(diǎn)擊提交的時(shí)候,會(huì)發(fā)送一個(gè)get請(qǐng)求到你剛剛填寫的URL地址,并且會(huì)帶上4個(gè)參數(shù),分別是:signature,timestamp,echostr,nonce,然后在服務(wù)端驗(yàn)證配置是否通過;
如果配置成功,則會(huì)有如下成功提示:

如果配置失敗,則會(huì)有如下失敗提示:

接口配置到這里就完成了。

JS接口安全域名

這個(gè)配置主要是為了能夠調(diào)js-sdk接口配置的,只有在該域名下,開發(fā)才能調(diào)用微信js接口(像調(diào)用二維碼,上傳預(yù)覽文件等功能),文檔也寫的比較詳細(xì),這里不做過多說明。

微信官方JS-SDK文檔戳這里

到這里,微信公眾平臺(tái)的配置就差不多了,接下來就可以開始服務(wù)端的開發(fā)了。

二、node服務(wù)端開發(fā)配置

還記得微信公眾平臺(tái)配置的時(shí)候填寫的url和token值嗎?這里就用到了,來看下面一段代碼:

const bodyParser = require('body-parser'); //處理請(qǐng)求參數(shù)server.get("/", function (req, res) {var token = "xxxx";var signature = req.query.signature;var timestamp = req.query.timestamp;var echostr = req.query.echostr;var nonce = req.query.nonce;var oriArray = new Array();oriArray[0] = nonce;oriArray[1] = timestamp;oriArray[2] = token;oriArray.sort();var original = oriArray.join('');var sha = sha1(original)if (signature === sha) {//驗(yàn)證成功res.send(echostr)} else {//驗(yàn)證失敗res.send({ "message": "error" })}}); 復(fù)制代碼

還記得上面說點(diǎn)擊提交的時(shí)候會(huì)發(fā)一個(gè)get請(qǐng)求嗎?還說會(huì)帶signature,timestamp,echostr,nonce四個(gè)參數(shù)。就是在這個(gè)接口中,判斷配置是否成功的,來看下這個(gè)get請(qǐng)求具體做了什么事情。

  • 定義一個(gè)token值,需要和公眾平臺(tái)配置的token保持一致。
  • 通過req.query.xxx獲取請(qǐng)求傳過來的4個(gè)參數(shù)。
  • 把nonce,timestamp,token添加到一個(gè)數(shù)組中,并用sort()排序,然后把這個(gè)數(shù)組用join("")拼接成一個(gè)字符串。
  • 用sha1加密生成一個(gè)密匙,最后判斷通過sha1生成的signature和參數(shù)帶過來的signature是否一致,一致則配置成功,不一致則配置失敗。
  • 具體可以看官方文檔(文檔示例是php的),文檔地址 戳這里;

    到這里微信開發(fā)的公眾號(hào)配置和node服務(wù)端配置就完成了,接下來可以開始愉快的開發(fā)啦!

    三、用戶信息處理

    首先問一個(gè)問題,當(dāng)用戶關(guān)注公眾號(hào),發(fā)送消息的時(shí)候,開發(fā)者在哪里能接收到這些消息,并做相應(yīng)的回復(fù)呢?
    答案是微信公眾平臺(tái)配置的URL的post請(qǐng)求,如果說該URL的get請(qǐng)求是為了配置用的,那么post請(qǐng)求就是為了處理用戶信息。

    來看下面一段代碼

    var parseString = require('xml2js').parseString;server.post("/", function (req, res) {try {var buffer = [];//監(jiān)聽 data 事件 用于接收數(shù)據(jù)req.on('data', function (data) {buffer.push(data);});//監(jiān)聽 end 事件 用于處理接收完成的數(shù)據(jù)req.on('end', function () {//輸出接收完成的數(shù)據(jù)parseString(Buffer.concat(buffer).toString('utf-8'), { explicitArray: false }, function (err, result) {if (err) {//打印錯(cuò)誤信息console.log(err);} else {//打印解析結(jié)果result = result.xml;var toUser = result.ToUserName; //接收方微信var fromUser = result.FromUserName;//發(fā)送仿微信//判斷是否是事件類型if (result.Event) {//處理事件類型switch (result.Event) {case "subscribe"://關(guān)注公眾號(hào)break;default:}} else {//處理消息類型switch (result.MsgType) {case "text"://處理文本消息break;case "image"://處理圖片消息break;case "voice"://處理語音消息break;case "video"://處理視頻消息break;case "shortvideo"://處理小視頻消息break;case "location"://處理發(fā)送地理位置break;case "link"://處理點(diǎn)擊鏈接消息break;default:}}}})});} catch (err) {res.send(err);} }); 復(fù)制代碼

    通過上面這段代碼,可以看出,所有的消息處理都是在一個(gè)post中處理,大致的流程是服務(wù)端會(huì)接收一段固定格式xml的字符串,具體格式如下:

    <xml><ToUserName><![CDATA[${toUser}]]></ToUserName> //接收方<FromUserName><![CDATA[${fromUser}]]></FromUserName> //發(fā)送方<CreateTime>${new Date().getTime()}</CreateTime> //發(fā)送時(shí)間<Event>< ![CDATA[VIEW] ]></Event> //事件類型<MsgType><![CDATA[text]]></MsgType> //消息類型<Content><![CDATA[${content}]]></Content> //內(nèi)容 </xml>; 復(fù)制代碼

    當(dāng)接收到xml消息后,用xml2js解析xml,根據(jù)Event和MsgType做事件類型的判斷,并做相應(yīng)的處理,最后,res.send(xml)發(fā)送數(shù)據(jù)的時(shí)候也是要一個(gè)xml格式的數(shù)據(jù),要注意的一點(diǎn)是,ToUserName和FromUserName不要弄錯(cuò)就可以了!具體的文檔有詳細(xì)的解釋,文檔戳這里哦;

    好了,今天的內(nèi)容就講到這里了,剩下還有一些關(guān)于生成access_token,還有如何調(diào)用js-sdk的內(nèi)容過兩天更新吧!

    小弟這里有一份react后臺(tái)管理腳手架模版,有需要的自取 戳我,戳我,戳我,github

    關(guān)注

    大家好,我是西瓜太郎,小前端一枚,坐標(biāo)杭州,今天入住掘金,第一次寫文章,如有寫的不適的地方還請(qǐng)大佬多多指教,如有助于八方兄弟,那小弟搬磚將會(huì)更加有動(dòng)力!

    轉(zhuǎn)載于:https://juejin.im/post/5be3af8ae51d4554b54b0a0d

    總結(jié)

    以上是生活随笔為你收集整理的教你如何用node.js开发微信公众号(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。