콜백 추가 및 삭제

이 가이드에서는 Google Wallet API에서 콜백을 사용하는 방법을 설명합니다. 사용자가 패스가 생성되거나 삭제되면 Google은 지정할 수 있습니다 이 콜백은 패스와 관련이 있으며, 데이터를 포함합니다. externalPassId 및 이벤트 유형과 같은 이벤트에 대한 정보. 이는 다음을 수행하는 데 사용할 수 있습니다. 사용자 추가 및 삭제 발생 횟수를 추적합니다. 대상 예를 들어 콜백을 통해 분석 이벤트로 프로모션 이벤트 중 고객 참여도를 추적할 수 있습니다.

기본 요건

시작하기 전에 다음 기본 요건을 검토하세요.

  • POST 요청을 처리하는 HTTPS 엔드포인트를 구축합니다. 이 엔드포인트에 공개될 수 있어야 합니다
  • 프로그래매틱 방식으로 콜백 업데이트 발급기관의 엔드포인트 URL입니다. 자세한 내용은 callbackOptions 드림 속성을 사용할 수 있습니다.
  • 권장: Tink 라이브러리를 사용하여 서명을 확인합니다.

콜백 구현

사용자가 서버에서 추가 또는 삭제할 때마다 패스 Google은 발급기관 콜백 URL입니다. 판매자는 먼저 공개 키를 사용하여 확인할 수 있습니다. 콜백이 메시지를 확인한 후 콜백을 사용하여 사용할 수 있습니다

서명 확인

Tink 라이브러리를 사용하여 메시지 서명을 확인하는 것이 좋습니다. HTTPS 엔드포인트를 구현할 때 생성됩니다 이 Tink 라이브러리 유틸리티인 PaymentMethodTokenRecipient를 제공합니다. 자동으로 서명을 확인하고 확인 즉시 실제 메시지를 반환합니다. 확인할 수 있습니다.

다음 예는 Tink 라이브러리를 사용하여 PaymentMethodTokenRecipient:

import java.io.IOException;
import javax.servlet.http.*;
import com.google.common.io.CharStreams;
import com.google.crypto.tink.apps.paymentmethodtoken.*;

// Replace ISSUER_ID with your issuer id
private static final String RECIPIENT_ID = "ISSUER_ID";

private static final String PUBLIC_KEY_URL = "https://pay.google.com/gp/m/issuer/keys";
private static final String SENDER_ID = "GooglePayPasses";
private static final String PROTOCOL = "ECv2SigningOnly";

private static final GooglePaymentsPublicKeysManager keysManager = new GooglePaymentsPublicKeysManager.Builder()
        .setKeysUrl(PUBLIC_KEY_URL)
        .build();

public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
  try {
    // Extract signed message with signature from POST request body.
    String signedMessage = CharStreams.toString(request.getReader());
    PaymentMethodTokenRecipient recipient =
            new PaymentMethodTokenRecipient.Builder()
                    .protocolVersion(PROTOCOL)
                    .fetchSenderVerifyingKeysWith(keysManager)
                    .senderId(SENDER_ID)
                    .recipientId(RECIPIENT_ID)
                    .build();

    String serializedJsonMessage = recipient.unseal(signedMessage);

    // Use serializedJsonMessage to extract the details
  } catch (Exception e) {
    // Handle the error
  }
}

예상 메시지 형식

메시지 형식은 다음과 같은 문자열로 직렬화된 JSON입니다. 속성:

식별자 설명
externalPassId

정규화된 외부 패스 ID입니다. 다음 형식을 사용합니다.

<issuer_id.external_pass_id>
expTimeMillis EPOCH 이후의 만료 시간(밀리초)입니다. 만료 시간이 지나면 유효하지 않은 것으로 간주해야 합니다.
eventType 다음 경우 del 또는 save일 수 있습니다. DELETESAVE.
nonce 중복 전송을 추적하기 위한 nonce입니다.

Google 서버의 요청 처리

다음은 요청 헤더에 포함된 키 필드 목록에 콜백 엔드포인트로 전송됩니다.

  • 사용자-에이전트: Googlebot
  • 콘텐츠-유형: application/json

요청을 거부하지 않도록 서버를 구성합니다. 방법은 다음과 같습니다. robots.txt에서 다음을 설정합니다.

User-agent: Googlebot
Disallow:

재시도

콜백은 최선의 방식으로 실행됩니다. Google에서 일반적인 재시도 전략을 사용합니다. 콜백 엔드포인트가 응답하지 않거나 중단하고 시도를 단계적으로 중단합니다.

중복 전송

경우에 따라 중복 전송이 발생할 수 있습니다. 이때 nonce하여 중복 데이터를 삭제합니다.