Lewati ke konten
Buat akun
atau
Masuk
Logo Dokumen Stripe
/
Tanya AI
Buat akun
Masuk
Mulai
Pembayaran
Otomatisasi keuangan
Platform dan situs belanja online
Manajemen uang
Alat bantu pengembang
Mulai
Pembayaran
Otomatisasi keuangan
Mulai
Pembayaran
Otomatisasi keuangan
Platform dan situs belanja online
Manajemen uang
Gambaran Umum
Pembuatan versi
Log perubahan
Tingkatkan versi API Anda
Upgrade versi SDK Anda
Alat bantu pengembang
SDK
API
Pengujian
Workbench
Tujuan Kejadian
    Integrasikan dengan kejadian
    Amazon EventBridge
    Endpoint webhook
      Pembuat webhook
      Pembuatan versi webhook
      Atasi kesalahan verifikasi tanda tangan webhook
      Proses kejadian yang tidak terkirim
Alur kerja
Stripe CLI
Stripe Shell
Dashboard Pengembang
Toolkit agen
Stripe health alertsMembangun dengan LLMStripe untuk Visual Studio CodePengunggahan file
Keamanan
Keamanan
Perluas Stripe
Stripe Apps
Stripe Connector
Mitra
Ekosistem mitra
Sertifikasi mitra
BerandaAlat bantu pengembangEvent Destinations

Terima kejadian Stripe di endpoint webhook Anda

Dengarkan kejadian di akun Stripe pada endpoint webhook sehingga integrasi Anda dapat secara otomatis memicu reaksi.

Salin halaman

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:

  1. Buat handler endpoint webhook untuk menerima permintaan POST data kejadian.
  2. Coba handler endpoint webhook Anda secara lokal menggunakan Stripe CLI.
  3. Buat tujuan kejadian baru untuk endpoint webhook Anda.
  4. 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_authorization.request untuk tujuan organisasi. Sebagai gantinya, siapkan endpoint webhook di akun Stripe dalam organisasi untuk berlangganan tipe kejadian ini. Gunakan issuing_authorization.request untuk mengotorisasi permintaan pembelian secara real-time.
  • Anda dapat berlangganan checkout_sessions.completed 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 kejadian checkout_sessions.completed 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.
  • Anda dapat berlangganan invoice.created 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.

Buat handler

Tipe kejadian

Gunakan referensi API Stripe untuk mengidentifikasi objek peristiwa tipis atau objek peristiwa snapshot yang perlu diproses oleh handler webhook Anda.

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:

  1. Menangani permintaan POST dengan payload JSON yang terdiri dari objek kejadian.
  2. Untuk handler kejadian organisasi, memeriksa nilai context untuk menentukan akun dalam organisasi yang menghasilkan kejadian, kemudian mengatur header Stripe-Context yang sesuai dengan nilai context.
  3. Segera mengembalikan kode status (2xx) yang berhasil sebelum logika kompleks yang mungkin menyebabkan waktu habis. Misalnya, Anda harus mengembalikan tanggapan 200 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.

Saat Anda membuat handler kejadian snapshot, gunakan definisi objek API pada saat kejadian untuk logika Anda dengan mengakses bidang data.object kejadian. Anda juga dapat mengambil sumber daya API dari API Stripe untuk mengakses definisi objek terbaru dan mutakhir.

