วิธีสร้างการเชื่อมต่อกับ Payments API ใน Node.js

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

นี่คือ Codelab แบบสํารวจด้วยตนเองที่จะอธิบายวิธีสร้างการเชื่อมต่อกับ Standard Payments API

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

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

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

  • วิธียืนยันการเชื่อมต่อด้วยการส่งคําขอที่ถูกต้องไปยัง Google Standard Payments echo API
  • วิธีรับ ถอดรหัส และแยกวิเคราะห์คําขอจาก Google ไปยัง Echo API ที่โฮสต์โดยพาร์ทเนอร์

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

ดาวน์โหลดใบสมัคร

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

ทรัพยากร Dependency ของการติดตั้ง

ไปที่ไดเรกทอรีโปรเจ็กต์และเรียกใช้คำสั่งต่อไปนี้เพื่อติดตั้งไลบรารีที่จำเป็น หากคุณใช้ App Engine ให้ข้ามขั้นตอนนี้

npm install

3. กำหนดค่ารหัสบัญชีตัวผสานรวมการชำระเงิน (PIAID)

รหัสบัญชีผู้ผสานรวมการชำระเงิน (PIAID) คือตัวระบุที่ใช้เพื่อระบุการผสานรวมของคุณโดยไม่ซ้ำกัน คุณควรได้รับ PIAID จาก Google โดยทำตามข้อกําหนดเบื้องต้นให้เสร็จสมบูรณ์ก่อนเริ่มบทแนะนํานี้

  1. ไปที่ไฟล์ server.js ในไดเรกทอรีโปรเจ็กต์
  2. ตั้งค่าตัวแปร PIAID เป็น PIAID ที่ Google ออกให้คุณ
const PIAID = '{PAYMENT_INTEGRATOR_ACCOUNT_ID}';

4. เพิ่มคีย์ PGP

สร้างไฟล์ต่อไปนี้ในโครงสร้างโปรเจ็กต์และเพิ่มคีย์ PGP เพื่อเปิดใช้การเข้ารหัส PGP

  • สร้างไฟล์ชื่อ public.key และเพิ่มคีย์สาธารณะที่ผ่านการเข้ารหัส ASCII ลงในไฟล์
  • สร้างไฟล์ชื่อ private.key แล้วเพิ่มคีย์ส่วนตัวที่เข้ารหัส ASCII ลงในไฟล์
  • สร้างไฟล์ชื่อ passphrase.txt และเพิ่มข้อความรหัสผ่านลับลงในไฟล์

การเพิ่มคีย์ PGP

เยี่ยม คุณพร้อมใช้งานแอปพลิเคชันแล้ว

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

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

$ node server.js
Server listening on port 8080...

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

$ gcloud app deploy

โดยค่าเริ่มต้น เซิร์ฟเวอร์จะรอรับการเชื่อมต่อที่พอร์ต 8080

6. ทดสอบการเชื่อมต่อ Google Standard Payments API

เมื่อแอปพลิเคชันทำงานแล้ว ก็ถึงเวลาทดสอบการเชื่อมต่อกับ Google Standard Payments echo API

เรียกใช้คำสั่งต่อไปนี้เพื่อเริ่มการเรียกจากอินสแตนซ์ของแอปพลิเคชันตัวอย่างไปยังเซิร์ฟเวอร์ของ 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

หากต้องการทดสอบการเชื่อมต่อ Echo API ของพาร์ทเนอร์ Google จะส่งคําขอไปยัง 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 เรียบร้อยแล้ว