콜백 추가 및 삭제

이 가이드에서는 Google Wallet API로 콜백을 사용하는 방법을 설명합니다. 유가물이 생성되거나 삭제되면 Google에서 사용자가 선택한 HTTPS 엔드포인트에 콜백을 수행할 수 있습니다. 이 콜백은 클래스별로 다르며 클래스, 객체, 이벤트 유형과 같은 이벤트에 관한 데이터를 포함합니다. 이를 통해 사용자 추가 및 삭제 발생 횟수에 맞춰 대응할 수 있습니다. 예를 들어 이벤트를 애널리틱스 애플리케이션으로 전송하여 프로모션 이벤트 중에 고객 참여도를 추적하도록 콜백을 구성할 수 있습니다.

기본 요건

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

  • POST 요청을 처리하는 HTTPS 엔드포인트를 구축합니다. 이 엔드포인트는 공개적으로 사용할 수 있어야 합니다.
  • 프로그래매틱 방식으로 각 클래스의 콜백 엔드포인트를 업데이트합니다. REST API의 클래스별 callbackOptions 속성을 참고하세요.
  • 권장: Tink 라이브러리를 사용하여 서명을 확인합니다.

콜백 구현

사용자가 객체에 대해 추가 또는 삭제를 수행할 때마다 Google은 클래스별 URL의 추가 또는 삭제에 대한 세부정보를 사용하여 판매자를 콜백합니다. 판매자는 먼저 공개 키를 사용하여 메시지의 진위 여부를 확인해야 합니다. 콜백이 메시지를 확인하면 다운스트림 작업에 콜백을 사용할 수 있습니다.

서명 확인

HTTPS 엔드포인트를 구현할 때 Tink 라이브러리를 사용하여 메시지 서명을 확인하는 것이 좋습니다. 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
  }
}

Expected message format

The message format is JSON that's serialized into a string with the following properties:

Identifier Description
classId

Fully qualified class ID. Uses the following format:

<issuer_id.class_id>
objectId

정규화된 객체 ID입니다. 다음 형식을 사용합니다.

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

Google 서버의 요청 처리

다음은 콜백 엔드포인트로 전송되는 요청 헤더에 있는 키 필드의 목록입니다.

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

요청을 거부하지 않도록 서버를 구성합니다. 이렇게 하려면 robots.txt에서 다음을 설정하면 됩니다.

User-agent: Googlebot
Disallow:

재시도

콜백은 최선의 방식으로 이루어집니다. Google은 일시적인 실패를 처리하기 위해 두 번 시도합니다. 두 번 시도하면 Google은 메시지를 삭제하고 다시 재전송하지 않습니다.

중복 전송

경우에 따라 중복 전송이 발생할 수 있습니다. nonce를 사용하여 중복을 제거하는 것이 좋습니다.