Вы можете использовать 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 :
-
org.chromium.intent.action.PAY: Позволяет WebView вызывать платежные приложения Android и получать ответы о платежах. Подробнее см. в руководстве разработчика платежных приложений Android . -
org.chromium.intent.action.IS_READY_TO_PAY: Позволяет веб-сайтам проверять, настроен ли у пользователя поддерживаемый способ оплаты. Подробнее см. в руководстве для разработчиков платежных приложений Android. -
org.chromium.intent.action.UPDATE_PAYMENT_DETAILS: Поддерживает динамические обновления, например, когда пользователь меняет свой адрес доставки или опцию в платежном приложении. Подробнее см. в разделе «Предоставление информации о доставке и контактных данных из платежного приложения Android» .
Шаг 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 : Создание и настройка платежного приложения, включая обработку интентов и проверку вызывающего приложения.
- Настройка способа оплаты : Зарегистрируйте свой способ оплаты и определите его возможности.
Защитите свое приложение от неправомерного использования.
Любое приложение может вызывать платежные интенты 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 .