1. מבוא
סדנת הקוד הזו היא המשך של Google Pay API for Web 101: Basics, והיא מבוססת על הקוד שנכתב בסדנת הקוד הקודמת. כדי להשלים את סדנת הקוד הזו, חשוב להשלים קודם את סדנת הקוד הזו.
מה תלמדו
- איך מתאימים אישית את הלחצן של Google Pay
- איך מתחילים את תהליך התשלום
- איך מאשרים את סטטוס ההרשאה לתשלום
- איך מטפלים בשינויים בכתובת למשלוח
- איך מטפלים בקודי מימוש
מה נדרש
- עורך טקסט לבחירתכם לעריכת קובצי HTML ו-JavaScript.
- דפדפן האינטרנט Google Chrome או דרך אחרת לבדוק אתר מקומי.
- בסביבת הייצור, תצטרכו
merchantId
של Google Pay. ההרשמה במסוף של Google Pay ו-Wallet נמשכת רק דקה, אז כדאי לעשות את זה עכשיו.
איך עוקבים אחרי האירוע באמצעות Project IDX
2. התאמה אישית של הלחצן
זוהי סקירה כללית קצרה של ButtonOptions
. הסבר מפורט יותר זמין במסמכי התיעוד
אפשרות | צורך | ערכים |
onClick | חובה | השם של פונקציית הטיפול באירועים ב-JavaScript |
allowedPaymentMethods | אופציונלי | |
buttonColor | אופציונלי | ברירת מחדל, שחור, לבן |
buttonLocale | אופציונלי | קוד ISO 639-1 בן שתי אותיות. |
buttonRadius | אופציונלי | 0 עד 100 |
buttonRootNode | אופציונלי | HTMLDocument או ShadowRoot |
buttonSizeMode | אופציונלי | סטטי, מילוי |
buttonType | אופציונלי | book, buy, checkout, donate, order, pay, plain, subscribe |
מחפשים את השיטה 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. קריאות חזרה (callbacks) של נתוני תשלום
לקוח התשלומים מספק מנגנון לצורך רישום פונקציות לטיפול באירועים מסוימים. הבקשה הראשונה היא בקשה לאישור תשלום, והבקשה השנייה היא בקשה לשינוי פרטי התשלום.
- מחפשים את התגובה
// 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
ומחליפים את התגובה בקוד הזה. בסדנת הקוד הזו נטמיע את כל 4 הכוונות.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
יש שני נכסי משנה: אחד להודעת חזרה (callback) לאישור תשלום, והשני להודעת חזרה (callback) לשינוי של נתוני התשלום. - אם מטמיעים קריאות חזרה (callbacks),
onPaymentAuthorized
נדרש. הקריאה החוזרת הזו מופעלת כשהרשימהcallbackIntents
מכילה אתPAYMENT_AUTHORIZATION
ב-PaymentDataRequest
. - הערך
onPaymentDataChanged
הוא אופציונלי. קריאת החזרה (callback) הזו מופעלת כשרשימתcallbackIntents
מכילה את הערכיםOFFER
,SHIPPING_ADDRESS
אוSHIPPING_OPTION
בשדהPaymentDataRequest
. - מגדירים את
callbackIntents
ב-PaymentDataRequest
כדי להפעיל את שתי הפונקציות החוזרות (callbacks) ב-codelab הזה.
4. אישור תשלום
הקריאה Authorize Payments משמשת להתחלת תהליך התשלום ולאישור סטטוס הרשאת התשלום.
מחפשים את הפונקציה 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
ועליה להחזיר promise. בדוגמה הזו, הפונקציה בוחרת באופן אקראי אם להחזיר הודעה על הצלחה או שגיאה. בפרויקט, תוכלו להשתמש בהזדמנות הזו כדי לעבד את העסקה באמצעות השער באמצעות האסימון שנמצא ב-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()
חייבת להחזיר הבטחה (promise) שמפנה לאובייקטPaymentDataRequestUpdate
שמציין פרטי עסקה חדשים, אפשרויות משלוח ושגיאה לעדכון גיליון התשלומים. redemptionCodes
הם קבוצה של קודי הטבה שמוזנים בגיליון התשלומים. כולל קודים שכבר אושרו.
6. סיכום
כל הכבוד על השלמת ה-Codelab הזה! למדתם איך ...
הרצת הפרויקט
בדיקה באמצעות Google Chrome
פותחים את index.html
בדפדפן האינטרנט Google Chrome באמצעות קובץ > פתיחת קובץ… בתפריט הראשי של 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