1. مقدمة
هذا الدرس التطبيقي حول الترميز هو تكملة لدرس Google Pay API for Web 101: Basics (الجزء الأول من أساسيات Google Pay API للويب) ويعتمد على الرموز البرمجية المكتوبة في ذلك الدرس. لإكمال هذا الدليل التعليمي حول رموز البرامج، احرص على إكمال هذا الدليل أولاً.
المُعطيات
- كيفية تخصيص زر Google Pay
- كيفية بدء عملية الدفع
- كيفية الردّ على رسالة حالة تحصيل الرسوم
- كيفية التعامل مع تغييرات عنوان الشحن
- كيفية التعامل مع رموز تحصيل القيمة
المتطلبات
- محرِّر نصوص من اختيارك لتعديل ملفات HTML وJavaScript
- متصفّح الويب Google Chrome أو طريقة أخرى لاختبار موقع إلكتروني على الجهاز
- لاستخدام التطبيق في قناة الإصدار العلني، ستحتاج إلى
merchantId
في Google Pay. يستغرق التسجيل في Google Pay & Wallet Console دقيقة واحدة فقط، لذا ننصحك بإجراء ذلك الآن.
المتابعة باستخدام Project IDX
2. تخصيص الأزرار
في ما يلي نظرة عامة موجزة على ButtonOptions
. يمكنك الرجوع إلى المستندات للحصول على شرح أكثر تفصيلاً.
الخيار | الضرورة | القيم |
onClick | مطلوب | اسم معالِج أحداث JavaScript |
allowedPaymentMethods | اختياريّ | |
buttonColor | اختياريّ | التلقائي، أسود، أبيض |
buttonLocale | اختياريّ | رمز ISO 639-1 المكوّن من حرفَين |
buttonRadius | اختياريّ | من 0 إلى 100 |
buttonRootNode | اختياريّ | HTMLDocument أو ShadowRoot |
buttonSizeMode | اختياريّ | ثابت، تعبئة |
buttonType | اختياريّ | حجز، شراء، دفع، تبرع، طلب، دفع، عادي، اشتراك |
ابحث عن طريقة renderGooglePayButton()
في ملف main.js
واستبدِلها بالرمز المدرَج هنا.
function renderGooglePayButton() {
const button = getGooglePaymentsClient().createButton({
buttonColor: 'default',
buttonType: 'buy',
buttonRadius: 4,
buttonLocale: 'en',
onClick: onGooglePaymentButtonClicked,
allowedPaymentMethods: baseGooglePayRequest.allowedPaymentMethods,
});
document.getElementById(GPAY_BUTTON_CONTAINER_ID).appendChild(button);
}
شرح الرمز
- تأخذ طريقة مكتبة
createButton()
مَعلمة إعدادButtonOptions
تتيح لك تحديد الشكل والسلوك المطلوبَين للزر.
3- عمليات استدعاء بيانات الدفع
يقدّم عملاء الدفعات آلية لك لتسجيل الدوالّ التي تريد التعامل معها عند حدوث أحداث معيّنة. الأول هو تحصيل الرسوم المؤقتة من حسابك والثاني هو تغيير بيانات الدفع.
- ابحث عن التعليق
// todo: paymentDataCallbacks
فيmain.js
واستبدِله بهذا الرمز.paymentDataCallbacks: { onPaymentAuthorized: onPaymentAuthorized, onPaymentDataChanged: onPaymentDataChanged },
- بعد ذلك، ابحث عن قسم
Event Handlers
فيmain.js
وألصِق الرمز التالي في نهاية القسم.function onPaymentAuthorized(paymentData) { // We'll fill this in later } function onPaymentDataChanged(intermediatePaymentData) { // We'll fill this in later }
- أخيرًا، ابحث عن التعليق
// todo: callbackIntents
ضمنmain.js
واستبدِل التعليق بهذا الرمز. في هذا الدليل التعليمي حول الرموز البرمجية، سننفّذ جميع النوايا الأربع.callbackIntents: [ 'PAYMENT_AUTHORIZATION', 'SHIPPING_ADDRESS', 'SHIPPING_OPTION', 'OFFER', ], shippingAddressRequired: true, shippingOptionRequired: true, shippingOptionParameters: { defaultSelectedOptionId: 'shipping-001', shippingOptions: [ { id: 'shipping-001', label: '$0.00: Free shipping', description: 'Free Shipping delivered in 5 business days.' }, { id: 'shipping-002', label: '$1.99: Standard shipping', description: 'Standard shipping delivered in 3 business days.' }, { id: 'shipping-003', label: '$1000: Express shipping', description: 'Express shipping delivered in 1 business day.' }, ], },
شرح الرمز
- يحتوي الموقع
PaymentDataCallbacks
على موقعَين فرعيَّين، أحدهما لطلب إعادة الاتصال بشأن تفويض الدفع والثاني لطلب إعادة الاتصال بشأن تغيير بيانات الدفع. - في حال تنفيذ عمليات الاستدعاء، يكون العنصر
onPaymentAuthorized
مطلوبًا. يتمّ استدعاء دالة ردّ الاتصال هذه عندما تحتوي قائمةcallbackIntents
علىPAYMENT_AUTHORIZATION
فيPaymentDataRequest
. - ويكون
onPaymentDataChanged
اختياريًا. يتمّ استدعاء هذا المرجع الداعم عندما تحتوي قائمةcallbackIntents
علىOFFER
أوSHIPPING_ADDRESS
أوSHIPPING_OPTION
فيPaymentDataRequest
. - اضبط
callbackIntents
فيPaymentDataRequest
لتشغيل كلتا الدالتَين المرجعيتَين لهذا الدليل التعليمي.
4. تفويض الدفع
تُستخدَم ميزة "تفويض الدفعات" لبدء عملية الدفع والموافقة على حالة تفويض الدفع.
ابحث عن الدالة onPaymentAuthorized()
في main.js
التي أضفتها في الخطوة الأخيرة واستبدِلها بالرمز البرمجي التالي.
function onPaymentAuthorized(paymentData) {
return new Promise(function(resolve, reject) {
// Write the data to console for debugging
console.log("onPaymentAuthorized", paymentData);
// Do something here to pass token to your gateway
// To simulate the payment processing, there is a 70% chance of success
const paymentAuthorizationResult = (Math.random() > 0.3)
? {transactionState: 'SUCCESS'}
: {
transactionState: 'ERROR',
error: {
intent: 'PAYMENT_AUTHORIZATION',
message: 'Insufficient funds',
reason: 'PAYMENT_DATA_INVALID'
}
};
resolve(paymentAuthorizationResult);
});
}
شرح الرمز
- يتم استدعاء دالة ردّ الاتصال
onPaymentAuthorized()
باستخدام وسيطةPaymentData
ويجب أن تعرض عملية غير مكتملة. في هذا المثال، تختار الدالة عشوائيًا ما إذا كانت ستُعرِض رسالة نجاح أو خطأ. في مشروعك، ستستخدم هذه الفرصة لمعالجة المعاملة من خلال بوابتك باستخدام الرمز المميّز المتوفّر فيpaymentData
فيpaymentData.paymentMethodData.tokenizationData.token
.
5- تغيير بيانات الدفع
تتيح ميزة "تعديلات الأسعار الديناميكية" للتاجر تعديل خيارات الشحن ومعلومات المعاملات ديناميكيًا استنادًا إلى عنوان شحن محدّد. بالإضافة إلى ذلك، يمكنك تعديل معلومات المعاملات ديناميكيًا استنادًا إلى خيار الشحن الذي تم اختياره.
ابحث عن الدالة onPaymentDataChanged()
في main.js
التي أضفتها في الخطوة الأخيرة واستبدِلها بالرمز البرمجي التالي.
function onPaymentDataChanged(intermediatePaymentData) {
return new Promise(function(resolve, reject) {
let paymentDataRequestUpdate = {};
// Write the data to console for debugging
console.log("onPaymentDataChanged", intermediatePaymentData);
switch(intermediatePaymentData.callbackTrigger)
{
case "INITIALIZE":
// Handle initialize
break;
case "SHIPPING_ADDRESS":
// Read intermediatePaymentData.transactionInfo
// Read intermediatePaymentData.shippingAddress
// Update paymentDataRequestUpdate.newTransactionInfo
break;
case "SHIPPING_OPTION":
// Read intermediatePaymentData.transactionInfo
// Read intermediatePaymentData.shippingOptionData
// Update paymentDataRequestUpdate.newTransactionInfo
// Update paymentDataRequestUpdate.newShippingOptionParameters
break;
case "OFFER":
// Read intermediatePaymentData.offerData
// Read intermediatePaymentData.transactionInfo
// Update paymentDataRequestUpdate.newTransactionInfo
// Update paymentDataRequestUpdate.newOfferInfo
break;
default:
// Update paymentDataRequestUpdate.error
}
resolve(paymentDataRequestUpdate);
});
}
شرح الرمز
- تستخدِم الدالة
onPaymentDataChanged()
الوسيطةIntermediatePaymentData
. يتمّ استدعاء هذه الدالة عند تغيير عنوان الشحن أو خيارات الشحن في ورقة الدفع. - يجب أن تُرجع الدالة
onPaymentDataChanged()
وعدًا يحلّ عنصرPaymentDataRequestUpdate
الذي يحدّد معلومات المعاملات الجديدة وخيارات الشحن والأخطاء لتعديل جدول الدفع. redemptionCodes
هي مجموعة من الرموز الترويجية التي يتم إدخالها في جدول الدفع. يشمل الرموز التي تمت الموافقة عليها من قبل.
6- الخاتمة
تهانينا على إكمال هذا الدرس التطبيقي حول الترميز. لقد تعلمت كيفية ...
تنفيذ المشروع
الاختبار باستخدام Google Chrome
باستخدام متصفّح الويب Google Chrome، افتح index.html
باستخدام ملف > فتح ملف... من القائمة الرئيسية في Chrome. سينفِّذ Chrome main.js
عند فتح المشروع بهذه الطريقة. قد لا تسمح متصفّحات الويب الأخرى بتنفيذ JavaScript.
– أو –
الاختبار باستخدام خادم ويب محلي
إذا كان لديك Python مثبَّتًا، يمكنك تشغيل python3 -m http.server
من طلب سطر الأوامر في المجلد الجذر pay-web-101
.
$ cd /your/path/to/pay-web-101
$ python3 -m http.server
Serving HTTP on :: port 8000 (http://[::]:8000/) ...
بعد ذلك، يُرجى الانتقال إلى موقعك الإلكتروني على الرابط http://localhost:8000
.
الخطوة التالية
مراجع إضافية
- الانضمام إلى المحادثة في قناة#payments على Discord
- متابعة @GooglePayDevs على X
- مشاهدة فيديوهات ذات صلة بخدمة Google Pay على YouTube