1. לפני שמתחילים
זהו Codelab בהדרכה עצמית שמסביר איך ליצור קישוריות עם ממשקי ה-API של Stanadard Payments.
דרישות מוקדמות
- השלמת את שלבים 1 ו-2 של תהליך ההטמעה.
- אתם יכולים לארח את שרת Node.js שסופק עם סיום TLS באמצעות Google App Engine או באמצעות פתרון משלכם בדומיין שהוגדר עם Google.
- Node.js מותקן בסביבה שלכם.
הנושאים שתלמד
- איך לאמת את הקישוריות על ידי שליחת בקשה תקפה ל-Google Standard Payments echo API.
- איך לקבל, לפענח ולנתח בקשה מ-Google ל-Echo API שמתארח אצל שותף.
2. הגדרה ודרישות
הורדת האפליקציה
מורידים את הקוד לדוגמה של Node.js.
יחסי תלות בהתקנות
כדי להתקין את יחסי התלות הנדרשים, עוברים לספריית הפרויקט ומריצים את הפקודה הבאה. אם אתם משתמשים ב-App Engine, אפשר לדלג על השלב הזה.
npm install
3. הגדרת מספר החשבון של הכלי לשילוב תשלומים (PIAID)
מספר החשבון של הכלי לשילוב תשלומים (PIAID
) הוא מזהה שמשמש לזיהוי ייחודי של השילובים שלכם. לפני שתתחילו את המדריך הזה, עליכם להשלים את הדרישות המוקדמות כדי לקבל את ה-PIAID מ-Google.
- עוברים לקובץ
server.js
בספריית הפרויקט. - מגדירים את המשתנה
PIAID
כ-PIAID שהונפק לכם על ידי Google.
const PIAID = '{PAYMENT_INTEGRATOR_ACCOUNT_ID}';
4. הוספת מפתחות PGP
יוצרים את הקבצים הבאים במבנה הפרויקט ומוסיפים את מפתחות ה-PGP כדי להפעיל הצפנת PGP.
- יוצרים קובץ בשם
public.key
ומוסיפים אליו את המפתח הציבורי המאובטח ב-ASCII. - יוצרים קובץ בשם
private.key
ומוסיפים לקובץ את המפתח הפרטי המשוריין של ASCII. - יוצרים קובץ בשם
passphrase.txt
ומוסיפים את ביטוי הסיסמה הסודי לקובץ.
מצוין, עכשיו אפשר להריץ את האפליקציה.
5. הפעלת האפליקציה
כדי להפעיל את האפליקציה, מריצים את הפקודה הבאה.
$ node server.js Server listening on port 8080...
אם אתם מריצים מכונה מוגדרת מראש של App Engine, מריצים את הפקודה הזו במקום זאת.
$ gcloud app deploy
כברירת מחדל, השרת יקשיב ביציאה 8080.
6. בדיקת הקישוריות ל-Google Standard Payments API
עכשיו, לאחר שהאפליקציה פועלת, הגיע הזמן לבדוק את הקישוריות עם Google Standard Payments echo API.
מריצים את הפקודה הבאה כדי להפעיל קריאה מהמופע של האפליקציה לדוגמה לשרתים של Google. ה-API לדוגמה של האפליקציה echo API מקבל בקשת POST בטקסט ללא הצפנה. אחרי קבלת הבקשה, בקשה נוספת תישלח ל-API שמתארח ב-Google.
$ curl -X POST -H 'Content-Type: text/plain' -d 'Hello from Little Bear' https://{HOSTNAME}/echo
בקשת API מוצלחת תוביל לתגובה הבאה מ-Google.
{ "responseHeader":{ "responseTimestamp":"1606710026723" }, "clientMessage":"Hello from Little Bear", "serverMessage":"Server message." }
שלב אחר שלב
עכשיו, לאחר שבקשה נשלחה בהצלחה על ידי השרת, בואו נראה איך זה עבד.
יצירת הבקשה
buildEchoRequestBody
ב-bodyHelpers.js
יוצר את בקשת echo
שנשלחת ל-API של Google.
const message = bodyHelpers.buildEchoRequestBody(req.body);
הבקשה שנוצרה כוללת את השדה clientMessage
, וכן כמה שדות של ערכי ברירת מחדל.
{
"requestHeader":{
"protocolVersion":{
"major":1,
"minor":0,
"revision":0
},
"requestId":"ddfe0fd0-ffdc-4fcf-991a-f0611ec83970",
"requestTimestamp":"1606715389040"
},
"clientMessage":"Hello from Little Bear"
}
הצפנת הבקשה
כל הבקשות מוצפנות ומקודדות בכתובת base64url. בדוגמה הזו, crypto.js
מכיל שיטות עזר שמבצעות הצפנה ופענוח בשבילכם. השיטה crypto.encrypt
מבצעת הצפנה באמצעות המפתח הציבורי של Google.
const encrypted = await crypto.encrypt(message);
שליחת בקשת POST בקידוד base64url
ההודעה המוצפנת מקודדת ב-base64url באמצעות חבילת base64url ונשלחת דרך בקשת POST באמצעות axios.
const response = await axios.post(ECHO_URL, base64url(encrypted), AXIOS_CONFIG);
פענוח והחזרת התשובה
התגובה של Google להצלחה היא מקודדת ומצפנת ב-base64url, כך שצריך גם לפענח ולפענח אותה לפני שאפשר להחזיר אותה כטקסט ללא הצפנה.
const encryptedMessage = base64url.toBuffer(response.data);
const decryptedResponse = await crypto.decrypt(encryptedMessage);
res.status(200);
res.send(decryptedResponse);
7. בדיקת הקישוריות של Partner API
כדי לבדוק את קישוריות ה-API של הד השותף, Google תשלח בקשה ל-echo API באירוח שותף.
כשתהיו מוכנים, תוכלו לפנות לאיש הקשר שלכם ב-Google כדי להפעיל את הבקשה הזו מ-Google.
בדיקת ההד מסתיימת אם אפשר לקרוא את בקשת ההד הנכנסת מ-Google ולהגיב באמצעות תגובת הד חוקית.
שלב אחר שלב
עכשיו, לאחר שבקשה התקבלה וטופלה על ידי השרת, בואו נראה איך זה עבד.
פענוח הבקשה ב-Base64url
כשמקבלים את הבקשה, קודם צריך לפענח אותה באמצעות base64url.
const encryptedRequest = base64url.toBuffer(req.body);
פענוח הבקשה
אחרי שמפענחים את הבקשה ב-base64url, צריך לפענח אותה.
const decryptedRequest = await crypto.decrypt(encryptedRequest);
קבלת הבקשה
Google שלחה עומס נתונים של הודעה שדומה לזה שבהמשך, אחרי פענוח ופענוח הצפנה.
{ "requestHeader": { "protocolVersion": { "major": 1 }, "requestId": "G1MQ0YERJ0Q7LPM", "requestTimestamp": { "epochMillis":1481899949606 }, "paymentIntegratorAccountId": "abcdef123456" }, "clientMessage": "echo Me" }
יצירת התשובה
אחרי שקוראים את בקשת ה-echo הנכנסת, אפשר ליצור את התגובה.
clientMessage = JSON.parse(decryptedRequest).clientMessage;
responseBody = bodyHelpers.buildEchoResponseBody(clientMessage);
התשובה כוללת את ההודעה מ-Google, וגם חותמת זמן והודעה מהשרת.
{ "responseHeader": { "responseTimestamp": { "epochMillis":1481899950236 } }, "clientMessage": "echo Me", "serverMessage": "Debug ID 12345" }
הצפנה וקידוד base64 של התגובה
אחרי שיוצרים את הודעת התגובה, אפשר להצפין אותה ולקודד אותה ב-base64url.
encryptedResponse = await crypto.encrypt(responseBody);
const encodedResponse = base64url(encryptedResponse);
החזרת התגובה
ולבסוף, אתם מוכנים לשלוח את התגובה של ה-POST.
res.send(encodedResponse);
8. מעולה!
בקודלאב הזה, יצרתם חיבור ל-Echo API.