Поддержка платежных приложений 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 .