最近接私活的時候,而後要接入支付寶支付和微信支付,注意這個是獨立 h5 支付,非公衆號那種,總結一下遇到的問題。前端
接下來的工做就是去查閱文檔了,稍微整理了一下以下圖ios
因此總結一下,梳理整個流程之後你會發現前端這邊的工做量不是很大,主要是服務端那邊須要配置 sdk。下面進入具體支付動做支付寶這邊比較簡單axios
// 支付寶支付 async aliPay (id) { const params = { id, orderNo: _uuid().replace(/-/g, ''), paymentType: '1' } try { let res = await axios({ method: 'post', data: params, headers: { common: { Authorization: window.localStorage.getItem('token') } } }) if(res.data) { const d = res.data const div = document.createElement('div') div.innerHTML = d //此處form就是後臺返回接收到的數據 document.body.appendChild(div) document.forms[0].submit() window.localStorage.setItem('orderNo', params.orderNo) } } catch (error) { console.log(error) } }, // 查詢支付結果 queryPayResult () { const orderNo = window.localStorage.getItem('orderNo') if (orderNo) this.show = true let count = 0 const socket = async (orderNo) => { const res = await getPayResult({ orderNo }) if(res.data || res.data === 0){ if (res.data === 1) { this.result = '支付成功' } if (res.data === 0) { this.result ='未支付' } setTimeout(() => { this.show = false }, 1000) window.localStorage.removeItem('orderNo') } else { count += 1 count < 5 && socket(orderNo) } } //若是有就說明是從支付寶那邊過來的,沒有就表明第一次進來;由於查詢成功後我會或者未支付我會把這個清掉 orderNo && socket(orderNo) }, mounted () { this.queryPayResult() } 複製代碼
核心代碼api
if(res.data) { const d = res.data var reg = /<script[^>]*?>[\s\S]*?<\/script>/i; var len1 = d.indexOf(">") var len2 = d.lastIndexOf("<") var str3 = d.substring(len1+1,len2) eval(str3) window.localStorage.setItem('orderNo', params.orderNo) } 複製代碼
只有你弄清楚整個流程,前端這塊仍是挺簡單的😸安全