使用Nodejs开发微信公众号后台服务实例


Posted in NodeJs onSeptember 03, 2014

摘要:

微信,庞大的用户基数,极强的用户粘性,在近两年吸引了无数的开发者注意力。 Nodejs,近两年发展非常快的开发工具,尤其适合构建移动后台。本文就以笔者自己开发的实例,来描述如何基于Nodejs开发属于自己的微信公众号。在这个实例中,主要使用到了express, wechat, mongodb, monk等模块。

前期准备:

1.申请微信公众号,前往 https://mp.weixin.qq.com/  申请,这里不做过多阐述。

2. 购买服务器, 这里推荐Amazon的EC2,首次用户可选择micro instance,一年免费,申请很方便,只需输入自己的信用卡信息即可,只是整个过程是全英文,不过年免费呦,多花点时间也是值得的。

安装NodeJs开发环境:

1.  yum -y install gcc

2.  yum -y install gcc-c++

3.  yum -y install make automake

4.  wget http://nodejs.org/dist/v0.10.29/node-v0.10.29.tar.gz

5.  tar -xvzf node-v0.10.29.tar.gz 

6.  cd  解压目录

7. ./configure 

8.  make

9.  make install

安装Mongodb:
1. wget http://downloads.10gen.com/linux/mongodb-linux-x86_64-enterprise-amzn64-2.6.3.tgz

2. tar -xvzf mongodb-linux-x86_64-enterprise-amzn64-2.6.3.tgz 

3. sudo cp -R -n  mongodb-linux-x86_64-enterprise-amzn64-2.6.3 /usr/local/mongodb

实例介绍:

笔者所在班级组了个足球队,大家统一把钱交到队长手里,由队长支付每次费用,并记录每人费用和余额并通知大家。由于不是每次所有人都能来,而费用只能由参加活动的人以AA方式平摊,记录起来比较麻烦。于是笔者就做了个微信公众号,每次只需要输入活动消费金额和选择参与人数,即可自动生成每人花费和余额,此后把明细发到微信群里,每个人就可以看见了。 

在这个实例中,笔者实际上搭建了一个微网站,通过Web页面来记录或显示活动花费和余额。微信公众号就相当于在用户微信和微网站之间搭起了一个桥梁,当微信用户关注笔者的公众账号时,通过微信公众平台开发者模式,即可自动给微信用户回复使用帮助。在帮助里,包含了操作相应的web link,只需要点击即可进入相应页面。

构建微信公众号后台服务:

万事具备,只欠开发了:)

开始之前,先简要介绍下express和wechat 两个模块:
express - 优秀的Web开发框架, 使用express,可以非常快速的搭建自己的网站。由于微信服务器会通过HTTP Post请求来和开发者服务器交互,所以需要使用express框架。

下面是有新用户关注时的log, 103.7.30.84为微信服务器的IP地址。

103.7.30.84 POST /wechat?signature=8a8e408fdae6bbdd6e470af98865a5f993cea283×tamp=1408610461&nonce=1572142586 2 200

wechat -  封装了和微信服务器交互的细节,使开发者只需关注自己的业务即可。

首先,我们要安装express 并使用express 来创建工程:

1. npm install -g express

2. express -e your_project    参数 -e 表明使用ejs 引擎,无参数默认使用jade 引擎。

3. cd your_project && npm install

安装后的目录结构如下:

[ec2-user@ip-172-31-2-188 your_project]$ ls

app.js  bin  node_modules  package.json  public  routes  views

接下来安装wechat:
1. npm install wechat

微信开发者模式配置:

配置URL和token,示例如下:

使用Nodejs开发微信公众号后台服务实例

微信服务器接入认证和自动回复:

修改app.js,相应代码如下:

app.use('/users', users);

app.use('/weixin', weixin);
app.use(express.query()); // Or app.use(express.query());

app.use('/wechat', wechat('hchismylove', function (req, res, next) {

 // 微信输入信息都在req.weixin上

 var message = req.weixin;

 console.log(message);
 if((message.MsgType == 'event') && (message.Event == 'subscribe'))

 {

  var refillStr = "<a href=\"http://your_IP/weixin/refill?weixinId=" + message.FromUserName + "\">1. 点击记录团队充值</a>"

      

  var consumeStr = "<a href=\"http://your_IP/weixin/consume?weixinId=" + message.FromUserName + "\">2. 点击记录团队消费</a>"
  var deleteStr = "<a href=\"http://your_IP/weixin/delete?weixinId=" + message.FromUserName + "\">3. 点击回退记录</a>"      
  var historyStr = "<a href=\"http://your_IP/weixin/history?weixinId=" + message.FromUserName + "\">4. 点击查询历史记录</a>"

      

  var emptyStr = "          ";    

  var replyStr = "感谢你的关注!" + "\n"+ emptyStr + "\n" + refillStr + "\n"+ emptyStr + "\n" + consumeStr 

          + "\n"+ emptyStr + "\n" + deleteStr + "\n"+ emptyStr + "\n" + historyStr;

  res.reply(replyStr);

 }

}));

