开发者社区> jerrywangsap> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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

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

相关文章
微信程序开发系列教程(二)使用JavaScript给微信用户发送消息
微信程序开发系列教程(二)使用JavaScript给微信用户发送消息
115 0
用javascript实现的分页控件
随着Ajax的应用越来越多,经常需要在前台去加载数据,这样可以减少页面加载的时间,同时也改善了用户的体验性,所以结合实际的项目需要我写了一个javascript的分页控件,用于绑定table,实现类似datagrid分页控件的功能。
884 0
Javascript实现网页上的多级菜单(竖着)
使用方法:1,包含menu.js和menu.css 2,用创建主菜单类   main = new MainMenu(10,50,"My Menu");这里,MainMenu的前两个参数表示其左上角位置坐标,前者为left,后者为top。第三个参数为菜单标题。之后用MenuItem类建立菜单项MenuItem的源型如下:   function MenuItem(_parent,_caption
1098 0
css+javascript实现苹果电脑桌面菜单滑动效果
作者:http://www.ndesign-studio.com 转载:http://www.webstudio.com.cn css dock menu.仿制苹果系统导航,,css结合javascript同样也可以实现与flash同等的效果,使用的是jquery和fisheye 组件来实现的.
844 0
javascript实现数字转大写金额的函数
function convertCurrency(currencyDigits) { // Constants: var MAXIMUM_NUMBER = 99999999999.99; // Predefine the radix characters and currency symb...
818 0
DataGrid中绑定javascript事件,实现删除提示和变换背景色
private void dgSearch_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e){ if(e.
735 0
以【猫叫、老鼠跑、主人醒】为例子,使用 javascript 来实现 观察者模式 (有在线演示)
  “猫叫、老鼠跑、主人醒”是一个很古老的话题了,大家也都有各自的想法和解决方案。我也是看了很多,一开始的时候是相当的迷糊,这个怎么就是面试题了?考的是啥呀,和编程有关系吗?又是猫又是老鼠的,晕死了。
1311 0
Rhino -- 基于java的javascript实现
这几天突然对js引擎非常感兴趣,大概了解了一下,记下来备忘。javascript引擎大家比较熟悉的应该是当前比较火的Chrome V8引擎。以快速闻名。v8基于c++开发。这里就不多阐述了。另外一个是 基于java的Rhino引擎,这个想来大家不是很了解。
1868 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
在 IoT 设备进行 JavaScript 开发的探索之路
立即下载
JavaScript 语言在引擎级别的执行过程
立即下载
Tsar-灵活的系统和应用采集软件
立即下载