Bỏ qua để đến nội dung

Cấu hình terminal thanh toán

import { Aside } from ‘@astrojs/starlight/components’;

Cashier cần quẹt thẻ cho khách ngay tại quầy. Bài viết này dành cho chủ cửa hàng / người cấu hình (không phải cashier bán hàng).

Sau khi cấu hình xong, cashier mở màn Bán hàng → chọn phương thức Thẻ → hệ thống gọi tới terminal qua bridge trên Vendor Desktop → khách quẹt → kết quả đổ về.

Source: apps/vendor-web/src/app/point-of-sale/pages/settings/settings-hardware-terminal-page.tsx + <DeviceSettings hardwareFocus="terminals" />.

Terminal thanh toán — hub thiết bị Hình: Trang cấu hình terminal — danh sách thiết bị PAX LAN / CodePay WS, badge “Local ECE ready”, nút kích hoạt bridge. Spec owner: cashier-screenshots.spec.ts → "settings — terminal payment".

  • Vendor Desktop phải chạy trên PC quầy — terminal liên lạc qua bridge trên app này.
  • Cashier chỉ cần quyền pos ghi để bán; cấu hình thiết bị cần settings ghi (chỉ chủ).
  • Biết IP + port của terminal PAX, hoặc URL WebSocket của CodePay.

Từ shell Thu ngân → Cài đặt → Terminal (/point-of-sale/settings/terminal).

Nếu cashier không thấy mục này, chủ cần cấp settings ghi (xem FAQ — quyền & vai trò).

Click + Thêm thiết bị → chọn loại Terminal thanh toán.

Form yêu cầu:

TrườngMô tả
TênTên hiển thị (ví dụ “PAX Quầy 1”)
HãngPAX (LAN) hoặc CODEPAY (WebSocket)
Phương thứcLAN / TCP cho PAX, WEBSOCKET cho CodePay
IPĐịa chỉ IP của terminal trong mạng LAN
PortCổng TCP (mặc định PAX: 10009)
WebSocket URLURL wss://... cho CodePay

Source: apps/vendor-web/src/components/dashboard/settings/device-settings-form.schema.ts.

Trên thẻ thiết bị vừa thêm, gạt toggle Bật/Tắt sang xanh (getDeviceActive(device)). Thiết bị tắt sẽ không được gọi khi bán.

Sau khi lưu, component hiển thị 1 trong 2 trạng thái:

Helper kiểm tra: canOpenPosBridgeActivate — yêu cầu IP + port (LAN) hoặc wss:// URL hợp lệ (CodePay).

LoạiHãngPhương thứcƯu tiên dùng khi
PAX LANPAXTCPTerminal cùng mạng LAN với PC quầy, ổn định, không phụ thuộc internet
CodePay WSCODEPAYWEBSOCKETTerminal ở xa (chi nhánh khác), hoặc dùng gateway cloud

isCodepayWsCard được detect khi manufacturer là CODEPAY, method WEBSOCKET, và terminalWsUrl match ^wss?://.

  • Trên màn Bán hàng → chọn Thẻ → popup terminal nhận lệnh từ bridge.
  • Sau khi khách quẹt, kết quả (thành công / thất bại) đổ về UI trong vài giây.
  • Kết quả cuối cùng tạo 1 transaction trong đơn — cashier không bấm gì thêm để tránh double-charge.
Triệu chứngXử lý
Thẻ device xám, không bật được toggleChưa nhập IP/port hoặc CodePay URL — kiểm tra lại form
Báo “bridgeActivate failed”Vendor Desktop chưa chạy, hoặc bridge chưa kết nối server
Bán thẻ nhưng spinner treoXem FAQ — In & thiết bị → Thanh toán kẹt
CodePay URL không match wss?://Helper sẽ không coi là CodePay WS — kiểm tra URL scheme
  • Component: <DeviceSettings hardwareFocus="terminals"> (apps/vendor-web/src/components/dashboard/settings/DeviceSettings.tsx)
  • API: fetchVendorDevicesSettings, patchVendorDevicesSettings (apps/vendor-web/src/services/vendor-settings.api.ts)
  • Bridge: postVendorPosBridgeActivateFromDevice + DevicePosBridgePersistedPanel