কিভাবে জাভাতে গুগল এপিআই এর সাথে সংযোগ স্থাপন করবেন

১. শুরু করার আগে

পূর্বশর্ত

  • আপনি বাস্তবায়ন প্রক্রিয়ার ১ম এবং ২য় ধাপ সম্পন্ন করেছেন।
  • আপনি Google অ্যাপ ইঞ্জিন অথবা Google-এর সাথে কনফিগার করা ডোমেনে আপনার নিজস্ব সমাধান ব্যবহার করে TLS টার্মিনেশন সহ প্রদত্ত জাভা সার্ভারটি হোস্ট করতে পারেন।
  • আপনার পরিবেশে জাভা ইনস্টল করা আছে।

তুমি যা শিখবে

  • গুগল ইকো এপিআই-তে একটি বৈধ অনুরোধ করে সংযোগ যাচাই করার পদ্ধতি।
  • পার্টনার হোস্টেড ইকো এপিআই-তে গুগলের অনুরোধ কীভাবে গ্রহণ, ডিক্রিপ্ট এবং পার্স করবেন।

2. সেটআপ এবং প্রয়োজনীয়তা

অ্যাপ্লিকেশনটি ডাউনলোড করুন

জাভা নমুনা কোডটি ডাউনলোড করুন।

অ্যাপ্লিকেশন কাঠামোর ওভারভিউ

জাভা নমুনা কোডটি গুগলের স্ট্যান্ডার্ড পেমেন্টস এপিআই-এর সাথে একীভূত হয়। নমুনা কোড প্রকল্প কাঠামোতে একটি outbound ডিরেক্টরি এবং একটি inbound ডিরেক্টরি থাকে যা গুগল থেকে অংশীদারের কাছে ইনবাউন্ড ইকো অনুরোধ এবং অংশীদারদের বাস্তবায়ন থেকে গুগলে আউটবাউন্ড অনুরোধ প্রতিফলিত করে।

এই দুটি ডিরেক্টরিতে স্তর অনুসারে প্যাকেজিংয়ের ক্ষেত্রে একই রকম শ্রেণিবিন্যাস রয়েছে। তিনটি প্রধান স্তর হল controller , service এবং domain

  • controller প্যাকেজে API গুলি থাকে।
  • service প্যাকেজটি ব্যবসায়িক যুক্তি, base64url এনকোডিং এবং এনক্রিপশনের জন্য দায়ী।
  • domain প্যাকেজটিতে POJO রয়েছে।

নির্ভরতা ইনস্টল করুন

প্রজেক্ট ডিরেক্টরিতে নেভিগেট করুন এবং Maven Wrapper ব্যবহার করে প্রয়োজনীয় নির্ভরতা ইনস্টল করতে নিম্নলিখিত কমান্ডটি চালান। আপনি যদি App Engine ব্যবহার করেন, তাহলে আপনি এই ধাপটি এড়িয়ে যেতে পারেন।

./mvnw install

৩. পেমেন্ট ইন্টিগ্রেটর অ্যাকাউন্ট আইডি (PIAID) কনফিগার করুন

পেমেন্ট ইন্টিগ্রেটর অ্যাকাউন্ট আইডি ( PIAID ) হল একটি শনাক্তকারী যা আপনার ইন্টিগ্রেশনগুলিকে অনন্যভাবে সনাক্ত করতে ব্যবহৃত হয়। এই টিউটোরিয়ালটি শুরু করার আগে পূর্বশর্তগুলি পূরণ করে আপনার Google থেকে আপনার PIAID পাওয়া উচিত ছিল।

  1. প্রজেক্ট ডিরেক্টরিতে src/main/resources/application.properties এ নেভিগেট করুন।
  2. প্রপার্টি payment.integrator.account.id কে Google দ্বারা আপনাকে ইস্যু করা PIAID-তে সেট করুন।
payment.integrator.account.id={YOUR_PAYMENT_INTEGRATOR_ACCOUNT_ID}

৪. গুগল হোস্টেড ইকো URL সেট করুন

