Lewati ke konten
Integrasi

Sistem Anda memegang uangnya. Sistem kami memegang hitungannya.

Platform adalah sebuah perhitungan dan sebuah catatan. Ia menerima apa yang terjadi di sistem Anda, menghitung berapa yang terutang, lalu mengirim instruksi kembali. Ia tidak pernah duduk di jalur uang.

Batas kustodiPeta sistem yang dibelah oleh satu garis tebal. Di sisi operator: akun Stripe mereka, akun NOWPayments mereka, bank mereka, dompet mereka, dan backend mereka sendiri. Di sisi platform: buku besar, proses jalan, perintah, klaim, dan kotak keluar. Empat garis melintasi batas, membawa satu perintah, satu tanda terima, satu instruksi, dan satu peristiwa. Tidak satu pun membawa uang, dan buku besar serta proses jalan sama sekali tidak melintas.OperatorXEXPerintahTanda terimaInstruksiPeristiwaBatas kustodiAkun StripeAkun NOWPaymentsBankDompetBackend AndaBuku besarProsesPerintahKlaimKotak keluarTidak ada garis di sini yang membawa uang. XEX memindahkan instruksi; operator memindahkan uang.Buku besar dan proses tidak melintasi apa pun
Ada empat hal yang menyeberangi batas ini: sebuah tanda terima, sebuah perintah, sebuah instruksi, dan sebuah peristiwa. Tak satu pun berupa uang.
Kontrak teknis

Satu spesifikasi yang diterbitkan, dan dua klien yang ditulis mengikutinya.

Sebuah dokumen OpenAPI di repositori, satu klien TypeScript dan satu klien Dart. Insinyur Anda bisa membaca seluruh permukaannya sebelum ada yang menjadwalkan pertemuan.

OpenAPI

Seluruh permukaan publik dalam satu dokumen: endpoint anggota, endpoint admin, API perintah, dan katalog peristiwa.

api/openapi.yaml

Klien TypeScript

Untuk layanan web dan Node Anda. Tipenya diturunkan dari dokumen yang sama.

sdk/typescript

Klien Dart

Untuk aplikasi Flutter, karena program yang menghadap anggota biasanya punya satu, dan menulis sendiri lapisan HTTP kedua adalah tempat keduanya mulai melenceng.

sdk/dart

Keluar

Peristiwa yang bisa Anda percayai akan sampai.

Sebelas jenis peristiwa, diantrekan dalam transaksi yang sama dengan perubahan status yang menghasilkannya.

  1. 01

    Outbox transaksional, bukan POST tembak-lalu-lupa

    Peristiwa ditulis di dalam transaksi yang menyebabkannya, lalu dikirim dari antrean bersewa. Tidak ada jeda ketika sistem Anda diberi tahu tentang sesuatu yang kemudian dibatalkan buku besar, dan tidak ada jeda ketika buku besar sudah menetapkan tetapi tidak ada yang diberi tahu.

    internal/outbox

  2. 02

    Bertanda tangan, dengan id kunci yang bisa dirotasi

    Tiap pengiriman membawa tanda tangan HMAC-SHA256 dengan id kunci dan stempel waktu. Rotasinya bertindih: kunci lama tetap berlaku selagi Anda berpindah, jadi merotasi sebuah rahasia bukan gangguan layanan yang harus Anda jadwalkan.

    internal/outbox/sign.go

  3. 03

    Peristiwa pembayaran lebih dulu

    Instruksi penarikan tidak mengantre di belakang tumpukan notifikasi. Kelas pengiriman adalah jalur terpisah, dan pembayaran adalah jalur yang membawa instruksi soal uang.

    internal/events

  4. 04

    Id deterministik, jadi menjalankan ulang tidak berefek ganda

    Menjalankan ulang sebuah handler akan mengantrekan id peristiwa yang sama, dan outbox membuang duplikatnya. Ini pengiriman minimal-sekali yang benar-benar bisa Anda ulang, bukan pengiriman minimal-sekali yang harus Anda hati-hati dengannya.

    internal/events · internal/outbox

  5. 05

    Penjaga lalu lintas keluar pada URL Anda

    Tujuannya dikonfigurasi operator, dan itu saja sudah menjadikannya jalur SSRF secara konstruksi. Pengirim memeriksa URL sebelum permintaan dikirim dan memblokir alamat-alamat yang memang Anda harapkan diblokir.

    internal/outbox/ssrf.go

  6. 06

    Backoff, parkir, dan sebuah rekonsiliator

    Kegagalan mundur bertahap lalu akhirnya diparkir, alih-alih menggempur tujuan yang sedang mati. Sebuah rekonsiliator lintas sistem menangkap peristiwa yang benar-benar hilang, alih-alih memercayai antrean itu sempurna.

    internal/outbox · internal/reconciler

