javascript
jssdk分享设置_JSSDK自定义分享
web:
1、引入JS文件:
http://res.wx.qq.com/open/js/jweixin-1.4.0.js(支持https)
http://res2.wx.qq.com/open/js/jweixin-1.4.0.js (支持https)
2、獲取簽名等參數(shù)
wx.config({
debug: true, // 開啟調(diào)試模式,調(diào)用的所有api的返回值會在客戶端alert出來,若要查看傳入的參數(shù),可以在pc端打開,參數(shù)信息會通過log打出,僅在pc端時才會打印。
appId: '', // 必填,公眾號的唯一標識
timestamp: , // 必填,生成簽名的時間戳
nonceStr: '', // 必填,生成簽名的隨機串
signature: '',// 必填,簽名
jsApiList: [] // 必填,需要使用的JS接口列表
});
service:
1、注冊微信公眾號,然后獲取對應(yīng)的appId和AppSecret,添加IP白名單和JS安全域名
2、獲取access_token
https請求方式: GET
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
返回參數(shù):
{"access_token":"ACCESS_TOKEN","expires_in":7200}
7200秒access_token過期,所以記得一定緩存你的access_token
3、根據(jù)access_token獲取jsapi_ticket
https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi
返回參數(shù)
{"errcode":0,"errmsg":"ok","ticket":"bxLdikRXVbTPdHSM05e5u5sUoXNKd8-41ZO3MhKoyN5OfkWITDGgnr2fwJ0m9E8NYzWKVZvdVtaUgWvsdshFKA","expires_in":7200}
同樣,7200秒jsapi_ticket過期,所以記得一定緩存你的jsapi_ticket
jsapi_ticket和access_token一定要是同時有效的,不然會出錯
4、簽名算法
簽名生成規(guī)則如下:參與簽名的字段包括noncestr(隨機字符串), 有效的jsapi_ticket, timestamp(時間戳), url(當前網(wǎng)頁的URL,不包含#及其后面部分) 。對所有待簽名參數(shù)按照字段名的ASCII 碼從小到大排序(字典序)后,使用URL鍵值對的格式(即key1=value1&key2=value2…)拼接成字符串string1。這里需要注意的是所有參數(shù)名均為小寫字符。對string1作sha1加密,字段名和字段值都采用原始值,不進行URL 轉(zhuǎn)義。
隨機字符串:
''.join(random.choice(string.ascii_letters + string.digits)for _in range(15))
時間戳:
int(time.time())
URL:
當前網(wǎng)頁的完整URL,確保你獲取用來簽名的url是動態(tài)獲取的,如果是html的靜態(tài)頁面在前端通過ajax將url傳到后臺簽名,前端需要用js獲取當前頁面除去'#'hash部分的鏈接(可用location.href.split('#')[0]獲取,而且需要encodeURIComponent),因為頁面一旦分享,微信客戶端會在你的鏈接末尾加入其它參數(shù),如果不是動態(tài)獲取當前鏈接,將導(dǎo)致分享后的頁面簽名失敗
加上jsapi_ticket生成string1:
ret = {nonceStr=Wm3WZYTPz0wzccnWjsapi_ticket=sM4AOVdWfPE4DxkXGEs8VMCPGGVi4C3VM0P37wVUCFvkVAy_90u5h9nbSlYy3-Sl-HhTdfl2fzFy1AOcHKP7qgtimestamp=1414587457url=http://mp.weixin.qq.com?params=value}
對所有待簽名參數(shù)按照字段名的ASCII 碼從小到大排序:
string ='&'.join(['%s=%s' % (key.lower(), ret[key])for key in sorted(ret)])
簽名:(Python需要編碼一次):
signature =hashlib.sha1(string.encode('utf8')).hexdigest()
這里就得到最終結(jié)果了,可用微信提供的工具進行校驗
5、錯誤排查:
1.確認config中nonceStr(js中駝峰標準大寫S), timestamp與用以簽名中的對應(yīng)noncestr, timestamp一致。
2.確認url是頁面完整的url(請在當前頁面alert(location.href.split('#')[0])確認),包括'http(s)://'部分,以及'?'后面的GET參數(shù)部分,但不包括'#'hash后面的部分。
3.確認 config 中的 appid 與用來獲取 jsapi_ticket 的 appid 一致。
4.確保一定緩存access_token和jsapi_ticket。
5.確保你獲取用來簽名的url是動態(tài)獲取的,動態(tài)頁面可參見實例代碼中php的實現(xiàn)方式。如果是html的靜態(tài)頁面在前端通過ajax將url傳到后臺簽名,前端需要用js獲取當前頁面除去'#'hash部分的鏈接(可用location.href.split('#')[0]獲取,而且需要encodeURIComponent),因為頁面一旦分享,微信客戶端會在你的鏈接末尾加入其它參數(shù),如果不是動態(tài)獲取當前鏈接,將導(dǎo)致分享后的頁面簽名失敗。
Tip:大多數(shù)invalid signature是因為前段網(wǎng)頁的URL和后端簽名的URL不一樣導(dǎo)致的,按照上文第5點進行確認
總結(jié)
以上是生活随笔為你收集整理的jssdk分享设置_JSSDK自定义分享的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql中主从复制包括什么意思_Mys
- 下一篇: c语言最简单的程序编写,C语言简单程序编