1. ก่อนเริ่มต้น
นี่คือ Codelab แบบศึกษาด้วยตนเองที่จะแนะนำวิธีสร้างการเชื่อมต่อกับ Stanadard Payments API
ข้อกำหนดเบื้องต้น
- คุณทำตามขั้นตอนที่ 1 และ 2 ของกระบวนการติดตั้งใช้งานเรียบร้อยแล้ว
- คุณสามารถโฮสต์เซิร์ฟเวอร์ Node.js ที่ให้ไว้โดยมีการยุติ TLS โดยใช้ Google App Engine หรือโซลูชันของคุณเองในโดเมนที่กำหนดค่ากับ Google
- Node.js ได้รับการติดตั้งในสภาพแวดล้อมของคุณ
สิ่งที่คุณจะได้เรียนรู้
- วิธียืนยันการเชื่อมต่อโดยการส่งคำขอที่ถูกต้องไปยัง echo API ของ Google Standard Payments
- วิธีรับ ถอดรหัส และแยกวิเคราะห์คำขอจาก Google ไปยัง Echo API ที่พาร์ทเนอร์โฮสต์
2. การตั้งค่าและข้อกำหนด
ดาวน์โหลดแอปพลิเคชัน
ดาวน์โหลดโค้ดตัวอย่างของ Node.js
ทรัพยากร Dependency ของการติดตั้ง
ไปที่ไดเรกทอรีโปรเจ็กต์และเรียกใช้คำสั่งต่อไปนี้เพื่อติดตั้งทรัพยากร Dependency ที่จำเป็น หากคุณใช้ App Engine ให้ข้ามขั้นตอนนี้
npm install
3. กำหนดค่ารหัสบัญชีผู้ผสานรวมการชำระเงิน (PIAID)
รหัสบัญชีผู้ผสานรวมการชำระเงิน (PIAID
) คือตัวระบุที่ใช้ระบุการผสานรวมแบบไม่ซ้ำกัน คุณควรได้รับ PIAID จาก Google แล้วด้วยการทำข้อกำหนดเบื้องต้นให้เสร็จสมบูรณ์ก่อนเริ่มบทแนะนำนี้
- ไปยังไฟล์
server.js
ในไดเรกทอรีโปรเจ็กต์ - ตั้งค่าตัวแปร
PIAID
เป็น PIAID ที่ Google ออกให้คุณ
const PIAID = '{PAYMENT_INTEGRATOR_ACCOUNT_ID}';
4. เพิ่มคีย์ PGP
สร้างไฟล์ต่อไปนี้ในโครงสร้างโปรเจ็กต์และเพิ่มคีย์ PGP เพื่อเปิดใช้การเข้ารหัส PGP
- สร้างไฟล์ชื่อ
public.key
และเพิ่มคีย์สาธารณะเกราะป้องกัน ASCII ลงในไฟล์ - สร้างไฟล์ชื่อ
private.key
และเพิ่มคีย์ส่วนตัวเกราะป้องกัน ASCII ลงในไฟล์ - สร้างไฟล์ชื่อ
passphrase.txt
และเพิ่มข้อความรหัสผ่านลับลงในไฟล์
เยี่ยมมาก คุณพร้อมที่จะเรียกใช้แอปพลิเคชันแล้ว
5. เรียกใช้แอปพลิเคชัน
หากต้องการเริ่มต้นแอปพลิเคชัน ให้เรียกใช้คำสั่งต่อไปนี้
$ node server.js Server listening on port 8080...
หากคุณเรียกใช้อินสแตนซ์ App Engine ที่กำหนดค่าล่วงหน้า ให้เรียกใช้คำสั่งนี้แทน
$ gcloud app deploy
โดยค่าเริ่มต้น เซิร์ฟเวอร์จะรับฟังที่พอร์ต 8080
6. ทดสอบการเชื่อมต่อ Google Standard Payments API
เมื่อแอปพลิเคชันทำงานแล้ว ต่อไปก็ถึงเวลาทดสอบการเชื่อมต่อกับ echo API ของ Google Standard Payments
เรียกใช้คำสั่งต่อไปนี้เพื่อเริ่มการเรียกจากอินสแตนซ์ของแอปพลิเคชันตัวอย่างไปยังเซิร์ฟเวอร์ของ Google Echo API ของแอปพลิเคชันตัวอย่างจะยอมรับคำขอ POST ในรูปแบบข้อความธรรมดา หลังจากได้รับคำขอแล้ว ระบบจะส่งคำขอหลังจากนั้นไปยัง API ที่ Google โฮสต์
$ curl -X POST -H 'Content-Type: text/plain' -d 'Hello from Little Bear' https://{HOSTNAME}/echo
คำขอ API ที่สำเร็จจะส่งผลให้เกิดการตอบกลับต่อไปนี้จาก Google
{ "responseHeader":{ "responseTimestamp":"1606710026723" }, "clientMessage":"Hello from Little Bear", "serverMessage":"Server message." }
ทีละขั้นตอน
เมื่อเซิร์ฟเวอร์ส่งคำขอเรียบร้อยแล้ว ต่อไปเราจะมาดูว่าการทำงานเป็นอย่างไร
สร้างคำขอ
buildEchoRequestBody
ใน bodyHelpers.js
สร้างคำขอ echo
ที่ส่งไปยัง API ของ Google
const message = bodyHelpers.buildEchoRequestBody(req.body);
คำขอที่สร้างขึ้นประกอบด้วย clientMessage
และฟิลด์ค่าเริ่มต้นหลายช่อง
{
"requestHeader":{
"protocolVersion":{
"major":1,
"minor":0,
"revision":0
},
"requestId":"ddfe0fd0-ffdc-4fcf-991a-f0611ec83970",
"requestTimestamp":"1606715389040"
},
"clientMessage":"Hello from Little Bear"
}
เข้ารหัสคำขอ
คำขอทั้งหมดมีการเข้ารหัสและเข้ารหัส base64url ในตัวอย่างนี้ crypto.js
มีวิธีช่วยที่ทำการเข้ารหัสและถอดรหัสให้คุณ เมธอด crypto.encrypt
จะเข้ารหัสโดยใช้คีย์สาธารณะของ Google
const encrypted = await crypto.encrypt(message);
ส่งคำขอ POST ที่เข้ารหัส base64url
ข้อความที่เข้ารหัสจะเข้ารหัส base64url โดยใช้แพ็กเกจ base64url และส่งผ่านคำขอ POST โดยใช้ axios
const response = await axios.post(ECHO_URL, base64url(encrypted), AXIOS_CONFIG);
ถอดรหัสและส่งคืนคำตอบ
การตอบกลับที่สำเร็จของ Google คือการเข้ารหัสและเข้ารหัส base64url ดังนั้นจึงต้องถอดรหัสและถอดรหัสด้วยก่อนที่จะส่งคืนเป็นข้อความธรรมดาได้
const encryptedMessage = base64url.toBuffer(response.data);
const decryptedResponse = await crypto.decrypt(encryptedMessage);
res.status(200);
res.send(decryptedResponse);
7. ทดสอบการเชื่อมต่อ Partner API
Google จะส่งคำขอไปยัง Partner Hosted echo API ในการทดสอบการเชื่อมต่อ echo API ของพาร์ทเนอร์
เมื่อพร้อมแล้ว โปรดติดต่อผู้ติดต่อของ Google เพื่อเริ่มคำขอนี้จาก Google
การทดสอบเสียงสะท้อนจะเสร็จสมบูรณ์เมื่อคุณอ่านคำขอเสียงสะท้อนขาเข้าจาก Google และตอบกลับด้วยคำตอบเสียงก้องที่ถูกต้อง
ทีละขั้นตอน
เมื่อเซิร์ฟเวอร์ของคุณได้รับคำขอและจัดการคำขอเรียบร้อยแล้ว ต่อไปมาดูวิธีการทำงานของคำขอกัน
Base64url ถอดรหัสคำขอ
เมื่อได้รับคําขอ คุณจะต้องถอดรหัส base64url ก่อน
const encryptedRequest = base64url.toBuffer(req.body);
ถอดรหัสคำขอ
เมื่อถอดรหัสคำขอ base64url แล้ว คุณจะต้องถอดรหัสคำขอ
const decryptedRequest = await crypto.decrypt(encryptedRequest);
รับคำขอ
Google ได้ส่งเพย์โหลดข้อความที่คล้ายกับข้อความต่อไปนี้เมื่อถอดรหัสและถอดรหัสแล้ว
{ "requestHeader": { "protocolVersion": { "major": 1 }, "requestId": "G1MQ0YERJ0Q7LPM", "requestTimestamp": { "epochMillis":1481899949606 }, "paymentIntegratorAccountId": "abcdef123456" }, "clientMessage": "echo Me" }
สร้างคำตอบ
เมื่ออ่านคำขอเสียงสะท้อนขาเข้าเรียบร้อยแล้ว คุณก็พร้อมสร้างคำตอบ
clientMessage = JSON.parse(decryptedRequest).clientMessage;
responseBody = bodyHelpers.buildEchoResponseBody(clientMessage);
การตอบกลับจะมีข้อความจาก Google รวมถึงการประทับเวลาและข้อความจากเซิร์ฟเวอร์
{ "responseHeader": { "responseTimestamp": { "epochMillis":1481899950236 } }, "clientMessage": "echo Me", "serverMessage": "Debug ID 12345" }
เข้ารหัสและเข้ารหัส base64 คำตอบ
เมื่อสร้างข้อความตอบกลับแล้ว คุณก็พร้อมที่จะเข้ารหัสและเข้ารหัส base64url แล้ว
encryptedResponse = await crypto.encrypt(responseBody);
const encodedResponse = base64url(encryptedResponse);
ส่งคืนคำตอบ
และในที่สุด คุณก็พร้อมที่จะส่งการตอบกลับ POST แล้ว
res.send(encodedResponse);
8. ยินดีด้วย
คุณสร้างการเชื่อมต่อกับ Echo API สำเร็จแล้วใน Codelab นี้