গুগল হোস্ট করা echo ইউআরএল আপনি কোন এপিআই-এর সাথে ইন্টিগ্রেট করছেন তার উপর নির্ভর করে ভিন্ন হয়। আপনার নির্দিষ্ট ইন্টিগ্রেশন ধরণের জন্য এপিআই রেফারেন্স ডকুমেন্টেশন দেখুন এবং ডায়াগনস্টিক ইকো এপিআই-এর জন্য ইউআরএলটি কপি করুন। ইউআরএলটি কপি করার পরে, জাভা প্রজেক্টে এটি আপডেট করার জন্য পরবর্তী ধাপগুলিতে এগিয়ে যান।

  1. প্রজেক্ট ডিরেক্টরিতে src/main/resources/application.properties এ নেভিগেট করুন।
  2. ডেভেলপার ডকুমেন্টেশনে যা পাওয়া যায় তার সাথে মিল রেখে API_SERVICE_NAME প্রপার্টি সেট করুন।
google.hosted.echo.url=vgw.googleapis.com/gsp/{API_SERVICE_NAME}/echo/

৫. পিজিপি কী যোগ করুন

নিচে দেখানো হিসাবে, PGP এনক্রিপশন সক্ষম করতে আপনার PGP কীগুলি যোগ করুন।

  • src/resources/publicKey1.gpg এ যান এবং ফাইলটিতে ASCII আর্মার্ড পাবলিক কী যোগ করুন।
  • src/resources/privateKey1.gpg এ যান এবং ফাইলটিতে ASCII আর্মার্ড প্রাইভেট কী যোগ করুন।
  • src/resources/passphrase1.txt এ যান এবং ফাইলটিতে গোপন পাসফ্রেজটি যোগ করুন।

পিজিপি কী যোগ করা হচ্ছে

ডুয়াল কী এনক্রিপশন সক্ষম করতে, publicKey2.gpg তে আপনার দ্বিতীয় পাবলিক কী যোগ করুন। privateKey2.gpg তে আপনার দ্বিতীয় প্রাইভেট কী যোগ করুন এবং passphrase.txt তে আপনার দ্বিতীয় পাসফ্রেজ যোগ করুন। দ্বিতীয় কী যোগ করার পরে, KeyConfig.addPrivateKeyAndPassphrase(...) এবং KeyConfig.addPublicKeys(...) তে দ্বিতীয় জোড়া কী লোড করার জন্য দায়ী কোডের মন্তব্য করা লাইনগুলি আনকমেন্ট করুন।

দারুন, আপনি অ্যাপ্লিকেশনটি চালানোর জন্য প্রস্তুত!

৬. অ্যাপ্লিকেশনটি চালান

অ্যাপ্লিকেশনটি শুরু করতে, নিম্নলিখিত কমান্ডটি কার্যকর করুন।

  $ ./mvnw spring-boot:run

যদি আপনি একটি পূর্ব-কনফিগার করা অ্যাপ ইঞ্জিন ইনস্ট্যান্স চালাচ্ছেন, তাহলে এই কমান্ডটি চালান।

$ gcloud app deploy

ডিফল্টরূপে, সার্ভারটি 8080 পোর্টে শুনবে। Open API Swagger UI দেখতে, নীচের URL-এ নেভিগেট করুন।

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

৭. গুগল স্ট্যান্ডার্ড পেমেন্টস আউটবাউন্ড এপিআই সংযোগ পরীক্ষা করুন

এখন যেহেতু অ্যাপ্লিকেশনটি চলছে, গুগল ইকো এপিআই-এর সাথে সংযোগ পরীক্ষা করার সময় এসেছে।

Swagger UI অথবা CLI ব্যবহার করে নিম্নলিখিত কমান্ডটি রান করে আপনার নমুনা অ্যাপ্লিকেশনের ইনস্ট্যান্স থেকে Google এর সার্ভারে কল শুরু করা যেতে পারে। নমুনা অ্যাপ্লিকেশন ইকো API প্লেইনটেক্সটে একটি POST অনুরোধ গ্রহণ করে। অনুরোধ পাওয়ার পর, পরবর্তী অনুরোধ Google-হোস্টেড API-তে পাঠানো হয়।

