准备工作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-接入的更多相关文章

  1. node.js 微信开发2-消息回复、token获取、自定义菜单

    项目结构 >config/wechat.json 微信公众号的配置文件 >controllers/oauth.js 微信网页授权接口(下一篇再细讲讲) >controllers/we ...

  2. node JS 微信开发

    JS-SDK 要点 微信测试号; 扫码登录;无需认证(只是名称统一为微信测试号)http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/logi ...

  3. node.js 微信开发3-网页授权

    1.配置公众号的自定义菜单,如 { "button":[ { "type":"view", "name":"公 ...

  4. vue+node.js+webpack开发微信公众号功能填坑——v -for循环

    页面整体框架实现,实现小功能,循环出数据,整体代码是上一篇 vue+node.js+webpack开发微信公众号功能填坑--组件按需引入 修改部门代码 app.vue <yd-flexbox&g ...

  5. 4.Node.js 微信消息管理

    一.写在前面的话   当用户发送消息给公众号时(或某些特定的用户操作引发的事件推送时),会产生一个POST请求,开发者可以在响应包(Get)中返回特定XML结构,来对该消息进行响应.   消息推送也是 ...

  6. node.js之开发环境搭建

    一.安装linux系统 (已安装linux可跳此步骤) 虚拟机推荐选择:VirtualBox 或者 Vmware (专业版永久激活码:5A02H-AU243-TZJ49-GTC7K-3C61N) 我这 ...

  7. AngularJS + Node.js + MongoDB开发

    AngularJS + Node.js + MongoDB开发的基于位置的通讯录(by vczero) 一.闲扯 有一天班长说了,同学们希望我开发一个可以共享位置的通讯录,于是自己简单设计了下功能.包 ...

  8. Ubuntu 14.04下搭建Node.js的开发环境

    最近想找一个轻量级且支持快速开发的服务开发平台,选来选去选择了Node.js,当时有几种选择: Python + Django(用过Django,虽然开发快速,但是感觉性能并不太好). Ruby + ...

  9. 《Node.js入门》CentOS 6.5下Node.js Web开发环境搭建笔记

    近期想尝试一下英特尔的基于WebRTC协同通信开发套件,所以须要在本地搭建Node.js Web的开发測试环境. 这里讲的是CentOS 下的搭建方法.使用Windows的小伙伴请參考: <No ...

随机推荐

  1. Java中字符串操作的基本方法总结:

    1.字母大小写转换: package com.imooc; public class SortDemo { public static void main(String[] args) { char ...

  2. linux非root用户安装5.7.27版本mysql

    先下安装包,到mysql官网https://dev.mysql.com/downloads/mysql/选好安装包版本.操作系统类型(默认是最新版本,点击右边链接Looking for previou ...

  3. 算法习题---4-9数据挖掘(Uva1591)

    一:题目 这是最懵逼的一道题,什么鬼......... [刷题]算法竞赛入门经典(第2版) 4-9/UVa1591 - Data Mining(详细题目看这个吧,不想多说) 二:代码实现 #defin ...

  4. 定时备份删除数据库sql

    1.备份数据库 mkdir -p /home/mysql/mysql_bak/ vi mysql_bak.sh #!/bin/bash #Shell Command For Backup MySQL ...

  5. java.net.NoRouteToHostException: Cannot assign requested address 问题分析(端口被用完的解决方法)

    问题: 错误原因: 由于liunx 分配的客户端连接端口用尽,无法建立socket连接所致,虽然socket正常关闭,但是端口不是立即释放,而是处于 TIME_WAIT 状态,默认等待60s后释放.查 ...

  6. matlab基本函数randperm end数组索引

    一起来学演化计算-matlab基本函数randperm end数组索引 觉得有用的话,欢迎一起讨论相互学习~Follow Me 随机排列 语法 p = randperm(n) p = randperm ...

  7. html中的<pre>标签

    定义和用法 pre 元素可定义预格式化的文本.被包围在 pre 元素中的文本通常会保留空格和换行符.而文本也会呈现为等宽字体. <pre> 标签的一个常见应用就是用来表示计算机的源代码. ...

  8. Swift4.0复习函数

    1.函数的定义与调用: 一个函数定义的基本语法如以下代码所示: func function_name (param1: Int, param2: Float, param3: Double) -> ...

  9. elasticsearch关键词查询不分词

    $query = [ 'bool' => [ 'must' => [ 'match_phrase' => ['content' => $word] //$word词不被分词 ] ...

  10. 内层元素设置position:relative后父元素overflow:hidden overflow:scroll失效 解决方法

    内层元素设置position:relative后父元素overflow:hidden overflow:scroll 都失效 解决方法:在position:relative的外层父容器加positio ...