首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Android WebView 調用支付寶支付:棄用 H5 跳轉,改用原生 SDK 接入

     編輯:程式設計疑難解答

場景:App 用 WebView 加載 H5 頁面,點擊支付跳轉至支付寶 PC 頁面,體驗差且常現「無法登錄、掃碼不回調」。

問題根因

  • WebView 載入 H5 支付頁,屬瀏覽器內核渲染,受限於 User-Agent、Cookie、彈窗攔截、回調 Scheme 處理等。
  • 支付寶 H5 支付依賴 `fetchOrderInfoFromH5PayUrl` 攔截 URL,但 WebView 權限、Scheme 註冊、外部瀏覽器喚起易失敗。

最佳解決方案:原生 SDK 接入

  1. 集成支付寶 Android SDK:下載 alipaySdk-*.aar,放入 `libs`,Gradle 依賴。
  2. 配置 AndroidManifest:添加權限、支付寶回調 Activity(`AlipayResultActivity`)。
  3. 原生下單:App 向後端請求簽名字符串(`orderInfo`),非 WebView 頁面請求。
  4. 調用支付:

// 原生調用示例
Runnable payRunnable = () -> {
  PayTask alipay = new PayTask(activity);
  Map result = alipay.payV2(orderInfo, true);
  // 處理結果 result.get("resultStatus") == "9000" 成功
};
Thread payThread = new Thread(payRunnable);
payThread.start();

優勢

  • 彈出支付寶 App 支付頁(已安裝)或 H5 收銀台(未安裝),體驗原生流暢。
  • 回調可靠,通過 `AlipayResultActivity` 統一處理結果。
  • 不依賴 WebView 權限、Cookie、JS Bridge 等脆弱環節。

若必須在 WebView 內觸發

用 @JavascriptInterface 暴露原生支付方法給 H5 調用:


public class PayBridge {
  @JavascriptInterface
  public void startAlipay(String orderInfo) {
    // 上述原生支付邏輯
  }
}
webView.addJavascriptInterface(new PayBridge(), "AndroidPay");

H5 頁面:`AndroidPay.startAlipay(orderInfo)`

總結

WebView 嵌套支付寶 H5 支付問題多、維護難。果斷切換原生 SDK 接入,或用 JSBridge 觸發原生支付,徹底解決登錄、回調、體驗問題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved