公众号开发:自定义分享功能的实现,参考微信公众号开发文档
https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html
一、绑定域名,引入js文件
将网站域名添加到公众号js接口安全域名中,引入js文件:
https://res.wx.qq.com/open/js/jweixin-1.6.0.js
二、前端js中注入配置信息
wx.config({
debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
appId: '', // 必填,公众号的唯一标识
timestamp: , // 必填,生成签名的时间戳
nonceStr: '', // 必填,生成签名的随机串
signature: '',// 必填,签名
jsApiList: [] // 必填,需要使用的JS接口列表
});
这里面有5个参数: appId、timestamp、nonceStr、signature、jsApiList。
其中, appId是公众号的id,timestamp是时间戳,很容易获取。
jsApiList是初始化的功能,可以把所有的功能都写上去。
jsApiList: [
'onMenuShareTimeline',
'onMenuShareAppMessage',
'hideAllNonBaseMenuItem',
'chooseImage',
'showMenuItems',
'hideMenuItems',
'translateVoice',
'updateAppMessageShareData',
'updateTimelineShareData',
]
而nonceStr是一个16位的随机字符串。以下是生成16位的随机字符串:
$chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
$str = "";
for ($i = 0; $i < 16; $i++) {
$str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
}
$nonceStr=$str;
重点来了,signature这个参数要怎样获取呢?
三、获取signature
如何获取signature,这是最大的难点。按照文档上说,
签名算法signature的格式为:
signature=”jsapi_ticket=sM4AOVdWfPE4DxkXGEs8VMCPGGVi4C3VM0P37wVUCFvkVAy_90u5h9nbSlYy3-Sl-HhTdfl2fzFy1AOcHKP7qg&noncestr=Wm3WZYTPz0wzccnW×tamp=1414587457&url=http://mp.weixin.qq.com?params=value“;
$signature=sha1($signature);
其中,jsapi_ticket是临时票据,url是当前网页地址(注意:是带全部参数的详细地址!!!)
$url = 'https://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
那么怎样获取jsapi_ticket呢?按照文档上的说明:
先获取access_token,再用http GET方式请求获得jsapi_ticket。请求的URL地址为:
https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi
总结
$signature获取这一块非常坑,需要一点点的排查,所需的参数全都不能有错。