node.js 微信开发1-接入
准备工作1 域名准备
无论是个人开发还是做公司项目域名都是必不可少的
前期我个人用过花生壳做个开发测试,挺好用的,就是现在要收费了,开通花生壳要收费,开通内网穿透要收费(为啥要内网穿透呢,因为微信接入的接口必须使用80端口,而如果 要想让自己pc的80端口对外映射就要做这个内网穿透)
开发公司项目的需要提前准备好服务器和域名(为啥提前申请呢,域名备案也是个有点麻烦的事情,需要各种公司法人证件,顺利的话办理周期1-2周)
准备工作2 公众号申请和配置
公众号分三种:订阅号(每天发文章)、服务号(功能更丰富)、企业号(俺也没用过)
公众号申请也是需要公司各种材料,并且申请完了需要认证才可以做自定义开发,然后认证费300大洋
当然个人做测试的话,只需要去申请一个测试号就行了,基本的开发功能也都有,so easy
然后是配置
进入微信公众平台,选择 开发-基本配置

开发者ID、开发者密码:系统给自动分配的,尤其是开发者密码需要自己保存(否则就要进行重置)
IP白名单:没有加入IP白名单的IP地址是无法调用微信的接口获取access_token的,所以你的微信公众号接口部署在哪里,就要把那台电脑的ip地址加入到IP白名单
服务器地址:就是你的域名+接口名:如 http://mydomain.com/wechat/index
令牌(token):记住就行,第一步做公众号接入的时候就要用这个token
消息加解密密匙:如果消息加解密方式为‘明文模式’可以不去记,‘加密方式’就需要在接入接口中配置
稍后等接入接口写完并且部署到服务器上了,就是在这里验证接口是否是通的
node.js 微信接入代码参考
公众号接入接口(注意是get请求)
'GET /wechat/index': async (ctx, next) => {
wechatApp.auth(ctx.request, ctx.response);
},
公众号接入认证
/**
* 微信接入验证
* @param {Request} req Request 对象
* @param {Response} res Response 对象
*/
WeChat.prototype.auth = function (req, res) { var that = this; //1.获取微信服务器Get请求的参数 signature、timestamp、nonce、echostr
var signature = req.query.signature, //微信加密签名
timestamp = req.query.timestamp, //时间戳
nonce = req.query.nonce, //随机数
echostr = req.query.echostr; //随机字符串 //2.将token、timestamp、nonce三个参数进行字典序排序
var array = [this.token, timestamp, nonce];
array.sort(); //3.将三个参数字符串拼接成一个字符串进行sha1加密
var tempStr = array.join('');
const hashCode = crypto.createHash('sha1'); //创建加密类型
var resultCode = hashCode.update(tempStr, 'utf8').digest('hex'); //对传入的字符串进行加密 //4.开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
if (resultCode === signature) {
res.body = echostr
// res.send(echostr);
} else {
res.body = mismatch
// res.send('mismatch');
}
}
按照微信官方的说明就是:
你在微信公众平台点击提交 公众号基本配置 后,公众号会向你配置的服务器地址(URL)发送一个get请求
这个get请求就包含了四个参数:signature\timestamp\nonce\echostr
然后你要做的就是
1)将其中的timestamp、nonce两个参数和你自己设置的token(共三个参数)进行排序
2)将三个参数字符串拼接成一个字符串进行sha1加密
3)开发者获得加密后的字符串可与signature对比,如果对比一致,就将echostr参数返回(表示接入成功了),否则就返回其他信息(表示接入失败了)
如果此时在微信公众平台提示验证通过,那也就通过微信开发的第一步了……
node.js 微信开发1-接入的更多相关文章
- node.js 微信开发2-消息回复、token获取、自定义菜单
项目结构 >config/wechat.json 微信公众号的配置文件 >controllers/oauth.js 微信网页授权接口(下一篇再细讲讲) >controllers/we ...
- node JS 微信开发
JS-SDK 要点 微信测试号; 扫码登录;无需认证(只是名称统一为微信测试号)http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/logi ...
- node.js 微信开发3-网页授权
1.配置公众号的自定义菜单,如 { "button":[ { "type":"view", "name":"公 ...
- vue+node.js+webpack开发微信公众号功能填坑——v -for循环
页面整体框架实现,实现小功能,循环出数据,整体代码是上一篇 vue+node.js+webpack开发微信公众号功能填坑--组件按需引入 修改部门代码 app.vue <yd-flexbox&g ...
- 4.Node.js 微信消息管理
一.写在前面的话 当用户发送消息给公众号时(或某些特定的用户操作引发的事件推送时),会产生一个POST请求,开发者可以在响应包(Get)中返回特定XML结构,来对该消息进行响应. 消息推送也是 ...
- node.js之开发环境搭建
一.安装linux系统 (已安装linux可跳此步骤) 虚拟机推荐选择:VirtualBox 或者 Vmware (专业版永久激活码:5A02H-AU243-TZJ49-GTC7K-3C61N) 我这 ...
- AngularJS + Node.js + MongoDB开发
AngularJS + Node.js + MongoDB开发的基于位置的通讯录(by vczero) 一.闲扯 有一天班长说了,同学们希望我开发一个可以共享位置的通讯录,于是自己简单设计了下功能.包 ...
- Ubuntu 14.04下搭建Node.js的开发环境
最近想找一个轻量级且支持快速开发的服务开发平台,选来选去选择了Node.js,当时有几种选择: Python + Django(用过Django,虽然开发快速,但是感觉性能并不太好). Ruby + ...
- 《Node.js入门》CentOS 6.5下Node.js Web开发环境搭建笔记
近期想尝试一下英特尔的基于WebRTC协同通信开发套件,所以须要在本地搭建Node.js Web的开发測试环境. 这里讲的是CentOS 下的搭建方法.使用Windows的小伙伴请參考: <No ...
随机推荐
- python多线程中join()的理解
在 Python 的多线程编程中,经常碰到 thread.join()这样的代码.那么今天咱们用实际代码来解释一下 join 函数的作用. 第一,当一个进程启动之后,会默认产生一个主线程,因为线程是程 ...
- 深入学习c++--多线程编程(一)
1. 简介 2. 线程使用 2.1 demo #include <iostream> #include <thread> #include <future> usi ...
- 零基础学Python-第一章 :Python介绍和安装-03.Python的安装
官方版本的python下载以及安装方法,以及pycharm的安装和打开. 社区版就可以完全支持我们的需求了. 点击左侧的图片到右边. 在命令行输入python3 exit() 退出命令行的编辑器. p ...
- win10更新之后vmware使用失败
1.现象 2.解决:把所有更新卸载
- 【物联网】esp8266
esp8266环境配置 https://www.jianshu.com/p/cb0274d612b5 https://www.cnblogs.com/zleiblogs/p/7126106.html ...
- 虚拟机VMWare的操作
软件测试工程师需要搭建测试环境——虚拟机操作. VMWare Workstation虚拟机:模拟真实的环境进行各种试验和操作,启动之后,会占用一部分的系统资源. 官网安装:http://www.vmw ...
- 时空卷积网络TCN
1.写在前面 实验表明,RNN 在几乎所有的序列问题上都有良好表现,包括语音/文本识别.机器翻译.手写体识别.序列数据分析(预测)等. 在实际应用中,RNN 在内部设计上存在一个严重的问题:由于网络一 ...
- 洛谷 题解 UVA247 【电话圈 Calling Circles】
[题意] 如果两个人互相打电话(直接或者间接),则说他们在同一个电话圈里.例如,\(a\)打给\(b\),\(b\)打给\(c\),\(c\)打给\(d\),\(d\)打给\(a\),则这四个人在同一 ...
- MacOS上使用Openconnect代替Cisco Anyconnect
OpenConnect是一个Cisco Anyconnect的替代品,具有开源.易获取.可靠等优点.而官方版本的Cisco Anyconnect配置较为繁琐,需要在管理界面同时部署多平台客户端才能支持 ...
- js实现限制容器中字符个数
html: <div class="ellipsis"> 夜空中最亮的星/请指引我走出去/夜空中最亮的星 是否知道/那曾与我同心的身影 如今在哪里/夜空中最亮的星 是否 ...