微信程序開發系列教程(二)使用JavaScript給微信用戶發送消息

我以前的文章 微信程序開發系列教程(一)開發環境搭建 介紹了微信開發環境的搭建,這篇文章咱們就來一步步開發一些具體的功能。javascript

功能需求:當有微信用戶關注了您的公衆號以後,您用JavaScript發送一個歡迎消息給這個粉絲。java

具體實現

咱們登錄公衆號的控制檯後,點開發-> 基本配置:node

能看到咱們配置的微信消息服務器的地址。在我第一篇教程裏講到,咱們在本地用nodejs開發一個Web服務器,而後部署到您喜歡的雲平臺,好比騰訊雲,阿里雲,百度雲等等(我選的是雲平臺Heroku),而後把部署後應用的url維護到公衆號控制檯的服務器配置,以下圖所示。維護好以後,微信用戶關注該公衆號或者給該公衆號發送的消息,就會經過微信平臺投遞到您的nodejs應用,咱們在裏面就能夠編程實現一些需求了。下文將該nodejs應用稱爲「消息服務器」。express

咱們首先用nodejs的express module得到一個app對象:編程

var express = require('express');

var app = express();

當有微信用戶關注您的公衆號時,微信平臺會發送一個HTTP post請求到您的消息服務器。您須要編程響應這個post請求。服務器

app.route('/').post(function(req,res){
	var content;
	// 把微信平臺發送的HTTP post的內容存儲到變量content裏
	req.on("data",function(data){
		content = data.toString("utf-8");
	}
	);
	req.on("end",function(){
		console.log("new http post: " + content );
		// 打印HTTP post請求,作調試用

// 從微信平臺發送的HTTP請求裏解析出事件對象。若是是粉絲點關注,事件類型爲subscribe。微信

var msgType = formattedValue(getXMLNodeValue('MsgType', content));
// 有粉絲點了關注按鈕啦
if( event === "subscribe"){
	// 回覆一條歡迎消息給粉絲
	var replyxml = replyMessage(content, "歡迎歡迎,終於等到您了!");
	res.send(replyxml);
     }
}

上述代碼邏輯很清晰,看註釋都易懂。關鍵就是如何把歡迎消息回覆給點了關注按鈕的粉絲。微信開發

核心邏輯在replyMessage函數裏,這個函數的任務是將粉絲的openID從微信平臺發給消息服務器的HTTP post內容中解析出來。代碼以下:app

輸入參數1: 微信平臺發給消息服務器的HTTP post所有內容函數

輸入參數2:準備給粉絲推送的歡迎消息

輸出參數:準備經過HTTP返回給粉絲的歡迎消息的微信報文,需符合微信定義的消息規範,具體規範以下代碼所示。

module.exports = function(originalBody, contentToReply){
	// 從原始報文裏提取出消息的接收方
	var ToUserName = getXMLNodeValue('ToUserName', originalBody);
	// 從原始報文裏提取出消息的發送方
	var FromUserName = getXMLNodeValue('FromUserName',originalBody);
	var CreateTime = getXMLNodeValue('CreateTime',originalBody);
	// 告訴微信平臺這條消息的類型是文本消息
	var MsgType = "<![CDATA[text]]>";
	// 準備將歡迎消息的文字內容加入消息報文
	var Content = contentToReply;
	// 開始拼裝準備發送給微信粉絲的消息報文
	var xml = '<xml><ToUserName>'+FromUserName+'</ToUserName><FromUserName>'+ToUserName+'</FromUserName><CreateTime>'+CreateTime+'</CreateTime><MsgType>'
	+ MsgType + '</MsgType><Content>'+Content+'</Content></xml>';
	console.log("xml to be sent: " + xml);
	// 打印消息報文
	return xml;
	// 返回消息報文
}
;

要獲取更多Jerry的原創技術文章,請關注公衆號"汪子熙"或者掃描下面二維碼:

相關文章
相關標籤/搜索