1. ก่อนเริ่มต้น
ข้อกำหนดเบื้องต้น
- คุณทำตามขั้นตอนที่ 1 และ 2 ของกระบวนการติดตั้งใช้งานเสร็จแล้ว
- คุณสามารถโฮสต์เซิร์ฟเวอร์ Java ที่มีให้โดยมีการยุติ TLS โดยใช้ Google App Engine หรือโซลูชันของคุณเองในโดเมนที่กำหนดค่ากับ Google
- ติดตั้ง Java ในสภาพแวดล้อมแล้ว
สิ่งที่คุณจะได้เรียนรู้
- วิธียืนยันการเชื่อมต่อด้วยการส่งคําขอที่ถูกต้องไปยัง Google Echo API
- วิธีรับ ถอดรหัส และแยกวิเคราะห์คําขอจาก Google ไปยัง echo API ที่โฮสต์โดยพาร์ทเนอร์
2. การตั้งค่าและข้อกำหนด
ดาวน์โหลดแอปพลิเคชัน
ดาวน์โหลดโค้ดตัวอย่าง Java
ภาพรวมโครงสร้างแอปพลิเคชัน
โค้ดตัวอย่าง Java ผสานรวมกับ Standard Payments API ของ Google โครงสร้างโปรเจ็กต์โค้ดตัวอย่างประกอบด้วยไดเรกทอรี outbound
และไดเรกทอรี inbound
เพื่อแสดงคำขอเสียงสะท้อนขาเข้าจาก Google ไปยังพาร์ทเนอร์ และคำขอขาออกจากการใช้งานของพาร์ทเนอร์ไปยัง Google
ไดเรกทอรีทั้งสองมีลำดับชั้นที่คล้ายกันในการจัดแพ็กเกจตามเลเยอร์ เลเยอร์หลัก 3 เลเยอร์คือ controller
, service
และ domain
- แพ็กเกจ
controller
มี API - แพ็กเกจ
service
มีหน้าที่รับผิดชอบต่อตรรกะทางธุรกิจ, การเข้ารหัส base64url และการเข้ารหัส - แพ็กเกจ
domain
มี POJO
ติดตั้งการอ้างอิง
ไปที่ไดเรกทอรีโปรเจ็กต์แล้วเรียกใช้คำสั่งต่อไปนี้เพื่อติดตั้งไลบรารีที่จำเป็นโดยใช้ Maven Wrapper หากใช้ App Engine อยู่ คุณสามารถข้ามขั้นตอนนี้ได้
./mvnw install
3. กำหนดค่ารหัสบัญชีตัวผสานรวมการชำระเงิน (PIAID)
รหัสบัญชีผู้รวมการชำระเงิน (PIAID
) คือตัวระบุที่ใช้ระบุการผสานรวมแบบไม่ซ้ำกัน คุณควรได้รับ PIAID จาก Google แล้วด้วยการทำข้อกำหนดเบื้องต้นให้เสร็จสมบูรณ์ก่อนเริ่มบทแนะนำนี้
- ไปที่
src/main/resources/application.properties
ในไดเรกทอรีโปรเจ็กต์ - ตั้งค่าพร็อพเพอร์ตี้
payment.integrator.account.id
เป็น PIAID ที่ Google ออกให้คุณ
payment.integrator.account.id={YOUR_PAYMENT_INTEGRATOR_ACCOUNT_ID}
4. ตั้งค่า URL เสียงสะท้อนที่โฮสต์ใน Google
URL echo
ที่โฮสต์โดย Google จะแตกต่างกันไปขึ้นอยู่กับ API ที่คุณผสานรวม โปรดดูเอกสารอ้างอิง API สำหรับประเภทการผสานรวมที่เฉพาะเจาะจง และคัดลอก URL ของ API เสียงสะท้อนการวินิจฉัย หลังจากคัดลอก URL แล้ว ให้ทำตามขั้นตอนถัดไปเพื่ออัปเดต URL ในโปรเจ็กต์ Java
- ไปที่
src/main/resources/application.properties
ในไดเรกทอรีโปรเจ็กต์ - ตั้งค่าพร็อพเพอร์ตี้
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
แล้วเพิ่มรหัสผ่านลับลงในไฟล์
หากต้องการเปิดใช้การเข้ารหัสแบบ 2 คีย์ ให้เพิ่มคีย์สาธารณะที่ 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 ของ Open API Swagger ให้ไปที่ URL ด้านล่าง
https://{APPLICATION_HOST}/swagger-ui.html
7. ทดสอบการเชื่อมต่อ API ขาออกของ Google Standard Payments
เมื่อแอปพลิเคชันทำงานแล้ว ก็ถึงเวลาทดสอบการเชื่อมต่อกับ 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
ส่งคำขอใน UI ของผู้หลอกลวง
หากต้องการส่งคำขอด้วย UI ของที่ระลึก ให้ไปที่ https://{APPLICATION_HOST}/swagger-ui
แล้วตั้งค่าข้อความไคลเอ็นต์ในส่วนเนื้อหาของคำขอ คลิกปุ่ม "ดำเนินการ" เมื่อพร้อมส่งคำขอไปยัง Google
รับคำตอบ
คำขอ 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. ทดสอบการเชื่อมต่อ Inbound API
Google จะส่งคำขอไปยัง Partner Hosted echo API เพื่อทดสอบการเชื่อมต่อ echo 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" }
สร้างคำตอบ
เมื่ออ่านคำขอเสียงสะท้อนขาเข้าเรียบร้อยแล้ว คุณก็พร้อมสร้างคำตอบ
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 เรียบร้อยแล้ว