摘要:我之前的文章微信程序開發(fā)系列教程一開發(fā)環(huán)境搭建介紹了微信開發(fā)環(huán)境的搭建,這篇文章我們就來一步步開發(fā)一些具體的功能。下文將該應(yīng)用稱為消息服務(wù)器。我們首先用的獲得一個對象當(dāng)有微信用戶關(guān)注您的公眾號時,微信平臺會發(fā)送一個請求到您的消息服務(wù)器。
我之前的文章?微信程序開發(fā)系列教程(一)開發(fā)環(huán)境搭建?介紹了微信開發(fā)環(huán)境的搭建,這篇文章我們就來一步步開發(fā)一些具體的功能。
功能需求:當(dāng)有微信用戶關(guān)注了您的公眾號之后,您用JavaScript發(fā)送一個歡迎消息給這個粉絲。
具體實現(xiàn)我們登陸微信公眾號的控制臺后,點開發(fā)-> 基本配置:
能看到我們配置的微信消息服務(wù)器的地址。在我第一篇教程里講到,我們在本地用nodejs開發(fā)一個Web服務(wù)器,然后部署到您喜歡的云平臺,比如騰訊云,阿里云,百度云等等(我選的是云平臺Heroku),然后把部署后應(yīng)用的url維護(hù)到微信公眾號控制臺的服務(wù)器配置,如下圖所示。維護(hù)好之后,微信用戶關(guān)注該公眾號或者給該公眾號發(fā)送的消息,就會通過微信平臺投遞到您的nodejs應(yīng)用,我們在里面就可以編程實現(xiàn)一些需求了。下文將該nodejs應(yīng)用稱為“消息服務(wù)器”。
我們首先用nodejs的express module獲得一個app對象:
var express = require("express"); var app = express();
當(dāng)有微信用戶關(guān)注您的公眾號時,微信平臺會發(fā)送一個HTTP post請求到您的消息服務(wù)器。您需要編程響應(yīng)這個post請求。
app.route("/").post(function(req,res){ var content; // 把微信平臺發(fā)送的HTTP post的內(nèi)容存儲到變量content里 req.on("data",function(data){ content = data.toString("utf-8"); } ); req.on("end",function(){ console.log("new http post: " + content ); // 打印HTTP post請求,做調(diào)試用
// 從微信平臺發(fā)送的HTTP請求里解析出事件對象。如果是粉絲點關(guān)注,事件類型為subscribe。
var msgType = formattedValue(getXMLNodeValue("MsgType", content)); // 有粉絲點了關(guān)注按鈕啦 if( event === "subscribe"){ // 回復(fù)一條歡迎消息給粉絲 var replyxml = replyMessage(content, "歡迎歡迎,終于等到您了!"); res.send(replyxml); } }
上述代碼邏輯很清晰,看注釋都易懂。關(guān)鍵就是如何把歡迎消息回復(fù)給點了關(guān)注按鈕的粉絲。
核心邏輯在replyMessage函數(shù)里,這個函數(shù)的任務(wù)是將粉絲的openID從微信平臺發(fā)給消息服務(wù)器的HTTP post內(nèi)容中解析出來。代碼如下:
輸入?yún)?shù)1: 微信平臺發(fā)給消息服務(wù)器的HTTP post全部內(nèi)容
輸入?yún)?shù)2:準(zhǔn)備給粉絲推送的歡迎消息
輸出參數(shù):準(zhǔn)備通過HTTP返回給粉絲的歡迎消息的微信報文,需符合微信定義的消息規(guī)范,具體規(guī)范如下代碼所示。
module.exports = function(originalBody, contentToReply){ // 從原始報文里提取出消息的接收方 var ToUserName = getXMLNodeValue("ToUserName", originalBody); // 從原始報文里提取出消息的發(fā)送方 var FromUserName = getXMLNodeValue("FromUserName",originalBody); var CreateTime = getXMLNodeValue("CreateTime",originalBody); // 告訴微信平臺這條消息的類型是文本消息 var MsgType = ""; // 準(zhǔn)備將歡迎消息的文字內(nèi)容加入消息報文 var Content = contentToReply; // 開始拼裝準(zhǔn)備發(fā)送給微信粉絲的消息報文 var xml = ""; console.log("xml to be sent: " + xml); // 打印消息報文 return xml; // 返回消息報文 } ; "+FromUserName+" "+ToUserName+" "+CreateTime+" " + MsgType + " "+Content+"
要獲取更多Jerry的原創(chuàng)技術(shù)文章,請關(guān)注公眾號"汪子熙"或者掃描下面二維碼:
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/98562.html
摘要:本篇是該系列的第一篇,本地開發(fā)環(huán)境搭建以及接入微信。若確認(rèn)此次請求來自微信服務(wù)器,原樣返回參數(shù)內(nèi)容,則接入生效,成為開發(fā)者成功,否則接入失敗。 一、簡介 關(guān)于微信公眾號的介紹就省略了,自行搜索。注冊過程也不說了。我們會直接注冊測試號來實現(xiàn)代碼。這將會是個全面講解微信公眾號開發(fā)的系列教程。本篇是該系列的第一篇,本地開發(fā)環(huán)境搭建以及接入微信。在開始之前最好去看看開發(fā)者文檔微信公眾平臺技術(shù)文...
摘要:成為微信公眾賬號開發(fā)者后當(dāng)然想讓別人關(guān)注自己的賬號時給出一些歡迎語或者其他的友好性提示根據(jù)官方文檔用戶第一次關(guān)注公眾賬號會觸發(fā)一個訂閱事件于此相對于的是用戶取消關(guān)注公眾賬號時觸發(fā)一個取消訂閱事件首先用戶首次關(guān)注公眾賬號微信發(fā)送至開發(fā)者模式所 成為微信公眾賬號開發(fā)者后,當(dāng)然想讓別人關(guān)注自己的賬號時給出一些歡迎語或者其他的友好性提示.根據(jù)官方文檔,用戶第一次關(guān)注公眾賬號會觸發(fā)一個subsc...
摘要:步驟四最后,我們點擊軟件界面的右上角的設(shè)置,在彈出的文件選項中點擊我們要分享的途徑即可。那么以上就是快速一鍵分享圖紙的全部內(nèi)容操作了,希望可以對大家有所幫助哈 手機上查看編輯完的CAD圖紙文件怎么一鍵分享給微信好友?那么現(xiàn)在說著問題的話,大家應(yīng)該都是與所了解的啦,關(guān)于CAD查看圖紙的文件的話,小編已經(jīng)介紹很多遍了,但是我們查看完的圖紙文件,要是想要將編輯好的CAD圖紙文件發(fā)送給其他的人...
摘要:關(guān)于的跨域問題的討論網(wǎng)上有太多的資源了。直入主題,最近我正在做一個原型開發(fā)通過云平臺和把系統(tǒng)上的暴露出來,給微信消費。請求得到響應(yīng)之后,再將其發(fā)送給。回到我的原型開發(fā)需求,云平臺上的消費如今通過來實現(xiàn),為簡單起見,我將硬編碼在里。 關(guān)于JavaScript的跨域問題(Cross Domain)的討論, 網(wǎng)上有太多的資源了。國內(nèi)的程序猿寫了非常多的優(yōu)秀文章,Jerry這里就不再重復(fù)了。 ...
摘要:關(guān)于的跨域問題的討論網(wǎng)上有太多的資源了。直入主題,最近我正在做一個原型開發(fā)通過云平臺和把系統(tǒng)上的暴露出來,給微信消費。請求得到響應(yīng)之后,再將其發(fā)送給。回到我的原型開發(fā)需求,云平臺上的消費如今通過來實現(xiàn),為簡單起見,我將硬編碼在里。 關(guān)于JavaScript的跨域問題(Cross Domain)的討論, 網(wǎng)上有太多的資源了。國內(nèi)的程序猿寫了非常多的優(yōu)秀文章,Jerry這里就不再重復(fù)了。 ...
閱讀 3444·2021-09-08 10:46
閱讀 1180·2019-08-30 13:17
閱讀 2358·2019-08-30 13:05
閱讀 1200·2019-08-29 15:29
閱讀 2882·2019-08-29 11:31
閱讀 533·2019-08-26 12:13
閱讀 1532·2019-08-26 11:42
閱讀 1817·2019-08-23 18:37