เกริ่นนำ
บาร์โค้ดจะหมุนเหมือนบาร์โค้ดปกติ แต่จะเปลี่ยนแปลงเป็นระยะๆ ทุกนาที และเทอร์มินัล/เครื่องอ่านก็ตั้งโปรแกรมให้ยอมรับเฉพาะบาร์โค้ดล่าสุดเท่านั้น มาตรการรักษาความปลอดภัยนี้จะช่วยลดความเสี่ยงที่เกี่ยวข้องกับการถ่ายภาพหน้าจอด้วยบาร์โค้ด โดยเฉพาะการขโมยตั๋วหรือการจำหน่ายตั๋วที่ไม่ได้รับอนุญาต การหมุนบาร์โค้ดยังทำหน้าที่เป็นข้อมูลสำรองสำหรับอุปกรณ์ที่ไม่สามารถ ใช้ประโยชน์จากการแตะอัจฉริยะได้ด้วย เนื่องจากไม่รองรับ NFC (ไม่มีฮาร์ดแวร์ หรือซอฟต์แวร์ ปิดใช้อยู่)
เอกสารอ้างอิง API
ดูรายละเอียดทางเทคนิคเกี่ยวกับการหมุนเวียนบาร์โค้ดได้ที่ประเภท RotatingBarcode
ตัวอย่างเพย์โหลด
JSON | |
---|---|
{ "rotatingBarcode": { "type": "QR_CODE", "valuePattern": "MyRotatingBarcode-{totp_timestamp_seconds}-{totp_value_0}", "alternateText": "Ticket#: 1234567890", "totpDetails": { "algorithm": "TOTP_SHA1", "periodMillis": "3000", "parameters": [ { "key": "3132333435363738393031323334353637383930", "valueLength": "8" } ] } } } |
กลไกสำรอง
ในอุปกรณ์ของผู้ใช้ ระบบจะใช้กลไกการแลกสิทธิ์เพียงรายการเดียวในแต่ละครั้ง โดยขึ้นอยู่กับการกำหนดค่าบัตรและความสามารถของอุปกรณ์ ประเภทการแลกสิทธิ์ต่อไปนี้จะใช้ตามลำดับความสำคัญ
-
การแตะอัจฉริยะ: หากมีการระบุเพย์โหลดการแตะอัจฉริยะและหากอุปกรณ์รองรับ NFC/HCE
- โปรดทราบว่าผู้ใช้ลบล้างค่านี้ได้โดยคลิก "แสดงรหัส" ซึ่งจะบังคับให้แสดงบาร์โค้ดแบบหมุน/บาร์โค้ดแบบคงที่
- บาร์โค้ดแบบหมุน: หากมีการระบุเพย์โหลดบาร์โค้ดแบบหมุน
- บาร์โค้ดแบบคงที่: หากมีการระบุเพย์โหลดบาร์โค้ด
การระบุเปย์โหลดการแลกสิทธิ์หลายรายการจะช่วยให้มั่นใจได้ว่าผู้ใช้ทุกคนจะได้รับการสนับสนุน แต่อาจส่งผลกระทบด้านความปลอดภัย โดยเฉพาะอย่างยิ่ง การใช้บาร์โค้ดแบบคงที่เป็นคุณสมบัติสำรองสำหรับบาร์โค้ดแบบหมุนทำให้ประโยชน์ด้านความปลอดภัยส่วนใหญ่ของการใช้บาร์โค้ดแบบหมุนหายไป ระบบสำรองของบาร์โค้ดแบบคงที่จะแสดงในมุมมองเว็บหรือในไคลเอ็นต์ที่ไม่รองรับการหมุนบาร์โค้ดเท่านั้น ตั้งแต่วันนี้เป็นต้นไป เราคาดว่า ลูกค้า Google Wallet ทุกรายจะรองรับการหมุนบาร์โค้ด
บันทึกโฟลว์
Google Wallet API มีขั้นตอนหลายอย่าง เช่น
- สร้างชั้นโดยสารแบบประหยัดเวลาหรือสร้างล่วงหน้า
- ส่งออบเจ็กต์ที่สมบูรณ์ใน JWT หรือบันทึกออบเจ็กต์ล่วงหน้า จากนั้นอ้างอิงด้วยรหัสใน JWT
- อัปเดตออบเจ็กต์หลังจากบันทึกแล้ว
ช่อง rotatingBarcode ที่เสนอใช้ได้กับขั้นตอนทั้งหมดเหล่านี้ อย่างไรก็ตาม ขอแนะนำให้ดำเนินการดังต่อไปนี้เพื่อเพิ่มความปลอดภัย
-
เรียก
object:insert
API เพื่อแทรกบัตรไปยังเซิร์ฟเวอร์ Google Wallet และกำหนดค่าปุ่ม "เพิ่มลงใน Google Wallet" ให้อ้างอิงออบเจ็กต์ที่เจาะจงตามรหัสใน JWT เพื่อให้มั่นใจว่า JWT ที่ได้จะไม่มีคีย์ลับของบาร์โค้ดแบบหมุน - ใช้คีย์ลับ OTP ที่กำหนดขอบเขตไว้สำหรับบัตรเดียว
- คีย์คาดว่าคีย์จะใช้ได้ตลอดอายุการใช้งานของบัตร เว้นแต่จะมีการอัปเดต เราไม่คาดว่าจะมีการอัปเดตคีย์นี้ตามความถี่ในระหว่างการทำงานตามปกติ
แผนภาพลำดับต่อไปนี้แสดงโฟลว์ระหว่างตัวดำเนินการต่างๆ สำหรับการผสานรวมตามปกติ