可以為二級域名。授權回調域名配置規範為全域名并且不帶http,比如需要網頁授權的域名為:www.qq.com,配置以後此域名下面的頁面http://www.qq.com/music.html
、 http://www.qq.com/login.html 都可以進行oauth2.0鑒權。但http://pay.qq.com 、 http://music.qq.com 、 http://qq.com無法進行oauth2.0鑒權,關于授權在上一節已經講過。
(2),關于js-sdkj接口,首先要在--公衆号設定--功能設定---js接口安全域名(注意:可以輸入3個,一月隻能改三次,此域名必須是備案過的)。
舉例掃一掃接口,要有js-sdk的ticket票據,此票據通過access-token獲得,并且有失效時間7200秒,首先要用 appid和appsecret獲得access-token ,
然後用token獲得jsapi_ticket,
<a target="_blank" href="https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=access_token&type=jsapi">https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=access_token&type=jsapi</a>
最後通過算法生成簽名,生成簽名要用到四個參數 noncestr(随機字元串,注意在js配置檔案中,s要大寫),timestap(時間戳),requesturl(請求頁面的url),有效的jsapi_ticket,動态頁面,比如
通過aaa.do(aaa.do用于生成簽名),跳轉到aaa.jsp,aaa.jsp中有到每秒二維碼的按鈕。此時在aaad.do中傳入的url就是目前aaa.do的全路徑(從http開始,包括url參數,端口号,不包括最後的#,如http://*****/aaa.do?dd=xxx,當是80端口時,在生成簽名時的url寫端口号,因為當80端口時,aaa.jsp輸出路徑是不帶端口号的,可以在頁面上alert(location.href.split('#')[0])輸出請求本頁面的url和生成簽名的url比較一下)
如果是靜态頁面就是目前頁面的url
生成簽名之前必須先了解一下jsapi_ticket,jsapi_ticket是公衆号用于調用微信js接口的臨時票據。正常情況下,jsapi_ticket的有效期為7200秒,通過access_token來擷取。由于擷取jsapi_ticket的api調用次數非常有限,頻繁重新整理jsapi_ticket會導緻api調用受限,影響自身業務,開發者必須在自己的服務全局緩存jsapi_ticket 。
成功傳回如下json:
獲得jsapi_ticket之後,就可以生成js-sdk權限驗證的簽名了。
簽名算法
簽名生成規則如下:參與簽名的字段包括noncestr(随機字元串), 有效的jsapi_ticket, timestamp(時間戳), url(目前網頁的url,不包含#及其後面部分) 。對所有待簽名參數按照字段名的ascii 碼從小到大排序(字典序)後,使用url鍵值對的格式(即key1=value1&key2=value2…)拼接成字元串string1。這裡需要注意的是所有參數名均為小寫字元。對string1作sha1加密,字段名和字段值都采用原始值,不進行url
轉義。
即signature=sha1(string1)。 示例:
noncestr=wm3wzytpz0wzccnw
jsapi_ticket=sm4aovdwfpe4dxkxges8vmcpggvi4c3vm0p37wvucfvkvay_90u5h9nbslyy3-sl-hhtdfl2fzfy1aochkp7qg
timestamp=1414587457
步驟1. 對所有待簽名參數按照字段名的ascii 碼從小到大排序(字典序)後,使用url鍵值對的格式(即key1=value1&key2=value2…)拼接成字元串string1:
步驟2. 對string1進行sha1簽名,得到signature:
注意事項
簽名用的noncestr和timestamp必須與wx.config中的noncestr和timestamp相同。
簽名用的url必須是調用js接口頁面的完整url。
出于安全考慮,開發者必須在伺服器端實作簽名的邏輯。