前言:
之前使用网上的办法在html页面直接放入缩略图img的方式不知道为啥,根本没有用!:
https://jingyan.baidu.com/article/c35dbcb0f5dc588916fcbc2a.html
之后在别的文章看到:微信分享链接必须调用认证了的公众号的JSSDK接口
于是开始寻找新的方式
一切的前提:一个认证了的公众号
微信JS-SDK是微信公众平台 面向网页开发者提供的基于微信内的网页开发工具包。
通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照、选图、语音、位置等手机系统的能力,同时可以直接使用微信分享、扫一扫、卡券、支付等微信特有的能力,为微信用户提供更优质的网页体验。
而我需要的大概就是微信分享功能了吧
当然,如果你只是测试的话可能申请一个公众号测试号更适合你哦:
https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Requesting_an_API_Test_Account.html
后端:
拿到测试号(或者正式号)就可以编写wxapi接口和签名算法了
官方有给出一些代码的栗子,最完善的就是php代码:
JS-SDK使用权限签名算法:
生成签名之前必须先了解一下jsapi_ticket,jsapi_ticket是公众号用于调用微信JS接口的临时票据。正常情况下,jsapi_ticket的有效期为7200秒,通过access_token来获取。由于获取jsapi_ticket的api调用次数非常有限,频繁刷新jsapi_ticket会导致api调用受限,影响自身业务,开发者必须在自己的服务全局缓存jsapi_ticket 。
access_token是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用access_token。开发者需要进行妥善保存。access_token的存储至少要保留512个字符空间。access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效。
官方的示例代码种JAVA, Node, Python 部分代码只实现了签名算法,需要开发者传入 jsapi_ticket 和 url ,其中 jsapi_ticket 需要通过 http://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=ACCESS_TOKEN 接口获取,url 为调用页面的完整 url 。
PHP 部分代码包括了获取 access_token 和 jsapi_ticket 的操作,只需传入 appid 和 appsecret 即可,但要注意如果已有其他业务需要使用 access_token 的话,应修改获取 access_token 部分代码从全局缓存中获取,防止重复获取 access_token ,超过调用频率。
注意事项:
》1. jsapi_ticket 的有效期为 7200 秒,开发者必须全局缓存 jsapi_ticket ,防止超过调用频率。
根据官方提示,自己写了个python代码,并使用redis缓存了 jsapi_ticket和access_token,防止超过调用频率。
思路:
1.获取access_token:
通过接口地址https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
,传送正确的APPID和APPSECRET就能获取
access_token,返回值还会附带有效时间。
2.获取jsapi_ticket:
思路同上,只是地址变了,所需参数从APPID等变成access_token。
以上2结果需要全局缓存,前端每次请求时先找缓存,缓存失效再请求wx接口重新获取。
3.签名算法
这个有点复杂:
参与签名的字段包括noncestr(随机字符串), 有效的jsapi_ticket, timestamp(时间戳), url(当前网页的URL,不包含#及其后面部分) 。对所有待签名参数按照字段名的ASCII 码从小到大排序(字典序)后,使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串string1。这里需要注意的是所有参数名均为小写字符。对string1作sha1加密,字段名和字段值都采用原始值,不进行URL 转义。
(详细见代码)
html页面:
思路:后端开一个接口来返回前端需要的数据:appId,timestamp,nonceStr,signature
(没关注的点个关注哈,或者点喜欢也行)
代码在github:
https://github.com/Arrowarcher/wxApi
最后附上
微信JS-SDK说明文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115