تنظيم صفحاتك في مجموعات
يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.
مقدمة
تشبه الرموز الشريطية الدوّارة الرموز الشريطية العادية، ولكنّها تتغير بشكل دوري.
عادةً كل دقيقة، وتتم برمجة الوحدة الطرفية/القارئ لقبول
الأحدث. يحد هذا الإجراء الأمني من المخاطر المرتبطة
التقاط لقطة شاشة للرموز الشريطية، ولا سيما سرقة التذاكر أو التذاكر غير المصرّح بها
إعادة البيع. يمكن أيضًا استخدام الرموز الشريطية الدوارة كإجراء احتياطي للأجهزة التي لا يمكنها ذلك
الاستفادة من ميزة "الدفع الذكي" بسبب عدم توافقها مع تقنية NFC (أي عدم توفُّر الأجهزة أو
أو إيقاف البرنامج).
مرجع واجهة برمجة التطبيقات
للحصول على تفاصيل فنية حول تدوير الرموز الشريطية، يمكنك الاطلاع على
النوع RotatingBarcode.
على جهاز المستخدم، يتم استخدام آلية واحدة فقط لتحصيل القيمة في وقت معيّن،
يعتمد ذلك على كيفية إعداد البطاقة وإمكانيات الجهاز.
بترتيب الأولوية، يتم استخدام أنواع تحصيل القيمة التالية:
الدفع الذكي: في حال تحديد حمولة الدفع الذكي وما إذا كان الجهاز يتيح
NFC/HCE
تجدر الإشارة إلى أنه يمكن للمستخدم إلغاء هذا الإجراء بالنقر على زر "عرض الرمز" الذي
ستفرض عرض الرمز الشريطي/الرمز الشريطي الثابت الدوران.
رمز شريطي دوّار: في حال تحديد حمولة بيانات رمز شريطي دوّار
رمز شريطي ثابت: في حال تحديد حمولة بيانات رمز شريطي
يمكن أن يؤدي تحديد أحمال بيانات أساسية متعددة لتحصيل القيمة إلى إتاحة دعم جميع المستخدمين، ولكن
آثار أمنية. وعلى وجه الخصوص، فإن استخدام رمز شريطي ثابت
إن الإجراء الاحتياطي لاستخدام رمز شريطي دوّار ينفي معظم مزايا الأمان لاستخدام
رموز شريطية دوّارة لن يظهر الرمز الاحتياطي الثابت للرمز الشريطي إلا في طرق عرض الويب
أو على العملاء الذين لا يتيحون استخدام الرموز الشريطية بالتناوب. اعتبارًا من اليوم، نتوقع
لجميع عملاء محفظة Google لإتاحة تدوير الرموز الشريطية.
حفظ التدفق
توفّر واجهة برمجة التطبيقات Google Wallet API العديد من المسارات، منها:
إنشاء صفوف الولاء في وقت توفير الوقت أو في وقت مبكر
إرسال الكائنات الكاملة في JWT أو حفظ الكائنات قبلها
ثم الإشارة إليها باستخدام المعرف في JWT
تعديل العناصر بعد حفظها
يتوافق حقل rotatingBarcode المقترح مع جميع هذه المسارات،
ومع ذلك، لتحسين مستوى الأمان، نقترح ما يلي:
عليك طلب واجهة برمجة تطبيقات object:insert لإدراج البطاقة في
خادم "محفظة Google" وضبط زر "الإضافة إلى محفظة Google" من أجل
الإشارة إلى كائن معين باستخدام المعرّف في JWT. يضمن ذلك
لا يشتمل JWT الناتج على المفتاح السري للرمز الشريطي الدوار.
استخدِم مفتاحًا سريًا لكلمة المرور لمرة واحدة تم تخصيصه لبطاقة واحدة.
ومن المتوقع أن يكون المفتاح، ما لم يتم تحديثه، صالحًا لعمر
البطاقة. لا نتوقّع أن يتم تحديث هذا المفتاح بأي تكرار أثناء
مسار التشغيل الطبيعي.
يوضح مخطط التسلسل التالي التدفق بين الجهات الفاعلة المختلفة
بالنسبة إلى عملية الدمج النموذجية:
تاريخ التعديل الأخير: 2025-08-29 (حسب التوقيت العالمي المتفَّق عليه)
[null,null,["تاريخ التعديل الأخير: 2025-08-29 (حسب التوقيت العالمي المتفَّق عليه)"],[[["\u003cp\u003eRotating barcodes enhance security by changing periodically, mitigating risks associated with ticket theft or unauthorized resale.\u003c/p\u003e\n"],["\u003cp\u003eThey serve as a fallback for devices lacking NFC capabilities, ensuring accessibility for all users.\u003c/p\u003e\n"],["\u003cp\u003eGoogle Wallet prioritizes redemption methods: Smart Tap, Rotating Barcode, then Static Barcode, with user override option.\u003c/p\u003e\n"],["\u003cp\u003eFor optimal security, utilize the \u003ccode\u003eobject:insert\u003c/code\u003e API to prevent exposing the rotating barcode's secret key in the JWT.\u003c/p\u003e\n"],["\u003cp\u003eRotating barcodes are expected to be supported by all Google Wallet clients.\u003c/p\u003e\n"]]],["Rotating barcodes change periodically (e.g., every minute) and are accepted only when current, mitigating risks like ticket theft. They serve as a backup for devices lacking NFC for Smart Tap. The API uses a `RotatingBarcode` type with parameters like QR code type, value pattern, and TOTP details (algorithm, period, parameters). Multiple redemption methods (Smart Tap, rotating barcode, static barcode) prioritize based on device capabilities. For security, it is suggested to call the 'object:insert' API, use an OTP secret key that is scoped to a single pass, and refer to the specific object by ID in the JWT.\n"],null,["# Rotating Barcodes\n\nIntroduction\n------------\n\n\nRotating barcodes look just like regular barcodes but change periodically,\ntypically every minute, and the terminal/reader is programmed to only accept\nthe most recent one. This security measure reduces the risks associated with\nbarcode screenshotting, in particular ticket theft or unauthorized ticket\nresale. Rotating barcodes can also act as a fallback for devices that can't\ntake advantage of Smart Tap, due to not supporting NFC (lack of hardware, or\nsoftware disabled).\n\n### API reference\n\n\nFor technical details about Rotating Barcodes, see the\n[`RotatingBarcode` type](/wallet/retail/loyalty-cards/rest/v1/RotatingBarcode).\n\n### Example payload\n\n| JSON ||\n|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---|\n| ``` { \"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\" } ] } } } ``` |\n\nFallback Mechanisms\n-------------------\n\n\nOn the user device, only one redemption mechanism is used at a given time,\ndepending on how the pass is configured and on the capabilities of the device.\nIn the order of priority, the following redemption types are used:\n\n1. Smart Tap: If a smart-tap payload is specified and if the device supports NFC/HCE\n - Note, this can be overridden by the user by clicking \"Show code,\" which will force the display of the rotating barcode/static barcode.\n2. Rotating barcode: If a rotating barcode payload is specified\n3. Static barcode: If a barcode payload is specified\n\n\nSpecifying multiple redemption payloads can ensure all users are supported but\nmay have security implications. In particular, using a static barcode as a\nfallback for a rotating barcode negates most of the security benefits of using\nrotating barcodes. A static barcode fallback will only be shown in web views\nor on clients that do not support rotating barcodes. As of today, we expect\nall Google Wallet clients to support rotating barcodes.\n\nSave Flow\n---------\n\nThe Google Wallet API offers several flows, including:\n\n- Creating the loyalty classes at save time, or ahead of time\n- Sending the complete objects in your JWT, or saving the objects ahead of time then referencing them by ID in your JWT\n- Updating the objects after they have been saved\n\n\nThe proposed rotatingBarcode field is compatible with all these flows,\nhowever, in order to improve security, we suggest the following:\n\n- Call the `object:insert` API to insert the pass to the Google Wallet server and configure the Add to Google Wallet button to reference the specific object by ID in your JWT. This ensures that the resulting JWT does not include the secret key of the rotating barcode.\n- Use an OTP secret key that is scoped to a single pass\n- The key, unless it is updated, is expected to be valid for the lifespan of the pass. We do not expect this key to be updated on any frequency during the course of normal operation.\n\n\nThe following sequence diagram illustrates the flow between the various actors\nfor a typical integration:"]]