API tạo VA cho đơn hàng

Tạo thêm VA cho đơn hàng hiện có qua SePay API. Đơn hàng phải ở trạng thái Pending, hoặc Partially với BIDV và VietinBank.

||

Tạo VA mới cho đơn hàng

POST
https://userapi.sepay.vn/v2/bank-accounts/{ba_xid}/orders/{order_xid}/va
Trạng thái đơn hàng cho phép

Đơn hàng phải ở trạng thái Pending, hoặc Partially (BIDV và VietinBank).

  • BIDV và VietinBank: đơn hàng chuyển sang Partially khi tổng số tiền nhận chưa đủ amount. Các VA bổ sung có thể tích lũy tới khi đủ amount thì đơn hàng chuyển Paid.
  • Sacombank và Vietcombank: đơn hàng chuyển trực tiếp Pending → Paid ngay khi nhận thanh toán đầu tiên. Các VA bổ sung dùng để cung cấp nhiều kênh thanh toán song song, VA nào được thanh toán trước sẽ đóng đơn hàng.
  • Shinhan Bank: chỉ tạo được VA khi đơn hàng chưa nhận thanh toán nào, tức trạng thái Pending.
Shinhan Bank: tạo thêm VA để phát lại mã QR

Khách hàng phải trả trọn một lần đúng số tiền đơn hàng, nên đơn hàng Shinhan Bank không bao giờ còn phần thiếu để thu thêm. Bạn tạo thêm VA khi cần phát lại mã QR cho đơn hàng chưa ai thanh toán, thường là sau khi QR cũ hết hạn. VA mới giữ nguyên số tiền của đơn hàng.

Bỏ trống amount thì hệ thống lấy amount của đơn hàng gốc. Nếu truyền thì phải bằng đúng amount của đơn hàng - giá trị khác bị từ chối với 422 kèm thông báo VA amount must equal the order amount.

Bỏ trống duration thì mặc định 86400 giây (1 ngày) kể từ lúc gọi, trần 2592000 giây (30 ngày).

Tham số

ba_xidstringrequired

UUID tài khoản ngân hàng

order_xidstringrequired

UUID đơn hàng

amountinteger

Số tiền. Với BIDV không được vượt quá số tiền đơn hàng, với Shinhan Bank phải bằng đúng số tiền đơn hàng.

va_holder_namestring

Tên chủ VA. Bắt buộc nếu đã bật tính năng tùy chỉnh tên VA. Shinhan Bank nhận tối đa 300 ký tự, bỏ trống thì lấy tên đăng ký với ngân hàng.

durationinteger

Thời hạn VA tính bằng giây. Shinhan Bank mặc định 86400 giây (1 ngày) và tối đa 2592000 giây (30 ngày). Giá trị lớn hơn được tự hạ về 2592000, không báo lỗi. Đọc expired_at trong response để biết hạn thật.

Mặc định amount của VA bổ sung

Trên mọi ngân hàng, nếu bỏ trống amount thì VA bổ sung mặc định bằng amount của đơn hàng gốc, không phải phần còn thiếu. Muốn thu đúng phần còn thiếu thì tự tính và truyền amount. Đơn hàng mở của BIDV (amount null) cho VA bổ sung amount bằng 0. Với VietinBank, hãy truyền amount đúng bằng số tiền mong đợi của VA đó, vì giao dịch lớn hơn amount của VA không được khớp.

VA bổ sung Vietcombank còn kế thừa tid từ đơn hàng gốc, không cần truyền lại.

VietinBank cần đăng ký dịch vụ thu hộ qua tài khoản định danh

Tài khoản VietinBank chưa đăng ký dịch vụ thu hộ qua tài khoản định danh nhận 422 vietinbank_va_order_not_enabled, kể cả khi đơn hàng đã tồn tại. Nếu bạn gặp lỗi này, vui lòng liên hệ SePay để được hỗ trợ.

Code mẫu

>
>
>
>
>
curl --request POST \
--url https://userapi.sepay.vn/v2/bank-accounts/f9e8d7c6-b5a4-3210-fedc-ba0987654321/orders/b2c3d4e5-f6a7-8901-bcde-f12345678902/va \
--header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \
--header 'content-type: application/json' \
--data '{"amount":0,"va_holder_name":"string","duration":0}'

Response (HTTP 201)

Response 201 - Tạo VA thành công
{
  "status": "success",
  "message": "VA created successfully",
  "data": {
    "va_number": "963NQDORD1234567890CD",
    "va_holder_name": "TRAN THI B",
    "amount": 500000,
    "status": "Unpaid",
    "expired_at": "2025-12-19 08:15:00"
  }
}
statusstring
messagestring
dataobject

Lỗi

HTTPerror_codeMô tả
400-Shinhan Bank: The selected bank account must be an Enterprise account. Tài khoản Shinhan chưa được SePay cấu hình kết nối API
422invalid_stateTrạng thái đơn hàng không cho phép tạo thêm VA (chỉ tạo được cho Pending, hoặc Partially với BIDV và VietinBank)
422vietinbank_va_order_not_enabledVietinBank: tài khoản chưa đăng ký dịch vụ thu hộ qua tài khoản định danh
422invalid_stateShinhan Bank: đơn hàng gốc không có số tiền để đăng ký với ngân hàng
422validation_errorShinhan Bank: có truyền amount nhưng không bằng amount của đơn hàng
500vcb_errorVietcombank: lỗi không xác định khi tạo VA. Liên hệ SePay.
503vcb_connection_errorVietcombank: dịch vụ tạm thời gián đoạn. Vui lòng thử lại sau ít phút.
500shinhan_errorShinhan Bank: lỗi không xác định khi đăng ký VA. Liên hệ SePay.
503shinhan_connection_errorShinhan Bank: dịch vụ tạm thời gián đoạn. Vui lòng thử lại sau ít phút.