نحوه برقراری ارتباط با Payments API در Node.js

1. قبل از شروع

این یک کد آزمایشگاهی است که خود هدایت می‌شود که نحوه برقراری ارتباط با APIهای Stanadard Payments را توضیح می‌دهد.

پیش نیازها

  • شما مراحل 1 و 2 فرآیند پیاده سازی را تکمیل کرده اید.
  • می‌توانید سرور Node.js ارائه‌شده را با خاتمه TLS با استفاده از Google App Engine یا راه‌حل خودتان در دامنه پیکربندی‌شده با Google میزبانی کنید.
  • Node.js روی محیط شما نصب شده است.

آنچه شما یاد خواهید گرفت

  • نحوه تأیید اتصال با ارسال یک درخواست معتبر به Google Standard Payments echo API.
  • نحوه دریافت، رمزگشایی و تجزیه درخواست از Google به API Echo میزبانی شده شریک.

2. راه اندازی و الزامات

برنامه را دانلود کنید

کد نمونه Node.js را دانلود کنید.

Dependencies را نصب کنید

به دایرکتوری پروژه بروید و دستور زیر را برای نصب وابستگی های مورد نیاز اجرا کنید. اگر از 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 آغاز شود. نمونه برنامه 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 گوگل را می سازد.

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 رمزگذاری را با استفاده از کلید عمومی گوگل انجام می دهد.

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 شریک

برای آزمایش اتصال echo API شریک، Google درخواستی به API echo میزبانی شده شریک ارسال می‌کند.

وقتی آماده شدید، لطفاً با نقطه تماس Google خود کار کنید تا این درخواست از طرف Google انجام شود.

آزمایش اکو زمانی کامل می شود که بتوانید درخواست اکو ورودی از Google را بخوانید و با یک پاسخ اکو معتبر پاسخ دهید.

گام به گام

اکنون که یک درخواست با موفقیت دریافت و توسط سرور شما مدیریت شده است، بیایید نحوه عملکرد آن را بررسی کنیم.

Base64url درخواست را رمزگشایی می کند

وقتی درخواست را دریافت کردید، ابتدا باید آن را در base64url رمزگشایی کنید.

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

درخواست را رمزگشایی کنید

هنگامی که base64url درخواست را رمزگشایی کردید، باید آن را رمزگشایی کنید.

const decryptedRequest = await crypto.decrypt(encryptedRequest);

درخواست را دریافت کنید

گوگل پس از رمزگشایی و رمزگشایی پیامی مشابه پیام زیر ارسال کرد.

{
  "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. تبریک می گویم!

در این کد لبه، شما با موفقیت با Echo API ارتباط برقرار کرده اید!