我以前的文章 微信程序开发系列教程(一)开发环境搭建 介绍了微信开发环境的搭建,这篇文章咱们就来一步步开发一些具体的功能。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的原创技术文章,请关注公众号"汪子熙"或者扫描下面二维码: