微信公众号开发实战

申请账号

去微信公众号官网搜索,按着步骤来,得到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的信息

你可能感兴趣的:(微信公众号开发实战)