Bỏ qua tới nội dung
Tích hợp

Hệ thống của bạn giữ tiền. Hệ thống của chúng tôi giữ phép tính.

Nền tảng là một phép tính và một bản ghi. Nó nhận những gì đã xảy ra trong hệ thống của bạn, tính ra khoản phải trả, rồi gửi chỉ thị trở lại. Nó không bao giờ nằm trong đường đi của tiền.

Ranh giới lưu kýMột sơ đồ hệ thống bị chia đôi bởi một nét đậm duy nhất. Phía đơn vị vận hành: tài khoản Stripe của họ, tài khoản NOWPayments của họ, ngân hàng của họ, ví của họ và backend của chính họ. Phía nền tảng: sổ cái, các đợt chạy, lệnh, yêu cầu rút và hộp gửi. Bốn đường cắt qua ranh giới, mang theo một lệnh, một biên nhận, một chỉ thị và một sự kiện. Không đường nào mang tiền, còn sổ cái và các đợt chạy thì không hề vượt ranh giới.Đơn vị vận hànhXEXLệnhBiên nhậnChỉ thịSự kiệnRanh giới lưu kýTài khoản StripeTài khoản NOWPaymentsNgân hàngBackend của bạnSổ cáiCác đợt chạyLệnhYêu cầu rútHộp gửiKhông đường nào ở đây mang tiền. XEX chuyển chỉ thị; đơn vị vận hành chuyển tiền.Sổ cái và các đợt chạy không vượt ranh giới
Bốn thứ đi qua ranh giới này: một biên nhận, một lệnh gửi vào, một chỉ thị và một sự kiện. Không thứ nào là tiền.
Bản cam kết kỹ thuật

Một đặc tả đã công bố, và hai client viết theo nó.

Một tài liệu OpenAPI trong kho mã, một client TypeScript và một client Dart. Kỹ sư của bạn có thể đọc hết bề mặt API trước khi có ai đặt lịch họp.

OpenAPI

Toàn bộ bề mặt công khai trong một tài liệu: endpoint phía thành viên, endpoint quản trị, API lệnh và danh mục sự kiện.

api/openapi.yaml

Client TypeScript

Cho các dịch vụ web và Node của bạn. Kiểu dữ liệu sinh từ chính tài liệu đó.

sdk/typescript

Client Dart

Cho ứng dụng Flutter, vì một chương trình hướng tới thành viên thường có ứng dụng, và tự viết tay tầng HTTP thứ hai chính là chỗ hai bên bắt đầu lệch nhau.

sdk/dart

Đi ra

Những sự kiện bạn có thể tin là sẽ tới nơi.

Mười một loại sự kiện, được xếp hàng trong cùng giao dịch với thay đổi trạng thái đã sinh ra chúng.

  1. 01

    Một outbox giao dịch, không phải một POST bắn rồi quên

    Sự kiện được ghi trong chính giao dịch gây ra nó, rồi mới được gửi đi từ một hàng đợi có cơ chế thuê. Không có khoảng nào mà hệ thống của bạn được báo về một việc sổ cái sau đó quay ngược lại, và cũng không có khoảng nào mà sổ cái đã ghi nhận nhưng không ai được báo.

    internal/outbox

  2. 02

    Có chữ ký, với id khóa xoay được

    Mỗi lần gửi đều mang chữ ký HMAC-SHA256 kèm id khóa và dấu thời gian. Việc xoay khóa có chồng lấn: khóa cũ vẫn hợp lệ trong lúc bạn chuyển đổi, nên xoay một khóa bí mật không phải một lần gián đoạn bạn phải xếp lịch.

    internal/outbox/sign.go

  3. 03

    Sự kiện tất toán đi trước

    Chỉ thị rút tiền không xếp hàng sau một đống thông báo. Các hạng gửi là những làn riêng, và tất toán là làn chở chỉ thị về tiền.

    internal/events

  4. 04

    Id tất định, nên chạy lại không gây tác dụng phụ

    Chạy lại một handler sẽ xếp lại đúng id sự kiện cũ, và outbox loại trùng. Đây là kiểu gửi ít nhất một lần mà bạn thực sự thử lại được, chứ không phải kiểu bạn phải dè chừng.

    internal/events · internal/outbox

  5. 05

    Một chốt chặn lưu lượng trên URL của bạn

    Đích đến do người vận hành cấu hình, và chỉ riêng điều đó đã khiến nó là một hướng SSRF theo cấu tạo. Bộ điều phối kiểm tra URL trước khi gửi yêu cầu và chặn đúng những địa chỉ bạn mong nó chặn.

    internal/outbox/ssrf.go

  6. 06

    Giãn thời gian, tạm treo và một bộ đối soát

    Thất bại sẽ giãn dần rồi cuối cùng bị treo lại, thay vì dội liên tục vào một đích đang chết. Một bộ đối soát liên hệ thống bắt được sự kiện thực sự bị mất, thay vì tin rằng hàng đợi luôn hoàn hảo.

    internal/outbox · internal/reconciler

