您好,登錄后才能下訂單哦!
這篇“Android聚合收款碼背后的原理是什么”文章的知識點大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“Android聚合收款碼背后的原理是什么”文章吧。
首先我們介紹一下微信Native支付,引用微信官網(wǎng)的解釋:
Native支付是商戶系統(tǒng)按微信支付協(xié)議生成支付二維碼,用戶再用微信“掃一掃”完成支付的模式。該模式適用于PC網(wǎng)站支付、實體店單品或訂單支付、媒體廣告支付等場景。
簡單來講就是商戶后臺調(diào)用微信支付接口,微信返回預(yù)支付交易的鏈接,格式如下:
weixin://wxpay/bizpayurl?sr=123456
然后商戶將其轉(zhuǎn)為二維碼,提供給客戶使用微信掃碼支付。
這種支付方式可以應(yīng)用在 PC 網(wǎng)站購物場景,比如說英雄聯(lián)盟官網(wǎng)購買相關(guān)游戲道具:
既然微信Native支付最后可以變成二維碼完成支付,那么聚合收款碼是不是可以采用微信Native支付這種支付方式呢?
答案是可以,但是不適合,產(chǎn)品體驗不太好。
最好使用微信支付另外一種支付產(chǎn)品JSAPI 支付。
至于原因,不要急,接下去看就會明白。
JSAPI 支付,又被稱為公眾號支付,名詞解釋引用一下官網(wǎng)介紹:
JSAPI 支付是用戶在微信中打開商戶的 H5 頁面,商戶在 H5 頁面通過調(diào)用微信支付提供的 JSAPI 接口調(diào)起微信支付模塊完成支付。
具體業(yè)務(wù)流程如下:
日常生活中,很多應(yīng)用場景使用這種支付方式,比如說:極客時間公眾號上購買課程
這種支付方式相對于微信Native支付,比較麻煩,還需要使用微信公眾號登錄授權(quán)功能,以此獲取用戶的 openid。
另外當我們調(diào)用微信 JSAPI 后臺接口,拿到微信返回的相關(guān)參數(shù)之后,我們還需要使用微信的 JSSDK,這樣才能喚起微信支付。
了解完聚合支付的所需要的底層支付方式,下面我們來了解一下聚合收款碼的核心原理。
聚合收款碼業(yè)務(wù)流程如下:
第一步用戶使用微信/支付寶 APP 掃碼之后,將會打開一個收銀臺頁面。
這個收銀臺頁面可以自適應(yīng),不同 APP 顯示不同的樣式,比如支付寶打開收銀臺顯示支付寶的 logo,微信打開就會顯示微信的 logo。
第二步用戶在收銀臺輸入金額,點擊支付之后將會喚起 APP 的支付彈窗。
好了,觀察這個流程,我們可以發(fā)現(xiàn)掃碼之后,后臺應(yīng)用需要識別出當前 APP 到底是微信還是支付寶。
那如何判斷當前使用的 APP 呢?
其實這個原理很簡單,在支付寶/微信打開一個鏈接,實際將會使用內(nèi)置的瀏覽器發(fā)起了 HTTP 請求,而 HTTP 的請求頭將會攜帶 User-Agent(UA),用來標識用戶代理軟件的應(yīng)用類型、操作系統(tǒng)、軟件開發(fā)商以及版本號。
微信/支付寶中瀏覽器發(fā)起 HTTP 請求,攜帶的 User-Agent 分別為:
支付寶 UCBrowser/11.5.0.939 UCBS/2.10.1.6 Mobile Safari/537.36 AliApp(AP/10.0.15.051805) AlipayClient/10.0.15.051805 Language/zh-Hans 微信 MQQBrowser/6.2 TBS 043220 Safari/537.36 MicroMessenger/6.5.8.1060 NetType/4G Language/zh_CN
這里需要注意了,不同型號的手機,不同的版本 APP,User-Agent 不一定會一樣,其實我們只需要判斷是否包含某些關(guān)鍵字即可,比如說只要 User-Agent 包含 MicroMessenger 就是微信,包含 AlipayClient 就是支付寶。
下面使用 Java 代碼為例:
String userAgent = request.getHeader("user-agent"); if (Objects.equals(userAgent, "AlipayClient")) { // 支付寶 } else if (Objects.equals(userAgent, "MicroMessenger")) { // 微信 }
這個問題解決之后,后面的流程就很簡單了,只要調(diào)用微信/支付寶的 JSAPI 支付接口,拿到相關(guān)參數(shù)之后,喚起支付。
準確來講,支付寶那邊 JSAPI 支付官方名稱為支付寶生活號支付。
這里解釋一下上面的問題,為什么聚合收款碼不能使用微信Native支付呢?
主要是因為微信Native支付接口返回是一個微信自定義 schema 協(xié)議,只能通過微信掃碼打開,喚起支付。
如何聚合收款碼使用微信Native支付,收銀臺提交金額之后,需要將微信返回交易鏈接轉(zhuǎn)成二維顯示在頁面,然后用戶使用微信內(nèi)置識別二維碼功能喚起支付。
這樣一來比較影響產(chǎn)品體驗,降低支付的成功率。
支付寶也有類似微信Native支付支付接口-當面付掃碼支付,成功調(diào)用之后也會返回支付鏈接。
那這里可以提大家提個小問題,聚合收款碼是否可以使用支付寶當面付掃碼支付接口那?
答案是可以的,而且體驗比微信Native支付好。
這是因為支付寶返回鏈接是一個標準 HTTP 連接,如下:
https://qr.alipay.com/xxxx
這個鏈接只要在支付寶內(nèi)中打開,就可以喚起支付。
所以如果聚合收款碼使用支付寶當面付掃碼支付接口,收銀臺金額提交之后,當拿到支付寶返回的支付鏈接,應(yīng)用程序內(nèi)只要使用 HTTP 302 跳轉(zhuǎn)到支付鏈接,就可以喚起支付寶支付。
畫外音:之前我也一直以為支付寶跟微信一樣,不能使用。
那這樣實際上聚合收款碼底層使用支付方式就有了兩種方案:
微信 JSAPI 支付/支付寶生活支付
微信 JSAPI 支付/支付寶面付掃碼支付
那如何選擇那? 個人建議使用第一種方案,微信、支付寶都采用 JSAPI 支付。
主要是因為只要 302 跳轉(zhuǎn)喚起支付寶支付,就會關(guān)閉我們收銀臺頁面,這樣一來整個微信支付與支付寶支付流程就不太一樣了
其次,當用戶支付成功之后,JSAPI 支付還可以跳轉(zhuǎn)到一個成功頁面,這個頁面我們可以支付結(jié)果展示,或者騷一點,還可以掛些廣告,或者引流其他公號上。
但是如果使用付寶面付掃碼支付,支付完成之后,頁面就被關(guān)閉了,就沒辦法完成支付頁面跳轉(zhuǎn)。
介紹完原理,下面主要介紹一下市面上主流聚合收款碼業(yè)務(wù)流程,其實聚合收款碼可以分為三類:
靜態(tài)聚合收款碼
動態(tài)聚合收款碼
銀聯(lián)靜態(tài)二維碼
靜態(tài)聚合收款碼就類似如下這種,需要用戶主動輸入金額,可以無限次使用。
而動態(tài)聚合收款碼是只能使用一次,并且由商家指定金額,用戶只要掃碼就可以支付指定金額。
這種應(yīng)用場景比如 B 站購買大會員:
銀聯(lián)靜態(tài)二維碼其實功能上與靜態(tài)聚合收款碼差不多,但是它多了支持銀聯(lián)支付的功能。
除了這個以外,最主要的區(qū)別是銀聯(lián)靜態(tài)二維碼是銀聯(lián)發(fā)碼,背后對應(yīng)的地址是銀聯(lián)的地址,類似如下:
https://qr.95516.com/00010000/xxx
靜態(tài)聚合收款碼主要支付流程主要可以分為二步,第一步為登錄授權(quán)。
這里的登陸授權(quán)一般使用微信、支付寶匿名登錄授權(quán)功能,這樣這個過程普通用戶其實是無感知的。
畫外音:如果是程序員的話,可能會感受到這個過程經(jīng)過了多次跳轉(zhuǎn)。
第二步,用戶在收銀臺輸入金額之后,應(yīng)用內(nèi)部將會創(chuàng)建相應(yīng)的訂單,然后再調(diào)用微信/支付寶的 JSAPI 支付。
另外,如果支付寶采用面付掃碼支付這種支付方式的話,那么其實不需要第一步登錄授權(quán)了,可以直接跳到收銀臺發(fā)起支付。
動態(tài)聚合收款碼其實與靜態(tài)收款碼總體比較類似,只不過創(chuàng)建動態(tài)碼內(nèi)部已經(jīng)創(chuàng)建了相應(yīng)的訂單,后續(xù)流程與靜態(tài)聚合收款碼差不多。
如果你使用微信、支付寶掃碼打開銀聯(lián)二維碼,將會打開我們自己收銀臺頁面,后續(xù)流程其實跟靜態(tài)聚合收款碼一模一樣的。
但是如果你使用支付銀聯(lián)支付的 APP 掃碼,比如說各大銀行的手機 APP,美團,京東等,就會在這些 APP 內(nèi)各自支付頁面,然后完成支付。
我們銀聯(lián)二維碼的功能,將會在銀聯(lián)后臺報備一個跳轉(zhuǎn)地址,比如說
https://www.heihei.com
當用戶使用微信/支付寶訪問銀聯(lián)二維碼,銀聯(lián)后臺自己識別訪問請求 User-Agent ,然后后臺根據(jù)規(guī)則拼接重定向地址。
拼接規(guī)則如下:
https://www.heihei.com?qrCode=URLENCODE(https://qr.95516.com/00010000/xxx)
以上就是關(guān)于“Android聚合收款碼背后的原理是什么”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對大家有幫助,若想了解更多相關(guān)的知識內(nèi)容,請關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。