با استفاده از API درخواست پرداخت، از برنامه‌های پرداخت Android در WebView پشتیبانی کنید

می‌توانید از API درخواست پرداخت برای راه‌اندازی برنامه‌های پرداخت Android از وب‌سایت‌هایی که در داخل WebView اجرا می‌شوند استفاده کنید. این با استفاده از همان JavaScript API که قبلاً در Chrome موجود است، کار می‌کند.

این ویژگی از نسخه 136 WebView که معمولاً با Chrome 136 ارائه می‌شود در دسترس است.

درخواست پرداخت را در برنامه های میزبان WebView تنظیم کنید

برای راه‌اندازی برنامه‌های پرداخت Android از 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 (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 شما روشن می کند و اطمینان می دهد که سایت می تواند آن را با استفاده از جاوا اسکریپت فعال کند.

این مرحله ویژگی درخواست پرداخت را در WebView شما روشن می کند و اطمینان می دهد که سایت می تواند آن را با استفاده از جاوا اسکریپت فعال کند.

کاتلین (نوشتن)

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 منتشر کنید.

اختیاری: بررسی های آمادگی را سفارشی کنید

علاوه بر راه‌اندازی برنامه‌های پرداخت Android، API درخواست پرداخت به وب‌سایت‌ها اجازه می‌دهد بررسی کنند که آیا کاربر آماده پرداخت است یا خیر. برای مثال، وب‌سایت‌ها می‌توانند تشخیص دهند که آیا کاربر یک روش پرداخت پشتیبانی شده تنظیم کرده است یا خیر.

Chrome دارای تنظیماتی است که به کاربران امکان می‌دهد این بررسی را فعال یا غیرفعال کنند. برنامه های میزبان WebView می توانند با استفاده از موارد زیر تغییر مشابهی ارائه دهند:

WebSettingsCompat.setHasEnrolledInstrumentEnabled(WebSettings, boolean)

این تنظیم به طور پیش فرض فعال است ( true ). وقتی فعال است، به وب‌سایت‌هایی که در WebView اجرا می‌شوند اجازه می‌دهد تشخیص دهند که آیا کاربر یک ابزار پرداخت ثبت‌نام کرده است یا خیر.

پشتیبانی درخواست پرداخت را در جاوا اسکریپت بررسی کنید

پس از فراخوانی WebSettingsCompat.setPaymentRequestEnabled(webSettings, true) در جاوا یا کاتلین، رابط window.PaymentRequest در جاوا اسکریپت در دسترس قرار می گیرد. این می تواند برای تشخیص ویژگی در صفحه وب استفاده شود:

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

هنگامی که window.PaymentRequest در دسترس است، صفحه وب می تواند به شروع تراکنش پرداخت ادامه دهد.

برنامه های پرداخت اندروید را با درخواست پرداخت ادغام کنید

برای پشتیبانی از درخواست پرداخت، برنامه‌های پرداخت 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 دقیقه یک بار پاسخ دهید.
  • از رمزگذاری استفاده کنید : پاسخ های حساس را رمزگذاری کنید تا فقط سرورهای تجاری مورد اعتماد شما بتوانند آنها را رمزگشایی کنند. همیشه رمزگذاری و رمزگشایی را در سمت سرور انجام دهید.
  • محدود کردن دسترسی : با استفاده از نام بسته‌ها و گواهی‌های امضای SHA256، فهرست مجاز برنامه‌های میزبان WebView مورد اعتماد را حفظ کنید. در راهنمای توسعه دهندگان برنامه پرداخت Android بیشتر بیاموزید.