1. 程式人生 > >微信支付-微信內H5調起支付

微信支付-微信內H5調起支付

在微信瀏覽器裡面開啟H5網頁中執行JS調起支付。介面輸入輸出資料格式為JSON。

注意:WeixinJSBridge內建物件在其他瀏覽器中無效。

getBrandWCPayRequest引數以及返回值定義:

1、網頁端介面請求引數列表(引數需要重新進行簽名計算,參與簽名的引數為:appId、timeStamp、nonceStr、package、signType,引數區分大小寫。)

名稱 變數名 必填 型別 示例值 描述
公眾號id appId String(16) wx8888888888888888 商戶註冊具有支付許可權的公眾號成功後即可獲得
時間戳 timeStamp String(32) 1414561699 當前的時間,其他詳見時間戳規則
隨機字串 nonceStr String(32) 5K8264ILTKCH16CQ2502SI8ZNMTM67VS 隨機字串,不長於32位。推薦隨機數生成演算法
訂單詳情擴充套件字串 package String(128) prepay_id=123456789 統一下單介面返回的prepay_id引數值,提交格式如:prepay_id=***
簽名方式 signType String(32) MD5 簽名型別,預設為MD5,支援HMAC-SHA256和MD5。注意此處需與統一下單的簽名型別一致
簽名 paySign String(64) C380BEC2BFD727A4B6845133519F3AD6

2、返回結果值說明

返回值 描述
get_brand_wcpay_request:ok 支付成功
get_brand_wcpay_request:cancel 支付過程中使用者取消
get_brand_wcpay_request:fail 支付失敗
呼叫支付JSAPI缺少引數:total_fee

1、請檢查預支付會話標識prepay_id是否已失效

2、請求的appid與下單介面的appid是否一致

注:JS API的返回結果get_brand_wcpay_request:ok僅在使用者成功完成支付時返回。由於前端互動複雜,get_brand_wcpay_request:cancel或者get_brand_wcpay_request:fail可以統一處理為使用者遇到錯誤或者主動放棄,不必細化區分。

示例程式碼如下:


function onBridgeReady(){
   WeixinJSBridge.invoke(
      'getBrandWCPayRequest', {
         "appId":"wx2421b1c4370ec43b",     //公眾號名稱,由商戶傳入     
         "timeStamp":"1395712654",         //時間戳,自1970年以來的秒數     
         "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();
}