一、开发准备
1、公众号设置-功能设置
2、基本配置
二、接入流程
1.在微信公众平台的 开发 -> 基本配置 那填写服务器信息;
2.点击启用后,微信会发 Get 请求到填写的服务器,检查服务器是否有效;
3.服务器验证通过后,公众号每次接收到新消息,都会发 POST 请求到服务器,然后我们就可以在服务器里进行各种处理。
三、关键代码
‘use strict’
const logger = use(‘App/Services/Logger’)
const crypto = use(‘crypto’)
const axios = use(‘axios’)
const randomString = use(‘randomstring’)
const appId = ‘wxd901da01d13166a9’
const appsecret = ‘9b2c552de9f5a46b292dfae241a91f8d’
const url = ‘http://walter666.cn/demo’
class WeixinController {
async demo({ request, view }) {
const echostr = request.input(‘echostr’)
if (echostr && this.valid(request)) {
return echostr
} else {
const access_token = await this.getData(https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${appId}&secret=${appsecret}
)
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
const jsapi_ticket = await this.getData(https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=${access_token['data']['access_token']}
)
const nonceStr = this.getNonceStr()
const timestamp = this.getTimeStamp()
const str = `jsapi_ticket=${jsapi_ticket['data']['ticket']}&noncestr=${nonceStr}×tamp=${timestamp}&url=${url}`
const signature = this.genSha1(str)
return view.render('weixin', { appId, timestamp, nonceStr, signature })
}
}
getData(url) {
return axios.get(url)
.then(result => result)
}
getNonceStr() {
return randomString.generate(16)
}
getTimeStamp() {
const t = Date.parse(new Date()).toString()
return t.substring(0, t.length - 3)
}
valid(request) {
const token = ‘weixin’
const nonce = request.input(‘nonce’)
const timestamp = request.input(‘timestamp’)
const signature = request.input(‘signature’)
const mySignature = this.genSha1([token, nonce, timestamp].sort().join(’’))
logger.info(signature, mySignature)
return signature == mySignature
}
genSha1(str) {
return crypto.createHash(‘sha1’).update(str).digest(‘hex’)
}
}
module.exports = WeixinController
微信官网参考地址:
access_tocken
https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140183
jsapi_ticket
https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html