Android 通過scheme跳轉支付寶實現支付

原文地址: Android 通過scheme跳轉支付寶實現支付 - Stars-One的雜貨小窩

需求的來源是支付功能,由於支付寶不允許個人開通具有webhook的支付服務,所以是對接了一個支付系統(應該算作四方支付)。創建訂單後,系統會返回一個h5鏈接。
對於PC版的軟件,將此鏈接轉爲二維碼,然後提示用戶使用支付寶掃碼就能夠觸發付款操作;
而對於Android軟件來說,這樣的流程可不合適

實際上,掃碼之後就是通過支付寶內置瀏覽器打開了h5,如果我能有個方法,可以觸發讓支付寶去打開支付的h5鏈接,那麼就是相當於實現了喚起APP支付的功能了

於是就輪到了今天所說的scheme實現了功能

步驟

1.知道對應的scheme

首先,我們要知道對應的scheme,這個是重點,但好在酷安人均大佬,已經有人找到了,就是下面的這個,需要在後面拼接下網址即可

alipays://platformapi/startapp?appId=20000067&url=

2.觸發scheme

關於觸發scheme,這裏就涉及到Android裏的Intent相關的知識了,這裏不詳細說明了,直接上代碼

val payUrl =""//支付的h5地址
val scheme = "alipays://platformapi/startapp?appId=20000067&url=${payUrl}"
val intent = Intent(Intent.ACTION_VIEW, Uri.parse(scheme))
ActivityUtils.startActivity(intent)

PS: ActivityUtils是個AndroidUtilCode庫裏的一個工具類,各位也可以直接用activity對象的startActivity方法

當然,這裏我們還得加上個判斷,來判斷用戶是否安裝了支付寶應用

//判斷是否安裝支付寶
if (AppUtils.isAppInstalled("com.eg.android.AlipayGphone")) {
    val scheme = "alipays://platformapi/startapp?appId=20000067&url=${payUrl}"
    val intent = Intent(Intent.ACTION_VIEW, Uri.parse(scheme))
    ActivityUtils.startActivity(intent)
} else {
    ToastUtils.showShort("抱歉,當前手機未安裝支付寶APP...")
}

【開源庫推薦】#2 AndroidUtilCode Android常用工具類大全(附API使用說明) - Stars-One的雜貨小窩

不過這裏遇到了個問題了,由用戶反饋說支付不了

排查一下,發現是我項目裏的target SDK變更爲了30,而API 30,無法獲取包名,詳情可見此文聲明軟件包可見性需求  |  Android 開發者  |  Android Developers

不過由於我用的是工具庫,所以把AndroidUtilCode庫更新到最新版本就解決了此問題

PS: 實際上實現效果與官方支付寶的APP支付有些不同,上述的實現效果就是,會先觸發支付寶打開一個網頁,然後再彈出一個付款的對話框;

而官方支付寶的APP支付的話,就是會直接彈出付款的對話,沒有打開網頁的這一步操作,不過也是還能接受

最後我碎碎念下,微信這個APP就是垃圾,限制太多了,對開發者極度不友好,不同於支付寶,它是直接限制了scheme,除非你是它白名單裏,否則不允許你用它裏面瀏覽器打開頁面

所以估計我以後不會對接微信支付!!

補充 scheme收集

下面是我從上面文章裏抽取一些可能開發會用的scheme:

應用 說明 scheme
QQ 指定QQ號聊天頁跳轉 mqqwpa://im/chat?chat_type=wpa&uin=qq號
QQ QQ羣聊天頁 mqqwpa://im/chat?chat_type=group&uin=羣號
QQ 指定羣資料頁 mqqapi://card/show_pslcard?src_type=internal&version=1&uin=羣號&card_type=group
QQ 指定QQ號資料頁 mqqapi://card/show_pslcard?src_type=internal&version=1&uin=QQ號
QQ 空間跳轉 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
微信 聯繫人/羣聊/公衆號跳轉 android-app://com.tencent.mm/#Intent;action=com.tencent.mm.action.BIZSHORTCUT;B.LauncherUI.From.Biz.Shortcut=true;S.LauncherUI.Shortcut.Username=ID;end
微信 跳轉微信收藏
微信

上面微信的聯繫人跳轉,需要個ID,關於如何獲取,可見下圖

補充 - 跳轉網易雲音樂打開鏈接

val intent = Intent(Intent.ACTION_VIEW)
intent.data = Uri.parse("https://www.cnblogs.com/stars-one")
intent.setPackage("com.netease.cloudmusic")
ActivityUtils.startActivity(intent)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章