단말기에서 패스를 요청하는 방식 이해하기

판매자의 단말기에서 특정 패스를 요청하는 방법에는 여러 가지가 있습니다.

단말기와 Google Pay 앱 간의 통신

단말기는 회수자 ID로 식별됩니다. 이 ID는 패스 개발자가 Google Pay API for Passes를 통해 상호작용하는 Google 백엔드에서 패스 사용 발급기관 ID에 매핑됩니다.

스마트 탭이 발생하면 단말기가 Google Pay 앱으로 회수자 ID를 전송합니다. Google Pay 앱은 각 패스의 패스 사용 발급기관을 살펴보고 회수자 ID를 찾은 다음 일치하면 해당 단말기로 특정 패스를 전송합니다.

설정 방법은 판매자 단말기 설정을 참조하세요.

다음 그림에서는 그 과정을 보여줍니다.

설정 1

설정 1: 위의 다이어그램에서 Issuer_id: 2018은 하나의 클래스와 하나의 객체를 갖고 있습니다. 이 발급기관 계정은 패스 개발자가 사용합니다. Class_id: abc 클래스는 redemptionIssuers['1990'] 객체를 포함합니다. 정의에 따라 Issuer_id: '1990'은 판매자 fooPizza를 나타내는 패스 사용 발급기관 ID입니다. 단말기의 회수자 ID는 12345678입니다. 이 ID는 패스 사용 발급기관 1990에서 설정된 회수자 ID에 매핑됩니다. Class_id: abc의 모든 객체는 회수자 ID 12345678을 사용하는 리더에 전달됩니다.

설정 1.1

설정 1.1: 위 예시의 fooPizza와 yumPie에서는 동일한 패스인 object_id: 123을 사용할 수 있습니다. 하나의 클래스에 여러 개의 패스 사용 발급기관이 있을 수 있습니다. 발급기관과 일치하는 패스 사용 발급기관의 계정은 사용하는 단말기에 계정별로 고유한 회수자 ID를 갖고 있습니다.

설정 2

설정 2: 위의 다이어그램에서는 클래스가 자체 발급기관 계정을 패스 사용 발급기관으로 설정하는 방식을 보여줍니다. Issuer_id: 2018은 하나의 클래스와 하나의 객체를 포함합니다. Class_id: abc 클래스는 Issuer_id: 2018이라는 패스 사용 발급기관 객체를 포함합니다. 정의에 따라 Issuer_id: 2018은 판매자 fooPizza를 나타내는 패스 사용 발급기관 ID입니다. 단말기의 회수자 ID는 12345678입니다. 이 ID는 Class_id: abc도 포함된 Issuer_id: 2018로 구성된 회수자 ID에 매핑됩니다. Class_id: abc의 모든 객체는 회수자 ID 12345678을 사용하는 단말기에 전달됩니다.

Google Pay 앱에서의 사용자 선택

Google Pay 앱으로 전송되는 내용은 사용자가 자신의 기기에서 보는 내용에 따라 달라집니다.

사용자가 Google Pay에서 패스를 확인한 다음 스마트 탭을 실행할 경우 패스의 회수자 ID가 패스를 요청하는 단말기와 일치하면 해당 패스가 전송됩니다. 이 과정은 클래스 또는 객체에 설정된 속성을 기준으로 한 유효성과는 상관없이 이루어집니다.

사용자가 Google Pay의 홈 탭에 있거나 기기 화면이 잠금 해제된 상태에 있을 때처럼 패스를 보고 있지 않은 경우도 있을 수 있습니다. 사용자가 패스를 보고 있지 않아도 회수자 ID를 기준으로 유효하고 사용 가능한 패스가 하나뿐이면 해당 패스가 전달됩니다.

사용자에게 회수자 ID를 기준으로 유효하고 사용 가능한 패스가 여러 개 있으면 Google Pay는 다음 작업 중 하나를 수행합니다.

  • 사용자가 원하는 사항을 선택 후 탭하여 전달할 수 있는 선택 캐러셀을 표시합니다.
  • 유효한 패스가 하나뿐이면 해당 패스를 전달합니다.

패스의 유효성은 패스 카테고리에 따라 다릅니다. 상태 및 사용 날짜와 관련된 속성(예: object.state 또는 object.validTimeInterval)을 확인해야 합니다.

스마트 탭 회수 예시

다음 예시에서는 가상의 발급기관 포인트 제도를 보여줍니다.

iLuvCoffeeEat-fooBacon-R-us
발급기관 ID123456789
회수자 ID1114444444477777777
포인트 카드 클래스R-basicMy Rewards- 없음 -
포인트 카드 클래스R-gold- 없음 -- 없음 -

iLuvCoffee에는 패스를 생성하는 데 사용되는 두 가지 포인트 카드 클래스인 R-basic 제도와 R-gold 제도가 있습니다. 한편, Eat-foo에는 자체적인 My Rewards 제도가 있으며, Bacon-R-us에는 포인트 제도가 없습니다.

이제 다음과 같이 구성하려 한다고 가정해보세요.

  • R-basic은 Eat-foo와 Bacon-R-us에서 사용 가능합니다.
  • My Rewards는 Eat-foo에서 사용 가능합니다.
  • R-gold는 스마트 탭을 지원하지 않습니다.

이 구성의 경우, 포인트 카드 클래스는 다음과 같은 패스 사용 발급기관 ID를 사용해 설정합니다.

  • R-basic 패스 사용 발급기관 ID: 456, 789
  • My Rewards 패스 사용 발급기관 ID: 456
  • R-gold 패스 사용 발급기관 ID: - 없음 -

