Vous pouvez utiliser l'API Merchant Notifications pour recevoir des notifications push concernant les modifications. aux données du compte. Par exemple, si vous vous abonnez au changement d'état d'un produit vous pouvez être averti en temps réel lorsqu'un produit est refusé. Vous pouvez vous abonner aux notifications sous-comptes ou autres associés Google Cloud.
Ce guide fournit des exemples de gestion des notifications concernant l'état d'un produit
des modifications. Vous pouvez utiliser ces exemples pour gérer les notifications d'autres événements en
en modifiant la valeur du champ registeredEvent
dans vos requêtes. Pour
des types d'événements, consultez la page sur l'API Merchant Notifications
référence.
S'abonner
Pour recevoir des notifications, vous avez besoin d'un callBackUri
. Votre URI de rappel doit
doivent remplir les conditions suivantes:
- Il doit s'agir d'une adresse HTTPS accessible publiquement et dotée d'un certificat SSL valide. signé par une autorité de certification.
- Vous devez accepter les requêtes HTTP
POST
comportant l'en-têteContent-Type
et Valeurapplication/json
. - doit renvoyer l'un des codes de réponse suivants pour confirmer que le
notification a été reçue.
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 conformément aux paramètres avancés par type d'événement, pour minimiser la charge des requêtes push vers un seul URI.
Voici un exemple de demande d'abonnement aux notifications concernant les changements d'état d'un produit
pour un compte marchand spécifique. Utilisez l'ID du marchand du compte
recevoir les notifications en tant que merchantId
dans l'URL de la requête, et
l'ID du marchand du compte pour lequel vous souhaitez recevoir des notifications,
targetMerchantId
dans le corps de la requête. Si votre compte est un compte individuel
compte sans compte associé et que vous souhaitez recevoir des notifications pour votre
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 ce name
pour GET
et DELETE
abonnements individuels.
Vous pouvez vous abonner aux notifications concernant les changements d'état des produits pour l'ensemble de
comptes associés en incluant "allManagedAccounts": true
au lieu d'un
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
Une fois l'abonnement créé, vous recevez des notifications aux
callBackUri
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 texte à utiliser dans votre implémentation. Voici un exemple de contrôleur avec démarrage Spring peut 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
qui a été 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"
Si aucun champ old_value
n'est présent dans la notification, cela signifie qu'un nouveau produit a été
ajoutés à votre compte. Si le champ new_value
n'est pas présent, cela signifie que le produit a été supprimé.
de votre compte.
Le champ reporting_context
n'accepte que (SHOPPING_ADS
, LOCAL_INVENTORY_ADS
, YOUTUBE_SHOPPING
) à partir 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":
"ImFjY291bnQiOiAiYWNjb3VudHMvMTIzNCIKIm1hbmFnaW5nX2FjY291bnQiOiAiYWNjb3VudHMvNTY3OCIKInJlc291cmNlX3R5cGUiOiBQUk9EVUNUCiJhdHRyaWJ1dGUiOiBTVEFUVVMKImNoYW5nZXMiOiB7CiAgIm9sZF92YWx1ZSI6ICJlbGlnaWJsZSIKICAicmVnaW9uX2NvZGUiOiAiVVMiCiAgInJlcG9ydGluZ19jb250ZXh0IjogU0hPUFBJTkdfQURTCn0KInJlc291cmNlX2lkIjogIk9OTElORX5lbn5VU34wMDAwMDAwMDAwMDAiCiJyZXNvdXJjZSI6ICJhY2NvdW50cy8xMjM0L3Byb2R1Y3RzL09OTElORX5lbn5VU34wMDAwMDAwMDAwMDAi"}}' https://{callBackUri}
En réponse à cet appel, votre URI de rappel doit renvoyer une réponse réussie. code. 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"