详解nodejs微信公众号开发——1.接入微信公众号


Posted in NodeJs onApril 10, 2017

接入微信公众号是开发的第一步,万事开头难,走好第一步,后面的路就更宽广。

1.公众平台测试帐号的使用

登录微信公众平台,由于很多开发人员并没有认证的的微信公众号,所以比较折中的方式是使用公众平台测试帐号来测试功能,其优势是能够测试微信公众号的绝大部分功能,不受认证门槛的限制。

详解nodejs微信公众号开发——1.接入微信公众号

进入测试账号管理界面:

我们需要配置接口的信息,URLToken是微信公众平台和本地开发服务建立连接的桥梁。

详解nodejs微信公众号开发——1.接入微信公众号

微信配置好后,扫面下方的测试号二维码,即可以在手机上测试开发的功能。

详解nodejs微信公众号开发——1.接入微信公众号

2.验证公众号

详解nodejs微信公众号开发——1.接入微信公众号

一图胜千言。接入公众号时,微信公众平台需要验证开发者的身份,向开发者填写的URL发送一个GET请求,请求中包含4个参数:signatureechostrtimestampnonce,收到该请求,我们需要做的事情:

  1. tokentimestampnonce三个参数进行字典排序;
  2. 将三个字符串拼接成一个字符串进行sha1加密;
  3. 将加密后的字符串与signature进行比较,如果相同,表示这个请求来自微信,我们直接原样返回echostr的内容,接入验证成功。

3.搭建开发服务器

搭建开发服务器的方式有很多,如购买云服务器、使用花生壳、ngrok、localtunnel等。这里为了简单起见采用localtunnel。先全局方式安装localtunnel,

npm install -g lt

启动lt

lt --port 8080  //对外暴露8080端口,可端口号可自己随便设定

4.编写代码

好了,现在开始编写app.js的代码:

'use strict'

var Koa = require('koa');
var sha1 = require('sha1');

var config = {
  wechat:{
    appID:'...', //填写你自己的appID
    appSecret:'...', //填写你自己的appSecret
    token:'...' //填写你自己的token
  }
};

var app = new Koa();

app.use(function *(next){
  var token = config.wechat.token;
  var signature = this.query.signature;
  var nonce = this.query.nonce;
  var timestamp = this.query.timestamp;
  var echostr = this.query.echostr;
  var str = [token,timestamp,nonce].sort().join(''); //按字典排序,拼接字符串
  var sha = sha1(str); //加密
  this.body = (sha === signature)? echostr + '' : 'failed'; //比较并返回结果
});
app.listen(8080);

5.配置测试公众号信息

代码编写完毕,现在开始正式配置啦。在终端中输入lt --port 8080启动localtunnel,得到对外可访问的URL:

详解nodejs微信公众号开发——1.接入微信公众号

这个URL填写到测试账号管理界面中的URLToken字段可随意填写,方便起见,就用wemovie吧!

填写完毕,点击提交,发现验证成功,恭喜!

详解nodejs微信公众号开发——1.接入微信公众号

注:

  1. 由于localtunnel不是很稳定,所以可能一开始点击提交提示的是黄条的配置失败,需要多点一两次按钮;
  2. 每次重启程序,都需要重启localtunnel获取新的URL,然后重新配置。(这就是选择简单付出的代价T_T)

到此为止,已经打开了通向微信公众号开发的大门,接下来,我们将继续探索nodejs微信公众号开发之旅。以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

