申请账号
去微信公众号官网搜索,按着步骤来,得到appID、appsecret,至于token是自己填写的。
剩下的就是接口配置(接受腾讯服务器发送过来的消息)、JS接口安全域名、模板消息
接口配置
需要填写一个公网ip的服务器地址,加上接口地址。如:
http://www.xxx.com/v1/public/interface
腾讯的回调地址必须是80端口,返回的参数就是在公众号里面配置的token,可以直接返回,也可以排序验证以后返回
常用工具
- 花生壳或者ngrok
./ngrok http 192.168.0.71:7008
- 微信开发工具内网穿透或者浏览器内网穿透
- ssh + tunnel + nginx
客户端用ssh运行下面命令就可以tunnel上服务器
ssh -vnNT -R 服务器端口:localhost:本地端口 服务器用户名@服务器IP地址
服务端在nginx配置下面的信息
upstream tunnel {
server 127.0.0.1:端口;
}
server {
listen 80;
server_name dev.ninghao.net;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://tunnel;
}
}
JS接口安全域名
在该域名下,js可以调用微信api
模板消息
服务端给客户手机微信发消息,必须有相应的模板;模板可以用他人的,也可以自己建,不过时间要审核完成才能用
获取access_token
token失效时间是7200秒,一般的操作提前刷新token,公众平台后台会保证在5分钟内,新老access_token都可用
- redis的token失效时间设为7100秒
- 系统启动并且每个7000秒运行一次定时器
- 定时器调用微信接口获取token有效期,并更新redis中的token有效期
module.exports = {
schedule: {
interval: '7000s', // 小于2小时
immediate: true,
type: 'worker',
},
async task(ctx) {
const { appid, secret } = ctx.app.config.wechat;
//调用获取接口
const res = await ctx.curl('https://api.weixin.qq.com/cgi-bin/token', {
data: { appid, secret ,grant_type: 'client_credential' },
dataType: 'json',
});
console.log(res.data)
if (res.data.errcode) {
//调用接口出错
}
else {
await ctx.app.redis.set('e_starter_wechat_token', res.data.access_token, 'EX', 7100); //EX是秒
}
},
};
微信JS-SDK
jsapi_ticket是公众号用于调用微信JS接口的临时票据
//调用access_token获取接口
const resJson = await ctx.curl('https://api.weixin.qq.com/cgi-bin/ticket/getticket', {
data: { access_token: res.data.access_token,type: 'jsapi' },
dataType: 'json',
});
if (resJson.data.errcode) {
//调用接口出错
return;
}else {
await ctx.app.redis.set('e_starter_wechat_ticket', resJson.data.ticket, 'EX', 7100); //EX是秒
}
同获取token的方法,公用一个定时器,token获取完了之后,获取ticket;微信端签名算法,细节可以去官网查看,出于安全考虑,开发者必须在“服务器端”实现签名的逻辑;微信用户只有关注了微信公众号才能调用微信接口;不管成功或者失败,ready中的代码都会执行。
appId: jsonData.appId, // 必填,公众号的唯一标识
timestamp: jsonData.timestamp, // 必填,生成签名的时间戳
nonceStr: jsonData.noncestr, // 必填,生成签名的随机串
signature: jsonData.signature,// 必填,签名,见附录1
微信网页授权
获取用户信息,可以知道用户是否关注了公众号,是否有权限使用微信接口等等。
- 先在微信公众号配置可以网页授权
- 回调页面有静默授权和用户确认授权,一般用静默授权获取openid来查询用户信息,并且用户关注微信公众号时要维护openid的信息