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çalhoContent-Type
e Valorapplication/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 com base no valor "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": true
em 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"
Se não houver um campo old_value
na notificação, significa que um novo produto foi
foi adicionado à sua conta. Se não houver um campo new_value
, o produto foi excluído.
da sua conta.
O campo reporting_context
é compatível apenas com (SHOPPING_ADS
, LOCAL_INVENTORY_ADS
, YOUTUBE_SHOPPING
) do valor de enumeração ReportingContextEnum.
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"