1. ก่อนเริ่มต้น
ข้อกำหนดเบื้องต้น
- คุณดำเนินการขั้นตอนที่ 1 และ 2 ของกระบวนการติดตั้งใช้งานเรียบร้อยแล้ว
- คุณสามารถโฮสต์เซิร์ฟเวอร์ Java ที่ให้ไว้โดยมีการสิ้นสุด TLS โดยใช้ Google App Engine หรือโซลูชันของคุณเองในโดเมนที่กำหนดค่าไว้กับ Google
- Java ติดตั้งอยู่ในระบบของคุณ
สิ่งที่คุณจะได้เรียนรู้
- วิธียืนยันการเชื่อมต่อโดยการส่งคำขอที่ถูกต้องไปยัง Google echo API
- วิธีรับ ถอดรหัส และแยกวิเคราะห์คำขอจาก Google ไปยัง Partner echo API ที่โฮสต์
2. การตั้งค่าและข้อกำหนด
ดาวน์โหลดแอปพลิเคชัน
ดาวน์โหลดโค้ดตัวอย่าง Java
ภาพรวมโครงสร้างแอปพลิเคชัน
โค้ดตัวอย่างของ Java จะผสานรวมเข้ากับ Standard Payments API ของ Google โครงสร้างโปรเจ็กต์โค้ดตัวอย่างมีไดเรกทอรี outbound
และไดเรกทอรี inbound
เพื่อแสดงคำขอเสียงสะท้อนขาเข้าจาก Google ไปยังพาร์ทเนอร์ และคำขอขาออกจากการติดตั้งใช้งานของพาร์ทเนอร์ไปยัง Google
ไดเรกทอรีทั้งสองนี้มีลำดับชั้นที่คล้ายคลึงกันในแพ็กเกจตามชั้น เลเยอร์หลัก 3 เลเยอร์คือ controller
, service
และ domain
- แพ็กเกจ
controller
มี API - แพ็กเกจ
service
มีหน้าที่รับผิดชอบตรรกะทางธุรกิจ, การเข้ารหัส base64url และการเข้ารหัส - แพ็กเกจ
domain
มี POJO
การอ้างอิงการติดตั้ง
ไปที่ไดเรกทอรีโปรเจ็กต์และเรียกใช้คำสั่งต่อไปนี้เพื่อติดตั้งทรัพยากร Dependency ที่จำเป็นโดยใช้ 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 ของ echo 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 ลงใน 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. ทดสอบการเชื่อมต่อ 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
ส่งคำขอใน UI ของ Swagger
หากต้องการส่งคำขอด้วย UI ของ Swagger ให้ไปที่ 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 ที่เข้ารหัสและเข้ารหัสไว้ ดังนั้น จึงต้องถอดรหัสและถอดรหัสด้วยก่อนที่จะสามารถแสดงผลเป็นข้อความธรรมดา เมธอด base64url ของ decrypt
จะถอดรหัสและถอดรหัสการตอบสนอง
String decryptedData =
pgpEncryptor.decrypt(postStandardPaymentsEchoApi(encryptedMessage).getBody());
ตอบกลับ
การตอบกลับจะมีการแสดงผลพร้อมรหัสสถานะการตอบกลับ HTTP 202
return new ResponseEntity<>(decryptedData, HttpStatus.ACCEPTED);
8. ทดสอบการเชื่อมต่อ API ขาเข้า
ในการทดสอบการเชื่อมต่อ Echo API ขาเข้า Google จะส่งคำขอไปยัง Partner 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. ยินดีด้วย
ใน Codelab นี้ คุณสร้างการเชื่อมต่อกับ Payments API สำเร็จแล้ว