Chuyển tới nội dung chính
Phiên bản: 1.7.0

Push Payment to Devices

POST 

/openapi/v1/devices/payments/push

Đẩy lệnh thanh toán trực tiếp xuống thiết bị vật lý tại quầy thu ngân — hiển thị trên máy POS hoặc phát loa thông báo Soundbox.

Hệ thống nhận yêu cầu, giải mã payload, xác định thiết bị đích rồi publish bản tin xuống MQTT broker. Thiết bị nhận lệnh gần như tức thời.

Mã hóa: payload request phải được bọc trong trường data và mã hóa AES-256-CBC (hex). Response không mã hóa — trả về JSON thuần { code, message }.

Bất đồng bộ: code = "00" chỉ xác nhận lệnh đã được đẩy xuống broker thành công, không đảm bảo thiết bị đã xử lý xong giao dịch. Kết quả giao dịch cuối cùng nhận qua IPN/webhook.

Payload trước khi mã hóa​

POS (Smart POS):

{
"serial_no": "00059012710",
"order_id": "0129210912",
"amount": 150000,
"type": "pos",
"action": "SALE",
"request_id": "00017-058-0001",
"extra_data": { "Atom1": "F4" }
}

Soundbox:

{
"serial_no": "SB-001234",
"amount": 150000,
"qr_string": "00020101021138550010A000000727...",
"type": "soundbox"
}

Bảng trường dữ liệu​

TrườngKiểuBắt buộcMô tả
typeString✅Loại thiết bị nhận lệnh: pos hoặc soundbox
serial_noString✅Số serial (mã định danh duy nhất) của thiết bị
amountInteger✅ (trừ action = SETTLEMENT)Số tiền (VNĐ). Với type = pos phải > 0; với type = soundbox chấp nhận >= 0
order_idString✅ nếu type = pos (trừ action = SETTLEMENT)Mã hóa đơn — tối đa 16 ký tự
qr_stringString✅ nếu type = soundboxChuỗi nội dung mã QR lấy từ API Create QR
actionString✕Chỉ dùng với type = pos. Mặc định SALE. Xem bảng bên dưới
action_dataString✅ nếu action là VOID hoặc PREAUTH_COMPLETEChỉ dùng với type = pos. Mã tham chiếu giao dịch gốc (retrievalRefNo)
trace_noString✕Chỉ dùng với type = pos. Số trace của giao dịch gốc, đi kèm VOID / PREAUTH_COMPLETE
txn_idString✕Chỉ dùng với type = pos. Mã giao dịch gốc, đi kèm PREAUTH_COMPLETE
request_idString✕Chỉ dùng với type = pos. Mã định danh yêu cầu phía đối tác. Bỏ trống thì hệ thống tự sinh UUID
extra_dataObject✕Chỉ dùng với type = pos. Dữ liệu bổ sung, chuyển nguyên vẹn xuống thiết bị. Mặc định {}

Gửi action kèm type = "soundbox" sẽ bị từ chối với mã 04.

Bảng action (chỉ áp dụng cho type = pos)​

actionÝ nghĩaTrường bắt buộc kèm theo
SALE (mặc định)Thanh toán thườngorder_id, amount
MOTOThanh toán không xuất trình thẻorder_id, amount
PREAUTHTạm giữ hạn mức (pre-authorization)order_id, amount
PREAUTH_COMPLETEHoàn tất giao dịch tạm giữorder_id, amount, action_data; nên gửi kèm trace_no, txn_id
VOIDHủy giao dịch / giải tỏa Preauthorder_id, amount, action_data; nên gửi kèm trace_no
SETTLEMENTTổng kết lô giao dịch trong ngàyKhông cần order_id và amount

Bảng mã trạng thái (code)​

CodeMô tảHTTPKhi nào trả về
00Success200Đã đẩy lệnh xuống thiết bị thành công
01Authenticate error401Thiếu/sai thông tin xác thực, không xác định được CIF
02The requested URL was not found on the server404Sai đường dẫn endpoint
03Unknown error200Không publish được lệnh xuống thiết bị, hoặc lỗi nội bộ
04Bad request400Payload sai định dạng, thiếu trường bắt buộc, type/action không hợp lệ

Trường hợp code = "03" do không publish được xuống thiết bị vẫn trả HTTP 200 (giữ tương thích ngược với đối tác đang chạy production). Đối tác phải kiểm tra code, không chỉ dựa vào HTTP status.

Request​

Responses​

Yêu cầu được xử lý — kiểm tra trường code để biết kết quả