วิธีสร้างการเชื่อมต่อกับ Google APIs ใน Java

1. ก่อนเริ่มต้น

ข้อกำหนดเบื้องต้น

  • คุณทำตามขั้นตอนที่ 1 และ 2 ของกระบวนการติดตั้งใช้งานเสร็จแล้ว
  • คุณสามารถโฮสต์เซิร์ฟเวอร์ Java ที่ระบุพร้อมการสิ้นสุด TLS ได้โดยใช้ Google App Engine หรือโซลูชันของคุณเองในโดเมนที่กำหนดค่าด้วย Google
  • ติดตั้ง Java ในสภาพแวดล้อมของคุณ

สิ่งที่คุณจะได้เรียนรู้

  • วิธีตรวจสอบการเชื่อมต่อโดยส่งคำขอที่ถูกต้องไปยัง Google Echo API
  • วิธีรับ ถอดรหัส และแยกวิเคราะห์คำขอจาก Google ไปยัง Partner Hosted Echo API

2. การตั้งค่าและข้อกำหนด

ดาวน์โหลดแอปพลิเคชัน

ดาวน์โหลดโค้ดตัวอย่าง Java

ภาพรวมโครงสร้างแอปพลิเคชัน

โค้ดตัวอย่าง Java ผสานรวมกับ API การชำระเงินมาตรฐานของ Google โครงสร้างโปรเจ็กต์โค้ดตัวอย่างมีไดเรกทอรี outbound รวมถึงไดเรกทอรี inbound เพื่อแสดงคำขอ Echo ขาเข้าจาก Google ไปยังพาร์ทเนอร์ และคำขอขาออกจากพาร์ทเนอร์ที่ติดตั้งใช้งานไปยัง Google

ทั้ง 2 ไดเรกทอรีนี้มีลำดับชั้นที่คล้ายกันในการจัดแพ็กเกจตามเลเยอร์ เลเยอร์หลัก 3 เลเยอร์คือ controller, service และ domain

  • แพ็กเกจ controller มี API
  • service มีหน้าที่จัดการตรรกะทางธุรกิจ การเข้ารหัส base64url และการเข้ารหัส
  • แพ็กเกจ domain มี POJO

ติดตั้งการอ้างอิง

ไปที่ไดเรกทอรีโปรเจ็กต์ แล้วเรียกใช้คำสั่งต่อไปนี้เพื่อติดตั้งทรัพยากร Dependency ที่จำเป็นโดยใช้ 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 ของการก้องที่ Google โฮสต์

echo URL ที่ Google โฮสต์จะแตกต่างกันไปตาม API ที่คุณผสานรวม ไปที่เอกสารประกอบข้อมูลอ้างอิง API สำหรับการผสานรวมประเภทที่ต้องการ แล้วคัดลอก URL สำหรับ API การก้องเพื่อการวินิจฉัย หลังจากคัดลอก URL แล้ว ให้ไปที่ขั้นตอนถัดไปเพื่ออัปเดตในโปรเจ็กต์ Java

  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

หากต้องการเปิดใช้การเข้ารหัสด้วยคีย์คู่ ให้เพิ่มคีย์สาธารณะที่ 2 ไปยัง publicKey2.gpg เพิ่มคีย์ส่วนตัวที่ 2 ไปยัง privateKey2.gpg และเพิ่มรหัสผ่านที่ 2 ไปยัง passphrase.txt หลังจากเพิ่มคีย์ที่ 2 แล้ว ให้ยกเลิกการแสดงความคิดเห็นในบรรทัดโค้ดที่แสดงความคิดเห็นซึ่งรับผิดชอบในการโหลดคีย์คู่ที่ 2 ใน KeyConfig.addPrivateKeyAndPassphrase(...) และ KeyConfig.addPublicKeys(...)

เยี่ยม คุณพร้อมที่จะเรียกใช้แอปพลิเคชันแล้ว

6. เรียกใช้แอปพลิเคชัน

หากต้องการเริ่มแอปพลิเคชัน ให้เรียกใช้คำสั่งต่อไปนี้

  $ ./mvnw spring-boot:run

หากคุณเรียกใช้อินสแตนซ์ App Engine ที่กำหนดค่าไว้ล่วงหน้า ให้เรียกใช้คำสั่งนี้แทน

$ gcloud app deploy

โดยค่าเริ่มต้น เซิร์ฟเวอร์จะรับฟังบนพอร์ต 8080 หากต้องการดู UI ของ Swagger สำหรับ Open API ให้ไปที่ URL ด้านล่าง

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

7. ทดสอบการเชื่อมต่อ API ขาออกของการชำระเงินมาตรฐานของ Google

ตอนนี้แอปพลิเคชันทำงานแล้ว ก็ถึงเวลาทดสอบการเชื่อมต่อกับ 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 ของ Google

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 การก้องขาเข้า Google จะส่งคำขอไปยัง API การก้องที่พาร์ทเนอร์โฮสต์ เมื่อพร้อมแล้ว โปรดติดต่อผู้ติดต่อของ Google เพื่อทริกเกอร์คำขอนี้จาก Google

การทดสอบการวนรอบจะเสร็จสมบูรณ์เมื่อคุณอ่านคำขอการวนรอบขาเข้าจาก Google และตอบกลับด้วยการตอบกลับการวนรอบที่ถูกต้องได้

ทีละขั้นตอน

ตอนนี้เซิร์ฟเวอร์ของคุณได้รับและจัดการคำขอเรียบร้อยแล้ว มาดูวิธีการทำงานกัน

ถอดรหัส Base64url และถอดรหัสคำขอ

เมื่อได้รับคำขอ PgpEncryptor.java จะเรียกใช้ decrypt ซึ่งจะถอดรหัส base64url และถอดรหัสคำขอ

String decryptedRequest = pgpEncryptor.decrypt(echoRequest);

รับคำขอ

Google ได้ส่งเพย์โหลดข้อความที่คล้ายกับตัวอย่างต่อไปนี้เมื่อถอดรหัสและถอดข้อมูลแล้ว

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

สร้างคำตอบ

เมื่ออ่านคำขอ Echo ขาเข้าเรียบร้อยแล้ว คุณก็พร้อมที่จะสร้างการตอบกลับ

private EchoResponse convertEchoRequestStringToEchoResponse(String decryptedRequest);

การตอบกลับจะมีข้อความจาก Google รวมถึงการประทับเวลาและข้อความจากเซิร์ฟเวอร์

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

เข้ารหัส Base64url และเข้ารหัสการตอบกลับ

เนื่องจากคำขอทั้งหมดได้รับการเข้ารหัสและเข้ารหัส base64url PgpEncryptor.java จึงเรียกใช้ encrypt เพื่อเข้ารหัส base64url และเข้ารหัสคำขอ

pgpEncryptor.encrypt(echoResponseString)

ส่งคืนการตอบกลับ

ระบบจะแสดงการตอบกลับพร้อมรหัสสถานะการตอบกลับ HTTP 202

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

9. ยินดีด้วย

ในโค้ดแล็บนี้ คุณได้สร้างการเชื่อมต่อกับ Payments API เรียบร้อยแล้ว