JSAPI調(diào)起支付
在微信瀏覽器里面打開H5網(wǎng)頁中執(zhí)行JS調(diào)起支付。接口輸入輸出數(shù)據(jù)格式為JSON。
注意:WeixinJSBridge內(nèi)置對象在其他瀏覽器中無效。
getBrandWCPayRequest參數(shù)以及返回值定義:
1、網(wǎng)頁端接口請求參數(shù)列表(參數(shù)需要重新進行簽名計算,參與簽名的參數(shù)為:appId、timeStamp、nonceStr、package、signType,參數(shù)區(qū)分大小寫。)
名稱 | 變量名 | 必填 | 類型 | 示例值 | 描述 |
---|---|---|---|---|---|
公眾號id | appId | 是 | String(16) | wx8888888888888888 | appId為當前服務商號綁定的appid |
時間戳 | timeStamp | 是 | String(32) | 1414561699 | 當前的時間,其他詳見時間戳規(guī)則 |
隨機字符串 | nonceStr | 是 | String(32) | 5K8264ILTKCH16CQ2502SI8ZNMTM67VS | 隨機字符串,不長于32位。推薦隨機數(shù)生成算法 |
訂單詳情擴展字符串 | package | 是 | String(128) | prepay_id=123456789 | 統(tǒng)一下單接口返回的prepay_id參數(shù)值,提交格式如:prepay_id=*** |
簽名方式 | signType | 是 | String(32) | MD5 | 簽名類型,默認為MD5,支持HMAC-SHA256和MD5。注意此處需與統(tǒng)一下單的簽名類型一致 |
簽名 | paySign | 是 | String(64) | C380BEC2BFD727A4B6845133519F3AD6 | 簽名,詳見簽名生成算法 |
2、返回結(jié)果值說明
返回值 | 描述 |
---|---|
get_brand_wcpay_request:ok | 支付成功 |
get_brand_wcpay_request:cancel | 支付過程中用戶取消 |
get_brand_wcpay_request:fail | 支付失敗 |
注:JS API的返回結(jié)果get_brand_wcpay_request:ok僅在用戶成功完成支付時返回。由于前端交互復雜,get_brand_wcpay_request:cancel或者get_brand_wcpay_request:fail可以統(tǒng)一處理為用戶遇到錯誤或者主動放棄,不必細化區(qū)分。
示例代碼如下:
function onBridgeReady(){
WeixinJSBridge.invoke(
'getBrandWCPayRequest', {
"appId":"wx2421b1c4370ec43b", //公眾號ID,由商戶傳入
"timeStamp":"1395712654", //時間戳,自1970年以來的秒數(shù)
"nonceStr":"e61463f8efa94090b1f366cccfbbb444", //隨機串
"package":"prepay_id=u802345jgfjsdfgsdg888",
"signType":"MD5", //微信簽名方式:
"paySign":"70EA570631E4BB79628FBCA90534C63FF7FADD89" //微信簽名
},
function(res){
if(res.err_msg == "get_brand_wcpay_request:ok" ){
// 使用以上方式判斷前端返回,微信團隊鄭重提示:
//res.err_msg將在用戶支付成功后返回ok,但并不保證它絕對可靠。
}
});
}
if (typeof WeixinJSBridge == "undefined"){
if( document.addEventListener ){
document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false);
}else if (document.attachEvent){
document.attachEvent('WeixinJSBridgeReady', onBridgeReady);
document.attachEvent('onWeixinJSBridgeReady', onBridgeReady);
}
}else{
onBridgeReady();
}
3、客戶端喚起支付常見錯誤
序號 | 錯誤描述 | 解決方法 |
---|---|---|
1 | 調(diào)用支付JSAPI缺少參數(shù):total_fee | 1、請檢查預支付會話標識prepay_id是否已失效 2、請求的appid與下單接口的appid是否一致 |