إدارة معاملات الدفع مع عامل الخدمات

كيفية تعديل تطبيق الدفع المستند إلى الويب ليتوافق مع Web Payments وتوفير تجربة مستخدم أفضل للعملاء

بعد تسجيل تطبيق الدفع، ستكون مستعدًا لقبول طلبات الدفع من التجّار. توضّح هذه المشاركة كيفية تنظيم معاملة دفع من عامل الخدمة أثناء وقت التشغيل (أي عندما يتم عرض نافذة ويتفاعل المستخدم معها).

تنظيم معاملات الدفع باستخدام عامل الخدمة
تنظيم معاملات الدفع باستخدام عامل الخدمة

تشير "تغييرات مَعلمات الدفع في وقت التشغيل" إلى مجموعة من الأحداث التي تتيح للتاجر ومعالج الدفع تبادل الرسائل أثناء تفاعل المستخدم مع معالج الدفع. مزيد من المعلومات حول التعامل مع معلومات الدفع الاختيارية باستخدام عامل الخدمة

تلقّي حدث طلب دفع من التاجر

عندما يختار العميل الدفع باستخدام تطبيق الدفع المستند إلى الويب ويستدعي التاجر PaymentRequest.show()، سيتلقّى عامل الخدمة حدث paymentrequest. أضِف أداة معالجة الأحداث إلى عامل الخدمة لتسجيل الحدث والاستعداد للإجراء التالي.

[payment handler] service-worker.js:


let payment_request_event;
let resolver;
let client;

// `self` is the global object in service worker
self.addEventListener('paymentrequest', async e => {
  if (payment_request_event) {
    // If there's an ongoing payment transaction, reject it.
    resolver.reject();
  }
  // Preserve the event for future use
  payment_request_event = e;

يحتوي PaymentRequestEvent المحفوظ على معلومات مهمة حول هذه المعاملة:

اسم السمة الوصف
topOrigin سلسلة تشير إلى مصدر صفحة الويب ذات المستوى الأعلى (عادةً التاجر المستفيد). يُستخدَم هذا الحقل لتحديد مصدر التاجر.
paymentRequestOrigin سلسلة تشير إلى مصدر أداة الاستدعاء. يمكن أن يكون هذا المعرّف هو نفسه المعرّف topOrigin عندما يستدعي التاجر Payment Request API مباشرةً، ولكن قد يكون مختلفًا إذا تم استدعاء واجهة برمجة التطبيقات من داخل إطار iframe بواسطة جهة خارجية، مثل بوابة الدفع.
paymentRequestId تمثّل السمة id السمة PaymentDetailsInit المقدَّمة إلى Payment Request API. إذا لم يقدّم التاجر معرّفًا، سيوفّر المتصفّح معرّفًا يتم إنشاؤه تلقائيًا.
methodData البيانات الخاصة بطريقة الدفع التي يقدّمها التاجر كجزء من PaymentMethodData استخدِم هذا الحقل لتحديد تفاصيل عملية الدفع.
total إجمالي المبلغ الذي يقدّمه التاجر كجزء من PaymentDetailsInit. استخدِم هذا الحقل لإنشاء واجهة مستخدم تتيح للعميل معرفة المبلغ الإجمالي المطلوب دفعه.
instrumentKey مفتاح الآلة الموسيقية الذي اختاره المستخدم تعكس هذه القيمة instrumentKey التي قدّمتها مسبقًا. تشير السلسلة الفارغة إلى أنّ المستخدم لم يحدّد أي أدوات.

افتح نافذة معالج الدفع لعرض الواجهة الأمامية لتطبيق الدفع المستند إلى الويب

عند تلقّي حدث paymentrequest، يمكن لتطبيق الدفع فتح نافذة معالج الدفع من خلال استدعاء PaymentRequestEvent.openWindow(). ستعرض نافذة معالج الدفع واجهة تطبيق الدفع للعملاء حيث يمكنهم إثبات ملكية الحساب واختيار عنوان الشحن وخياراته والموافقة على الدفع. سنتناول كيفية كتابة رمز الواجهة الأمامية في مقالة التعامل مع الدفعات على الواجهة الأمامية للدفع (ستتوفّر قريبًا).

مسار إتمام الدفع باستخدام تطبيق دفع مستنِد إلى الويب

مرِّر وعدًا محفوظًا إلى PaymentRequestEvent.respondWith() حتى تتمكّن من تنفيذه بنتيجة دفع في المستقبل.

[payment handler] service-worker.js:


self.addEventListener('paymentrequest', async e => {

  // Retain a promise for future resolution
  // Polyfill for PromiseResolver is provided below.
  resolver = new PromiseResolver();

  // Pass a promise that resolves when payment is done.
  e.respondWith(resolver.promise);
  // Open the checkout page.
  try {
    // Open the window and preserve the client
    client = await e.openWindow(checkoutURL);
    if (!client) {
      // Reject if the window fails to open
      throw