NodeJs 相关文章推荐
golang、python、php、c++、c、java、Nodejs性能对比
Mar 12 NodeJs
NodeJS的url截取模块url-extract的使用实例
Nov 18 NodeJs
Nodejs进程管理模块forever详解
Jun 01 NodeJs
Nodejs全局安装和本地安装的不同之处
Jul 04 NodeJs
nodejs入门教程五:连接数据库的方法分析
Apr 24 NodeJs
使用nodejs爬取前程无忧前端技能排行
May 06 NodeJs
配置nodejs环境的方法
May 13 NodeJs
NodeJS实现微信公众号关注后自动回复功能
May 31 NodeJs
Windows下快速搭建NodeJS本地服务器的步骤
Aug 09 NodeJs
nodejs实现OAuth2.0授权服务认证
Dec 27 NodeJs
Nodejs调用Dll模块的方法
Sep 17 NodeJs
Nodejs + Websocket 指定发送及群聊的实现
Jan 09 NodeJs
使用 NodeJS+Express 开发服务端的简单介绍
Apr 07 #NodeJs
初识NodeJS服务端开发入门(Express+MySQL)
Apr 07 #NodeJs
nodejs服务搭建教程 nodejs访问本地站点文件
Apr 07 #NodeJs
nodejs爬虫遇到的乱码问题汇总
Apr 07 #NodeJs
详解nodejs爬虫程序解决gbk等中文编码问题
Apr 06 #NodeJs
NodeJS基础API搭建服务器详细过程记录
Apr 01 #NodeJs
Ajax异步文件上传与NodeJS express服务端处理
Apr 01 #NodeJs
You might like
php中使用addslashes函数报错问题的解决方法
2013/02/06 PHP
PHP生成迅雷、快车、旋风等软件的下载链接代码实例
2014/05/12 PHP
PHP借助phpmailer发送邮件
2015/05/11 PHP
PHP程序中的文件锁、互斥锁、读写锁使用技巧解析
2016/03/21 PHP
PHP判断文件是否被引入的方法get_included_files用法示例
2016/11/29 PHP
关于PHP虚拟主机概念及如何选择稳定的PHP虚拟主机
2018/11/20 PHP
jQuery的一些特性和用法整理小结
2010/01/13 Javascript
JavaScript去除空格的三种方法(正则/传参函数/trim)
2013/02/06 Javascript
JS定时器实例详细分析
2013/10/11 Javascript
JS小功能(列表页面隔行变色)简单实现
2013/11/28 Javascript
用JavaScript显示浏览器客户端信息的超相近教程
2015/06/18 Javascript
JS实现合并两个数组并去除重复项只留一个的方法
2015/12/17 Javascript
JavaScript判断数组是否存在key的简单实例
2016/08/03 Javascript
JS基于面向对象实现的选项卡效果示例
2016/12/20 Javascript
JS实现的Unicode编码转换操作示例
2017/04/28 Javascript
Servlet3.0与纯javascript通过Ajax交互的实例详解
2018/03/18 Javascript
JS实现的合并多个数组去重算法示例
2018/04/11 Javascript
vue+iview 兼容IE11浏览器的实现方法
2019/01/07 Javascript
微信小程序使用Vant Weapp组件库的方法步骤
2019/08/01 Javascript
基于Layui自定义模块的使用方法详解
2019/09/14 Javascript
JS实现滚动条触底加载更多
2019/09/19 Javascript
python3使用matplotlib绘制散点图
2019/03/19 Python
Python自动登录QQ的实现示例
2020/08/28 Python
Spongelle官网:美国的创意护肤洗护品牌
2019/05/15 全球购物
华为c/c++笔试题
2016/01/25 面试题
工商管理专业实习大学生自我鉴定
2013/09/19 职场文书
应届毕业生个人求职信范文
2014/01/29 职场文书
事业单位分类改革实施方案
2014/03/21 职场文书
低碳生活的宣传标语
2014/06/23 职场文书
投资合作意向书范本
2015/05/08 职场文书
2016年“我们的节日·端午节”活动总结
2016/04/01 职场文书
干货干货!2019最新优秀创业计划书
2019/03/21 职场文书
2019各种保证书范文
2019/06/24 职场文书
乔迁新居祝福语
2019/11/04 职场文书
python数据分析之用sklearn预测糖尿病
2021/04/22 Python
mysql连接查询中and与where的区别浅析
2021/07/01 MySQL