天天看點

公衆号H5支付流程

公衆号支付(H5頁面支付流程)

在做H5頁面支付前期準備工作:

  1. 需要準備兩個域名(域名必須通過ICP備案)

    例如: www.baidu.com(生産環境)

    www.baidu.com(測試環境)

    appId: “wx1231313131231123”, //公衆号ID

    secret: “f759f131313131312313131312313121”, //公衆号開發密碼

公衆号背景進行相應配置

2. 登入微信支付商戶平台(pay.weixin.qq.com)–>産品中心–>開發配置。

3. 設定授權目錄(確定在該目錄下可以通路到支付界面,在通路界面需先下載下傳微信提供的.txt檔案,将其放到域名指定的伺服器上,保證可以通路。)

公衆号H5支付流程

設定授權域名

開發JSAPI支付時,在統一下單接口中要求必傳使用者openid,而擷取openid則需要您在公衆平台設定擷取openid的域名,隻有被設定過的域名才是一個有效的擷取openid的域名,否則将擷取失敗。

公衆号H5支付流程
公衆号H5支付流程
  1. 配置擷取授權是的IP(此IP是公網可以通路的IP位址,用來接收微信平台傳回的access_token)
  2. 確定公衆号對微信開放平台進行綁定。
  3. 在H5界面進行擷取授權操作。

    在擷取授權分四步:

    第一步:使用者同意授權,擷取code

    (1) 在確定微信公衆賬号擁有授權作用域(scope參數)的權限的前提下(服務号獲得進階接口後,預設擁有scope參數中的snsapi_base和snsapi_userinfo),引導關注者打開如下頁面:

    (2) https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redire

    公衆号H5支付流程

    以上位址标紅字段是需要填寫公衆号ID以及擷取授權之後要跳轉到界面

    Appid:公衆号ID

    Redirect_uri:前端需要通過encodeURIComponent(Url)進行編碼

通過以上操作會擷取到Code

通過接口将code傳給背景擷取使用者資訊并進行展示。

第二步:通過code換取網頁授權access_token

背景同學通過傳過來的code擷取到access_token oppenid 擷取使用者資訊

通過code換取網頁授權access_token

擷取code後,請求以下連結擷取access_token: https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

公衆号H5支付流程

第三步:拉取使用者資訊(需scope為 snsapi_userinfo)

如果網頁授權作用域為snsapi_userinfo,則此時開發者可以通過access_token和openid拉取使用者資訊了。

請求方法

http:GET(請使用https協定) https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&在這裡插入圖檔描述" src="https://img-blog.csdnimg.cn/20200525113547902.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NzAwMDgzNA==,size_16,color_FFFFFF,t_70" />

公衆号H5支付流程

前端同學進行網頁支付代碼

window.WeixinJSBridge.invoke(

‘getBrandWCPayRequest’, {

“appId”: “wx4c1bd0dabeb65e97”, //公衆号名稱,由商戶傳入

“timeStamp”: res.data.payment.timeStamp, //時間戳,自1970年以來的秒數

“nonceStr”: res.data.payment.nonceStr, //随機串

“package”: res.data.payment.prepayId,

“signType”: res.data.payment.signType, //微信簽名方式:

“paySign”: res.data.payment.paySign //微信簽名

},

function (resBody) {

if (resBody.err_msg == “get_brand_wcpay_request:ok”) {

that.paymentEnd()

that.setState({

isDisplay:true

})

// 使用以上方式判斷前端傳回,微信團隊鄭重提示:

//res.err_msg将在使用者支付成功後傳回ok,但并不保證它絕對可靠。

}else if(resBody.err_msg ==“get_brand_wcpay_request:fail”){

alert(‘支付失敗,請稍後重試或聯系客服部門尋求幫助。’);

}

});

繼續閱讀