• 微信程序开发系列教程(二)使用JavaScript给微信用户发送消息


    我之前的文章 微信程序开发系列教程(一)开发环境搭建 介绍了微信开发环境的搭建,这篇文章我们就来一步步开发一些具体的功能。

    功能需求:当有微信用户关注了您的公众号之后,您用JavaScript发送一个欢迎消息给这个粉丝。

    具体实现

    我们登陆微信公众号的控制台后,点开发-> 基本配置:

    能看到我们配置的微信消息服务器的地址。在我第一篇教程里讲到,我们在本地用nodejs开发一个Web服务器,然后部署到您喜欢的云平台,比如腾讯云,阿里云,百度云等等(我选的是云平台Heroku),然后把部署后应用的url维护到微信公众号控制台的服务器配置,如下图所示。维护好之后,微信用户关注该公众号或者给该公众号发送的消息,就会通过微信平台投递到您的nodejs应用,我们在里面就可以编程实现一些需求了。下文将该nodejs应用称为“消息服务器”。

    我们首先用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内容中解析出来。代码如下:

    输入参数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的原创技术文章,请关注公众号"汪子熙"或者扫描下面二维码:

  • 相关阅读:
    LPTSTR、LPCSTR、LPCTSTR、LPSTR的意义
    字符,字节和编码
    堆和栈的区别
    js正则表达式限制文本框只能输入数字,小数点,英文字母
    WPF 中的 LinkButton
    WPF中DataGrid的应用
    C#获取web.config配置文件内容
    js中格式化时间字符串
    WPF中的用户控件(UserControl)
    VS2010安装其他版本framework的问题解决方案
  • 原文地址:https://www.cnblogs.com/sap-jerry/p/9818621.html
Copyright © 2020-2023  润新知