نحوه برقراری ارتباط با Google API در جاوا

1. قبل از شروع

پیش نیازها

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

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

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

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

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

کد نمونه جاوا را دانلود کنید.

نمای کلی ساختار برنامه

کد نمونه جاوا با APIهای پرداخت استاندارد Google یکپارچه می شود. ساختار پروژه کد نمونه شامل یک دایرکتوری outbound و همچنین یک دایرکتوری inbound است تا درخواست پژواک ورودی از Google به شریک و درخواست خروجی از اجرای شرکا به Google را منعکس کند.

هر دوی این دایرکتوری ها دارای یک سلسله مراتب مشابه در بسته بندی به صورت لایه هستند. سه لایه اصلی controller ، service و domain هستند.

  • بسته controller حاوی APIها است.
  • بسته service مسئولیت منطق تجاری، رمزگذاری base64url و رمزگذاری را بر عهده دارد.
  • بسته domain حاوی POJOs است.

Dependencies را نصب کنید

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

./mvnw install

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

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

  1. به src/main/resources/application.properties در فهرست پروژه بروید.
  2. ویژگی payment.integrator.account.id را روی PIAID که توسط Google برای شما صادر شده است تنظیم کنید.
payment.integrator.account.id={YOUR_PAYMENT_INTEGRATOR_ACCOUNT_ID}

4. URL echo میزبانی شده گوگل را تنظیم کنید

URL echo میزبانی شده Google بسته به اینکه با کدام API یکپارچه می‌شوید متفاوت است. از اسناد مرجع API برای نوع ادغام خاص خود دیدن کنید و URL مربوط به API echo تشخیصی را کپی کنید. پس از کپی کردن URL، برای به روز رسانی آن در پروژه جاوا به مراحل بعدی بروید.

  1. به src/main/resources/application.properties در فهرست پروژه بروید.
  2. ویژگی API_SERVICE_NAME طوری تنظیم کنید که با آنچه در اسناد برنامه‌نویس یافت می‌شود مطابقت داشته باشد.
google.hosted.echo.url=vgw.googleapis.com/gsp/{API_SERVICE_NAME}/echo/

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

همانطور که در زیر نشان داده شده است، کلیدهای PGP خود را برای فعال کردن رمزگذاری PGP اضافه کنید.

  • به src/resources/publicKey1.gpg بروید و کلید عمومی زره ​​پوش ASCII را به فایل اضافه کنید.
  • به src/resources/privateKey1.gpg بروید و کلید خصوصی زره ​​پوش ASCII را به فایل اضافه کنید.
  • به src/resources/passphrase1.txt بروید و عبارت عبور مخفی را به فایل اضافه کنید.

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

برای فعال کردن رمزگذاری کلید دوگانه، کلید عمومی دوم خود را به publicKey2.gpg اضافه کنید، دومین کلید خصوصی خود را به privateKey2.gpg اضافه کنید و عبارت عبور دوم خود را به passphrase.txt اضافه کنید. پس از افزودن کلیدهای دوم، خطوط کد نظر داده شده را که مسئول بارگیری جفت کلید دوم در KeyConfig.addPrivateKeyAndPassphrase(...) و KeyConfig.addPublicKeys(...) هستند، لغو نظر دهید.

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

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

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

  $ ./mvnw spring-boot:run

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

$ gcloud app deploy

به طور پیش‌فرض، سرور به پورت 8080 گوش می‌دهد. برای مشاهده Open API Swagger UI، به URL زیر بروید.

https://{APPLICATION_HOST}/swagger-ui.html

7. اتصال Google Standard Payments Outbound API را آزمایش کنید

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

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

درخواست را از طریق خط فرمان ارسال کنید

قبل از اجرای دستور، نام میزبان سرور خود را جایگزین HOSTNAME کنید.

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

درخواستی را در Swagger UI ارسال کنید

برای ارسال درخواست با Swagger UI، به https://{APPLICATION_HOST}/swagger-ui بروید و پیام مشتری را در بدنه درخواست تنظیم کنید. هنگامی که آماده ارسال درخواست به Google هستید، روی دکمه "اجرا" کلیک کنید.

ارسال درخواست GSP Echo از طریق Swagger

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

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

{
   "responseHeader":{
      "responseTimestamp":"1606710026723"
   },
   "clientMessage":"Hello from  Bank Little Bear!",
   "serverMessage":"Server message."
}

گام به گام

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

درخواست را بسازید

createEchoRequestWithMessage در OutboundEchoService درخواست echo ارسال شده به API گوگل را ایجاد می کند.

String jsonEchoRequestMessage = objectMapper.writeValueAsString(createEchoRequestWithMessage(message));

درخواست ایجاد شده شامل clientMessage و همچنین چندین فیلد مقدار پیش‌فرض است.

{
   "requestHeader":{
      "protocolVersion":{
         "major":1,
         "minor":0,
         "revision":0
      },
      "requestId":"ddfe0fd0-ffdc-4fcf-991a-f0611ec83970",
      "requestTimestamp":"1606715389040"
   },
   "clientMessage":"Hello from Bank Little Bear!"
}

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

همه درخواست ها رمزگذاری شده و base64url رمزگذاری شده است. در این نمونه، PgpEncryptor.java حاوی روش های کمکی است که رمزگذاری و رمزگشایی و همچنین کدگذاری base64url را برای شما انجام می دهد. روش زیر درخواست را رمزگذاری می کند و با استفاده از کلید عمومی Google رمزگذاری را انجام می دهد.

String encryptedMessage = pgpEncryptor.encrypt(jsonEchoRequestMessage);

درخواست POST را ارسال کنید

پیام رمزگذاری شده از طریق یک درخواست POST ارسال می شود.

postStandardPaymentsEchoApi(encryptedMessage)

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

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

String decryptedData =
     pgpEncryptor.decrypt(postStandardPaymentsEchoApi(encryptedMessage).getBody());

پاسخ را برگردانید

پاسخ با کد وضعیت پاسخ HTTP 202 برگردانده می شود.

return new ResponseEntity<>(decryptedData, HttpStatus.ACCEPTED);

8. اتصال API ورودی را تست کنید

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

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

گام به گام

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

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

هنگامی که درخواستی دریافت می شود، PgpEncryptor.java decrypt فراخوانی می کند که در base64url درخواست را رمزگشایی و رمزگشایی می کند.

String decryptedRequest = pgpEncryptor.decrypt(echoRequest);

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

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

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

پاسخ را بسازید

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

private EchoResponse convertEchoRequestStringToEchoResponse(String decryptedRequest);

پاسخ شامل پیامی از طرف Google و همچنین مهر زمانی و پیامی از سرور است.

{
  "responseHeader": {
    "responseTimestamp": {
      "epochMillis":1481899950236
    }
  },
  "clientMessage": "echo Me",
  "serverMessage": "Debug ID 12345"
}

Base64url پاسخ را رمزگذاری و رمزگذاری می کند

از آنجایی که همه درخواست‌ها رمزگذاری شده و base64url کدگذاری شده‌اند، PgpEncryptor.java encrypt و درخواست را رمزگذاری می‌کند.

pgpEncryptor.encrypt(echoResponseString)

پاسخ را برگردانید

پاسخ با کد وضعیت پاسخ HTTP 202 برگردانده می شود.

return new ResponseEntity<>(pgpEncryptor.encrypt(echoResponseString), HttpStatus.ACCEPTED);

9. تبریک!

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