কমান্ড লাইনের মাধ্যমে একটি অনুরোধ পাঠান

কমান্ডটি কার্যকর করার আগে 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-এ অনুরোধ পাঠানোর জন্য প্রস্তুত হলে 'Execute' বোতামে ক্লিক করুন।

Swagger এর মাধ্যমে একটি GSP ইকো অনুরোধ জমা দেওয়া

প্রতিক্রিয়া গ্রহণ করুন

একটি সফল API অনুরোধের ফলে Google থেকে নিম্নলিখিত প্রতিক্রিয়া আসবে।

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

ধাপে ধাপে

এখন যেহেতু আপনার সার্ভার থেকে একটি অনুরোধ সফলভাবে পাঠানো হয়েছে, আসুন পর্যালোচনা করা যাক এটি কীভাবে কাজ করেছে।

অনুরোধটি তৈরি করুন

OutboundEchoServicecreateEchoRequestWithMessage গুগলের API-তে পাঠানো echo অনুরোধ তৈরি করে।

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 প্রতিক্রিয়াটি ডিকোড করে প্রতিক্রিয়াটি ফেরত দেয়

গুগলের সফল প্রতিক্রিয়াটি base64url এনকোডেড এবং এনক্রিপ্ট করা হয়েছে, তাই এটিকে প্লেইনটেক্সটে ফেরত পাঠানোর আগে ডিকোড এবং ডিক্রিপ্ট করা প্রয়োজন। decrypt পদ্ধতি base64url প্রতিক্রিয়াটি ডিকোড এবং ডিক্রিপ্ট করে।

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

উত্তরটি ফেরত দিন

প্রতিক্রিয়াটি একটি 202 HTTP প্রতিক্রিয়া স্থিতি কোড সহ ফেরত পাঠানো হয়।

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

৮. ইনবাউন্ড API সংযোগ পরীক্ষা করুন

ইনবাউন্ড ইকো এপিআই কানেক্টিভিটি পরীক্ষা করার জন্য, গুগল পার্টনার হোস্টেড ইকো এপিআই-তে একটি অনুরোধ পাঠাবে। আপনি প্রস্তুত হয়ে গেলে, গুগল থেকে এই অনুরোধটি ট্রিগার করতে আপনার গুগল যোগাযোগের সাথে কাজ করুন।

যখন আপনি গুগলের ইনবাউন্ড ইকো রিকোয়েস্টটি পড়তে পারবেন এবং একটি বৈধ ইকো রেসপন্স সহ সাড়া দিতে পারবেন তখন ইকো টেস্টটি সম্পূর্ণ হবে।

ধাপে ধাপে

এখন যেহেতু আপনার সার্ভার একটি অনুরোধ সফলভাবে গ্রহণ করেছে এবং পরিচালনা করেছে, আসুন পর্যালোচনা করি এটি কীভাবে কাজ করেছে।

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

প্রতিক্রিয়াটিতে গুগলের বার্তা, সেইসাথে একটি টাইমস্ট্যাম্প এবং সার্ভার থেকে আসা বার্তা অন্তর্ভুক্ত রয়েছে।

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

Base64url প্রতিক্রিয়া এনকোড এবং এনক্রিপ্ট করে

যেহেতু সকল অনুরোধ এনক্রিপ্ট করা এবং base64url এনকোড করা থাকে, তাই PgpEncryptor.java encrypt base64url এনকোডে কল করে এবং অনুরোধটি এনক্রিপ্ট করে।

pgpEncryptor.encrypt(echoResponseString)

উত্তরটি ফেরত দিন

প্রতিক্রিয়াটি একটি 202 HTTP প্রতিক্রিয়া স্থিতি কোড সহ ফেরত পাঠানো হয়।

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

9. অভিনন্দন!

এই কোডল্যাবে, আপনি সফলভাবে পেমেন্টস API এর সাথে সংযোগ স্থাপন করেছেন!