1. מבוא
מה תפַתחו
בסיום ה-codelab הזה, יהיה לכם אתר עם מינימום תכונות שמשולב בו Google Pay. הפרויקט הזה מאחזר טוקן תשלום שאפשר לשלוח לספק שירותי תשלומים לצורך עיבוד.
מה תלמדו
- איך טוענים ומגדירים את Google Pay API
- איך להציג את לחצן Google Pay ולטפל בקליקים
- איך מבקשים טוקן תשלום מ-Google Pay
הדרישות
- עורך טקסט לבחירתכם לעריכת קובצי HTML ו-JavaScript.
- דפדפן האינטרנט Google Chrome, או דרך אחרת לבדיקת אתר מקומי.
- לסביבת הייצור, תצטרכו Google Pay
merchantId. ההרשמה ב-Google Pay & Wallet Console אורכת רק דקה, אז כדאי לטפל בזה עכשיו.
2. יצירת דף HTML
יצירת קבצים בפרויקט
- יוצרים במחשב תיקייה בשם
gpay-web-101ובתוכה יוצרים שני קובצי טקסט ריקים בשמותindex.htmlו-main.js.מבנה התיקיות צריך להיראות כך:gpay-web-101/ index.html main.js
- פותחים את
index.htmlבסביבת הפיתוח המשולבת (IDE) הרצויה ומוסיפים את הקוד הבא:<!doctype html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Google Pay API for Web 101</title> </head> <body> <div id="gpay-container"></div> <p>Transaction info and errors will be logged to the console.</p> <script type="text/javascript" src="main.js"></script> <script async src="https://pay.google.com/gp/p/js/pay.js" onload="onGooglePayLoaded()"> </script> </body> </html>
הסבר על הקוד
- תג DIV ריק נוסף לדף עם המזהה
gpay-container. רכיב ה-DOM הזה יהיה רכיב האב שבו יתווסף לחצן Google Pay. אפשר למקם את הרכיב הזה בפריסת האתר במקום המתאים. - תג הסקריפט
main.jsממוקם ב-DOM אחרי הרכיבgpay-container. הפעולה הזו נדרשת כדי לוודא שהתג DIV של מאגר התגים נמצא ב-DOM לפני שהשאילתותmain.jsמחפשות אותו. בנוסף, הסקריפט הוא סינכרוני כדי להבטיח שהוא נטען לפני ש-pay.jsנטען, כי השיטהonGooglePayLoaded()צריכה להתקיים לפני השלמת הטעינה. יש דרכים אחרות להשיג את אותו האפקט, אבל לא נדון בהן כאן. - לבסוף, התג
pay.jsנטען באופן אסינכרוני ומגדיר אתonGooglePayLoaded()כמטפל שלonload. השיטה הזו תוגדר ב-main.js.
3. הגדרת Google Pay
בקשת תשלום ב-Google Pay דורשת אובייקט בקשה. האובייקט שמוגדר כאן כ-baseGooglePayRequest מכיל את ההגדרות המשותפות המינימליות לכל הבקשות. הגדרות נוספות יתווספו בהתאם לבקשה שהוגשה, ונבדוק אותן ב-codelab הזה.
מוסיפים את קבועי ההגדרות של Google Pay לקובץ main.js הריק:
//=============================================================================
// Configuration
//=============================================================================
// The DOM element that the Google Pay button will be rendered into
const GPAY_BUTTON_CONTAINER_ID = 'gpay-container';
// Update the `merchantId` and `merchantName` properties with your own values.
// Your real info is required when the environment is `PRODUCTION`.
const merchantInfo = {
merchantId: '12345678901234567890',
merchantName: 'Example Merchant'
};
// This is the base configuration for all Google Pay payment data requests.
const baseGooglePayRequest = {
apiVersion: 2,
apiVersionMinor: 0,
allowedPaymentMethods: [
{
type: 'CARD',
parameters: {
allowedAuthMethods: [
"PAN_ONLY", "CRYPTOGRAM_3DS"
],
allowedCardNetworks: [
"AMEX", "DISCOVER", "INTERAC", "JCB", "MASTERCARD", "VISA"
]
},
tokenizationSpecification: {
type: 'PAYMENT_GATEWAY',
parameters: {
gateway: 'example',
gatewayMerchantId: 'exampleGatewayMerchantId'
}
}
}
],
merchantInfo
};
// Prevent accidental edits to the base configuration. Mutations will be
// handled by cloning the config using deepCopy() and modifying the copy.
Object.freeze(baseGooglePayRequest);
הסבר על הקוד
- מגדירים את המשתנה הקבוע
GPAY_BUTTON_CONTAINER_IDלמזהה של רכיב ה-DOM שמשמש בדף ה-HTML כמאגר האב של לחצן Google Pay. - יוצרים את אובייקט ההגדרות
baseGooglePayRequestעם ההגדרות הרלוונטיות לאפליקציה. אפשר למצוא את כל המאפיינים והערכים במסמכי העזר. יכול להיות שהערכים שמוצגים בדוגמה הזו לא יתאימו בדיוק לצרכים שלכם, לכן חשוב לבדוק אותם בקפידה. - מעדכנים את המאפיינים
merchantIdו-merchantNameעם הערכים שלכם. השדות האלה הם אופציונליים כשהסביבה היאTEST.
משאבים
- פוסט בבלוג: רוצים תהליך תשלום חלק יותר עם Google Pay? הגדרת אפשרויות התשלום
- הפניית API: מאמרי העזרה בנושא אובייקטים של בקשות ב-Google Pay API
- API Reference: למידע נוסף על שיטות ההרשאה המותרות, רשתות הכרטיסים המותרות ומפרטי הטוקניזציה, כולל ערך השער המתאים, אפשר לעיין במאמר
PaymentMethod.
4. הוספת לקוח תשלומים
לקוח תשלומים משמש לשליחת בקשות תשלום ולרישום של קריאות חוזרות (callback). ב-codelab הזה נבצע רק בקשות תשלום. בנוסף, אפשר להגדיר את PaymentDataCallbacks כך שיטפל במקרים שבהם פרטי התשלום או ההרשאה השתנו. עם זאת, הנושאים המתקדמים האלה לא נכללים ב-codelab הזה.
מוסיפים את קוד הלקוח הזה לתחתית של main.js:
//=============================================================================
// Google Payments client singleton
//=============================================================================
let paymentsClient = null;
function getGooglePaymentsClient() {
if (paymentsClient === null) {
paymentsClient = new google.payments.api.PaymentsClient({
environment: 'TEST',
merchantInfo,
// todo: paymentDataCallbacks (codelab pay-web-201)
});
}
return paymentsClient;
}
הסבר על הקוד
- המשתנה
paymentsClientיכיל את המופע של הלקוח אחרי שהוא ייווצר. הקוד שלנו לא ניגש למשתנה ישירות, אלא תמיד באמצעות ה-methodgetGooglePaymentsClient(). - השיטה
getGooglePaymentsClient()בודקת אם לקוח כבר נוצר ומחזירה את המופע הזה. אם לא נוצר מופע קודם, נוצר מופע חדש, הוא נשמר ומוחזר. השיטה הזו מבטיחה שרק מופע אחד נוצר ומשמש לאורך משך החיים של הסקריפט. - כדי ליצור מופע של לקוח, מפעילים את השיטה
PaymentsClient(). בדוגמה הזו, אנחנו אומרים ללקוח שאנחנו בסביבתTEST. האפשרות השנייה היאPRODUCTION. עם זאת,TESTהיא ברירת המחדל ואפשר להשמיט אותה.
5. הוספת עוזרים
פונקציות העזר הבאות משמשות בהמשך הסקריפט, והן נוספו רק כדי לשפר את קריאות הקוד ואת יכולת התחזוקה שלו.
מוסיפים את פונקציות העזר לתחתית של main.js:
//=============================================================================
// Helpers
//=============================================================================
const deepCopy = (obj) => JSON.parse(JSON.stringify(obj));
function renderGooglePayButton() {
const button = getGooglePaymentsClient().createButton({
onClick: onGooglePaymentButtonClicked
});
document.getElementById(GPAY_BUTTON_CONTAINER_ID).appendChild(button);
}
הסבר על הקוד
-
deepCopy()הוא כלי שמשתמש בסריאליזציה ובדה-סריאליזציה של JSON כדי ליצור עותק עמוק של האובייקט שסופק. זו דרך נוחה לשכפל אובייקטים בלי לדאוג לגבי הפניות משותפות. -
renderGooglePayButton()הוא כלי שמפעיל את שיטת הספרייהcreateButton()כדי להציג את לחצן Google Pay. הארגומנט שמועבר הוא קבוצה של אפשרויות שמגדירות את אופן הפעולה של הלחצן, כמו רישום הפונקציהonGooglePaymentButtonClicked()לטיפול בלחיצות על הלחצן.
6. הוספת גורמים שמטפלים באירועים
בסקריפט הזה אנחנו מגדירים שני גורמים שמטפלים באירועים. הפונקציה הראשונה מופעלת כשהספרייה pay.js מסיימת להיטען, והפונקציה השנייה מופעלת כשלוחצים על הלחצן של Google Pay.
מוסיפים את הגורמים שמטפלים באירועים לתחתית של main.js:
//=============================================================================
// Event Handlers
//=============================================================================
function onGooglePayLoaded() {
const req = deepCopy(baseGooglePayRequest);
getGooglePaymentsClient()
.isReadyToPay(req)
.then(function(res) {
if (res.result) {
renderGooglePayButton();
} else {
console.log("Google Pay is not ready for this user.");
}
})
.catch(console.error);
}
function onGooglePaymentButtonClicked() {
// Create a new request data object for this request
const req = {
...deepCopy(baseGooglePayRequest),
transactionInfo: {
countryCode: 'US',
currencyCode: 'USD',
totalPriceStatus: 'FINAL',
totalPrice: (Math.random() * 999 + 1).toFixed(2),
},
// todo: callbackIntents (codelab gpay-web-201)
};
// Write request object to console for debugging
console.log(req);
getGooglePaymentsClient()
.loadPaymentData(req)
.then(function (res) {
// Write response object to console for debugging
console.log(res);
// @todo pass payment token to your gateway to process payment
// @note DO NOT save the payment credentials for future transactions
paymentToken = res.paymentMethodData.tokenizationData.token;
})
.catch(console.error);
}
הסבר על הקוד
- הפונקציה
onGooglePayLoaded()מופעלת כשסקריפטpay.jsסיים להיטען, כפי שמוגדר בקובץ ה-HTML. השיטהisReadyToPay()מופעלת כדי לקבוע אם להציג את לחצן Google Pay או לא. אם הצרכן מוכן לשלם (כלומר, הוא הוסיף אמצעי תשלום ל-Google Wallet), מוצג לחצן Google Pay. - הפונקציה
onGooglePaymentButtonClicked()מופעלת כשלוחצים על לחצן Google Pay. השיטה הזו מפעילה את שיטת הספרייהloadPaymentData()שמשמשת לאחזור של טוקן תשלום. אחרי שיוצרים את אסימון התשלום, שולחים אותו לשער התשלומים כדי לעבד את העסקה. transactionInfoמתאר את העסקה שאמורה לעבור עיבוד בלחיצה על הלחצן הזה.
7. סיכום
כל הכבוד, סיימתם את ה-Codelab הזה! למדתם איך לשלב את Google Pay API באתר.
הרצת הפרויקט
בדיקה באמצעות 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