因?yàn)樘O(píng)果爸爸的各種封鎖與限制昆庇,導(dǎo)致 app 中如果集成支付sdk上架會(huì)變得十分困難榄棵,總之是想辦法去抽成嘲更。為了應(yīng)對(duì)這種流氓政策筐钟,各小 app 公司紛紛偷梁換柱揩瞪,通過(guò) h5 支付從而繞開(kāi) sdk 支付赋朦。
常規(guī)的什么申請(qǐng)秘鑰,配置回調(diào)地址等操作全部忽略了李破,直接進(jìn)入核心步驟
支付寶支付
使用支付寶 h5 支付
支付寶的 h5 支付宠哄,返回一個(gè) http 鏈接,是可以直接在 webview 中使用的嗤攻,url 會(huì)重定向最終指向到支付寶的專(zhuān)屬協(xié)議上毛嫉。這里建議直接在 app 上直接通過(guò) new webview 方式實(shí)現(xiàn)。
微信支付
使用微信 h5 支付
通過(guò)微信 h5 支付也是可以生成支付鏈接的妇菱,如果我們直接使用這個(gè) url 的話承粤,一定會(huì)拋一個(gè)錯(cuò)誤“商家參數(shù)格式有誤,請(qǐng)聯(lián)系商家解決”闯团,微信支付的錯(cuò)誤解決方案中已經(jīng)給出了原因辛臊,微信在這里校驗(yàn)了 http 請(qǐng)求中的 referer ,我們直接打開(kāi) url 請(qǐng)求頭中是沒(méi)有 referer 字段的房交,最容易想到的是通過(guò) html 中的 a 標(biāo)簽跳轉(zhuǎn)頁(yè)面彻舰,a 標(biāo)簽會(huì)默認(rèn)攜帶當(dāng)前頁(yè)面的主機(jī)地址。
使用中轉(zhuǎn)頁(yè)面
所以就寫(xiě)了一個(gè)簡(jiǎn)單的中轉(zhuǎn)頁(yè)面,邏輯很簡(jiǎn)單刃唤,在中轉(zhuǎn)鏈接中添加一個(gè) pay_url 字段隔心,pay_url 就是微信 h5 支付生成的鏈接,需要進(jìn)行 encode 編碼一下尚胞,我們可以在 js 里面重新解碼硬霍,設(shè)置 a 標(biāo)簽的 href 熟悉,執(zhí)行點(diǎn)擊進(jìn)行跳轉(zhuǎn)笼裳。
<!DOCTYPE html>
<html>
<head>
<title>正在支付</title>
</head>
<body>
正在支付须尚。。侍咱。
<a id="a"></a>
<script type="text/javascript">
function getQueryVariable(variable)
{
var query = window.location.search.substring(1);
var vars = query.split("&");
for (var i=0;i<vars.length;i++) {
var pair = vars[i].split("=");
if(pair[0] == variable){return pair[1];}
}
return(false);
}
var payUrl=getQueryVariable('pay_url')
var decodePayUrl=decodeURIComponent(payUrl)
console.log(payUrl)
console.log(decodePayUrl)
document.getElementById('a').setAttribute('href',decodePayUrl)
document.getElementById('a').click();
</script>
</body>
</html>
掛載中轉(zhuǎn)網(wǎng)頁(yè)
找個(gè)服務(wù)器或者 oss 將頁(yè)面放過(guò)去耐床,配置一個(gè)域名,因?yàn)槲⑿诺?h5 支付是綁定了一個(gè)主域名楔脯,二級(jí)域名其實(shí)都是可以使用撩轰,假如最終配置為pay.abc.com
,那么我們最終的跳轉(zhuǎn)鏈接為 http://pay.abc.com?pay_url=http://wechatpay.com?xxxxxx昧廷。
小結(jié)
不管是微信支付還是支付寶支付堪嫂,其實(shí)想從瀏覽器喚醒支付 app,都是通過(guò)特有 schema 喚醒的木柬,支付寶的協(xié)議是 alipay://皆串,微信的協(xié)議是 weixin://,其實(shí)和 http 協(xié)議一樣眉枕,例如:http://baidu.com 恶复,瀏覽器會(huì)捕獲 http 協(xié)議,支付寶和微信都會(huì)捕獲屬于自己的協(xié)議速挑,這一點(diǎn)不管在 android 還是 ios 上谤牡,也正是利用了這一點(diǎn),才使我們 app 中喚醒支付寶或者微信成為可能姥宝。當(dāng)然后面很可能也被限制翅萤,在將來(lái)相當(dāng)長(zhǎng)的一段時(shí)間是不會(huì)的,正是這些協(xié)議使得 h5 和 app 進(jìn)行交互才使得如今移動(dòng)操作系統(tǒng)更加繁榮腊满。