Đi vào

Những lệnh chạy đúng một lần, khóa theo id bản ghi của bạn.

Bạn báo cho nền tảng biết đã có một giao dịch mua, đã có một khoản hoàn tiền, một thành viên đã được xác minh. Gửi lại không tốn gì, vì khóa là của bạn.

Mọi lệnh gửi vào đều bất biến khi lặp theo từng không gian làm việc và từng mã tham chiếu, và phản hồi được lưu đệm. Gửi cùng một giao dịch mua hai lần thì lần gọi thứ hai trả lại câu trả lời của lần đầu — nó không tạo giao dịch mua thứ hai, và cũng không trả thêm một vòng hoa hồng cho giao dịch đầu.

Hợp đồng lỗi được nói rõ, vì “có thử lại hay không” mới là câu hỏi một tích hợp phía client thực sự phải trả lời. Một lỗi trả về sẽ nhả biên nhận và bạn có thể thử lại. Một lần từ chối với mã 4xx là kết thúc và được lưu đệm: lệnh đó bị từ chối vì chính nội dung của nó, và gửi lại thì vẫn bị từ chối.

internal/commands · internal/command

Tiền đi ra

Cứ tất toán theo đúng cách bạn đang tất toán.

Nền tảng giữ chỗ đúng những dòng sổ cái cụ thể rồi ra chỉ thị. Thứ thực thi việc trả tiền là của bạn.

Nếu bạn có hệ thống tất toán, nó nhận chỉ thị rút tiền dưới dạng sự kiện hạng tất toán và gọi ngược lại để báo đã trả hoặc thất bại. Nếu không có, bảng điều khiển chi trả liệt kê những khoản đang nợ, bạn trả từ ví của mình, rồi ghi lại giá đã khớp và mã giao dịch của chính bạn. Một khoản trả ghi nhận mà không có mã tham chiếu sẽ bị từ chối — nó sẽ không bao giờ đối soát được với ví của bạn, nên chấp nhận nó chỉ có nghĩa là việc đối soát sẽ vỡ muộn hơn và ở xa hơn.

internal/claims · internal/httpapi/payouts.go

Thương hiệu của bạn

Tên miền của riêng bạn, chứng minh trước khi cấp phát.

Đăng ký tên máy chủ, công bố bản ghi TXT do nền tảng sinh ra, và việc cấp phát diễn ra ngay khi bản ghi phân giải được.

Thứ tự mới là điều quan trọng, và đó là toàn bộ ý nghĩa. Gắn một tên máy chủ — hoặc thêm một tên miền vào danh sách được phép của nhà cung cấp danh tính — trước khi chứng minh quyền kiểm soát sẽ khiến người thực sự sở hữu tên đó nhận được các lượt đăng nhập vốn dành cho bạn. Vì vậy không có gì được cấp phát, và không có gì được thêm vào danh sách cho phép đăng nhập, cho tới khi bản ghi phân giải được. Một tiến trình nền sẽ xử lý trong vòng một phút.

internal/domains

Tiếp theo

Lấy một sandbox và trỏ nó vào hệ thống staging.

Miễn phí ở mọi gói, với cùng bề mặt API, cùng các sự kiện và cùng chữ ký như môi trường thật.