快應用微信H5支付

快應用微信H5支付

1.首先是服務端完成支付服務端的接入,接入完成之後,服務器要完成的工做是接收來自客戶端的支付請求,而後生成一個訂單,以後把訂單傳給微信的服務器,微信會返回一個mweb_url,服務器須要把這個mweb_url返回給客戶端;html

data:{
    orderId :56955,
    url:'https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?prepay_id=wx13101012415473b5899768303880086259&package=1999421602'
}

2.完成一箇中間跳轉頁面,中間頁須要在加載完成的時候從頁面的get參數中解析出 mweb_url , 而後自動向這個url跳轉;生成一個https://my.demain.com/html/bo... H5連接web

//中間頁面H5的邏輯
  var payUrl = decodeURIComponent(getQueryString('mweb_url'))
  if (payUrl !== 'null') {
    window.location.replace(payUrl)
  }

  function getQueryString(name) {
    var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
    var l = decodeURI(window.location.search);
    var r = l.substr(1).match(reg);
    if (r != null) return unescape(r[2]);
    return null;
  }

3.關於這個中間頁:json

  • 爲何須要這個中間頁?
  • 由於微信h5支付拉起支付界面的方式就是向mweb_url跳轉,不過由於微信會經過ref作防盜鏈檢查,由於跳轉動做須要在開發者的頁面中完成
  • 這個中間頁何時會被加載運行?調用微信支付的pay接口以後,平臺會自動加載運行這個頁面
  • 加載運行這個中間頁的時候,會拿到哪些參數?調用微信支付的pay接口時傳入的參數,會所有做爲get參數傳給這個頁面

4.在快應用中進行配置中間頁地址,manifest.json中聲明wxpay這個feature時填上服務器

{
     "name": "service.wxpay",
     "params": {
     "package": "you.package.name",
     "sign": "abcdefg",
     "url": "https://my.demain.com/html/bookSoter/index.html"
  }
}

5.調用官方文檔提供的wxpay.getType()方法微信

wechatPayHandle(){
    var payType = wxpay.getType();
    if (payType === 'MWEB') {
    wxpay.pay({
      //微信網頁支付的prepayId
      prepayid: 'wx13101012415473b5899768303880086259',
      extra: {
        //傳遞給支付頁面的自定義參數, 根據須要進行設置, 會被urlEncode以後拼接在配置的url尾部
        mweb_url: 'https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?prepay_id=wx13101012415473b5899768303880086259&package=1999421602'
      },
      fail: function (data, code) {
        console.log(`WX H5 PAY handling fail, code = ${code}`)
      },
      cancel: function () {
        console.log('WX H5 PAY handling cancel')
      },
      success: function (data) {
        //H5方式下,支付成功的回調僅僅只是指將訂單遞交給微信,並不意味着支付已經成功完成
        console.log(data)
      }
    })
  }
}

6.若是pay()方法走成功之後會返回一個data,不須要作任何操做和跳轉,就能夠喚起微信支付,返回的格式以下:微信開發

{
finl_url:"https://my.demain.com/html/bookSoter/index.html?repayid=wx13101012415473b5899768303880086259&trade_type=MWEB&mweb_url=https%3A%2F%2Fwx.tenpay.com%2Fcgi-bin%2Fmmpayweb-bin%2Fcheckmweb%3Fprepay_id%3Dwx13101012415473b5899768303880086259%26package%1999421602"
    }

7.若是走了success回調函數之後,微信喚起不成功存在可能有函數

  • 生成的H5中間頁面的域名沒有在微信開發平臺上面配置白名單;
  • 服務端代碼發佈環境和你測試環境在同一個局域網裏面

8.若是走了fail回調函數,看返回的code值測試

  • 900 在manifest.json中配置的應用簽名有誤,沒法解析
  • 901 在manifest.json中配置的應用包名有誤
  • 1000 微信未安裝
  • 1001 用於微信網頁支付的url配置找不到
  • 2001 訂單已經提交給微信,可是微信返回錯誤, 可能的緣由:簽名錯誤、未註冊APPID、項目設置APPID不正確、註冊的APPID與設置的不匹配、其餘異常等。
相關文章
相關標籤/搜索