איך יוצרים קישוריות לממשקי API של Payments ב-Node.js

1. לפני שמתחילים

זהו Codelab בהדרכה עצמית שתדריך אותו כיצד ליצור קישוריות עם ממשקי ה-API של Stanadard Payments.

דרישות מוקדמות

  • השלמתם את שלבים 1 ו-2 של תהליך ההטמעה.
  • אתם יכולים לארח את שרת Node.js שסופק עם סיום TLS (אבטחת שכבת התעבורה) באמצעות Google App Engine או פתרון משלכם בדומיין שהוגדר על ידי Google.
  • Node.js מותקן בסביבה שלכם.

הנושאים שתלמד

  • איך מאמתים קישוריות על ידי שליחת בקשה תקפה ל-Google Standard Payments echo API.
  • איך לקבל, לפענח ולנתח בקשה מ-Google ל-Partner Hosted Echo API.

2. הגדרה ודרישות

הורדת האפליקציה

מורידים את קוד הדוגמה של Node.js.

יחסי תלות של התקנות

עוברים לספריית הפרויקט ומריצים את הפקודה הבאה כדי להתקין את יחסי התלות הנדרשים. אם אתם משתמשים ב-App Engine, אתם יכולים לדלג על השלב הזה.

npm install

3. הגדרת מספר חשבון של כלי לשילוב תשלומים (PIAID)

מספר החשבון של כלי לשילוב תשלומים (PIAID) הוא מזהה שמשמש לזיהוי ייחודי של השילובים שלכם. ה-PIAID שלכם היה אמור להישלח מ-Google על ידי השלמת הדרישות המוקדמות לפני שתתחילו את המדריך הזה.

  1. עוברים לקובץ server.js בספריית הפרויקט.
  2. מגדירים את המשתנה PIAID ל-PIAID שהונפק לכם על-ידי Google.
const PIAID = '{PAYMENT_INTEGRATOR_ACCOUNT_ID}';

4. הוספה של מפתחות PGP

כדי להפעיל הצפנת PGP, צריך ליצור את הקבצים הבאים במבנה הפרויקט ולהוסיף את מפתחות ה-PGP.

  • יוצרים קובץ בשם public.key ומוסיפים לקובץ את המפתח הציבורי המשוריין מסוג ASCII.
  • יוצרים קובץ בשם private.key ומוסיפים לקובץ את המפתח הפרטי משוריין מסוג ASCII.
  • יוצרים קובץ בשם passphrase.txt ומוסיפים לקובץ את ביטוי הסיסמה הסודי.

הוספה של מפתחות PGP

נהדר, עכשיו הכול מוכן להפעלת האפליקציה!

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 של ההד של האפליקציה לדוגמה מקבל בקשת 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. בדיקת קישוריות ל-API של שותף

כדי לבדוק את קישוריות ה-API של ההד של השותף, Google תשלח בקשה ל-echo API באירוח שותף.

כשיתאים לך, צריך לפנות לאיש הקשר שלך ב-Google כדי להפעיל את הבקשה הזו מ-Google.

בדיקת ההד תסתיים כשאפשר יהיה לקרוא את בקשת ההד הנכנס מ-Google ולהגיב עם תגובת הד חוקית.

שלב אחר שלב

עכשיו, אחרי שבקשה כלשהי התקבלה בהצלחה וטופלה על ידי השרת שלכם, הגיע הזמן לבדוק איך זה עובד.

פענוח הבקשה ב-Base64url

כשהבקשה תתקבל, תצטרכו קודם לפענח אותה ב-base64url.

const encryptedRequest = base64url.toBuffer(req.body);

פענוח הבקשה

אחרי שמקודדים את הבקשה באמצעות base64url, צריך לפענח אותה.

const decryptedRequest = await crypto.decrypt(encryptedRequest);

קבלת הבקשה

לאחר פענוח ופענוח של ההודעה, Google שלחה מטען ייעודי (payload) של הודעות שדומה לזה הבא.

{
  "requestHeader": {
    "protocolVersion": {
      "major": 1
    },
    "requestId": "G1MQ0YERJ0Q7LPM",
    "requestTimestamp": {
      "epochMillis":1481899949606
    },
    "paymentIntegratorAccountId": "abcdef123456"
  },
  "clientMessage": "echo Me"
}

יצירת התגובה

לאחר שתקראו את בקשת ההד הנכנס, תוכלו להתחיל ליצור את התגובה.

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. כל הכבוד!

ב-Codelab הזה השגת בהצלחה את הקישוריות עם Echo API!