Masuk

Perintah yang berjalan tepat sekali, berkunci pada id catatan Anda.

Anda memberi tahu platform bahwa terjadi sebuah pembelian, terjadi pengembalian dana, seorang anggota terverifikasi. Mengulang kirim itu gratis, karena kuncinya milik Anda.

Tiap perintah masuk bersifat idempoten per ruang kerja dan per nomor referensi, dan jawabannya disimpan sementara. Kirim pembelian yang sama dua kali dan panggilan kedua mengembalikan jawaban panggilan pertama — ia tidak membuat pembelian kedua, dan tidak membayar putaran komisi kedua atas pembelian yang pertama.

Kontrak galatnya eksplisit, karena “diulang atau tidak” adalah pertanyaan yang benar-benar harus dijawab sebuah integrasi klien. Galat yang dikembalikan melepaskan tanda terima dan Anda boleh mengulang. Penolakan dengan kode 4xx bersifat final dan disimpan sementara: perintah itu ditolak atas isinya sendiri, dan mengulangnya akan ditolak lagi.

internal/commands · internal/command

Uang keluar

Bayarlah dengan cara yang sudah Anda pakai.

Platform memesan baris buku besar yang persis lalu memberi instruksi. Yang mengeksekusi pembayarannya adalah Anda.

Kalau Anda punya sistem pembayaran, ia menerima instruksi penarikan sebagai peristiwa kelas pembayaran dan memanggil balik untuk melunasi atau menyatakan gagal. Kalau tidak punya, konsol pembayaran memuat daftar yang terutang, Anda membayar dari dompet Anda sendiri, lalu mencatat harga eksekusi dan nomor transaksi Anda sendiri. Pembayaran yang dicatat tanpa nomor referensi ditolak — ia tidak akan pernah bisa direkonsiliasi dengan dompet Anda, jadi menerimanya hanya berarti rekonsiliasi akan gagal lebih belakangan dan lebih jauh.

internal/claims · internal/httpapi/payouts.go

Merek Anda

Domain Anda sendiri, dibuktikan sebelum disiapkan.

Klaim nama hostnya, terbitkan catatan TXT yang dihasilkan platform, dan penyiapan berjalan begitu catatan itu bisa diresolusi.

Urutannya penting dan justru itulah intinya. Mengikat sebuah nama host — atau menambahkan sebuah domain ke daftar sah penyedia identitas — sebelum kepemilikannya terbukti akan membuat siapa pun yang benar-benar memiliki nama itu menerima proses masuk yang seharusnya untuk Anda. Jadi tidak ada yang disiapkan, dan tidak ada yang ditambahkan ke daftar izin masuk, sampai catatan itu bisa diresolusi. Sebuah proses latar mengambilnya dalam waktu kurang dari semenit.

internal/domains

Berikutnya

Ambil sandbox dan arahkan ke sistem staging Anda.

Gratis di semua paket, dengan permukaan API, peristiwa, dan tanda tangan yang sama seperti produksi.