Поддержка платежных приложений Android в WebView с помощью API запроса платежа

Вы можете использовать API запроса оплаты для запуска приложений Android-платежей с веб-сайтов, работающих внутри WebView . Это работает с использованием того же JavaScript API, который уже доступен в Chrome.

Эта функция доступна, начиная с версии WebView 136, которая обычно поставляется с Chrome 136.

Настройка запроса на оплату в хост-приложениях WebView

Для запуска приложений Android Payment из WebView API запроса платежа запрашивает систему, используя намерения Android. Для поддержки этого хост-приложение WebView должно объявить эти намерения в своем файле AndroidManifest.xml .

По умолчанию запрос платежа в WebView отключен.

Чтобы включить его с помощью WebSettingsCompat из AndroidX WebKit версии 1.14.0 или выше, выполните следующие действия:

Шаг 1: Добавьте зависимость AndroidX WebKit

Котлин (build.gradle.kts)

dependencies {
  implementation("androidx.webkit:webkit:1.14.0")
}

Groovy (сборка.gradle)

dependencies {
  implementation 'androidx.webkit:webkit:1.14.0'
}

Каталог версий

[versions]
webkit = "1.14.0"

[libraries]
androidx-ktx = { group = "androidx.webkit", name = "webkit", version.ref = "webkit" }

Шаг 2: Импорт необходимых классов

Эти классы позволяют вам получать доступ к параметрам WebView и настраивать их, а также проверять поддержку функций во время выполнения.

import android.webkit.WebSettings;
import android.webkit.WebView;
import androidx.webkit.WebSettingsCompat;
import androidx.webkit.WebViewFeature;

Шаг 3: Включите запрос платежа в коде WebView

Этот шаг включает функцию запроса платежа в вашем WebView и гарантирует, что сайт сможет активировать ее с помощью JavaScript.

Этот шаг включает функцию запроса платежа в вашем WebView и гарантирует, что сайт сможет активировать ее с помощью JavaScript.

Kotlin (Сочинение)

AndroidView(
  factory = {
      WebView(it).apply {
          settings.javaScriptEnabled = true
          if (WebViewFeature.isFeatureSupported(
                  WebViewFeature.PAYMENT_REQUEST)) {
              WebSettingsCompat.setPaymentRequestEnabled(settings, true);
          }
      }
  },
  update = {it.loadUrl(url)
  }
)

Ява

WebView webView = findViewById(R.id.webview);
WebSettings webSettings = mWebView.getSettings();
webSettings.setJavascriptEnabled(true);
if (WebViewFeature.isFeatureSupported(
        WebViewFeature.PAYMENT_REQUEST)) {
    WebSettingsCompat.setPaymentRequestEnabled(webSettings, true);
}

Шаг 4: Добавьте фильтры намерений в AndroidManifest.xml

Эти фильтры позволяют WebView обнаруживать и вызывать платежные приложения Android, используя системные намерения:

<queries>
  <intent>
    <action android:name="org.chromium.intent.action.PAY"/>
  </intent>
  <intent>
    <action android:name="org.chromium.intent.action.IS_READY_TO_PAY"/>
  </intent>
  <intent>
    <action android:name="org.chromium.intent.action.UPDATE_PAYMENT_DETAILS"/>
  </intent>
</queries>

Используйте следующие намерения в AndroidManifest.xml для поддержки ключевых функций запроса оплаты:

Шаг 5: Перестройте и опубликуйте свое приложение

После внесения этих изменений перестройте приложение и выпустите обновленную версию в Play Store.

Дополнительно: настройка проверок готовности

Помимо запуска приложений для оплаты Android, API запроса платежа позволяет веб-сайтам проверять, готов ли пользователь платить. Например, веб-сайты могут определять, настроен ли у пользователя поддерживаемый способ оплаты.

Chrome включает настройку, которая позволяет пользователям включать или отключать эту проверку. Приложения-хосты WebView могут предложить аналогичный переключатель с помощью:

WebSettingsCompat.setHasEnrolledInstrumentEnabled(WebSettings, boolean)

Этот параметр включен по умолчанию ( true ). Когда он активен, он позволяет веб-сайтам, работающим в WebView, определять, есть ли у пользователя зарегистрированный платежный инструмент.

Проверьте поддержку запроса на оплату в JavaScript

После вызова WebSettingsCompat.setPaymentRequestEnabled(webSettings, true) в Java или Kotlin интерфейс window.PaymentRequest становится доступным в JavaScript. Это можно использовать для обнаружения функций на веб-странице:

if (window.PaymentRequest) {
  // Payment Request is available.
} else {
  // Payment Request is not available.
}

Когда window.PaymentRequest доступен, веб-страница может продолжить инициировать платежную транзакцию .

Интеграция платежных приложений Android с Payment Request

Для поддержки запроса на оплату платежные приложения Android должны реагировать на определенные системные намерения и безопасно обрабатывать платежные данные. Эти руководства объясняют, как регистрировать платежные методы, внедрять платежный сервис и защищать ваше приложение:

Защитите свое приложение от несанкционированного использования

Любое приложение может вызывать платежные намерения Android org.chromium.intent.action.PAY , IS_READY_TO_PAY и UPDATE_PAYMENT_DETAILS . Приложения-хосты WebView также могут наблюдать, инициировать и перехватывать вызовы Payment Request. Поскольку WebView работает внутри процесса приложения-хоста, он не может ограничивать использование этих намерений. Вредоносные приложения могут использовать это для запуска атак Oracle .

При атаке оракула платежное приложение непреднамеренно раскрывает информацию, которую не должно раскрывать. Например, злоумышленник может использовать IS_READY_TO_PAY , чтобы узнать, какие платежные инструменты доступны пользователю.

Вам необходимо встроить в свое платежное приложение средства защиты, чтобы защититься от подобного рода злоупотреблений.

Для предотвращения злоупотреблений используйте следующие стратегии:

  • Throttle requests : Ограничьте частоту ответов вашего приложения на IS_READY_TO_PAY . Например, отвечайте только раз в 30 минут.
  • Использовать шифрование : шифровать конфиденциальные ответы, чтобы только ваши доверенные торговые серверы могли их расшифровать. Всегда выполняйте шифрование и расшифровку на стороне сервера.
  • Ограничить доступ : Ведите список разрешенных доверенных хост-приложений WebView, используя их имена пакетов и сертификаты подписи SHA256. Узнайте больше в руководстве разработчиков платежных приложений Android .