Dapatkan notifikasi push untuk perubahan pada data akun Anda

Anda dapat menggunakan Merchant Notifications API untuk mendapatkan notifikasi push terkait perubahan pada data akun. Misalnya, jika Anda berlangganan perubahan status produk notifikasi, Anda dapat diberi tahu secara real time ketika produk tidak disetujui. Anda dapat berlangganan notifikasi untuk sub-akun atau akun tertaut lainnya akun layanan.

Panduan ini memberikan contoh cara mengelola notifikasi untuk status produk perubahan. Anda dapat menggunakan contoh ini untuk mengelola notifikasi untuk peristiwa lain dengan mengubah nilai kolom registeredEvent dalam permintaan Anda. Untuk daftar jenis peristiwa, lihat Merchant Notifications API .

Langganan

Untuk menerima notifikasi, Anda memerlukan callBackUri. URI callback Anda harus memenuhi persyaratan berikut:

  • Harus berupa alamat HTTPS yang dapat diakses oleh publik dengan sertifikat SSL yang valid, yang ditandatangani oleh {i>certificate authority<i}.
  • Harus menerima permintaan POST HTTP dengan Content-Typeheader dan Nilai application/json.
  • Harus mengembalikan salah satu kode respons berikut untuk mengonfirmasi bahwa notifikasi diterima.
    • 102
    • 200
    • 201
    • 202
    • 204

Anda dapat menggunakan URI callback yang sama untuk beberapa langganan. Sebaiknya gunakan URI callback unik per tindakan akun, per jenis peristiwa hingga meminimalkan beban permintaan push ke satu URI.

Berikut adalah contoh permintaan berlangganan notifikasi untuk perubahan status produk untuk akun penjual tertentu. Gunakan ID penjual akun yang seharusnya menerima notifikasi sebagai merchantId dalam URL permintaan, dan ID penjual akun yang akan menerima notifikasi sebagai targetMerchantId dalam isi permintaan. Jika akun Anda adalah akun akun tanpa akun tertaut, dan Anda ingin menerima pemberitahuan untuk menggunakan ID penjual Anda sendiri di kedua tempat tersebut.

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

Panggilan yang berhasil akan menampilkan name untuk langganan, termasuk ID langganan:

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

Anda dapat menggunakan name ini untuk GET dan DELETE langganan individual.

Anda dapat berlangganan notifikasi untuk mengetahui perubahan status produk untuk semua akun tertaut dengan menyertakan "allManagedAccounts": true, bukan targetAccount dalam permintaan Anda:

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

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

Untuk memperbarui langganan yang ada, gunakan PATCH dengan update_mask untuk menentukan kolom yang ingin Anda perbarui, dan nilai baru dalam isi JSON:

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

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

Mendekode notifikasi

Setelah membuat langganan, Anda akan menerima notifikasi tentang callBackUri dalam format berikut:

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

Data notifikasi dienkode. Anda dapat memecahkan kode data menjadi teks yang dapat dibaca. yang akan digunakan dalam implementasi Anda. Berikut adalah contoh {i>booting<i} musim semi yang Anda gunakan untuk memproses data yang dienkode:

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

Berikut adalah contoh base64_encoded_string yang telah didekode:

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

Menguji implementasi Anda

Berikut adalah contoh notifikasi yang dapat Anda gunakan untuk menguji URI callback dan decoding:

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

Sebagai respons terhadap panggilan ini, URI callback Anda akan menampilkan respons yang berhasil dari kode Anda. Pesan yang didekode harus memiliki nilai berikut:

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