계정 데이터 변경에 대한 푸시 알림 받기

Merchant Notifications API를 사용하여 계정 데이터 변경사항에 대한 푸시 알림을 받을 수 있습니다. 예를 들어 제품 상태 변경 알림을 구독하면 제품이 비승인되었을 때 실시간으로 알림을 받을 수 있습니다. 하위 계정 또는 다른 연결된 계정의 알림을 구독할 수 있습니다.

이 가이드에서는 제품 상태 변경 알림을 관리하는 방법의 예를 제공합니다. 이러한 예를 사용하여 요청의 registeredEvent 필드 값을 변경하여 다른 이벤트의 알림을 관리할 수 있습니다. 이벤트 유형의 전체 목록은 Merchant Notifications API 참조를 확인하세요.

구독

알림을 받으려면 callBackUri가 필요합니다. 콜백 URI는 다음 요구사항을 충족해야 합니다.

  • 인증 기관에서 서명한 유효한 SSL 인증서가 있는 공개적으로 액세스할 수 있는 HTTPS 주소여야 합니다.
  • Content-Type 헤더 및 application/json 값이 있는 HTTP POST 요청을 수락해야 합니다.
  • 알림이 수신되었음을 확인하려면 다음 응답 코드 중 하나를 반환해야 합니다.
    • 102
    • 200
    • 201
    • 202
    • 204

여러 구독에 동일한 콜백 URI를 사용할 수 있습니다. 단일 URI에 대한 푸시 요청 부하를 최소화하려면 이벤트 유형별로 고급 계정별로 고유한 콜백 URI를 사용하는 것이 좋습니다.

다음은 특정 판매자 계정의 제품 상태 변경 알림 구독 요청의 예입니다. 요청 URL에서 알림을 받아야 하는 계정의 판매자 ID를 merchantId로, 알림을 받을 계정의 판매자 ID를 요청 본문에서 targetMerchantId로 사용합니다. 연결된 계정이 없는 독립형 계정이며 자체 계정에 대한 알림을 받으려는 경우 두 곳 모두에서 자신의 판매자 ID를 사용하세요.

POST https://merchantapi.googleapis.com/notifications/v1beta/accounts/merchantId/notificationsubscriptions/
{
  "registeredEvent": "PRODUCT_STATUS_CHANGE",
  "targetAccount": "accounts/targetMerchantId",
  "callBackUri": "https://example.com"
}

호출이 성공하면 정기 결제 ID를 포함하여 정기 결제의 name가 반환됩니다.

{
  "name":"accounts/merchantId/notificationsubscriptions/subscriptionId",
  "registeredEvent": "PRODUCT_STATUS_CHANGE",
  "targetAccount": "accounts/targetMerchantId",
  "callBackUri": "https://example.com"
}

name을(를) 사용하여 GETDELETE 개별 구독을 할 수 있습니다.

요청에 targetAccount 대신 "allManagedAccounts": true를 포함하여 연결된 모든 계정의 제품 상태 변경에 대한 알림을 구독할 수 있습니다.

POST https://merchantapi.googleapis.com/notifications/v1beta/accounts/merchantId/notificationsubscriptions/

{
  "registeredEvent": "PRODUCT_STATUS_CHANGE",
  "allManagedAccounts": true,
  "callBackUri": "https://example.com"
}

기존 정기 결제를 업데이트하려면 PATCHupdate_mask와 함께 사용하여 업데이트할 필드와 JSON 본문의 새 값을 지정합니다.

PATCH /notifications/v1beta/accounts/merchantId/notificationsubscriptions/subscriptionId?update_mask=callBackUri

{
  "​callBackUri": "https://my-own-personal-domain.com"
}

알림 디코딩

정기 결제를 만들면 지정된 callBackUri로 다음 형식의 알림을 수신합니다.

{"message":{"data":"{base64_encoded_string}"}}

알림 데이터가 인코딩됩니다. 데이터를 읽을 수 있는 텍스트 형식으로 디코딩하여 구현에 사용할 수 있습니다. 다음은 인코딩된 데이터를 처리하는 데 사용할 수 있는 샘플 스프링 부팅 컨트롤러입니다.

@RestController
public class ExampleController {
@RequestMapping(value = "/push",
  method = RequestMethod.POST,
  consumes = {"application/json"},
  produces = {"text/plain"})
  @ResponseStatus(HttpStatus.OK)
  public void doStuff(@RequestBody String message) {
        //wrapped message
        JSONObject jsonObject = new JSONObject(message);
        JSONObject jsonMessage = jsonObject.getJSONObject("message");
        message = jsonMessage.getString("data");
        byte[] decodedBytes = Base64.getDecoder().decode(message);
        String decodedMessage = new String(decodedBytes);
        // Implement your business logic here
  }
}

다음은 디코딩된 base64_encoded_string의 예입니다.

"account": "accounts/targetMerchantId"
"managing_account": "accounts/merchantId"
"resource_type": PRODUCT
"attribute": STATUS
"changes": {
  "old_value": "eligible"
  "new_value": "disapproved"
  "region_code": "GE"
  "reporting_context": SHOPPING_ADS
},
"changes" {
  "old_value": "eligible"
  "new_value": "disapproved"
  "region_code": "JP"
  "reporting_context": SHOPPING_ADS
},
changes {
  "old_value": "eligible"
  "new_value": "disapproved"
  "region_code": "US"
  "reporting_context": SHOPPING_ADS
}
resource_id: "ONLINE~en~US~1234"
resource: "accounts/targetMerchantId/products/ONLINE~en~US~1234"

구현 테스트

다음은 콜백 URI 및 디코딩을 테스트하는 데 사용할 수 있는 샘플 알림입니다.

curl --header "Content-Type: application/json" --header "Accept: text/plain" --request POST --data '{"message":{"data":
"ImFjY291bnQiOiAiYWNjb3VudHMvMTIzNCIKIm1hbmFnaW5nX2FjY291bnQiOiAiYWNjb3VudHMvNTY3OCIKInJlc291cmNlX3R5cGUiOiBQUk9EVUNUCiJhdHRyaWJ1dGUiOiBTVEFUVVMKImNoYW5nZXMiOiB7CiAgIm9sZF92YWx1ZSI6ICJlbGlnaWJsZSIKICAicmVnaW9uX2NvZGUiOiAiVVMiCiAgInJlcG9ydGluZ19jb250ZXh0IjogU0hPUFBJTkdfQURTCn0KInJlc291cmNlX2lkIjogIk9OTElORX5lbn5VU34wMDAwMDAwMDAwMDAiCiJyZXNvdXJjZSI6ICJhY2NvdW50cy8xMjM0L3Byb2R1Y3RzL09OTElORX5lbn5VU34wMDAwMDAwMDAwMDAi"}}' https://{callBackUri}

이 호출에 대한 응답으로 콜백 URI는 성공한 응답 코드를 반환해야 합니다. 디코딩된 메시지에는 다음 값이 있어야 합니다.

"account": "accounts/1234"
"managing_account": "accounts/5678"
"resource_type": PRODUCT
"attribute": STATUS
"changes": {
  "old_value": "eligible"
  "region_code": "US"
  "reporting_context": SHOPPING_ADS
}
"resource_id": "ONLINE~en~US~000000000000"
"resource": "accounts/1234/products/ONLINE~en~US~000000000000"