三、通過wx.config介面注入許可權驗證
1、每個需要使用jssdk的頁面都要使用config介面注入配置資訊,wx.config呼叫方法如下:
wx.
config
()
(2)用第一步獲取的access_token使用get請求獲取jsapi_ticket
正確獲取資訊如下:
2、生成簽名(signature)
簽名規則:
1、參與簽名的字段包括noncestr(隨機字串), 有效的jsapi_ticket, timestamp(時間戳), url(當前網頁的url,不包含#及其後面部分)。
2、對所有待簽名引數按照欄位名的ascii 碼從小到大排序(字典序,sort()即可)後,使用url鍵值對的格式(即key1=value1&key2=value2…)拼接成字串(string)。
3、使用sha1加密拼接成的字串string。注意:欄位名和字段值都要使用原值,不要進行url轉義
參與的字段示例:
拼接完成的字串:
使用sha1加密後的signature:
0f9de62fce790f9a083d5c99e95740ceb90c27ed
前端拿到值後,寫入到wx.config中相應字段即可
注意:1、前端wx.config配置中的noncestr欄位名稱的』s』是大寫,但是後台生成簽名的noncestr欄位的『s』是小寫
2、時間戳(timestamp)值要記住精確到秒,不是毫秒。
3、生成簽名的url(使用jssdk的頁面位址,這個頁面位址可以在瀏覽器訪問),包含「?」號後面的所有引數,不包含「#」號後面的值。
如果是靜默授權或者授權頁面同意授權後跳轉到的頁面,頁面路徑會新增兩個引數:code和state。
即授權後跳轉頁面為則完整路徑為
那麼生成簽名的url必須為授權後跳轉頁面的完整路徑。前端獲取這個路徑:location.href.split(』#』)[0]
如果前端使用ajax(使用jquery)獲取wx.config配置所需的幾個引數的值,可以這樣做:
$.
ajax(}
)
後台要怎麼操作前端傳過來的query值呢?大家肯定一眼看出來 獲取query中的fullurl欄位不就行了。
後台**:(使用nodejs的koa框架)
let query =
this
.request.query;
//獲取查詢字串
let fullurl = query.fullurl;
//獲取查詢字串中的fullurl欄位
從前端請求獲取簽名介面開始,博主列印了query的值。。也就是let query = this.request.query的值。。結果發現。query值為:
state
使用encodeuricomponent
(location.href.
split
('#')[
0])即可
五、呼叫介面
wx.config配置完成後會執行wx.ready方法,所有介面必須要在config返回結果之後操作。config是乙個客戶端的非同步操作,所以如果需要在頁面載入時就呼叫相關介面,則須把相關介面放在ready函式中呼叫來確保正確執行。對於使用者觸發時才呼叫的介面,則可以直接呼叫,不需要放在ready函式中。當前頁面要使用的介面,要寫入到config配置中的jsapilist中
六、常見問題
1、invalid url domain:
js介面安全網域名稱錯誤。可以看看第一項
2、invalid signature:
要麼是jsapi_ticket錯誤,要麼是簽名演算法問題,要麼是演算法的引數有問題,注意noncestr中的』s』是小寫的。如果都是對的。那就是前端傳的url有問題了。。。好好檢查一下,不要像博主一樣啊。。。。
3、permission denied:
這個問題一般是沒有介面許可權的問題,有的介面是要認證之後才可以使用,當然,測試號不會有這個問題
function
isweixin()
, error:
function
(err)})
;}else
}function
_config
(signinfo)
) wx.
ready
(function()
,function
(res)})
;});
}八、調起支付頁面
// 判斷開啟方式
let openfun =
getopenfun()
// 獲取href
let href = window.location.href
let searchid = orderid ||
this
.props.match.params.orderid
//判斷是否有code 獲取重定向位址
if(href.
split
('#')[
0].split
('?'
).length <2)
).then
(res =>)}
else
if(openfun ===
'wxwork'))
.then
(res =>)}
}else).
then
(res =>)}
else
if(openfun ===
'wxwork'))
.then
(res =>).
then
(res =>})
}else).
then
(res =>)}
})}}
getwxconfig
(payinfo));
} window.wx.
ready
(function()
,function
(res)})
;});
}).catch
(err =>)}
export
const
getopenfun
=function()
else
if(ua.
match
(/micromessenger/i
)&&ua.
match
(/wxwork/i))
else
};
企業微信API開發前準備
參考文件 1 corpid ww2f9a1a85f1806981 每個企業都擁有唯一的corpid,獲取此資訊可在管理後台 我的企業 企業資訊 下檢視 2 userid xiaonaiqiang 每個成員都有唯一的userid,即所謂 帳號 在管理後台 通訊錄 點進某個成員的詳情頁 3 部門id 1...
微信控制項api
php案例 呼叫登陸介面獲取apikey url phone 18013351905 賬號 password 123456 密碼 data phone phone,password password uinfo request url,data apikey uinfo data apikey 可開...
微信分享 API
注意 如有問題請通過以下渠道反饋 在需要呼叫js介面的頁面引入如下js檔案,支援https 2015 5 21 var wxjs root setprefix function root 獲取url上面的引數值 name 引數名 return 引數值 geturlparam function nam...