📌📌最近接手了一个公众号项目,之前也没有开发过公众号,当然前端还是html、css、js 这些东西,这个没什么说的。主要是当时交接完之后回来的路上他们给我提了一个bug,说分享出去的连接别人在点击之后,看到的个人信息中的内容竟然是分享者的信息,这就太扯淡了。我周末加了两天班也没能处理掉,还是上一任走了之后又回来处理一次。最近我自己搭建完webpack配置之后,用了内网穿透工具,自己去实现微信分享功能。发现其实不难,就是繁琐点,这篇博文就是为了梳理这个逻辑,方便以后工作。
微信公众号分享功能的实现流程图
步骤主要分两大块
- 后台,主要完成签名接口。
- 前台,负责调用后台签名接口和使用微信的JSSDK开发包的工具完成分享。
后台:编写签名接口
koa2 开发的后台接口
后台调用微信获取票据的接口需要一个有效的 access_token, 这个接口另一个参数一般传递固定值 type: “jsapi”。获取到的票据也是在2个小时内有效,每天获取次数有限,也需要后台缓存起来,和access_token一样。这个接口返回一个对象,包含两个字段,一个是ticket票据,一个是有效时长,单位是秒(s)。
后台在拿到微信端返回的票据之后,自己在生成一个长度不能大于36个字符的随机字符串在加上一个当前的时间戳,在加上前台传来的分享连接地址(不能包含#号及其后面部分,连接可以包含查询参数部分?s=1&a=b这种,这点参考官方文档),三个按照官方文档给出的示例的拼接顺序,把这四个拼接成一个新的字符串,然后进行sha1加密得到一个新的加密字符串,把这个加密字符串同之前的加密用的时间戳和随机字符串一起返给前台。至此后台的任务完成。
说明,前台在调用这个后台接口的时候传递url,最好先进行编码然后再传给后台,后台再反编码回去,否则在作为请求的查询参数进行传递的时候又能有问题。
代码语句 | 说明 |
---|---|
ctx.app.$$_token.access_token | 拿到全局对象上保存的 access_token, access_token的获取是有次数限制的,一般是2个小时内有效 |
1 | // 获取临时票据接口,用于调用微信js接口使用(微信分享等功能需要) |
前台:调用后台签名接口
前台首先要引入jssdk开发包。
前台在调用完上面的接口后,得到一个时间戳(timestamp),随机字符串(nonceStr),和一个签名,就是加密后的字符串(signature),另外还需要一个appId,这个参数自己到公众号后台去查找写死就行,或配置到前端的配置文件中都行,在加上一个需要用到的权限列表 jsApiList,最后一个参数是debug,生成环境设置为false,用于调试。
1 | getTicket(){ |
至此不出意外就能完成一个微信分享链接的功能。
这要还是要看官方文档的示例已经说明。他们的配置也可能会发生变化。