Documentation Index
Fetch the complete documentation index at: https://sdk.qfapi.com/llms.txt
Use this file to discover all available pages before exploring further.
Supported Terminal Models
- LANDI A8 / A8S — All payment methods supported
- PAX A920 — QR code payments only
1. POS-KEY
POS-KEY is a secret key used to encrypt transaction data. It is generated via the Haojin App. Encryption is enabled by default. Merchants may toggle encryption on/off or regenerate the POS-KEY from the Merchant Portal (MMS). After changes, the POS device must refresh via the Haojin App.Refresh POS-KEY
Haojin App → My → Settings → POS-Key → GenerateCheck POS-KEY
Merchant Portal → Settings → Device Settings → POS Key Mgmt2. Encryption
- Algorithm: AES
- Key: POS-KEY
- IV:
qfpay202306_hjsh - Output: Base64 encoded
3. Request Payload Format
| Attribute | Mandatory | Type | Description |
|---|---|---|---|
amt | Yes | Double | Transaction amount (e.g. 10.1 = HKD $10.10) |
func_type | Yes | String | Instruction code |
channel | Yes | String | Wallet/payment method |
out_trade_no | No | String | Merchant reference ID |
camera_id | No | Integer | 0 = back camera (default), 1 = front camera |
payment_timeout | No | Integer | Payment timeout (seconds) |
wait_card_timeout | No | Integer | Card input timeout (default 120s) |
3.1 Payment
QR Mode
- MPM / CPM auto-selected based on last usage
0back (default)1front
- Card: time to tap/swipe
- Wallet/QR: time to confirm
- PayMe max timeout: 120 seconds
QRCODE_PAYSCAN_PAY
0stay on result screen (default)1return to home after transaction
3.2 Refund / Void
| Attribute | Mandatory | Type | Description |
|---|---|---|---|
orderId | Yes | String | QFPay transaction ID |
refund_amount | No | String | Partial refund supported |
allow_modify_flag | No | Integer | 0 fixed, 1 allow change |
For Visa, Mastercard, UnionPay Card, and Amex, same-day refunds must be full amount.
3.3 Print Receipt
3.4 Print Summary
3.5 Transaction Inquiry
3.6 Cancel Request
4. Signature Generation
- Encrypt
contentusing AES - Generate digest from encrypted payload
5. Field Definitions
func_type
| Value | Description |
|---|---|
| 1001 | Payment |
| 1002 | Refund |
| 3001 | Print receipt |
| 3002 | Print summary |
| 4001 | Inquiry |
| 5001 | Cancel |
channel (Payment Method)
| Value | Description |
|---|---|
| card_payment | Credit card |
| wx | WeChat Pay |
| alipay | Alipay |
| payme | PayMe |
| union | UnionPay |
| fps | FPS |
| octopus | Octopus |
| unionpay_card | UnionPay Card |
| amex_card | American Express |
6. Response Format
Response Codes
| Code | Meaning |
|---|---|
| 6000 | Success |
| 6001 | Cancelled |
| 6002 | Error |
| 4003 | Denied |
| 5001 | Decryption failed |
7. Communication Methods
USB
Connect POS to register via USB. Payload must be AES encrypted and parsed according to protocol.HTTP / HTTPS
- Default port:
9001 - POST JSON payload
- AES encrypted
| Operation | Path |
|---|---|
| Trade | /api/pos/trade |
| Refund | /api/pos/cancel |
| Print receipt | /api/pos/print_receipt |
| Print summary | /api/pos/transaction_info |
| Inquiry | /api/pos/query_transaction |
For HTTPS setup, please refer to the ECR Integration HTTPS documentation.
TCP
- Default port:
9002 - Socket communication
- AES encrypted
8. USB Protocol Overview
Start indicator:0x2f6ePayload max: 65536 bytes
Recommended: ≤ 1024 bytes
9. AES Encryption
- AES-128 CBC
- PKCS5 padding
- 16-byte key
- Required for request & response
10. Serial Port Settings
| Setting | Value |
|---|---|
| Baud rate | 9600 |
| Stop bit | 1 |
| Parity | 0 |
| Data bits | 8 |
| Flow control | Off |
11. USB-Serial Chip Support
| Chip | Supported |
|---|---|
| PL2303 HXD | Yes |
| CH340 | No |
| FT232 | No |
Chip support applies only to USB communication mode. HTTP / HTTPS and TCP integrations are unaffected.

