vue項(xiàng)目,調(diào)用微信支付。

相信程序猿們都開(kāi)發(fā)過(guò)電商類的項(xiàng)目,那就會(huì)有支付功能。
我聽(tīng)說(shuō),微信有很多坑,我好慌......

一、設(shè)置支付目錄

請(qǐng)確保實(shí)際支付時(shí)的請(qǐng)求目錄與后臺(tái)配置的目錄一致(現(xiàn)在已經(jīng)支持配置根目錄,配置后有一定的生效時(shí)間,一般5分鐘內(nèi)生效),否則將無(wú)法成功喚起微信支付。

在微信商戶平臺(tái)(pay.weixin.qq.com)設(shè)置您的JSAPI支付支付目錄,設(shè)置路徑:商戶平臺(tái)-->產(chǎn)品中心-->開(kāi)發(fā)配置,如圖7.7所示。JSAPI支付在請(qǐng)求支付的時(shí)候會(huì)校驗(yàn)請(qǐng)求來(lái)源是否有在商戶平臺(tái)做了配置,所以必須確保支付目錄已經(jīng)正確的被配置,否則將驗(yàn)證失敗,請(qǐng)求支付不成功。`


image.png

二、設(shè)置授權(quán)域名

開(kāi)發(fā)JSAPI支付時(shí),在統(tǒng)一下單接口中要求必傳用戶openid,而獲取openid則需要您在公眾平臺(tái)設(shè)置獲取openid的域名,只有被設(shè)置過(guò)的域名才是一個(gè)有效的獲取openid的域名,否則將獲取失敗。具體界面如圖7.8所示:

image.png

三、微信內(nèi)H5調(diào)起支付

在微信瀏覽器里面打開(kāi)H5網(wǎng)頁(yè)中執(zhí)行JS調(diào)起支付。接口輸入輸出數(shù)據(jù)格式為JSON。 注意:WeixinJSBridge內(nèi)置對(duì)象在其他瀏覽器中無(wú)效。 getBrandWCPayRequest參數(shù)以及返回值定義:

  • 1、網(wǎng)頁(yè)端接口請(qǐng)求參數(shù)列表(參數(shù)需要重新進(jìn)行簽名計(jì)算,參與簽名的參數(shù)為:appId、timeStamp、nonceStr、package、signType,參數(shù)區(qū)分大小寫。)
名稱 變量名 必填 類型 示例值 描述
公眾號(hào)id appId String(16) wx8888888888888888 商戶注冊(cè)具有支付權(quán)限的公眾號(hào)成功后即可獲得
時(shí)間戳 timeStamp String(32) 1414561699 當(dāng)前的時(shí)間,其他詳見(jiàn)時(shí)間戳規(guī)則
隨機(jī)字符串 nonceStr String(32) 5K8264ILTKCH16CQ2502SI8ZNMTM67VS 隨機(jī)字符串,不長(zhǎng)于32位。推薦隨機(jī)數(shù)生成算法
訂單詳情擴(kuò)展字符串 package String(128) prepay_id=123456789 統(tǒng)一下單接口返回的prepay_id參數(shù)值,提交格式如:prepay_id=***
簽名方式 signType String(32) MD5 簽名類型,默認(rèn)為MD5,支持HMAC-SHA256和MD5。注意此處需與統(tǒng)一下單的簽名類型一致
簽名 paySign String(64) C380BEC2BFD727A4B6845133519F3AD6 簽名,詳見(jiàn)簽名生成算法
  • 2、返回結(jié)果值說(shuō)明
返回值 描述
get_brand_wcpay_request:ok 支付成功
get_brand_wcpay_request:cancel 支付過(guò)程中用戶取消
get_brand_wcpay_request:fail 支付失敗
調(diào)用支付JSAPI 少參數(shù):total_fee 1、請(qǐng)檢查預(yù)支付會(huì)話標(biāo)識(shí)prepay_id是否已失效
2、請(qǐng)求的appid與下單接口的appid是否一致

注:JS API的返回結(jié)果get_brand_wcpay_request:ok僅在用戶成功完成支付時(shí)返回。由于前端交互復(fù)雜,get_brand_wcpay_request:cancel或者get_brand_wcpay_request:fail可以統(tǒng)一處理為用戶遇到錯(cuò)誤或者主動(dòng)放棄,不必細(xì)化區(qū)分。


示例代碼如下

// 在你需要的地方復(fù)制下面代碼
 // 這里需要的簽名等字段,前端開(kāi)發(fā)者只需要調(diào)用后端指定的接口返回即可。
// 如果你全干,那也是OK的。 
// 你是大佬。
function onBridgeReady(){
 window.WeixinJSBridge.invoke(
   'getBrandWCPayRequest', {
     'appId': res.data.appId, // 公眾號(hào)名稱,由商戶傳入
     'timeStamp': res.data.timeStamp, // 時(shí)間戳,自1970年以來(lái)的秒數(shù)
     'nonceStr': res.data.nonceStr, // 隨機(jī)串
     'package': res.data.package,
     'signType': res.data.signType, // 微信簽名方式:
     'paySign': res.data.paySign // 微信簽名
   },
   function (res) {
     alert(JSON.stringify(res))
     if (res.err_msg === 'get_brand_wcpay_request:ok') {
       // 使用以上方式判斷前端返回,微信團(tuán)隊(duì)鄭重提示:
       // res.err_msg將在用戶支付成功后返回ok,但并不保證它絕對(duì)可靠。
    }
 })
}
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();
}

當(dāng)你出現(xiàn)下圖這種方法,說(shuō)明你的授權(quán)域名配置有誤,記住,區(qū)分 httphttps 的,如果配置的是 http請(qǐng)使用 http訪問(wèn),https即是一樣。

image.png


有問(wèn)題,咱一起分享討論。


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容