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

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

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

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

برای اجرای برنامه‌های پرداخت اندروید از طریق WebView، رابط برنامه‌نویسی کاربردی درخواست پرداخت (Payment Request API) با استفاده از Intentهای اندروید (Android intents) از سیستم پرس‌وجو می‌کند. برای پشتیبانی از این قابلیت، برنامه میزبان WebView باید این Intentها را در فایل AndroidManifest.xml خود اعلان کند.

به طور پیش‌فرض، درخواست پرداخت در وب‌ویو غیرفعال است.

برای فعال کردن آن با استفاده از WebSettingsCompat از Jetpack Webkit نسخه 1.14.0 یا بالاتر، این مراحل را دنبال کنید:

مرحله ۱: وابستگی Jetpack Webkit را اضافه کنید

کاتلین (build.gradle.kts)

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

گرووی (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" }

مرحله ۲: وارد کردن کلاس‌های مورد نیاز

این کلاس‌ها به شما امکان می‌دهند به تنظیمات WebView دسترسی داشته باشید و آنها را پیکربندی کنید و پشتیبانی از ویژگی‌ها را در زمان اجرا بررسی کنید.

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

مرحله ۳: فعال کردن درخواست پرداخت در کد 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);
}

مرحله ۴: فیلترهای intent را در AndroidManifest.xml اضافه کنید

این فیلترها به WebView اجازه می‌دهند تا برنامه‌های پرداخت اندروید را با استفاده از اهداف سیستمی کشف و فراخوانی کند:

<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>

برای پشتیبانی از ویژگی‌های کلیدی درخواست پرداخت، از intent های زیر در AndroidManifest.xml خود استفاده کنید:

مرحله ۵: برنامه خود را بازسازی و منتشر کنید

پس از ایجاد این تغییرات، برنامه خود را دوباره بسازید و یک نسخه به‌روز شده را در فروشگاه Play منتشر کنید.

اختیاری: سفارشی‌سازی بررسی‌های آمادگی

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

کروم شامل تنظیماتی است که به کاربران اجازه می‌دهد این گزینه را فعال یا غیرفعال کنند. برنامه‌های میزبان 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 در دسترس باشد، صفحه وب می‌تواند به شروع تراکنش پرداخت ادامه دهد.

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

برای پشتیبانی از درخواست پرداخت، برنامه‌های پرداخت اندروید باید به اهداف خاص سیستم پاسخ دهند و داده‌های پرداخت را به صورت ایمن مدیریت کنند. این راهنماها نحوه ثبت روش‌های پرداخت، پیاده‌سازی سرویس پرداخت و محافظت از برنامه شما را توضیح می‌دهند:

برنامه خود را در برابر سوءاستفاده ایمن کنید

هر برنامه‌ای می‌تواند intentهای پرداخت اندروید org.chromium.intent.action.PAY ، IS_READY_TO_PAY و UPDATE_PAYMENT_DETAILS را فراخوانی کند. برنامه‌های میزبان WebView همچنین می‌توانند فراخوانی‌های درخواست پرداخت را مشاهده، آغاز و رهگیری کنند. از آنجا که WebView درون فرآیند برنامه میزبان اجرا می‌شود، نمی‌تواند نحوه استفاده از این intentها را محدود کند. برنامه‌های مخرب می‌توانند از این موضوع برای راه‌اندازی حملات اوراکل سوءاستفاده کنند.

در یک حمله اوراکل، یک برنامه پرداخت ناخواسته اطلاعاتی را که نباید فاش کند، فاش می‌کند. برای مثال، یک مهاجم ممکن است از IS_READY_TO_PAY برای کشف ابزارهای پرداختی که کاربر در دسترس دارد، استفاده کند.

شما باید در برنامه پرداخت خود، تمهیداتی برای جلوگیری از این نوع سوءاستفاده‌ها ایجاد کنید.

برای کاهش سوء استفاده، از راهکارهای زیر استفاده کنید:

  • درخواست‌های Throttle : تعداد دفعات پاسخ‌دهی برنامه به IS_READY_TO_PAY را محدود کنید. برای مثال، فقط هر 30 دقیقه یک بار پاسخ دهید.
  • از رمزگذاری استفاده کنید : پاسخ‌های حساس را رمزگذاری کنید تا فقط سرورهای تجاری مورد اعتماد شما بتوانند آنها را رمزگشایی کنند. همیشه رمزگذاری و رمزگشایی را در سمت سرور انجام دهید.
  • محدود کردن دسترسی : فهرستی از برنامه‌های میزبان WebView مورد اعتماد را با استفاده از نام بسته‌ها و گواهی‌های امضای SHA256 آنها نگهداری کنید. برای اطلاعات بیشتر به راهنمای توسعه‌دهندگان برنامه‌های پرداخت اندروید مراجعه کنید.