Receber notificações push de alterações nos dados da sua conta

Você pode usar a API Merchant Notifications para receber notificações push sobre mudanças. aos dados da conta. Por exemplo, se você assina a alteração de status do produto notificações, você pode ser notificado em tempo real quando um produto é reprovado. Você pode se inscrever para receber notificações de qualquer um de seus subcontas ou outras contas vinculadas contas.

Neste guia, mostramos exemplos de como gerenciar notificações de status do produto mudanças. Você pode usar esses exemplos para gerenciar notificações para outros eventos mudando o valor do campo registeredEvent nas suas solicitações. Para uma lista dos tipos de eventos, consulte a API Merchant Notifications como referência.

Inscrever-se

Para receber notificações, você precisa do callBackUri. Seu URI de callback precisa atendem aos seguintes requisitos:

  • Precisa ser um endereço HTTPS de acesso público com um certificado SSL válido. assinado por uma autoridade certificadora.
  • Precisa aceitar solicitações POST HTTP com o cabeçalho Content-Type e Valor application/json.
  • Deve retornar um dos seguintes códigos de resposta para confirmar que o for recebida.
    • 102
    • 200
    • 201
    • 202
    • 204

É possível usar o mesmo URI de callback para várias assinaturas. Recomendamos usar um URI de callback exclusivo de acordo com "conta de serviço", por tipo de evento, minimizar o carregamento de solicitações de push para um único URI.

Este é um exemplo de solicitação para se inscrever em notificações sobre alterações no status de produtos para uma conta de comerciante específica. Use o ID do comerciante da conta receber as notificações como merchantId no URL da solicitação; e ID do comerciante da conta que receberá notificações sobre como o targetMerchantId no corpo da solicitação. Se sua conta for independente, sem contas vinculadas e quiser receber notificações sobre a conta, use seu ID do comerciante nos dois lugares.

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

Chamadas bem-sucedidas retornam um name para sua assinatura, incluindo um ID de assinatura:

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

Você pode usar esse name para GET e DELETE assinaturas individuais.

Você pode se inscrever para receber notificações sobre alterações no status dos produtos de todos os seus contas vinculadas incluindo "allManagedAccounts": trueem vez de uma targetAccount na sua solicitação:

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

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

Para atualizar uma assinatura, use PATCH com um update_mask para especificar os campos que você quer atualizar e os novos valores no corpo JSON:

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

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

Decodificar notificações

Após criar uma inscrição, você receberá notificações para o callBackUri no seguinte formato:

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

Os dados de notificação são codificados. Você pode decodificar os dados para um texto legível formato a ser usado na sua implementação. Este é um exemplo de controlador de inicialização pode usar para processar os dados codificados:

@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
  }
}

Confira um exemplo de base64_encoded_string que foi decodificado:

"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"

Como testar a implementação

Este é um exemplo de notificação que pode ser usado para testar o URI de callback e a decodificação:

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

Em resposta a essa chamada, seu URI de callback deve retornar uma resposta bem-sucedida ou código-fonte. A mensagem decodificada precisa ter o seguinte valor:

"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"