Skip to content

Tổng quan Web SDK ​

Bahn Web SDK là một script chạy trên trình duyệt. Nó thu thập thông tin thanh toán bên trong các iframe do Bahn host và xác nhận thanh toán với Bahn API. Số thẻ, ngày hết hạn và CVC được nhập vào iframe, không bao giờ đi qua trang hay server của bạn.

Trang này giải thích các thành phần kết hợp với nhau thế nào và nên chọn luồng nào. Nếu muốn viết code ngay, xem Bắt đầu.

Cách hoạt động ​

Một tích hợp gồm ba phần:

Thành phầnChạy ởVai trò
Backend của bạnServer của bạnTạo PaymentIntent bằng API key bí mật và nhận webhook
Trang checkout + Bahn SDKTrình duyệt của người muaTải SDK, mount các ô thanh toán và xác nhận thanh toán bằng client_secret
Iframe + API của Bahnbn.cake.vn (production) / bn.cakedigibank.tech (sandbox)Giữ dữ liệu thẻ, gọi Bahn API và chạy thử thách 3DS
sequenceDiagram
    participant Browser as Trang checkout + SDK
    participant Backend as Backend của bạn
    participant Bahn as Bahn API + iframe

    Browser->>Backend: Bắt đầu checkout
    Backend->>Bahn: Tạo PaymentIntent (API key)
    Bahn-->>Backend: PaymentIntent + client_secret
    Backend-->>Browser: client_secret
    Browser->>Bahn: confirmPayment({ client_secret }) qua iframe thẻ
    Bahn-->>Browser: payment_intent (+ payload 3DS nếu cần)
    Browser->>Bahn: mount3DS(...) — người mua hoàn tất thử thách
    Bahn-->>Backend: Webhook với trạng thái cuối cùng

Các loại key ​

KeyDùng ở đâuCó được công khai không?
Publishable key (pk)Truyền vào new Bahn({ pk }) trên trình duyệtCó. Key này chỉ nhận diện tài khoản merchant của bạn.
API keyHeader Bn-Api-Key trong các lệnh gọi server-to-server, kèm body được ký JWSKhông. Tuyệt đối không đặt vào code chạy trên trình duyệt.

Sandbox và production là hai môi trường riêng biệt. Hãy dùng key được cấp cho đúng môi trường bạn truyền vào new Bahn({ environment }). Key được cấp trong quá trình Onboarding.

Các đối tượng chính ​

Đối tượngÝ nghĩa
PaymentIntentMột lần thanh toán với số tiền xác định. Backend của bạn tạo nó.
client_secretChuỗi bí mật riêng của từng PaymentIntent, backend giao cho trình duyệt. SDK dùng nó để xác nhận đúng PaymentIntent đó và không làm được gì khác.
Confirmation tokenToken dùng một lần đại diện cho thẻ người mua đã nhập. Tạo trên trình duyệt bằng createConfirmationToken() rồi gửi lên backend; backend dùng nó để tạo và xác nhận thanh toán.
SetupIntentLưu thẻ để dùng sau mà không trừ tiền. Xác nhận bằng confirmCardSetup().
Phiên 3DSThử thách 3D Secure mà ngân hàng phát hành yêu cầu. SDK hiển thị nó qua mount3DS() hoặc handleNextAction().

Chọn luồng ​

Bạn muốn…DùngHướng dẫn
Thanh toán thẻ với số tiền biết trướcXác nhận trực tiếp. Backend tạo PaymentIntent, trình duyệt gọi confirmPayment().Xác nhận thanh toán
Chốt số tiền trên server sau khi biết thẻ (giảm giá, phụ phí, kiểm tra gian lận)Luồng dựa trên token. Trình duyệt gọi createConfirmationToken(), backend tạo và xác nhận, rồi trình duyệt gọi handleNextAction().Luồng dựa trên token
Lưu thẻ mà không trừ tiềnSetupIntent với confirmCardSetup()Lưu thẻ
Cho người mua quét mã QR ngân hàngQR Napas với mountPaymentQR()Thanh toán QR
Có nút ví thanh toán một chạmApple Pay / Google Pay với mountApplePay() / mountGooglePay()Apple Pay, Google Pay

Tin webhook, không tin trình duyệt

Kết quả trên trình duyệt chỉ cho bạn biết nên hiển thị gì tiếp cho người mua. Backend chỉ nên đánh dấu đơn hàng đã thanh toán sau khi nhận được webhook với trạng thái cuối cùng. Xem Webhook.

Các bước tích hợp ​

  1. Nhận key trong quá trình Onboarding.
  2. Tải SDK và mount các ô nhập thẻ. Xem Bắt đầu.
  3. Tạo PaymentIntent trên backend. Xem Xác thực để biết cách ký request.
  4. Xác nhận thanh toán và xử lý 3DS trên trình duyệt. Xem Xác nhận thanh toán và Xác thực 3DS.
  5. Xử lý webhook trên backend. Xem Webhook.
  6. Kiểm thử trên sandbox với các thẻ test sandbox.
  7. Go live theo Checklist go-live.

Developers