微信程序开发系列教程(二)使用JavaScript给微信用户发送消息-阿里云开发者社区

开发者社区> jerrywangsap> 正文

微信程序开发系列教程(二)使用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的原创技术文章,请关注公众号"汪子熙"或者扫描下面二维码:

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
IE中ocx控件的无模式对话框不接收方向键等键盘消息的问题的解决办法
在ocx控件中如果含有无模式对话框,那么当ocx在ie中显示时,往往接收不到 诸如tab,方向键和退格键。所有这些消息都被IE容器给截取了,对于这个问题,ms给出了解决方法: 首先:   int CMyActiveXCtrl::OnCreate(LPCREATESTRUCT lpCreateStru...
912 0
RocketMQ系列(五)广播与延迟消息
今天要给大家介绍RocketMQ中的两个功能,一个是“广播”,这个功能是比较基础的,几乎所有的mq产品都是支持这个功能的;另外一个是“延迟消费”,这个应该算是RocketMQ的特色功能之一了吧。
462 0
微信程序开发系列教程(三)使用微信API给微信用户发文本消息
微信程序开发系列教程(三)使用微信API给微信用户发文本消息
9 0
Java NIO系列教程(九) ServerSocketChannel
Java NIO中的 ServerSocketChannel 是一个可以监听新进来的TCP连接的通道, 就像标准IO中的ServerSocket一样。ServerSocketChannel类在 java.nio.channels包中。
1038 0
【直播预告】:Java Spring Boot开发实战系列课程【第11讲】:消息中间件 RabbitMQ 与api源码解析
mq消息中间件在高并发系统架构中扮演关键角色,阿里双11高并发使用了mq技术。本次课程一起学习最新Java Spring Boot 2.0、RabbitMQ中间件的最新特性与实战应用,同样会分析核心api源码。
1282 0
【java开发系列】—— struts2简单入门示例
原文:【java开发系列】—— struts2简单入门示例 上篇推荐:JDK安装 前言   最近正好有时间总结一下,过去的知识历程,虽说东西都是入门级的,高手肯定是不屑一顾了,但是对于初次涉猎的小白们,还是可以提供点参考的。
880 0
+关注
2628
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载