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

۱. قبل از شروع

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

پیش‌نیازها

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

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

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

۲. تنظیمات و الزامات

دانلود اپلیکیشن

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

نصب وابستگی‌ها

به دایرکتوری پروژه بروید و دستور زیر را برای نصب وابستگی‌های مورد نیاز اجرا کنید. اگر از App Engine استفاده می‌کنید، می‌توانید از این مرحله صرف نظر کنید.

npm install

۳. شناسه حساب یکپارچه‌ساز پرداخت (PIAID) را پیکربندی کنید

شناسه حساب یکپارچه‌ساز پرداخت ( PIAID ) شناسه‌ای است که برای شناسایی منحصر به فرد یکپارچه‌سازی‌های شما استفاده می‌شود. قبل از شروع این آموزش، باید با تکمیل پیش‌نیازها، PIAID خود را از گوگل دریافت کرده باشید.

  1. به فایل server.js در دایرکتوری پروژه بروید.
  2. متغیر PIAID روی PIAID که توسط گوگل برای شما صادر شده است، تنظیم کنید.
const PIAID = '{PAYMENT_INTEGRATOR_ACCOUNT_ID}';

۴. کلیدهای PGP را اضافه کنید

فایل‌های زیر را در ساختار پروژه ایجاد کنید و کلیدهای PGP خود را برای فعال کردن رمزگذاری PGP اضافه کنید.

  • فایلی با نام public.key ایجاد کنید و کلید عمومی زرهی ASCII را به فایل اضافه کنید.
  • فایلی با نام private.key ایجاد کنید و کلید خصوصی زرهی ASCII را به فایل اضافه کنید.
  • یک فایل با نام passphrase.txt ایجاد کنید و عبارت عبور مخفی را به فایل اضافه کنید.

افزودن کلیدهای PGP

عالی، شما آماده اجرای برنامه هستید!

۵. برنامه را اجرا کنید

برای شروع برنامه، دستور زیر را اجرا کنید.

$ node server.js
Server listening on port 8080...

اگر از یک نمونه از پیش پیکربندی شده App Engine استفاده می‌کنید، این دستور را اجرا کنید.

$ gcloud app deploy

به طور پیش‌فرض، سرور به پورت ۸۰۸۰ گوش می‌دهد.

۶. اتصال API پرداخت‌های استاندارد گوگل را آزمایش کنید

اکنون که برنامه در حال اجرا است، زمان آن رسیده است که اتصال را با API echo مربوط به Google Standard Payments آزمایش کنیم.

دستور زیر را برای شروع فراخوانی از نمونه برنامه نمونه خود به سرورهای گوگل اجرا کنید. API برنامه نمونه echo یک درخواست POST را به صورت متن ساده می‌پذیرد. پس از دریافت درخواست، درخواست بعدی به API میزبانی شده توسط گوگل ارسال می‌شود.

  $ curl -X POST -H 'Content-Type: text/plain' -d 'Hello from Little Bear' https://{HOSTNAME}/echo

یک درخواست API موفق منجر به پاسخ زیر از گوگل خواهد شد.

{
   "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);

رمزگشایی و بازگرداندن پاسخ

پاسخ موفقیت‌آمیز گوگل به صورت base64url کدگذاری و رمزگذاری شده است، بنابراین قبل از اینکه بتواند به صورت متن ساده برگردانده شود، باید رمزگشایی و رمزگشایی نیز انجام شود.

const encryptedMessage = base64url.toBuffer(response.data);
const decryptedResponse = await crypto.decrypt(encryptedMessage);
res.status(200);
res.send(decryptedResponse);

۷. اتصال API شریک تست

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

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

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

گام به گام

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

رمزگشایی درخواست از طریق 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);

این پاسخ شامل پیام دریافتی از گوگل، و همچنین یک مهر زمانی و پیام دریافتی از سرور است.

{
  "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);

۸. تبریک می‌گویم!

در این آزمایشگاه کد، شما با موفقیت اتصال با Echo API را برقرار کردید!