准备工做1 域名准备javascript
不管是我的开发仍是作公司项目域名都是必不可少的html
前期我我的用过花生壳作个开发测试,挺好用的,就是如今要收费了,开通花生壳要收费,开通内网穿透要收费(为啥要内网穿透呢,由于微信接入的接口必须使用80端口,而若是 要想让本身pc的80端口对外映射就要作这个内网穿透)java
开发公司项目的须要提早准备好服务器和域名(为啥提早申请呢,域名备案也是个有点麻烦的事情,须要各类公司法人证件,顺利的话办理周期1-2周)node
准备工做2 公众号申请和配置服务器
公众号分三种:订阅号(天天发文章)、服务号(功能更丰富)、企业号(俺也没用过)微信
公众号申请也是须要公司各类材料,而且申请完了须要认证才能够作自定义开发,而后认证费300大洋微信开发
固然我的作测试的话,只须要去申请一个测试号就好了,基本的开发功能也都有,so easy微信公众平台
而后是配置dom
进入微信公众平台,选择 开发-基本配置async
开发者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参数返回(表示接入成功了),不然就返回其余信息(表示接入失败了)
若是此时在微信公众平台提示验证经过,那也就经过微信开发的第一步了……