Terima kejadian Stripe di endpoint webhook Anda
Dengarkan kejadian di akun Stripe pada endpoint webhook sehingga integrasi Anda dapat secara otomatis memicu reaksi.
Kirim kejadian ke akun AWS Anda
Anda sekarang dapat mengirim kejadian secara langsung ke Amazon EventBridge sebagai tujuan kejadian.
Ketika membuat integrasi Stripe, Anda mungkin menginginkan aplikasi menerima kejadian yang berlangsung di akun Stripe, sehingga sistem backend Anda dapat menjalankan tindakan dengan semestinya.
Buat tujuan kejadian untuk menerima kejadian di endpoint webhook HTTPS. Setelah mendaftarkan endpoint webhook, Stripe dapat mendorong data kejadian secara aktual ke endpoint webhook aplikasi Anda bila kejadian berlangsung di akun Stripe. Stripe menggunakan HTTPS untuk mengirim kejadian webhook ke aplikasi Anda sebagai payload JSON yang menyertakan objek Kejadian.
Menerima kejadian webhook membantu Anda merespons kejadian asinkron, seperti bila bank pelanggan mengonfirmasi pembayaran, pelanggan mempersengketakan charge, atau pembayaran rutin berhasil.
Anda juga dapat menerima kejadian di Amazon EventBridge dengan tujuan kejadian.
Memulai
Untuk mulai menerima kejadian webhook di aplikasi Anda:
- Buat handler endpoint webhook untuk menerima permintaan POST data kejadian.
- Coba handler endpoint webhook Anda secara lokal menggunakan Stripe CLI.
- Buat tujuan kejadian baru untuk endpoint webhook Anda.
- Amankan endpoint webhook Anda.
Anda dapat mendaftarkan dan membuat satu endpoint untuk menangani beberapa tipe kejadian yang berbeda secara bersamaan, atau menyiapkan masing-masing endpoint bagi kejadian spesifik.
Perilaku tipe kejadian yang tidak didukung untuk tujuan kejadian organisasi
Stripe mengirimkan sebagian besar tipe kejadian secara asinkron; tetapi, untuk tipe kejadian tertentu, Stripe menunggu respons. Ada atau tidaknya respons dari tujuan kejadian secara langsung memengaruhi tindakan Stripe terkait tipe kejadian spesifik ini.
Tujuan organisasi menawarkan dukungan terbatas untuk tipe kejadian yang memerlukan respons:
- Anda tidak dapat berlangganan
issuing_
untuk tujuan organisasi. Sebagai gantinya, siapkan endpoint webhook di akun Stripe dalam organisasi untuk berlangganan tipe kejadian ini. Gunakanauthorization. request issuing_
untuk mengotorisasi permintaan pembelian secara real-time.authorization. request - Anda dapat berlangganan
checkout_
untuk tujuan organisasi. Namun, hal ini tidak menangani perilaku pengalihan bila Anda menyematkan Checkout secara langsung di situs web atau mengalihkan pelanggan ke halaman pembayaran yang di-hosting Stripe. Mengirimkan kejadiansessions. completed checkout_
ke tujuan organisasi tidak akan memengaruhi perilaku pengalihan. Untuk memengaruhi perilaku pengalihan Checkout, proseslah tipe kejadian ini dengan endpoint webhook yang dikonfigurasi di akun Stripe dalam organisasi.sessions. completed - Anda dapat berlangganan
invoice.
untuk tujuan organisasi. Namun, tidak berhasil menanggapi kejadian ini tidak memengaruhi finalisasi invoice otomatis saat menggunakan penagihan otomatis. Untuk memengaruhi finalisasi invoice otomatis melalui respons endpoint webhook, proseslah tipe kejadian ini dengan endpoint webhook yang dikonfigurasi di akun Stripe dalam organisasi.created
Buat handler
Siapkan fungsi endpoint HTTP atau HTTPS yang dapat menerima permintaan webhook dengan metode POST. Jika Anda masih mengembangkannya pada mesin lokal, fungsi endpoint dapat menggunakan HTTP. Setelah dapat diakses secara publik, fungsi endpoint webhook Anda harus menggunakan HTTPS.
Siapkan fungsi endpoint Anda sehingga fungsi tersebut:
- Menangani permintaan POST dengan payload JSON yang terdiri dari objek kejadian.
- Untuk handler kejadian organisasi, memeriksa nilai
context
untuk menentukan akun dalam organisasi yang menghasilkan kejadian, kemudian mengatur headerStripe-Context
yang sesuai dengan nilaicontext
. - Segera mengembalikan kode status (
2xx
) yang berhasil sebelum logika kompleks yang mungkin menyebabkan waktu habis. Misalnya, Anda harus mengembalikan tanggapan200
sebelum memperbarui invoice pelanggan, seperti yang dibayarkan dalam sistem akuntansi Anda.
Catatan
Atau, Anda dapat membangun fungsi endpoint webhook dalam bahasa pemrograman menggunakan pembangun endpoint webhook interaktif kami.
Contoh endpoint
Potongan kode ini adalah fungsi webhook yang dikonfigurasi untuk memeriksa kejadian yang diterima dari akun Stripe, menangani kejadian, dan mengembalikan tanggapan 200
. Referensikan handler kejadian snapshot saat Anda menggunakan sumber daya API v1, dan referensikan handler kejadian tipis saat Anda menggunakan sumber daya API v2.
Contoh handler organisasi
Potongan kode ini adalah fungsi endpoint webhook yang dikonfigurasi untuk memeriksa kejadian yang diterima di organisasi, menangani kejadian, dan mengembalikan tanggapan 200
. Handler memeriksa akun yang menerapkan kejadian yang diterima dengan memeriksa bidang context
pada payload kejadian, kemudian menggunakan kunci API akun yang sesuai untuk panggilan API berikutnya di akun.
This code snippet is a webhook function configured to check for received events, detect the originating account if applicable, handle the event, and return a 200
response.
Coba handler Anda
Sebelum menjadikan live fungsi endpoint webhook, kami merekomendasikan Anda mencoba integrasi aplikasi. Anda dapat melakukannya dengan melakukan konfigurasi listener lokal untuk mengirim kejadian ke mesin lokal, dan mengirim kejadian percobaan. Anda perlu menggunakan CLI untuk mencobanya.
Teruskan kejadian ke endpoint lokal
Untuk meneruskan kejadian ke endpoint lokal Anda, jalankan perintah berikut ini dengan CLI guna menyiapkan listener lokal. Tanda --forward-to
mengirim semua kejadian Stripe dalam sandbox ke endpoint webhook lokal Anda. Gunakan perintah CLI yang sesuai di bawah ini bergantung pada jika Anda menggunakan kejadian snapshot atau tipis.
Catatan
Anda juga dapat menjalankan stripe listen
untuk melihat kejadian di Stripe Shell, meski Anda tidak akan dapat meneruskan kejadian dari Shell ke endpoint lokal.
Konfigurasi yang berguna untuk membantu percobaan Anda dengan listener lokal menyertakan yang berikut ini:
- Untuk menonaktifkan verifikasi sertifikat HTTPS, gunakan tanda opsional
--skip-verify
. - Untuk meneruskan hanya kejadian spesifik, gunakan tanda opsional
--events
dan masukkan daftar kejadian yang dipisahkan dengan koma.
- Untuk meneruskan kejadian ke endpoint webhook lokal Anda dari endpoint webhook publik yang sudah didaftarkan di Stripe, gunakan tanda opsional
--load-from-webhooks-api
. Hal ini akan memuat endpoint terdaftar, mengurai jalur dan kejadian terdaftarnya, kemudian menambahkan jalur ke endpoint webhook lokal Anda di--forward-to path
.
- Untuk memeriksa tanda tangan webhook, gunakan
{{WEBHOOK_
dari output awal perintah listen.SIGNING_ SECRET}}
Ready! Your webhook signing secret is '{{WEBHOOK_SIGNING_SECRET}}' (^C to quit)
Memicu kejadian percobaan
To send test events, trigger an event type that your event destination is subscribed to by manually creating an object in the Stripe Dashboard. Learn how to trigger events with Stripe for VS Code.
Daftarkan endpoint Anda
Setelah mencoba fungsi endpoint webhook Anda, gunakan API atau tab Webhook di Workbench untuk mendaftarkan URL yang dapat diakses dari endpoint webhook Anda sehingga Stripe mengetahui tujuan pengiriman kejadian. Anda dapat mendaftarkan hingga 16 endpoint webhook dengan Stripe. Endpoint webhook yang didaftarkan harus berupa URL HTTPS yang dapat diakses secara publik.
Format URL webhook
Format URL untuk mendaftarkan endpoint webhook adalah:
https://<your-website>/<your-webhook-endpoint>
Misalnya, jika domain Anda adalah https://mycompanysite.
dan rute ke endpoint webhook Anda adalah @app.
, masukkan https://mycompanysite.
sebagai Endpoint URL.
Buat tujuan kejadian untuk endpoint webhook Anda
Buat tujuan kejadian menggunakan Workbench di Dashboard atau secara terprogram dengan API. Anda dapat mendaftarkan hingga 16 tujuan kejadian di setiap akun Stripe.
Catatan
Workbench menggantikan Dashboard Pengembang yang ada. Jika Anda masih menggunakan Dashboard Pengembang, lihat cara untuk membuat endpoint webhook baru.
Amankan endpoint Anda
Anda perlu mengamankan integrasi dengan memastikan handler Anda memverifikasi bahwa semua permintaan webhook dibuatkan oleh Stripe. Anda dapat memverifikasi tanda tangan webhook menggunakan pustaka resmi kami atau memverifikasinya secara manual.
Debug integrasi webhook
Beberapa tipe masalah dapat terjadi ketika mengirimkan kejadian ke endpoint webhook Anda:
- Stripe mungkin tidak dapat mengirimkan kejadian ke endpoint webhook Anda.
- Endpoint webhook Anda mungkin memiliki masalah SSL.
- Konektivitas jaringan Anda terputus-putus.
- Endpoint webhook Anda tidak menerima kejadian yang Anda perkirakan.
Lihat pengiriman kejadian
Untuk melihat pengiriman kejadian, pilih endpoint webhook di bawah Webhook, kemudian pilih tab Kejadian.
Tab Kejadian menyediakan daftar kejadian dan apakah kejadian tersebut Delivered
, Pending
, atau Failed
. Klik kejadian untuk melihat Delivery attempts
, yang menyertakan kode status HTTP dari upaya pengiriman sebelumnya dan waktu pengiriman mendatang yang menunggu.

