Na tej stronie znajdziesz szczegóły techniczne operatora transportu publicznego (PTO) oraz integrator systemów musi zintegrować go z Google, aby dostarczać bilety Motics w Portfelu Google. Rozwiązanie korzysta z interfejsu API Portfela Google i również w PTO implementującym punkt końcowy aktywacji.
Architektura systemu
Ta sekcja przedstawia architekturę systemu i proces zapisywania w Motics.
Rysunek 1. Proces – oszczędzanie biletu Motics
Ilustracja 1 przedstawia proces tworzenia, aktywowania i przypinania zgłoszenia Motics Portfel Google w różnych usługach:
- serwerach Google.
- Serwer PTO (system integrator systemu)
- Serwer SCE Motics
- Sklep internetowy
Poniżej znajdziesz szczegółowe informacje o tym procesie:
- Na etapie konfiguracji początkowej serwer PTO tworzy:
transitClass, przekazującownerIdiactivationUrlza pomocą klasy transitClass:Insert Punkt końcowy API Portfela Google. To jednorazowa czynność. - Następnie, gdy użytkownik kupuje bilet w sklepie internetowym, serwer PTO wywołuje transitObject:Insert zawierający podstawowe informacje o biletach i niektóre pola początkowe wskazujące, że jest to zgłoszenie Motics.
- Następnie serwer PTO i sklep internetowy współpracują nad renderowaniem Dodaj do przycisku Portfela Google, a następnie zwróć token JWT biletu do Google za pomocą linku Zapisz.
- Teraz może rozpocząć się faza przypinania zgłoszeń, gdy serwer Google wywoła
Punkt końcowy aktywacji za punktem
activationUrl. - W odpowiedzi na krok 4 serwer PTO generuje podpis (sigSTB) zawierający identyfikator SCE_ID podpisany za pomocą narzędzia SAM.
- Zanim odpowiesz na wywołanie
activationUrl, serwer PTO powinien najpierw wywołaj transitObject:Patch, który zawiera wszystkie niezbędne informacje Motics, w tym applicationData Motics. - Dopiero po pomyślnym wywołaniu transitObject:Patch PTO
serwer powinien zwrócić odpowiedź (HTTP-200) na żądanie
activationUrl.
Wdrożenie funkcji Odłącz proces
Ze względu na wygodę użytkowników użytkownik powinien mieć możliwość przeniesienia swoich Motics biletów z jednego urządzenia na drugie, w ramach limitów określonych przez wydawcę. W tym celu wydawca musi wdrożyć proces przenoszenia i rozłączania.
Punkt końcowy aktywacji
Wystawca lub dostawca zabezpieczeń (albo integrator systemu) musi wdrożyć zgłoszenie punkt końcowy aktywacji, który Google wywoła po zapisaniu zgłoszenia. Adres URL do tego punktu końcowego należy podać w wywołaniu transitClass:Insert. Punkt końcowy aktywacji wygeneruje podpis (sigSTB) i wywoła metodę metody transitObject:Patch z parametrami zdefiniowanymi w tym .
Żądanie
Żądanie do punktu końcowego aktywacji ma taki format:
Content-Type: application/json
Body: {
"classId": "123.classId",
"expTimeMillis": 1669671940735,
"eventType": "activate",
"objectId": string - base64 encoded ID of the TransitObject,
"deviceContext": string - base64 encoded SCE_ID,
}
Odpowiedź
Odpowiedź HTTP-200 z pustą treścią powinna być zwracana, jeśli:
- Parametr sigSTB zawierający identyfikator SCE_ID został wygenerowany i podpisany za pomocą narzędzia SAM
- Metoda transitObject:Patch została wywołana
Status: 200 - OK
Body: {}
Docelowe czasy oczekiwania
Punkt końcowy aktywacji powinien spełniać te wymagania dotyczące czasu oczekiwania:
- Na co najmniej
50%z wszystkich próśb należy odpowiedzieć w ciągu200ms - Na co najmniej
95%z wszystkich próśb należy odpowiedzieć w ciągu2s - Istnieje stały górny limit, który wynosi
10s
Zmiany w interfejsie API Portfela Google
Poniżej opisujemy zmiany w punktach końcowych interfejsu API Portfela Google, które pozwolą Ci obsługuje platformę Motics zgodnie z architekturą systemu.
Metoda: transitClass:insert
To punkt końcowy interfejsu API Portfela Google, który pozwala utworzyć transitClass w
z backendem. Integrator systemu musi wywołać ten interfejs API za pomocą:
parametrów żądania i innych odpowiednich pól. Więcej informacji:
transitClass oraz Dokumentacja interfejsu API transitClass.Insert z pełną listą
(inne niż Motics) i więcej szczegółów.
POST: https://walletobjects.googleapis.com/walletobjects/v1/transitClass
Zapis JSON
Integracja z Motics wymaga co najmniej następującej reprezentacji danych JSON
transitClass w treści żądania transitClass:insert. Inne obowiązkowe
Trzeba też będzie określić pola metadanych transitClass.
{
"id": string,
"multipleDevicesAndHoldersAllowedStatus": ONE_USER_ONE_DEVICE (MultipleDevicesAndHoldersAllowedStatus),
"deviceCertificationSupport": {
"vdvCertDetails": {
"ownerId" string,
"certEnvironment": PRODUCTION/STAGING,
},
},
"activationOptions": {
"activationUrl": string
},
...
}
Gdy parametr certEnvironment = PRODUCTION, serwer Google pobierze certyfikat. z serwera produkcyjnego Motics. Gdy certEnvironment = STAGing the Google serwer pobierze certyfikat z serwera Motics w piaskownicy.
Metoda: transitObject:insert
To jest punkt końcowy interfejsu API Portfela Google, w którym należy wstawić transitObject dla nowego
bilet, który użytkownik chce kupić i dodać do Portfela Google. System
integrator powinien przekazać transitObject z informacjami o biletach w
w tym punkcie. Zapoznaj się z obiektami transitObject i Interfejs API transitObject.Insert
dokumentację z pełną listą parametrów (innych niż Motics) i dodatkowymi informacjami.
POST: https://walletobjects.googleapis.com/walletobjects/v1/transitObject
Zapis JSON
Integracja z Motics wymaga co najmniej następującej reprezentacji danych JSON
transitObject w treści żądania transitObject:insert. Inny obiekt
Można też skonfigurować pola metadanych i wypełnić wszystkie pozostałe wymagane pola.
dołączono.
{
"id": string,
"classId": string,
"validTimeInterval": {
object (TimeInterval)
},
"activationStatus": {
"state": NOT_ACTIVATED (State)
},
"rotatingBarcode": {
"type": AZTEC (BarcodeType),
"valuePattern": "{vdv_barcode}",
"deviceEntitlementSupport": {
"vdvEntitlementDetails": {
"applicationData": "",
},
},
},
...
}
Uwagi:
- Interfejs API wymaga uwzględnienia pola
applicationData. W tym momencie w procesie aktywacji Motics wartośćapplicationDatanie jest jeszcze znana, więc jako wartość musisz wpisać pusty ciąg znaków.applicationDatazostanie ustawione później wtransitObject:Patch.
- Obiekty DateTime
validTimeIntervalmuszą mieć przesunięcie strefy czasowej określony, na przykład:2024-04-12T19:20:50.52-04:00.
Metoda: transitObject:patch
To punkt końcowy interfejsu API Portfela Google, który ma zainstalować poprawkę transitObject za pomocą danych
używane przez Google do generowania kodów kreskowych Motics i pobierania z usługi VDV eTicket
certyfikatów. Zapoznaj się z obiektami transitObject i Interfejs API transitObject.Patch
dokumentację z pełną listą parametrów (innych niż Motics) i dodatkowymi informacjami.
PATCH:
https://walletobjects.googleapis.com/walletobjects/v1/transitObject/{resourceId}
Zapis JSON
Integracja z Motics wymaga następującej reprezentacji funkcji
transitObject w treści żądania: transitObject:patch. Zwróć uwagę, że jest to
wskazuje, że pole applicationData jest wypełnione.
{
"activationStatus": {
"state": ACTIVATED (State)
},
"rotatingBarcode": {
"type": AZTEC (BarcodeType),
"valuePattern": "{vdv_barcode}",
"deviceEntitlementSupport": {
"vdvEntitlementDetails": {
"applicationData": string - Hex encoded,
},
},
}
}
Specyfikacja danych aplikacji
Poniżej specyfikacja Motics dla zawartości
applicationData (tag:0x5F07). Wartość applicationData powinna zostać wygenerowana do
z integratora systemu w formacie TLV (tag-długość tagu). Te dane są późniejsze
w większej strukturze danych do zakodowania na końcu jako część kodu QR
w kodzie.
| Tag | Długość | Wartość |
0x9E
|
81 80 |
PodpisOctetString, pierwsze 128 bajtów podpisanych danych dotyczących uprawnieńHasło wyszukiwane przez Google: sigSTB
|
0x9A
|
W zależności od usługi |
Dane resztoweOctetString, dane pozostałych upoważnieńHasło wyszukiwane przez Google: sigSTB cont.
|
0x7F21
|
81 C8 |
Certyfikat wydającyOctetString, dane certyfikatuHasło wyszukiwane przez Google: Cert(puk_SAM)
|
0x42
|
08 |
Numer referencyjny urzędu certyfikacji (CAR)OctetString, wartość CAR: Hasło wyszukiwane przez Google: CAR
|