Vous pouvez utiliser l'API Merchant Notifications pour recevoir des notifications push en cas de modification des données du compte. Par exemple, si vous vous abonnez aux notifications de modification de l'état des produits, vous pouvez être averti en temps réel lorsqu'un produit est refusé. Vous pouvez vous abonner aux notifications de vos sous-comptes ou d'autres comptes associés.
Ce guide explique comment gérer les notifications de modification de l'état des produits. Vous pouvez utiliser ces exemples pour gérer les notifications 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:
- Doit être une adresse HTTPS accessible au public avec un certificat SSL valide, signé par une autorité de certification.
- Doit accepter les requêtes HTTP
POST
avec l'en-têteContent-Type
et la valeurapplication/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 pour les modifications de l'état des produits dans un compte marchand spécifique. Utilisez l'ID du marchand du compte qui doit recevoir les notifications comme merchantId
dans l'URL de la requête, et l'ID du marchand du compte pour lequel les notifications doivent être envoyées comme 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 propre référence 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 cette name
pour GET
et DELETE
des abonnements individuels.
Vous pouvez vous abonner aux notifications de modification de l'état des produits pour tous vos comptes associés en incluant "allManagedAccounts": true
au lieu de targetAccount
dans votre demande:
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
pour spécifier les champs que vous souhaitez mettre à jour et 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 pour le 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 de texte lisible à utiliser dans votre implémentation. Voici un exemple de contrôleur Spring Boot 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",
"managingAccount": "accounts/merchantId",
"resourceType": "PRODUCT",
"attribute": "STATUS",
"changes": [{
"oldValue": "eligible",
"newValue": "disapproved",
"regionCode": "US",
"reportingContext": "SHOPPING_ADS"
}, {
"oldValue": "eligible",
"newValue": "disapproved",
"regionCode": "JP",
"reportingContext": "SHOPPING_ADS"
},{
"oldValue": "eligible",
"newValue": "disapproved",
"regionCode": "GE",
"reportingContext": "SHOPPING_ADS"
}],
"resourceId": "ONLINE~en~US~1234",
"resource": "accounts/targetMerchantId/products/ONLINE~en~US~1234",
"expirationTime": "2024-10-22T02:43:47.461464Z"
}
Si aucun champ oldValue
n'est indiqué dans la notification, un nouveau produit a été ajouté à votre compte. Si aucun champ newValue
n'est indiqué, le produit a été supprimé de votre compte.
Le champ reportingContext
n'accepte que (SHOPPING_ADS
, LOCAL_INVENTORY_ADS
, YOUTUBE_SHOPPING
, YOUTUBE_CHECKOUT
) de la valeur d'énumération ReportingContextEnum.
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":
"ewogICJhY2NvdW50IjogImFjY291bnRzLzEyMzQiLAogICJtYW5hZ2luZ0FjY291bnQiOiAiYWNjb3VudHMvNTY3OCIsCiAgInJlc291cmNlVHlwZSI6ICJQUk9EVUNUIiwKICAiYXR0cmlidXRlIjogIlNUQVRVUyIsCiAgImNoYW5nZXMiOiBbewogICAgIm9sZFZhbHVlIjogImVsaWdpYmxlIiwKICAgICJyZWdpb25Db2RlIjogIlVTIiwKICAgICJyZXBvcnRpbmdDb250ZXh0IjogIlNIT1BQSU5HX0FEUyIKICB9XSwKICAicmVzb3VyY2VJZCI6ICJPTkxJTkV+ZW5+VVN+MDAwMDAwMDAwMDAwIiwKICAicmVzb3VyY2UiOiAiYWNjb3VudHMvMTIzNC9wcm9kdWN0cy9PTkxJTkV+ZW5+VVN+MDAwMDAwMDAwMDAwIiwKICAiZXhwaXJhdGlvblRpbWUiOiAiMjAyNC0xMC0yMlQwMjo0Mzo0Ny40NjE0NjRaIgp9"}}' https://{callBackUri}
En réponse à cet appel, votre URI de rappel doit renvoyer un code de réponse positif. Le message décodé doit avoir la valeur suivante:
{
"account": "accounts/1234",
"managingAccount": "accounts/5678",
"resourceType": "PRODUCT",
"attribute": "STATUS",
"changes": [{
"oldValue": "eligible",
"regionCode": "US",
"reportingContext": "SHOPPING_ADS"
}],
"resourceId": "ONLINE~en~US~000000000000",
"resource": "accounts/1234/products/ONLINE~en~US~000000000000",
"expirationTime": "2024-10-22T02:43:47.461464Z"
}