Hesap verilerinizde yapılan değişikliklerle ilgili push bildirimleri alın

Hesap verilerindeki değişikliklerle ilgili push bildirimleri almak için Merchant Notifications API'yi kullanabilirsiniz. Örneğin, ürün durumu değişikliği bildirimlerine abone olursanız bir ürün onaylanmadığında gerçek zamanlı olarak bildirim alabilirsiniz. Alt hesaplarınızın veya diğer bağlı hesaplarınızın bildirimlerine abone olabilirsiniz.

Bu kılavuzda, ürün durumu değişiklikleriyle ilgili bildirimlerin nasıl yönetileceği hakkında örnekler verilmektedir. İsteklerinizdeki registeredEvent alanının değerini değiştirerek diğer etkinliklerle ilgili bildirimleri yönetmek için bu örnekleri kullanabilirsiniz. Etkinlik türlerinin tam listesi için Merchant Notifications API referansını inceleyin.

Abone ol

Bildirim almak için callBackUri gereklidir. Geri çağırma URI'nız aşağıdaki gereksinimleri karşılamalıdır:

  • Sertifika yetkilisi tarafından imzalanmış, geçerli bir SSL sertifikasına sahip, herkes tarafından erişilebilen bir HTTPS adresi olmalıdır.
  • Content-Type üstbilgisi ve application/json değerine sahip HTTP POST istekleri kabul edilmelidir.
  • Bildirimin alındığını onaylamak için aşağıdaki yanıt kodlarından biri döndürülmelidir.
    • 102
    • 200
    • 201
    • 202
    • 204

Birden çok abonelik için aynı geri çağırma URI'sini kullanabilirsiniz. Tek bir URI'ye yönelik push isteği yükünü en aza indirmek için her etkinlik türü için gelişmiş hesap başına benzersiz bir geri çağırma URI'si kullanmanızı öneririz.

Aşağıda, belirli bir satıcı hesabının ürün durumu değişiklikleriyle ilgili bildirimlere abone olmaya yönelik örnek bir istek verilmiştir. Bildirimleri alması gereken hesabın satıcı kimliğini istek URL'sinde merchantId, bildirim almak için ise hesabın satıcı kimliğini istek gövdesinde targetMerchantId olarak kullanın. Hesabınız bağlı hesabı olmayan bağımsız bir hesapsa ve kendi hesabınızla ilgili bildirim almak istiyorsanız her iki yerde de kendi satıcı kimliğinizi kullanın.

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

Başarılı aramalar, aboneliğiniz için abonelik kimliği içeren bir name döndürür:

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

Bu name aboneliğini GET ve DELETE ayrı abonelik için kullanabilirsiniz.

İsteğinize bir targetAccount yerine "allManagedAccounts": trueekleyerek tüm bağlı hesaplarınız için ürün durumu değişiklikleriyle ilgili bildirimlere abone olabilirsiniz:

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

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

Mevcut bir aboneliği güncellemek istiyorsanız güncellemek istediğiniz alanları ve JSON gövdesindeki yeni değerleri belirtmek için PATCH öğesini update_mask ile kullanın:

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

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

Bildirimlerin kodunu çözme

Abonelik oluşturduktan sonra, belirtilen callBackUri için aşağıdaki biçimde bildirimler alırsınız:

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

Bildirim verileri kodlanır. Uygulamanızda kullanmak için verilerin kodunu okunabilir bir metin biçimine dönüştürebilirsiniz. Kodlanmış verileri işlemek için kullanabileceğiniz örnek bir bahar başlatma denetleyicisi aşağıda verilmiştir:

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

Kodu çözülmüş bir base64_encoded_string örneği aşağıda verilmiştir:

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

Uygulamanızı test etme

Aşağıda, geri çağırma URI'nizi ve kod çözmeyi test etmek için kullanabileceğiniz örnek bir bildirim verilmiştir:

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

Bu çağrıya yanıt olarak, geri çağırma URI'nız başarılı bir yanıt kodu döndürmelidir. Kodu çözülmüş mesaj şu değere sahip olmalıdır:

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