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

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

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

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

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

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

Чтобы включить эту функцию с помощью WebSettingsCompat из Jetpack Webkit версии 1.14.0 или выше, выполните следующие действия:

Шаг 1: Добавьте зависимость Jetpack Webkit.

Kotlin (build.gradle.kts)

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

Groovy (build.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 (Compose)

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

Java

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 с функцией запроса платежей.

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

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

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

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

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

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

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