通过下面这行代码即可实现微信服务器接入认证:

app.use('/wechat', wechat('your_token', function (req, res, next) {

如下代码实现了当新用户关注时,自动发送使用帮助:

if((message.MsgType == 'event') && (message.Event == 'subscribe'))  

{  

    ....  

    res.reply(replyStr);  

} 

微信截图如下:

使用Nodejs开发微信公众号后台服务实例

NodeJs 相关文章推荐
nodejs教程 安装express及配置app.js文件的详细步骤
May 11 NodeJs
实例详解Nodejs 保存 payload 发送过来的文件
Jan 14 NodeJs
NodeJs——入门必看攻略
Jun 27 NodeJs
nodejs实现发出蜂鸣声音(系统报警声)的方法
Jan 18 NodeJs
nodejs实现邮件发送服务实例分享
Mar 29 NodeJs
NodeJs模拟登陆正方教务
Apr 28 NodeJs
配置nodejs环境的方法
May 13 NodeJs
Nodejs下使用gm圆形裁剪并合成图片的示例
Feb 22 NodeJs
nodejs中用npm初始化来创建package.json的实例讲解
Oct 10 NodeJs
nodejs遍历文件夹下并操作HTML/CSS/JS/PNG/JPG的方法
Nov 01 NodeJs
NodeJs之word文件生成与解析的实现代码
Apr 01 NodeJs
nodejs的安装使用与npm的介绍
Sep 11 NodeJs
Nodejs+express+html5 实现拖拽上传
Aug 08 #NodeJs
如何正确使用Nodejs 的 c++ module 链接到 OpenSSL
Aug 03 #NodeJs
NodeJS学习笔记之网络编程
Aug 03 #NodeJs
基于 Docker 开发 NodeJS 应用
Jul 30 #NodeJs
Google官方支持的NodeJS访问API,提供后台登录授权
Jul 29 #NodeJs
使用nodejs、Python写的一个简易HTTP静态文件服务器
Jul 18 #NodeJs
抛弃Nginx使用nodejs做反向代理服务器
Jul 17 #NodeJs
You might like
获取PHP警告错误信息的解决方法
2013/06/03 PHP
php实现的一个很好用HTML解析器类可用于采集数据
2013/09/23 PHP
php7安装yar扩展的方法详解
2017/08/03 PHP
TP(thinkPHP)框架多层控制器和多级控制器的使用示例
2018/06/13 PHP
JavaScript 基础问答三
2008/12/03 Javascript
jquery easyui的tabs使用时的问题
2010/03/23 Javascript
javascript实现在某个元素上阻止鼠标右键事件的方法和实例
2014/08/12 Javascript
使用js Math.random()函数生成n到m间的随机数字
2014/10/09 Javascript
javascript实现的固定位置悬浮窗口实例
2015/04/30 Javascript
jquery实现可点击伸缩与展开的菜单效果代码
2015/08/31 Javascript
lhgcalendar时间插件限制只能选择三个月的实现方法
2017/07/03 Javascript
vue 做移动端微信公众号采坑经验记录
2018/04/26 Javascript
打通前后端构建一个Vue+Express的开发环境
2018/07/17 Javascript
关于微信小程序登录的那些事
2019/01/08 Javascript
详解小程序用户登录状态检查与更新实例
2019/05/15 Javascript
如何在JavaScript中使用localStorage详情
2021/02/04 Javascript
[00:52]黑暗之门更新 新英雄孽主驾临DOTA2
2016/08/24 DOTA
python将多个文本文件合并为一个文本的代码(便于搜索)
2011/03/13 Python
Python中获取对象信息的方法
2015/04/27 Python
python发送邮件实例分享
2017/07/28 Python
python中pika模块问题的深入探究
2018/10/13 Python
Python两个字典键同值相加的几种方法
2019/03/05 Python
numpy下的flatten()函数用法详解
2019/05/27 Python
使用Python实现图像标记点的坐标输出功能
2019/08/14 Python
使用浏览器访问python写的服务器程序
2019/10/10 Python
降低python版本的操作方法
2020/09/11 Python
中国宠物用品商城:E宠商城
2016/08/27 全球购物
Room Mate Hotels美国:西班牙酒店品牌
2018/04/10 全球购物
JBL澳大利亚官方商店:扬声器、耳机和音响系统
2018/05/24 全球购物
美国运动鞋和服装网上商店:YCMC
2018/09/15 全球购物
匡威德国官网:Converse德国
2019/01/26 全球购物
退休感言
2014/01/28 职场文书
酒店总经理职务说明书
2014/02/26 职场文书
施工现场安全管理制度
2015/08/05 职场文书
2016入党积极分子党课培训心得体会
2016/01/06 职场文书
高中历史教学反思
2016/02/19 职场文书