이 가이드에서는 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
DELETE 및 SAVE 의 경우 del 또는 save 일 수 있습니다.
nonce
중복 전송을 추적하는 nonce입니다.
Google 서버의 요청 처리다음은 콜백 엔드포인트로 전송되는 요청 헤더에 있는 키 필드의 목록입니다.
요청을 거부하지 않도록 서버를 구성합니다. 이렇게 하려면 User-agent: Googlebot Disallow: 재시도콜백은 최선의 방식으로 이루어집니다. Google은 일시적인 실패를 처리하기 위해 두 번 시도합니다. 두 번 시도하면 Google은 메시지를 삭제하고 다시 재전송하지 않습니다. 중복 전송
경우에 따라 중복 전송이 발생할 수 있습니다. 달리 명시되지 않는 한 이 페이지의 콘텐츠에는 Creative Commons Attribution 4.0 라이선스에 따라 라이선스가 부여되며, 코드 샘플에는 Apache 2.0 라이선스에 따라 라이선스가 부여됩니다. 자세한 내용은 Google Developers 사이트 정책을 참조하세요. 자바는 Oracle 및/또는 Oracle 계열사의 등록 상표입니다. 최종 업데이트: 2024-03-26(UTC)
[{
"type": "thumb-down",
"id": "missingTheInformationINeed",
"label":"필요한 정보가 없음"
},{
"type": "thumb-down",
"id": "tooComplicatedTooManySteps",
"label":"너무 복잡함/단계 수가 너무 많음"
},{
"type": "thumb-down",
"id": "outOfDate",
"label":"오래됨"
},{
"type": "thumb-down",
"id": "translationIssue",
"label":"번역 문제"
},{
"type": "thumb-down",
"id": "samplesCodeIssue",
"label":"샘플/코드 문제"
},{
"type": "thumb-down",
"id": "otherDown",
"label":"기타"
}]
[{
"type": "thumb-up",
"id": "easyToUnderstand",
"label":"이해하기 쉬움"
},{
"type": "thumb-up",
"id": "solvedMyProblem",
"label":"문제가 해결됨"
},{
"type": "thumb-up",
"id": "otherUp",
"label":"기타"
}]
|