国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > HTML5 > 正文

詳解Html5微信支付爬坑之路

2024-09-05 07:19:20
字體:
供稿:網(wǎng)友

前言

在開發(fā)微信公眾號活動中,由于之前沒有接觸過與微信相關(guān)的開發(fā),所以導(dǎo)致掉坑,爬坑,不過也讓我對微信公眾和微信官方文檔的熟悉大大增加。

爬坑之路

爬坑一:單頁SPA和后端路由的問題

這個我已經(jīng)單獨(dú)做總結(jié):http://www.survivalescaperooms.com/article/144341.htm

爬坑二:安卓大概率調(diào)起微信支付失敗(引入微信的js-sdk包失敗)

在微信的官方文檔中:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7&index=6

有這樣的一個DEMO:

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

在后端同事授權(quán)成功后,在活動頁面頁面引入這段代碼,開開心心,build 提交 測試 嗯蘋果沒問題,安卓好像沒問題,然鵝安卓有時候調(diào)不起支付,開始以為是微信版本的原因,等等其他,但是,調(diào)起成功的概率也太TM低了,10次才能調(diào)起1次,得,肯定是代碼原因了。改吧。

解決思路:

開微信開發(fā)者工具,打log,最后發(fā)現(xiàn)在這一步時候if (typeof WeixinJSBridge == "undefined")

1.ios能夠調(diào)起微信瀏覽器的js-sdk

2.安卓大部分都走到undefined里面去了

這里其實(shí)我也不太清楚原因。個人感覺是微信安卓的內(nèi)置瀏覽器版本和這個 WeixinJSBridge 方法的問題。(希望有大神能夠解答一下)

既然js-sdk 調(diào)不起,那就手動引入配置吧 //所以有時候偷懶反而更加麻煩,吸取教訓(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

在需要引入的頁面引入模塊

import wx from 'weixin-js-sdk'

配置(參考微信官方文檔:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115):

wx.config({    debug: true, // 開啟調(diào)試模式,調(diào)用的所有api的返回值會在客戶端alert出來,若要查看傳入的參數(shù),可以在pc端打開,參數(shù)信息會通過log打出,僅在pc端時才會打印。    appId: '', // 必填,公眾號的唯一標(biāo)識    timestamp: , // 必填,生成簽名的時間戳    nonceStr: '', // 必填,生成簽名的隨機(jī)串    signature: '',// 必填,簽名    jsApiList: [] // 必填,需要使用的JS接口列表 比如我要調(diào)用支付接口 那么就是 [chooseWXPay]});

這里timestamp是小寫 s 是小寫,數(shù)據(jù)類型是 int 類型

接下來既然配置成功了,那就繼續(xù)看官方文檔

在官方文檔是這么說的,有個ready的方法,在config驗(yàn)證成功之后,把接口放在里面確保執(zhí)行。

wx.ready(function(){    // config信息驗(yàn)證后會執(zhí)行ready方法,所有接口調(diào)用都必須在config接口獲得結(jié)果之后,config是一個客戶端的異步操作,所以如果需要在頁面加載時就調(diào)用相關(guān)接口,則須把相關(guān)接口放在ready函數(shù)中調(diào)用來確保正確執(zhí)行。對于用戶觸發(fā)時才調(diào)用的接口,則可以直接調(diào)用,不需要放在ready函數(shù)中。});

ready里面的引入?yún)?shù)(注意數(shù)據(jù)類型,和后端同事好好配合- -)

wx.chooseWXPay({timestamp: 0, // 支付簽名時間戳,注意微信jssdk中的所有使用timestamp字段均為小寫。但最新版的支付后臺生成簽名使用的timeStamp字段名需大寫其中的S字符nonceStr: '', // 支付簽名隨機(jī)串,不長于 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ù)是拿不到從后端請求回來的數(shù)據(jù)的,這里的this并不是指向VueComponent,自然無法獲取請求后我賦值給this.wx_config這個數(shù)組對象的數(shù)據(jù)。

getConfig(){            wx.config({                debug: this.wx_config.debug, // 開啟調(diào)試模式,調(diào)用的所有api的返回值會在客戶端alert出來,若要查看傳入的參數(shù),可以在pc端打開,參數(shù)信息會通過log打出,僅在pc端時才會打印。                appId: this.wx_config.appId, // 必填,公眾號的唯一標(biāo)識                timestamp: this.wx_config.timestamp, // 必填,生成簽名的時間戳                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));        },

總結(jié):

踩坑總是難免的,總結(jié),還有不要因?yàn)榕侣闊┒蝗プ稣_的事~

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 陕西省| 宁国市| 乌什县| 缙云县| 越西县| 元朗区| 富蕴县| 剑阁县| 东乌| 绥化市| 天台县| 南宫市| 桃园市| 抚宁县| 时尚| 德昌县| 长岭县| 金昌市| 武穴市| 龙江县| 黄龙县| 宣城市| 宜春市| 孟连| 石河子市| 武乡县| 竹溪县| 高台县| 天祝| 获嘉县| 嘉鱼县| 东港市| 车致| 绥江县| 额敏县| 敦化市| 汉源县| 本溪| 区。| 舞钢市| 万安县|