paystack-terminal
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChinesePaystack Terminal
Paystack Terminal
The Terminal API lets you build in-person payment experiences with Paystack POS terminals.
Depends on: paystack-setup for thehelper.paystackRequest
Terminal API 可让你借助Paystack POS终端打造线下支付体验。
依赖:需通过paystack-setup获取工具函数。paystackRequest
Endpoints
端点
| Method | Endpoint | Description |
|---|---|---|
| POST | | Send event to terminal |
| GET | | Check event delivery status |
| GET | | Check terminal availability |
| GET | | List terminals |
| GET | | Fetch terminal details |
| PUT | | Update terminal |
| POST | | Commission (activate) terminal |
| POST | | Decommission (deactivate) terminal |
| 方法 | 端点 | 描述 |
|---|---|---|
| POST | | 向终端发送事件 |
| GET | | 查看事件投递状态 |
| GET | | 查看终端可用性 |
| GET | | 列出所有终端 |
| GET | | 获取终端详情 |
| PUT | | 更新终端信息 |
| POST | | 激活终端 |
| POST | | 停用终端 |
Send Event to Terminal
向终端发送事件
| Param | Type | Required | Description |
|---|---|---|---|
| string | Yes | |
| string | Yes | For invoice: |
| object | Yes | Event data (see examples) |
typescript
// Send invoice to terminal for processing
const event = await paystackRequest<{ id: string }>(
`/terminal/${terminalId}/event`,
{
method: "POST",
body: JSON.stringify({
type: "invoice",
action: "process",
data: {
id: 7895939, // Invoice ID
reference: 4634337895939, // Offline reference
},
}),
}
);
// event.data.id → "616d721e8c5cd40a0cdd54a6"
// Print a transaction receipt
await paystackRequest(`/terminal/${terminalId}/event`, {
method: "POST",
body: JSON.stringify({
type: "transaction",
action: "print",
data: { id: transactionId },
}),
});| 参数 | 类型 | 是否必填 | 描述 |
|---|---|---|---|
| string | 是 | |
| string | 是 | 发票类型可选: |
| object | 是 | 事件数据(详见示例) |
typescript
// 向终端发送发票以进行处理
const event = await paystackRequest<{ id: string }>(
`/terminal/${terminalId}/event`,
{
method: "POST",
body: JSON.stringify({
type: "invoice",
action: "process",
data: {
id: 7895939, // 发票ID
reference: 4634337895939, // 离线参考号
},
}),
}
);
// event.data.id → "616d721e8c5cd40a0cdd54a6"
// 打印交易凭证
await paystackRequest(`/terminal/${terminalId}/event`, {
method: "POST",
body: JSON.stringify({
type: "transaction",
action: "print",
data: { id: transactionId },
}),
});Check Event Status
查看事件状态
typescript
const status = await paystackRequest<{ delivered: boolean }>(
`/terminal/${terminalId}/event/${eventId}`
);
// status.data.delivered → truetypescript
const status = await paystackRequest<{ delivered: boolean }>(
`/terminal/${terminalId}/event/${eventId}`
);
// status.data.delivered → trueCheck Terminal Availability
查看终端可用性
Always check before sending events:
typescript
const presence = await paystackRequest<{
online: boolean;
available: boolean;
}>(`/terminal/${terminalId}/presence`);
if (presence.data.online && presence.data.available) {
// Send event to terminal
}发送事件前请务必先检查:
typescript
const presence = await paystackRequest<{
online: boolean;
available: boolean;
}>(`/terminal/${terminalId}/presence`);
if (presence.data.online && presence.data.available) {
// 向终端发送事件
}List Terminals
列出所有终端
Uses cursor pagination:
typescript
const terminals = await paystackRequest("/terminal?perPage=50");
// terminals.meta.next → cursor for next page
// terminals.meta.previous → cursor for previous page使用游标分页:
typescript
const terminals = await paystackRequest("/terminal?perPage=50");
// terminals.meta.next → 下一页游标
// terminals.meta.previous → 上一页游标Fetch Terminal
获取终端详情
typescript
const terminal = await paystackRequest(`/terminal/${terminalId}`);
// terminal.data: { id, serial_number, terminal_id, name, address, status }typescript
const terminal = await paystackRequest(`/terminal/${terminalId}`);
// terminal.data: { id, serial_number, terminal_id, name, address, status }Update Terminal
更新终端信息
typescript
await paystackRequest(`/terminal/${terminalId}`, {
method: "PUT",
body: JSON.stringify({
name: "Front Desk Terminal",
address: "123 Main Street, Lagos",
}),
});typescript
await paystackRequest(`/terminal/${terminalId}`, {
method: "PUT",
body: JSON.stringify({
name: "前台终端",
address: "拉各斯市主街123号",
}),
});Commission / Decommission
激活/停用终端
typescript
// Activate a new terminal
await paystackRequest("/terminal/commission_device", {
method: "POST",
body: JSON.stringify({ serial_number: "1111150412230003899" }),
});
// Deactivate a terminal
await paystackRequest("/terminal/decommission_device", {
method: "POST",
body: JSON.stringify({ serial_number: "1111150412230003899" }),
});typescript
// 激活新终端
await paystackRequest("/terminal/commission_device", {
method: "POST",
body: JSON.stringify({ serial_number: "1111150412230003899" }),
});
// 停用终端
await paystackRequest("/terminal/decommission_device", {
method: "POST",
body: JSON.stringify({ serial_number: "1111150412230003899" }),
});