كيفية تعديل تطبيق الدفع المستند إلى الويب ليتوافق مع 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