Lihat upaya pengiriman kejadian di tab Kejadian endpoint webhook.
Perbaiki kode status HTTP
Bila kejadian menampilkan kode status 200
, ini menunjukkan pengiriman yang berhasil ke endpoint webhook. Anda mungkin juga menerima kode status selain 200
. Lihat tabel di bawah ini untuk daftar kode status HTTP yang umum dan solusi yang direkomendasikan.
Status webhook menunggu | Keterangan | Perbaiki |
---|---|---|
(Tidak dapat menghubungkan) ERR | Kami tidak dapat membuat koneksi ke server tujuan. | Pastikan domain host Anda dapat diakses secara publik dengan internet. |
(302 ) ERR (atau status 3xx lainnya) | Server tujuan berusaha mengarahkan permintaan ke lokasi lain. Kami menganggap respons pengalihan ke permintaan webhook sebagai kegagalan. | Atur tujuan endpoint webhook ke URL yang diselesaikan dengan pengalihan. |
(400 ) ERR (atau status 4xx lainnya) | Server tujuan tidak dapat atau tidak akan memproses permintaan. Ini mungkin terjadi saat server mendeteksi kesalahan (400 ), saat URL tujuan memiliki pembatasan akses, (401 , 403 ), atau saat URL tujuan tidak ada (404 ). |
|
(500 ) ERR (atau status 5xx lainnya) | Server tujuan mengalami kesalahan saat memproses permintaan. | Tinjau log aplikasi Anda untuk memahami alasannya menampilkan kesalahan 500 . |
(Kesalahan TLS) ERR | Kami tidak dapat membuat koneksi yang aman ke server tujuan. Masalah dengan sertifikat SSL/TLS atau sertifikat perantara dalam rantai sertifikat server tujuan biasanya menyebabkan kesalahan ini. Stripe memerlukan TLS versi v1. atau yang lebih tinggi. | Lakukan percobaan server SSL untuk menemukan masalah yang mungkin menyebabkan kesalahan ini. |
(Waktu habis) ERR | Server tujuan memerlukan waktu terlalu lama untuk menanggapi permintaan webhook. | Pastikan Anda segera menunda logika kompleks dan mengembalikan tanggapan yang berhasil dalam kode penanganan webhook Anda. |
Perilaku pengiriman kejadian
Bagian ini membantu Anda memahami berbagai perilaku yang diperkirakan mengenai cara Stripe mengirim kejadian ke endpoint webhook Anda.
Percobaan ulang otomatis
Stripe mencoba untuk mengirim kejadian ke tujuan Anda hingga selama tiga hari dengan backoff eksponensial dalam mode live. Lihat kapan percobaan ulang berikutnya akan terjadi, jika berlaku, di tab Pengiriman kejadian dari tujuan kejadian. Kami mencoba ulang pengiriman kejadian yang dibuat di sandbox tiga kali selama beberapa jam. Jika tujuan Anda telah dinonaktifkan atau dihapus saat kami mencoba ulang, kami mencegah percobaan ulang mendatang dari kejadian tersebut. Namun, jika Anda menonaktifkan, kemudian mengaktifkan ulang tujuan kejadian sebelum kami dapat mencoba ulang, Anda masih melihat upaya percobaan ulang mendatang.
Percobaan ulang manual
Unsupported for Amazon EventBridge
You can’t manually resend events to Amazon EventBridge.
There are two ways to manually retry events:
- In the Stripe Dashboard, click Resend when looking at a specific event. This works for up to 15 days after the event creation.
- With the Stripe CLI, run the
stripe events resend <event_
command. This works for up to 30 days after the event creation.id> --webhook-endpoint=<endpoint_ id>
Pengurutan kejadian
Stripe tidak menjamin pengiriman kejadian sesuai dengan urutan pembuatannya. Misalnya, pembuatan langganan dapat menghasilkan kejadian berikut ini:
customer.
subscription. created invoice.
created invoice.
paid charge.
(jika ada charge)created
Pastikan tujuan kejadian Anda tidak bergantung pada penerimaan kejadian dalam urutan spesifik. Bersiaplah mengelola pengiriman sebagaimana mestinya. Anda juga dapat menggunakan API untuk mengambil objek yang tidak ada. Misalnya, Anda dapat mengambil invoice, charge, dan objek langganan dengan informasi dari invoice.
jika Anda menerima kejadian ini terlebih dahulu.
Pembuatan versi API
The API version in your account settings when the event occurs dictates the API version, and therefore the structure of an Event sent to your destination. For example, if your account is set to an older API version, such as 2015-02-16, and you change the API version for a specific request with versioning, the Event object generated and sent to your destination is still based on the 2015-02-16 API version. You can’t change Event objects after creation. For example, if you update a charge, the original charge event remains unchanged. As a result, subsequent updates to your account’s API version don’t retroactively alter existing Event objects. Retrieving an older Event by calling /v1/events
using a newer API version also has no impact on the structure of the received event. You can set test event destinations to either your default API version or the latest API version. The Event sent to the destination is structured for the event destination’s specified version.
Praktik terbaik menggunakan webhook
Tinjau praktik terbaik ini untuk memastikan endpoint webhook tetap aman dan berfungsi dengan baik bersama integrasi Anda.
Tangani kejadian duplikat
Terkadang endpoint webhook dapat menerima kejadian yang sama lebih dari satu kali. Anda dapat berhati-hati terhadap resi kejadian yang diduplikasi dengan memasukkan identifikasi kejadian yang telah Anda proses, kemudian tidak memproses kejadian yang sudah dimasukkan.
Dalam beberapa kasus, dua objek Event yang terpisah dihasilkan dan dikirim. Untuk mengidentifikasi duplikat tersebut, gunakan ID objek di data.
bersama dengan event.
.
Hanya dengarkan tipe kejadian yang diperlukan oleh integrasi Anda
Konfigurasikan endpoint webhook untuk hanya menerima tipe kejadian yang diperlukan oleh integrasi Anda. Mendengarkan kejadian ekstra (atau semua kejadian) akan membebani server Anda dan kami tidak merekomendasikannya.
Anda dapat mengubah kejadian yang diterima oleh endpoint webhook di Dashboard atau dengan API.
Tangani kejadian secara asinkron
Konfigurasikan handler Anda untuk memproses kejadian masuk dengan antrean asinkron. Anda mungkin mengalami masalah skalabilitas jika memilih untuk memproses kejadian secara sinkron. Setiap lonjakan besar dalam pengiriman webhook (misalnya, selama awal bulan ketika semua langganan diperbarui) dapat membanjiri host endpoint Anda.
Antrean asinkron memungkinkan Anda memproses kejadian bersamaan dengan kecepatan yang dapat didukung sistem Anda.
Bebaskan rute webhook dari proteksi CSRF
Jika menggunakan Rails, Django, atau kerangka web lain, situs Anda dapat memeriksa secara otomatis apakah setiap permintaan POST berisi CSRF token. Ini adalah fitur keamanan penting yang membantu memproteksi Anda dan pengguna Anda dari upaya cross-site request forgery. Namun, langkah pengamanan ini juga dapat mencegah situs Anda memproses kejadian yang sah. Jika demikian, Anda mungkin perlu mengecualikan rute webhook dari proteksi CSRF.
Terima kejadian dengan server HTTPS
Jika Anda menggunakan URL HTTPS untuk endpoint webhook (diperlukan dalam mode live), Stripe akan memvalidasi keamanan sambungan ke server Anda sebelum mengirim data webhook. Agar hal ini berfungsi, server Anda harus dikonfigurasi dengan benar untuk mendukung HTTPS dengan sertifikat server yang valid. Webhook Stripe hanya mendukung TLS versi v1.2 dan v1.3.
Cabut rahasia penandatanganan endpoint secara berkala
Rahasia yang digunakan untuk memverifikasi bahwa kejadian berasal dari Stripe dapat diubah pada tab Webhook di Workbench. Supaya tetap aman, kami merekomendasikan Anda mencabut (mengubah) rahasia secara berkala, atau bila Anda menduga terjadi peretasan kunci rahasia.
Untuk mencabut rahasia:
- Klik setiap endpoint di tab Webhook Workbench yang rahasianya ingin Anda cabut.
- Masuk ke menu perluasan () dan klik Cabut rahasia. Anda dapat memilih untuk segera mengakhiri rahasia saat ini atau menunda kedaluwarsanya hingga 24 jam agar Anda memiliki waktu untuk memperbarui kode verifikasi di server Anda. Selama waktu ini, beberapa rahasia aktif bagi endpoint. Stripe membuat satu tanda tangan per rahasia hingga kedaluwarsa.
Verifikasikan kejadian dikirim dari Stripe
Stripe mengirim kejadian webhook dari daftar alamat IP yang diatur. Hanya percayai kejadian yang berasal dari alamat IP ini.
Verifikasikan juga tanda tangan webhook untuk mengonfirmasi bahwa Stripe mengirim kejadian yang diterima. Stripe menandatangani kejadian webhook yang dikirim ke endpoint Anda dengan menyertakan tanda tangan di header Stripe-Signature
setiap kejadian. Ini memungkinkan Anda memverifikasi bahwa kejadian dikirim oleh Stripe, bukan oleh pihak ketiga. Anda dapat memverifikasi tanda tangan menggunakan pustaka resmi, atau verifikasikan secara manual menggunakan solusi Anda sendiri.
Bagian berikut menerangkan cara memverifikasi tanda tangan webhook:
- Ambil rahasia endpoint Anda.
- Verifikasikan tanda tangan.
Mengambil rahasia endpoint Anda
Gunakan Workbench dan masuk ke tab Webhook untuk melihat semua endpoint Anda. Pilih endpoint yang rahasianya ingin Anda peroleh, kemudian klik Klik untuk memperlihatkan.
Stripe membuatkan kunci rahasia yang unik bagi setiap endpoint. Jika Anda menggunakan endpoint yang sama untuk kunci API percobaan maupun live, rahasia untuk setiap kunci itu berbeda. Selain itu, jika menggunakan beberapa endpoint, Anda harus memperoleh rahasia untuk setiap kunci yang tanda tangannya ingin Anda verifikasi. Setelah persiapan ini, Stripe mulai menandatangani setiap webhook yang dikirim ke endpoint.
Mencegah replay attack
Serangan replay adalah saat penyerang mencegat payload yang valid dan tanda tangannya, kemudian mengirimkannya kembali. Untuk melakukan mitigasi serangan semacam itu, Stripe menyertakan stempel waktu di tajuk Stripe-Signature
. Karena merupakan bagian dari payload yang ditandatangani, stempel waktu ini juga diverifikasi oleh tanda tangan, sehingga penyerang tidak dapat mengubah stempel waktu tanpa membatalkan tanda tangan. Jika tanda tangan valid tetapi stempel waktu terlalu lama, aplikasi Anda dapat menolak payload.
Pustaka kami memiliki toleransi default 5 menit antara stempel waktu dan waktu saat ini. Anda dapat mengubah toleransi ini dengan memberikan parameter tambahan ketika memverifikasi tanda tangan. Gunakan Network Time Protocol (NTP) untuk memastikan jam server Anda akurat dan sinkron dengan waktu pada server Stripe.
Kesalahan umum
Jangan gunakan nilai toleransi 0
. Menggunakan nilai toleransi 0
menonaktifkan pemeriksaan kebaruan sepenuhnya.
Stripe membuat stempel waktu dan tanda tangan setiap kali kami mengirim kejadian ke endpoint Anda. Jika Stripe mencoba ulang kejadian (misalnya endpoint Anda yang sebelumnya dibalas dengan kode status non-2xx
), maka kami akan membuat tanda tangan dan stempel waktu baru untuk upaya pengiriman baru.
Segera mengembalikan tanggapan 2xx
Endpoint Anda harus segera mengembalikan kode status (2xx
) yang berhasil sebelum logika kompleks yang dapat menyebabkan waktu habis. Misalnya, Anda harus mengembalikan respons 200
sebelum memperbarui invoice pelanggan sebagai lunas di sistem akuntansi Anda.