本篇文章為大家展示了怎么在Html5中實(shí)現(xiàn)微信支付,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。
創(chuàng)新互聯(lián)專注于當(dāng)雄網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供當(dāng)雄營(yíng)銷型網(wǎng)站建設(shè),當(dāng)雄網(wǎng)站制作、當(dāng)雄網(wǎng)頁(yè)設(shè)計(jì)、當(dāng)雄網(wǎng)站官網(wǎng)定制、小程序開(kāi)發(fā)服務(wù),打造當(dāng)雄網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供當(dāng)雄網(wǎng)站排名全網(wǎng)營(yíng)銷落地服務(wù)。
爬坑之路
爬坑一:?jiǎn)雾?yè)SPA和后端路由的問(wèn)題
爬坑二:安卓大概率調(diào)起微信支付失敗(引入微信的js-sdk包失?。?/p>
在微信的官方文檔中:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7&index=6
有這樣的一個(gè)DEMO:
function onBridgeReady(){ WeixinJSBridge.invoke( 'getBrandWCPayRequest', { "appId":"wx2421b1c4370ec43b", //公眾號(hào)名稱,由商戶傳入 "timeStamp":"1395712654", //時(shí)間戳,自1970年以來(lái)的秒數(shù) "nonceStr":"e61463f8efa94090b1f366cccfbbb444", //隨機(jī)串 "package":"prepay_id=u802345jgfjsdfgsdg888", "signType":"MD5", //微信簽名方式: "paySign":"70EA570631E4BB79628FBCA90534C63FF7FADD89" //微信簽名 }, function(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(); }
在后端同事授權(quán)成功后,在活動(dòng)頁(yè)面頁(yè)面引入這段代碼,開(kāi)開(kāi)心心,build 提交 測(cè)試 嗯蘋(píng)果沒(méi)問(wèn)題,安卓好像沒(méi)問(wèn)題,然鵝安卓有時(shí)候調(diào)不起支付,開(kāi)始以為是微信版本的原因,等等其他,但是,調(diào)起成功的概率也太TM低了,10次才能調(diào)起1次,得,肯定是代碼原因了。改吧。
解決思路:
開(kāi)微信開(kāi)發(fā)者工具,打log,最后發(fā)現(xiàn)在這一步時(shí)候if (typeof WeixinJSBridge == "undefined")
1.ios能夠調(diào)起微信瀏覽器的js-sdk
2.安卓大部分都走到undefined里面去了
這里其實(shí)我也不太清楚原因。個(gè)人感覺(jué)是微信安卓的內(nèi)置瀏覽器版本和這個(gè) WeixinJSBridge 方法的問(wèn)題。(希望有大神能夠解答一下)
既然js-sdk 調(diào)不起,那就手動(dòng)引入配置吧 //所以有時(shí)候偷懶反而更加麻煩,吸取教訓(xùn)
if (typeof WeixinJSBridge == "undefined"){ console.log( WeixinJSBridge); if( document.addEventListener ){ document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false); }else if (document.attachEvent){ document.attachEvent('WeixinJSBridgeReady', onBridgeReady); document.attachEvent('onWeixinJSBridgeReady', onBridgeReady); } }else{ onBridgeReady(); }
Vue引入微信js-sdk包
npm i -S weixin-js-sdk
在需要引入的頁(yè)面引入模塊
import wx from 'weixin-js-sdk'
配置(參考微信官方文檔:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115):
wx.config({ debug: true, // 開(kāi)啟調(diào)試模式,調(diào)用的所有api的返回值會(huì)在客戶端alert出來(lái),若要查看傳入的參數(shù),可以在pc端打開(kāi),參數(shù)信息會(huì)通過(guò)log打出,僅在pc端時(shí)才會(huì)打印。 appId: '', // 必填,公眾號(hào)的唯一標(biāo)識(shí) timestamp: , // 必填,生成簽名的時(shí)間戳 nonceStr: '', // 必填,生成簽名的隨機(jī)串 signature: '',// 必填,簽名 jsApiList: [] // 必填,需要使用的JS接口列表 比如我要調(diào)用支付接口 那么就是 [chooseWXPay] });
這里timestamp是小寫(xiě) s 是小寫(xiě),數(shù)據(jù)類型是 int 類型
接下來(lái)既然配置成功了,那就繼續(xù)看官方文檔
在官方文檔是這么說(shuō)的,有個(gè)ready的方法,在config驗(yàn)證成功之后,把接口放在里面確保執(zhí)行。
wx.ready(function(){ // config信息驗(yàn)證后會(huì)執(zhí)行ready方法,所有接口調(diào)用都必須在config接口獲得結(jié)果之后,config是一個(gè)客戶端的異步操作,所以如果需要在頁(yè)面加載時(shí)就調(diào)用相關(guān)接口,則須把相關(guān)接口放在ready函數(shù)中調(diào)用來(lái)確保正確執(zhí)行。對(duì)于用戶觸發(fā)時(shí)才調(diào)用的接口,則可以直接調(diào)用,不需要放在ready函數(shù)中。 });
ready里面的引入?yún)?shù)(注意數(shù)據(jù)類型,和后端同事好好配合- -)
wx.chooseWXPay({ timestamp: 0, // 支付簽名時(shí)間戳,注意微信jssdk中的所有使用timestamp字段均為小寫(xiě)。但最新版的支付后臺(tái)生成簽名使用的timeStamp字段名需大寫(xiě)其中的S字符 nonceStr: '', // 支付簽名隨機(jī)串,不長(zhǎng)于 32 位 package: '', // 統(tǒng)一支付接口返回的prepay_id參數(shù)值,提交格式如:prepay_id=\*\*\*) signType: '', // 簽名方式,默認(rèn)為'SHA1',使用新版支付需傳入'MD5' paySign: '', // 支付簽名 success: function (res) { // 支付成功后的回調(diào)函數(shù) } });
附上本人的demo
在ready里面使用Vue data中的數(shù)據(jù),一不小心掉到this指向的坑,如果不加bind,wx.chooseWXPay里面的參數(shù)是拿不到從后端請(qǐng)求回來(lái)的數(shù)據(jù)的,這里的this并不是指向VueComponent,自然無(wú)法獲取請(qǐng)求后我賦值給this.wx_config這個(gè)數(shù)組對(duì)象的數(shù)據(jù)。
getConfig(){ wx.config({ debug: this.wx_config.debug, // 開(kāi)啟調(diào)試模式,調(diào)用的所有api的返回值會(huì)在客戶端alert出來(lái),若要查看傳入的參數(shù),可以在pc端打開(kāi),參數(shù)信息會(huì)通過(guò)log打出,僅在pc端時(shí)才會(huì)打印。 appId: this.wx_config.appId, // 必填,公眾號(hào)的唯一標(biāo)識(shí) timestamp: this.wx_config.timestamp, // 必填,生成簽名的時(shí)間戳 nonceStr: this.wx_config.nonceStr, // 必填,生成簽名的隨機(jī)串 signature:this.wx_config.signature,// 必填,簽名 jsApiList: this.wx_config.jsApiList // 必填,需要使用的JS接口列表 }); //微信支付 wx.ready(function() { // console.log(this.jsApiCall()); wx.chooseWXPay({ timestamp: this.wechat_code.timestamp, nonceStr:this.wechat_code.nonceStr, package: this.wechat_code.package, signType: this.wechat_code.signType, paySign: this.wechat_code.paySign, success: function () { // 支付成功后的回調(diào)函數(shù) alert("支付成功"); window.location.href = "/hd/becomevip"; }, cancel: function() { alert("支付失敗"); } }); }.bind(this)); },
上述內(nèi)容就是怎么在Html5中實(shí)現(xiàn)微信支付,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。