이 구성에 따라, 이 클래스들의 인스턴스에는 다음과 같은 회수자 ID를 설정합니다.

  • R-basic 회수자 ID: 44444444, 77777777
  • My Rewards 회수자 ID: 44444444
  • R-gold 회수자 ID: - 없음 -

스마트 탭 실행 시 회수자 인증

각 발급자 계정에는 여러 개의 공개 보안 키가 연결될 수 있습니다. 이러한 공개 키는 Google Pay 앱에 동기화되어 저장되었다가 사용자가 연결된 회수자 ID 중 하나를 가진 것으로 간주되는 단말기를 탭할 때 사용됩니다.

앞의 에서 이어서, 발급자에도 다음과 같은 키가 설정되어 있다고 가정해 보겠습니다.

iLuvCoffeeEat-fooBacon-R-us
발급기관 ID123456789
회수자 ID111111114444444477777777
포인트 카드 클래스R-basicMy Rewards- 없음 -
공개 키aaabbb- 없음 -

Google Pay 계정에 iLuvCoffee의 R-basic 포인트 카드와 Eat-foo의 My Rewards 포인트 카드가 있는 사용자가 여러 단말기를 사용하려고 시도합니다.

이 두 가지 포인트 카드 클래스에는 다음과 같이 패스 사용 발급자가 설정되어 있습니다.

  • R-basic 패스 사용 발급기관 ID: 456, 789
  • My Rewards 패스 사용 발급기관 ID: 456

가능한 결과는 다음과 같습니다.

iLuvCoffee 단말기: Google Pay 애플리케이션이 이론적 인증을 거쳐 단말기가 실제로 iLuvCoffee에 속하는지 확인할 수 있습니다. 하지만 iLuvCoffee는 해당 포인트 카드 클래스 R-basic의 발급기관을 사용할 수 있도록 설정되지 않았습니다. 따라서 이 경우 아무것도 전송되지 않습니다.

Eat-foo 단말기: Google Pay 애플리케이션은 공개 키 'bbb'를 사용하는 Eat-foo 단말기를 인증합니다. 사용자가 홈 탭을 보고 있는 경우처럼 R-basic 또는 My Rewards 패스의 세부정보 화면이 표시되지 않은 경우 애플리케이션은 보유한 패스 중에서 Eat-foo에서 사용 가능한 패스를 검색합니다. 그 결과 R-basic 카드와 My Rewards 카드를 찾으면 사용자가 전송할 패스를 선택하여 탭할 수 있도록 캐러셀을 표시합니다.

반면, 사용자가 기기에 R-basic이 표시된 상태에서 스마트 탭을 실행하면 R-basic만 전송됩니다.

Bacon-R-us 단말기: 이 플랫폼에는 Bacon-R-us의 공개 키가 없으므로 판매자가 R-basic 카드에 패스 사용 발급기관으로 등록되어 있더라도 단말기를 인증할 수 없으며 아무 것도 전송되지 않습니다.

인증 제한

패스가 Google Pay 앱과 동기화되면 해당 패스의 모든 패스 사용 발급기관이 Google 백엔드에서 조회됩니다. 각 패스 사용 발급기관에 해당하는 회수자 ID, 공개 키, 키 버전이 Google Pay 앱에 해당 패스와 관련해 로컬로 저장됩니다.

한 회수자 ID에 여러 개의 공개 키 및 키 버전이 존재할 수 있습니다. 또한 패스 하나에 회수자 ID와 일대일로 매핑되는 패스 사용 발급기관 ID가 여러 개 있을 수 있습니다.

단말기에서 사용할 수 있는 패스가 없으면 Google Pay 앱에서 해당 단말기를 인증하지 않습니다. 이는 회수자 ID 및 요청된 키 버전으로 식별됩니다. 패스의 공개 키를 업데이트하려는 경우 기기가 인터넷에 연결되어 있어야 Google 백엔드에서 새 공개 키를 가져올 수 있습니다.

하나의 패스는 동시에 여러 공개 키와 연결될 수 있습니다. 동일한 패스에 대해 여러 개의 공개 키를 설정하려면 판매자용 스마트 탭 사용 설정을 참조하세요.

패스에서 전송되는 값

모든 카테고리의 객체는 이 문자열 속성 object.smartTapRedemptionValue를 설정해야 합니다.

객체에 해당하는 클래스가 스마트 탭을 사용할 수 있게 되면 이 값이 단말기로 전송됩니다.

POS와의 통합을 기반으로 이 값을 사용하여 사용자의 패스를 식별하고, 사용자가 판매자의 단말기에서 성공적으로 탭한 후에는 다음 작업을 수행합니다.

  1. POS에서 사용자의 잔액 또는 상태를 업데이트합니다.
  2. POS에서의 거래에 따라 백엔드를 업데이트합니다.
  3. 거래가 Google Pay 패스에 반영되도록 객체에 대한 업데이트를 실행합니다.

단말기와 Google Pay 앱은 NFC로 전송되는 모든 데이터의 암호화를 처리합니다. 단말기는 스마트 탭이 발생한 후 데이터의 복호화를 처리합니다. 데이터 내에는 전송된 각 패스를 나타내는 서비스 객체 NDEF 레코드가 있습니다. 서비스 객체의 Service number NDEF Record에는 패스의 object.smartTapRedemptionValue에 설정된 값이 들어 있는 페이로드가 있습니다. 따라서 패스 개발자는 아무것도 암호화할 필요가 없습니다. 패스 개발자가 보안 강화를 위해 추가 암호화를 원하는 경우에는 POS 시스템에서만 이를 복호화할 수 있도록 값을 설정해야 합니다. 해당 암호화 프로세스는 패스 개발자와 POS 담당자가 처리해야 합니다.