Go
http.HandleFunc("/webhook", func(w http.ResponseWriter, req *http.Request) { const MaxBodyBytes = int64(65536) req.Body = http.MaxBytesReader(w, req.Body, MaxBodyBytes) payload, err := ioutil.ReadAll(req.Body) if err != nil { fmt.Fprintf(os.Stderr, "Error reading request body: %v\n", err) w.WriteHeader(http.StatusServiceUnavailable) return } event := stripe.Event{} if err := json.Unmarshal(payload, &event); err != nil { fmt.Fprintf(os.Stderr, "Failed to parse webhook body json: %v\n", err.Error()) w.WriteHeader(http.StatusBadRequest) return } // Unmarshal the event data into an appropriate struct depending on its Type switch event.Type { case "payment_intent.succeeded": var paymentIntent stripe.PaymentIntent err := json.Unmarshal(event.Data.Raw, &paymentIntent) if err != nil { fmt.Fprintf(os.Stderr, "Error parsing webhook JSON: %v\n", err) w.WriteHeader(http.StatusBadRequest) return } // Then define and call a func to handle the successful payment intent. // handlePaymentIntentSucceeded(paymentIntent) case "payment_method.attached": var paymentMethod stripe.PaymentMethod err := json.Unmarshal(event.Data.Raw, &paymentMethod) if err != nil { fmt.Fprintf(os.Stderr, "Error parsing webhook JSON: %v\n", err) w.WriteHeader(http.StatusBadRequest) return } // Then define and call a func to handle the successful attachment of a PaymentMethod. // handlePaymentMethodAttached(paymentMethod) // ... handle other event types default: fmt.Fprintf(os.Stderr, "Unhandled event type: %s\n", event.Type) } w.WriteHeader(http.StatusOK) })

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.

Ruby
require 'json' # Using Sinatra post '/webhook' do payload = request.body.read event = nil begin event = Stripe::Event.construct_from( JSON.parse(payload, symbolize_names: true) ) rescue JSON::ParserError => e # Invalid payload status 400 return end # Extract the context context = event.context # Define your API key variables (ideally loaded securely) ACCOUNT_123_API_KEY = "sk_test_123" ACCOUNT_456_API_KEY = "sk_test_456" account_api_keys = { "account_123" => ACCOUNT_123_API_KEY, "account_456" => ACCOUNT_456_API_KEY } api_key = account_api_keys[context] if api_key.nil? puts "No API key found for context: #{context}" status 400 return end # Handle the event case event.type when 'customer.created' customer = event.data.object begin latest_customer = Stripe::Customer.retrieve( customer.id, { api_key: api_key } ) handle_customer_created(latest_customer, context) rescue => e puts "Error retrieving customer: #{e.message}" status 500 return end when 'payment_method.attached' payment_method = event.data.object begin latest_payment_method = Stripe::PaymentMethod.retrieve( payment_method.id, { api_key: api_key } ) handle_payment_method_attached(latest_payment_method, context) rescue => e puts "Error retrieving payment method: #{e.message}" status 500 return end else puts "Unhandled event type: #{event.type}" end status 200 end

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.

Gunakan perintah berikut untuk meneruskan kejadian snapshot ke listener lokal Anda.

Command Line
stripe listen --forward-to localhost:4242/webhook

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.

Gunakan perintah berikut untuk meneruskan kejadian snapshot target ke listener lokal Anda.

Command Line
stripe listen --events payment_intent.created,customer.created,payment_intent.succeeded,checkout.session.completed,payment_intent.payment_failed \ --forward-to localhost:4242/webhook
  • 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.

Gunakan perintah berikut untuk meneruskan kejadian snapshot dari endpoint webhook publik ke listener lokal Anda.

Command Line
stripe listen --load-from-webhooks-api --forward-to localhost:4242/webhook
  • Untuk memeriksa tanda tangan webhook, gunakan {{WEBHOOK_SIGNING_SECRET}} dari output awal perintah listen.
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.

You can use the following command in either Stripe Shell or Stripe CLI. This example triggers a payment_intent.succeeded event:

Command Line
stripe trigger payment_intent.succeeded Running fixture for: payment_intent Trigger succeeded! Check dashboard for event details.

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.com dan rute ke endpoint webhook Anda adalah @app.route('/stripe_webhooks', methods=['POST']), masukkan https://mycompanysite.com/stripe_webhooks 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.

Untuk membuat endpoint webhook baru di Dashboard:

  1. Buka tab Webhook di Workbench.
  2. Klik Buat tujuan kejadian.
  3. Pilih tempat Anda ingin menerima kejadian. Stripe mendukung dua tipe konfigurasi: Akun Anda dan Akun terhubung. Pilih Akun untuk mendengarkan kejadian dari akun Anda sendiri. Jika Anda membuat aplikasi Connect dan ingin mendengarkan kejadian dari akun terhubung, pilih Akun terhubung.

Dengarkan kejadian dari endpoint webhook organisasi

Jika membuat endpoint webhook di akun organisasi, pilih Akun untuk mendengarkan kejadian dari akun di organisasi Anda. Jika Anda memiliki platform Connect sebagai anggota organisasi dan ingin mendengarkan kejadian dari semua akun terhubung platform, pilih Akun terhubung.

  1. Pilih versi API untuk objek kejadian yang ingin Anda gunakan.
  2. Pilih tipe kejadian yang ingin Anda kirimkan ke endpoint webhook.
  3. Pilih Lanjutkan, lalu pilih Endpoint webhook sebagai tipe tujuan.
  4. Klik Lanjutkan, lalu berikan URL endpoint dan deskripsi opsional untuk webhook.
Daftarkan webhook baru menggunakan tab Webhook

Daftarkan webhook baru menggunakan tab Webhook

Catatan

Workbench menggantikan Dashboard Pengembang yang ada. Jika Anda masih menggunakan Dashboard Pengembang, lihat cara untuk membuat endpoint webhook baru.

Amankan endpoint Anda

Terapkan praktik terbaik webhook

Setelah mengonfirmasi bahwa endpoint Anda berfungsi sesuai harapan, amankan dengan mengimplementasikan praktik terbaik webhook.

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.

Verifikasikan tanda tangan webhook dengan pustaka resmi

Kami merekomendasikan penggunaan pustaka resmi kami untuk memverifikasi tanda tangan. Anda melakukan verifikasi dengan memberikan payload kejadian, header Stripe-Signature dan rahasia endpoint. Jika verifikasi gagal, Anda akan menerima kesalahan.

Jika Anda mendapatkan kesalahan verifikasi tanda tangan, baca panduan kami tentang pemecahan masalahnya.

Peringatan

Stripe mewajibkan isi permintaan yang belum diproses untuk melakukan verifikasi tanda tangan. Jika Anda menggunakan framework, pastikan itu tidak memanipulasi isi permintaan yang belum diproses. Manipulasi apa pun pada isi permintaan yang belum diproses akan menyebabkan verifikasi gagal.

Go
// Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys stripe.Key =
"sk_test_BQokikJOvBiI2HlWgH4olfQ2"
http.HandleFunc("/webhook", func(w http.ResponseWriter, req *http.Request) { const MaxBodyBytes = int64(65536) req.Body = http.MaxBytesReader(w, req.Body, MaxBodyBytes) payload, err := ioutil.ReadAll(req.Body) if err != nil { fmt.Fprintf(os.Stderr, "Error reading request body: %v\n", err) w.WriteHeader(http.StatusServiceUnavailable) return } // If you are testing your webhook locally with the Stripe CLI you // can find the endpoint's secret by running `stripe listen` // Otherwise, find your endpoint's secret in your webhook settings // in the Developer Dashboard endpointSecret := "whsec_..."; // Pass the request body and Stripe-Signature header to ConstructEvent, along // with the webhook signing key. event, err := webhook.ConstructEvent(payload, req.Header.Get("Stripe-Signature"), endpointSecret) if err != nil { fmt.Fprintf(os.Stderr, "Error verifying webhook signature: %v\n", err) w.WriteHeader(http.StatusBadRequest) // Return a 400 error on a bad signature return } // Unmarshal the event data into an appropriate struct depending on its Type switch event.Type { case "payment_intent.succeeded": var paymentIntent stripe.PaymentIntent err := json.Unmarshal(event.Data.Raw, &paymentIntent) if err != nil { fmt.Fprintf(os.Stderr, "Error parsing webhook JSON: %v\n", err) w.WriteHeader(http.StatusBadRequest) return } fmt.Println("PaymentIntent was successful!") case "payment_method.attached": var paymentMethod stripe.PaymentMethod err := json.Unmarshal(event.Data.Raw, &paymentMethod) if err != nil { fmt.Fprintf(os.Stderr, "Error parsing webhook JSON: %v\n", err) w.WriteHeader(http.StatusBadRequest) return } fmt.Println("PaymentMethod was attached to a Customer!") // ... handle other event types default: fmt.Fprintf(os.Stderr, "Unhandled event type: %s\n", event.Type) } w.WriteHeader(http.StatusOK) })

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

Mendengarkan dengan status Stripe CLI

Anda juga dapat menggunakan Stripe CLI untuk mendengarkan kejadian secara langsung di terminal.

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 pada tab Kejadian webhook

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 menungguKeteranganPerbaiki
(Tidak dapat menghubungkan) ERRKami 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).
  • Pastikan endpoint Anda dapat diakses secara publik dengan internet.
  • Pastikan endpoint Anda menerima metode HTTP POST.
(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) ERRKami 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.2 atau yang lebih tinggi.Lakukan percobaan server SSL untuk menemukan masalah yang mungkin menyebabkan kesalahan ini.
(Waktu habis) ERRServer 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_id> --webhook-endpoint=<endpoint_id> command. This works for up to 30 days after the event creation.

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.created (jika ada charge)

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.paid 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.object bersama dengan event.type.

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.

Rails
class StripeController < ApplicationController # If your controller accepts requests other than Stripe webhooks, # you'll probably want to use `protect_from_forgery` to add CSRF # protection for your application. But don't forget to exempt # your webhook route! protect_from_forgery except: :webhook def webhook # Process webhook data in `params` end end

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:

  1. Klik setiap endpoint di tab Webhook Workbench yang rahasianya ingin Anda cabut.
  2. 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:

  1. Ambil rahasia endpoint Anda.
  2. 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.

Lihat juga

  • Kirim kejadian ke Amazon EventBridge
  • Daftar jenis acara tipis
  • Daftar jenis kejadian snapshot
  • Pembangun endpoint webhook interaktif
Apakah halaman ini membantu?
YaTidak
Butuh bantuan? Hubungi Tim CS.
Bergabunglah dengan program akses awal kami.
Lihat log perubahan kami.
Ada pertanyaan? Hubungi Bagian Penjualan.
LLM? Baca llms.txt.
Dijalankan oleh Markdoc