原文地址: Android 通過scheme跳轉(zhuǎn)支付寶實(shí)現(xiàn)支付 - Stars-One的雜貨小窩
需求的來源是支付功能,由于支付寶不允許個(gè)人開通具有webhook的支付服務(wù),所以是對接了一個(gè)支付系統(tǒng)(應(yīng)該算作四方支付)。創(chuàng)建訂單后,系統(tǒng)會(huì)返回一個(gè)h5鏈接。
對于PC版的軟件,將此鏈接轉(zhuǎn)為二維碼,然后提示用戶使用支付寶掃碼就能夠觸發(fā)付款操作;
而對于Android軟件來說,這樣的流程可不合適
實(shí)際上,掃碼之后就是通過支付寶內(nèi)置瀏覽器打開了h5,如果我能有個(gè)方法,可以觸發(fā)讓支付寶去打開支付的h5鏈接,那么就是相當(dāng)于實(shí)現(xiàn)了喚起APP支付的功能了
于是就輪到了今天所說的scheme實(shí)現(xiàn)了功能
步驟
1.知道對應(yīng)的scheme
首先,我們要知道對應(yīng)的scheme,這個(gè)是重點(diǎn),但好在酷安人均大佬,已經(jīng)有人找到了,就是下面的這個(gè),需要在后面拼接下網(wǎng)址即可
alipays://platformapi/startapp?appId=20000067&url=
2.觸發(fā)scheme
關(guān)于觸發(fā)scheme,這里就涉及到Android里的Intent相關(guān)的知識(shí)了,這里不詳細(xì)說明了,直接上代碼
val payUrl =""http://支付的h5地址
val scheme = "alipays://platformapi/startapp?appId=20000067&url=${payUrl}"
val intent = Intent(Intent.ACTION_VIEW, Uri.parse(scheme))
ActivityUtils.startActivity(intent)
PS:
ActivityUtils
是個(gè)AndroidUtilCode庫里的一個(gè)工具類,各位也可以直接用activity對象的startActivity方法
當(dāng)然,這里我們還得加上個(gè)判斷,來判斷用戶是否安裝了支付寶應(yīng)用
//判斷是否安裝支付寶
if (AppUtils.isAppInstalled("com.eg.android.AlipayGphone")) {
val scheme = "alipays://platformapi/startapp?appId=20000067&url=${URLEncoder.encode(payUrl)}"
val intent = Intent(Intent.ACTION_VIEW, Uri.parse(scheme))
ActivityUtils.startActivity(intent)
} else {
ToastUtils.showShort("抱歉,當(dāng)前手機(jī)未安裝支付寶APP...")
}
注意: 這里要使用urlencode編碼一下支付地址!
【開源庫推薦】#2 AndroidUtilCode Android常用工具類大全(附API使用說明) - Stars-One的雜貨小窩
不過這里遇到了個(gè)問題了,由用戶反饋說支付不了
排查一下,發(fā)現(xiàn)是我項(xiàng)目里的target SDK變更為了30,而API 30,無法獲取包名,詳情可見此文聲明軟件包可見性需求 ?|? Android 開發(fā)者 ?|? Android Developers
不過由于我用的是工具庫,所以把AndroidUtilCode庫更新到最新版本就解決了此問題
PS: 實(shí)際上實(shí)現(xiàn)效果與官方支付寶的APP支付有些不同,上述的實(shí)現(xiàn)效果就是,會(huì)先觸發(fā)支付寶打開一個(gè)網(wǎng)頁,然后再彈出一個(gè)付款的對話框;
而官方支付寶的APP支付的話,就是會(huì)直接彈出付款的對話,沒有打開網(wǎng)頁的這一步操作,不過也是還能接受
最后我碎碎念下,微信這個(gè)APP就是垃圾,限制太多了,對開發(fā)者極度不友好,不同于支付寶,它是直接限制了scheme,除非你是它白名單里,否則不允許你用它里面瀏覽器打開頁面
所以估計(jì)我以后不會(huì)對接微信支付!!
補(bǔ)充 scheme收集
- 來自 酷安'掏友'的內(nèi)容
- 酷安'掏友'分享的飛書文檔
下面是我從上面文章里抽取一些可能開發(fā)會(huì)用的scheme:文章來源:http://www.zghlxwxcb.cn/news/detail-424954.html
應(yīng)用 | 說明 | scheme |
---|---|---|
指定QQ號(hào)聊天頁跳轉(zhuǎn) | mqqwpa://im/chat?chat_type=wpa&uin=qq號(hào) | |
QQ群聊天頁 | mqqwpa://im/chat?chat_type=group&uin=群號(hào) | |
指定群資料頁 | mqqapi://card/show_pslcard?src_type=internal&version=1&uin=群號(hào)&card_type=group | |
指定QQ號(hào)資料頁 | mqqapi://card/show_pslcard?src_type=internal&version=1&uin=QQ號(hào) | |
空間跳轉(zhuǎn) | mqqapi://qzone/activefeed | |
微信 | 付款 | android-app://com.tencent.mm/#Intent;action=com.tencent.mm.action.BIZSHORTCUT;launchFlags=0x4000000;S.LauncherUI.Shortcut.LaunchType=launch_type_offline_wallet;end |
微信 | 掃一掃 | #Intent;action=com.tencent.mm.action.BIZSHORTCUT;launchFlags=0x4000000;B.LauncherUI.From.Scaner.Shortcut=true;end |
微信 | 聯(lián)系人/群聊/公眾號(hào)跳轉(zhuǎn) | android-app://com.tencent.mm/#Intent;action=com.tencent.mm.action.BIZSHORTCUT;B.LauncherUI.From.Biz.Shortcut=true;S.LauncherUI.Shortcut.Username=ID;end |
微信 | 跳轉(zhuǎn)微信收藏 | |
微信 |
上面微信的聯(lián)系人跳轉(zhuǎn),需要個(gè)ID,關(guān)于如何獲取,可見下圖文章來源地址http://www.zghlxwxcb.cn/news/detail-424954.html
補(bǔ)充 - 跳轉(zhuǎn)網(wǎng)易云音樂打開鏈接
val intent = Intent(Intent.ACTION_VIEW)
intent.data = Uri.parse("https://www.cnblogs.com/stars-one")
intent.setPackage("com.netease.cloudmusic")
ActivityUtils.startActivity(intent)
到了這里,關(guān)于Android 通過scheme跳轉(zhuǎn)支付寶實(shí)現(xiàn)支付的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!