Recevoir des notifications push en cas de modification des données de votre compte

Vous pouvez utiliser l'API Merchant Notifications pour recevoir des notifications push concernant les modifications apportées aux données du compte. Par exemple, si vous vous abonnez aux notifications de changement de l'état d'un produit, vous pouvez être averti en temps réel lorsqu'un produit est refusé. Vous pouvez vous abonner aux notifications pour n'importe lequel de vos sous-comptes ou d'autres comptes associés.

Ce guide fournit des exemples de gestion des notifications concernant les changements d'état d'un produit. Vous pouvez utiliser ces exemples afin de gérer les notifications pour d'autres événements en modifiant la valeur du champ registeredEvent dans vos requêtes. Pour obtenir la liste complète des types d'événements, consultez la documentation de référence de l'API Merchant Notifications.

S'abonner

Pour recevoir des notifications, vous avez besoin d'un callBackUri. Votre URI de rappel doit répondre aux exigences suivantes:

  • Il doit s'agir d'une adresse HTTPS accessible au public, dotée d'un certificat SSL valide et signée par une autorité de certification.
  • Doit accepter les requêtes HTTP POST avec l'en-tête Content-Type et la valeur application/json.
  • Vous devez renvoyer l'un des codes de réponse suivants pour confirmer la réception de la notification.
    • 102
    • 200
    • 201
    • 202
    • 204

Vous pouvez utiliser le même URI de rappel pour plusieurs abonnements. Nous vous recommandons d'utiliser un URI de rappel unique par compte avancé et par type d'événement afin de réduire la charge des requêtes push vers un seul URI.

Voici un exemple de requête permettant de s'abonner aux notifications concernant les changements d'état d'un produit pour un compte marchand spécifique. Utilisez l'ID du marchand du compte qui doit recevoir les notifications en tant que merchantId dans l'URL de la requête et l'ID du marchand du compte pour les recevoir en tant que targetMerchantId dans le corps de la requête. Si votre compte est un compte individuel sans compte associé et que vous souhaitez recevoir des notifications pour votre propre compte, utilisez votre ID de marchand aux deux endroits.

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

Les appels réussis renvoient un name pour votre abonnement, y compris un ID d'abonnement:

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

Vous pouvez utiliser ce name pour GET et DELETE abonnements individuels.

Vous pouvez vous abonner aux notifications concernant les changements d'état des produits pour tous vos comptes associés en incluant "allManagedAccounts": true au lieu d'targetAccount dans votre requête:

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

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

Pour mettre à jour un abonnement existant, utilisez PATCH avec un update_mask afin de spécifier les champs que vous souhaitez mettre à jour, ainsi que les nouvelles valeurs dans le corps JSON:

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

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

Décoder les notifications

Après avoir créé un abonnement, vous recevez des notifications au callBackUri spécifié au format suivant:

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

Les données de notification sont encodées. Vous pouvez décoder les données dans un format texte lisible à utiliser dans votre implémentation. Voici un exemple de contrôleur de démarrage à ressort que vous pouvez utiliser pour traiter les données encodées:

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

Voici un exemple de base64_encoded_string décodé:

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

Tester la mise en œuvre

Voici un exemple de notification que vous pouvez utiliser pour tester votre URI de rappel et le décodage:

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

En réponse à cet appel, votre URI de rappel doit renvoyer un code de réponse réussi. Le message décodé doit avoir la valeur suivante:

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