同一终端内应用集成
1. 简介
商家的 POS 应用程 序运行在同一个支付终端上时,可以通过 WiseCashier 的支付集成API 拉起结账组件来完成付款。

1.1 典型处理流程

- POS 应用程序向 WiseCashier 发送订单信息(包括订单号、金额),以拉取支付结账组件。
- WiseCashier 的结账组件收集银行卡信息/移动钱包用户支付凭证并安全地进行处理,然后将其与交易数据中的订单信息合并,并向 PayCloud Gateway 发送支付请求。
- PayCloud Gateway 处理交易数据包并发送到Processor的支付平台或收单系统。
- Processor的支付平台或收单系统向 PayCloud Gateway 响应结果。
- PayCloud Gateway 向 WiseCashier 应用程序响应交易结果。
- WiseCashier 应用程序向 POS 应用程序返回交易结果。
1.2 集成方式
POS 应用程序使用 Android Intent 方式与 WiseCashier 应用程序进行交互。以下图表显示了这两个应用程序之间的交互。

- 第三方POS应用程序调用 "startActivityForResult" 函数来调用 WiseCashier应用程序。
- WiseCashier应用程序解析来自 POS 应用程序的捆绑数据,然后处理交易。
- 然后,WiseCashier应用程序在交易完成后调用 "setResult" 函数并 "finish" 自己的 Activity。
- POS 应用程序通过 "onActivityResult" 事件接收交易结果。
2. 交易API
本文根据以下约定每个参数字段的必要性。
- M:必要参数
- C:在满足某些条件时,是必要参数
- O:可选参数
- -:不存在
2.1 消费
销售交易指持卡人从商户处购买商品或服务时进行的支付操作。交易金额从持卡人账户中扣除,转入到商户账户。
参数名 | 类型 | 长度 | 请求 | 响应 | 说明 |
---|---|---|---|---|---|
version | String | M | M | API 版本,固定值 "A01" | |
transType | String | M | M | 消费交易的类型代码,固定值 SALE | |
appId | String | 18 | M | - | 在PayCloud网关中注册的支付应用程序ID,请参阅 支付网关集成指南 |
loginMode | String | O | - | “Login” - 需要登录,默认值 “LoginFree” - 不需要登录 | |
userID | String | O | - | userID/Login ID | |
userPassword | String | O | - | userPassword/Login password | |
transData | JSON | M | C | ||
result | String | - | M | 请参阅附录 - 交易结果代码 | |
resultMsg | String | - | C | 结果消息 |
transData 字段
参数名 | 类型 | 长度 | 请求 | 响应 | 说明 |
---|---|---|---|---|---|
businessOrderNo | String | M | M | 商家的POS应用程序或业务系统的订单号码,必须在其系统中是唯一的 | |
paymentScenario | String | M | M | 支付场景 “CARD” – for Card Payment “SCANQR” – Customers scan a code to pay “BSCANQR” – Customers display qr code to pay “CASH” – for cash Payment | |
paymentMethod | String | C | - | 支付方式。仅当“paymentScenario”设置为“3”或“4”时,该字段才是必填项. 请参考 支付方式 | |
amt | String | 12 | M | M | 订单金额,单位为币种最小单位cents,例如 1USD = 100cents, 1ZAR = 100cents, 1NAD = 100cents |
tipAmount | String | 12 | O | O | 小费金额,单位为币种最小单位cents,例如 1USD = 100cents, 1ZAR = 100cents, 1NAD = 100cents |
note | String | 128 | O | - | 订单备注信息 |
notifyUrl | String | 128 | O | O | 接收服务端交易通知webhook的服务地址URL |
transDate | String | 8 | - | M | 交易日期,格式:YYYYMMDD |
transTime | String | 6 | - | M | 交易时间,格式:HHMMSS |
operator | String | 4 | - | O | 操作员的工号 |
authCode | String | 6 | - | C | 授权码。该字段在信用卡交易时返回值。 |
refNo | String | 12 | - | C | 检索参考号码。该字段在信用卡交易时返回值。 |
cardNo | String | 19 | - | C | 卡号,已根据 PCI 规范进行掩码处理。 示例:430277****5723. 该字段在卡付交易时返回值。 |
entryMode | String | 2 | - | O | 该字段在信用卡交易时返回值: 1 - 刷卡磁条卡 2 - 接触式芯片卡 3 - 非接触式芯片卡 4 - 手动输入 |
cardIssuerName | String | 10 | - | O | 发卡行名称 |
cardIssuerID | String | 2 | - | O | 发卡行ID |
cardHolderName | String | 32 | - | O | 持卡人姓名 |
transactionID | String | 32 | - | M | PayCloud网关的交易ID。 |
forecourtData | Array | - | O | 如果商家是一个加油站,请通过此参数设置加油站特殊商品信息。forecourtData是一个数组,他的每一个元素的结构请查看 “forecourt”。 forecourtData 商品金额总和必须和订单金额amt 相同 |
forecourt结构如下:
参数名 | 类型 | 长度 | 请求 | 响应 | 说明 |
---|---|---|---|---|---|
code | String | M | - | 银行分配的商品编码 他通常是两位数的数字编码,例如:02 | |
quantity | String | M | - | 商品数量(升,保留三位小数) 保留3位小数,例如:1.050 | |
amount | String | M | - | 商品金额,单位为币种最小单位cents 单位为分的整数,1南非币在这里用100表示,它和 amt 的单位不一样 示例:100 |
2.2 消费退款/撤销
撤销交易通常是指在交易完成后的短时间内,商家因某种原因(例如商家错误、顾客改变主意等)需要取消交易。
- 撤销通常必须在交易当日且在批结算之前进行。
- 成功撤销后,原交易金额将退还给持卡人的账户,就像交易从未发生过一样。
- 撤销通常需要原始交易凭证或相关信息才能进行操作。
退款交易是指持卡人因某种原因(例如物品有问题、对服务不满意等)需要退回物品或取消服务,在交易清算后要求将支付的金额退回到信用卡账户的过程。
- 退款可能发生在交易当天,也可能在几天或更久之后。
- 退款通常需要持卡人提供购买凭证和退款原因,商家审核后退款将适当金额退回到持卡人的信用卡账户。
参数名 | 类型 | 长度 | 请求 | 响应 | 说明 |
---|---|---|---|---|---|
version | String | M | M | API 版本,固定值“A01” | |
transType | String | M | M | 撤销交易的类型代码,固定值 REFUND | |
appId | String | 18 | M | - | 在PayCloud网关注册的支付应用程序 ID, 请参阅 支付网关集成指南 |
loginMode | String | O | - | “Login” - 需要登录,默认值 “LoginFree” - 不需要登录 | |
userID | String | O | - | userID/Login ID | |
userPassword | String | O | - | userPassword/Login password | |
transData | JSON | M | C | ||
result | String | - | M | 请参阅附录 - 交易结果代码 | |
resultMsg | String | - | C | 结果消息 |
transData field
参数名 | 类型 | 长度 | 请求 | 响应 | 说明 |
---|---|---|---|---|---|
originBusinessOrderNo | String | M | - | 原始消费交易的订单号 | |
businessOrderNo | String | M | M | 商家的POS应用程序或业务系统的订单号码,必须在其系统中是唯一的 | |
amt | String | 12 | M | M | 订单金额,单位为币种最小单位cents,例如 1USD = 100cents, 1ZAR = 100cents, 1NAD = 100cents |
paymentScenario | String | M | - | 支付场景 “CARD” – for Card Payment “SCANQR” – Customers scan a code to pay “BSCANQR” – Customers display qr code to pay “CASH” – for cash Payment | |
refNo | String | 12 | M | M | 检索参考号码,该字段在信用卡交易时返回值 |
originTransDate | String | 8 | M | - | 原交易的交易日期,格式:YYYYMMDD |
notifyUrl | String | 128 | O | - | 接收服务端交易通知webhook的服务地址URL |
paymentMethod | String | - | M | 请参考 支付方式 | |
transDate | String | 8 | - | M | 交易日期,格式:YYYYMMDD |
transTime | String | 6 | - | M | 交易时间,格式:HHMMSS |
operator | String | 4 | - | O | 操作员的工号 |
authCode | String | 6 | - | M | A授权码,该字段在信用卡交易时返回值 |
cardIssuer | String | 10 | - | O | 发卡行名称 |
cardNo | String | 19 | - | M | 卡号,已根据 PCI 规范进行掩码处理。 示例:430277****5723. 该字段在卡付交易时返回值 |
entryMode | String | 2 | - | O | 该字段在信用卡交易时返回值: 1 - 刷卡磁条卡 2 - 接触式芯片卡 3 - 非接触式芯片卡 4 - 手动输入 |
tipAmount | String | 12 | - | O | 小费金额,单位为币种最小单位cents,例如 1USD = 100cents, 1ZAR = 100cents, 1NAD = 100cents |
transactionID | String | 32 | - | M | PayCloud网关的交易 ID |
2.3 预授权
预授权交易是一种卡片交易授权类型,商家可以通过该授权确保交易金额在客户账户中冻结或保留,直到交易完成。 在授权阶段,商家向客户的银行请求特定金额的授权,如果客户的账户中有足够的可用余额或信用额度,则会暂时冻结该金额。这意味着该金额尚未实际扣除,但客户在此期间不能将资金用于其他购买。 授权通常用于最终交易金额不确定的情况,例如住宿服务、租赁服务、无人值守自助服务等。
参数名 | 类型 | 长度 | 请求 | 响应 | 说明 |
---|---|---|---|---|---|
version | String | M | M | API 版本,固定值“A01” | |
transType | String | M | M | 授权交易的类型代码,固定值 PREAUTH | |
appId | String | 18 | M | - | 在PayCloud网关注册的支付应用程序 ID,请参阅 支付网关集成指南 |
loginMode | String | O | - | “Login” - 需要登录,默认值 “LoginFree” - 不需要登录 | |
userID | String | O | - | userID/Login ID | |
userPassword | String | O | - | userPassword/Login password | |
transData | JSON | M | C | ||
result | String | - | M | 请参阅附录 - 交易结果代码 | |
resultMsg | String | - | C | 结果消息 |
transData 字段
参数名 | 类型 | 长度 | 请求 | 响应 | 说明 |
---|---|---|---|---|---|
businessOrderNo | String | M | M | 商家的POS应用程序或业务系统的订单号码,必须在其系统中是唯一的 | |
paymentScenario | String | M | - | 支付场景 “CARD” – for Card Payment | |
amt | String | 12 | M | M | 订单金额,单位为币种最小单位cents,例如 1USD = 100cents, 1ZAR = 100cents, 1NAD = 100cents |
note | String | 128 | O | - | 订单备注信息 |
notifyUrl | String | 128 | O | O | 接收服务端交易通知webhook的服务地址URL |
paymentMethod | String | - | M | 请参考 支付方式 | |
transDate | String | 8 | - | M | 交易日期,格式:YYYYMMDD |
transTime | String | 6 | - | M | 交易时间,格式:HHMMSS |
operator | String | 4 | - | O | 操作员的工号 |
authCode | String | 6 | - | M | 授权码,该字段在信用卡交易时返回值 |
cardIssuer | String | 10 | - | O | 发卡行名称 |
refNo | String | 12 | - | M | 检索参考号码,该字段在信用卡交易时返回值 |
cardNo | String | 19 | - | M | 卡号,已根据 PCI 规范进行掩码处理。 示例:430277****5723. 该字段在卡付交易时返回值 |
entryMode | String | 2 | - | O | 该字段在信用卡交易时返回值: 1 - 刷卡磁条卡 2 - 接触式芯片卡 3 - 非接触式芯片卡 4 - 手动输入 |
tipAmount | String | 12 | - | O | 小费金额,单位为币种最小单位cents,例如 1USD = 100cents, 1ZAR = 100cents, 1NAD = 100cents |
2.4 预授权完成
完成交易是指在授权后,当服务或商品的实际消费完成并最终确定金额时,请求商家正式从客户的账户中扣除先前授权的金额的过程。这一步是对授权的后续行动,确保商家收到付款。 例如,当顾客在住宿结束时结账离开酒店时,酒店将比较先前授权的金额与实际花费的金额;如果实际花费的金额较高,酒店将请求额外授权以弥补差额;如果实际花费的金额较低,则只会扣除实际花费的金额,授权金额的余额将退回到客户的账户中。
参数名 | 类型 | 长度 | 请求 | 响应 | 说明 |
---|---|---|---|---|---|
version | String | M | M | API 版本,固定值“A01” | |
transType | String | M | M | 授权完成交易的类型代码,固定值 PREAUTHCOMPLETE | |
appId | String | 18 | M | - | 在PayCloud网关注册的支付应用程序 ID,请参阅 支付网关集成指南 |
loginMode | String | O | - | “Login” - 需要登录,默认值 “LoginFree” - 不需要登录 | |
userID | String | O | - | userID/Login ID | |
userPassword | String | O | - | userPassword/Login password | |
transData | JSON | M | C | ||
result | String | - | M | 请参阅附录 - 交易结果代码 | |
resultMsg | String | - | C | 结果消息 |
transData 字段
参数名 | 类型 | 长度 | 请求 | 响应 | 说明 |
---|---|---|---|---|---|
originBusinessOrderNo | String | 12 | M | - | 原始授权交易的订单号 |
businessOrderNo | String | M | M | 商家的POS应用程序或业务系统的订单号码,必须在其系统中是唯一的 | |
paymentScenario | String | M | - | 支付场景 “CARD” – for Card Payment | |
amt | String | 12 | M | M | 授权确认金额。最终支付金额以及授权期间的任何多余金额将退还至客户账户,单位为币种最小单位cents,例如 1USD = 100cents, 1ZAR = 100cents, 1NAD = 100cents |
authCode | String | 6 | M | M | 授权码,该字段在信用卡交易时返回值 |
notifyUrl | String | 128 | O | O | 接收服务端交易通知webhook的服务地址URL |
paymentMethod | String | - | M | 请参考 支付方式 | |
transDate | String | 8 | - | M | 交易日期,格式:YYYYMMDD |
transTime | String | 6 | - | M | 交易时间,格式:HHMMSS |
operator | String | 4 | - | O | 操作员工号 |
refNo | String | 12 | - | M | 检索参考号码,该字段在信用卡交易时返回值 |
cardNo | String | 19 | - | M | 卡号,已根据 PCI 规范进行掩码处理。 示例:430277****5723. |
entryMode | String | 2 | - | O | 该字段在信用卡交易时返回值: 1 - 刷卡磁条卡 2 - 接触式芯片卡 3 - 非接触式芯片卡d 4 - 手动输入 |
cardIssuer | String | 10 | - | O | 发卡行名称 |
tipAmount | String | 12 | - | O | 小费金额,单位为币种最小单位cents,例如 1USD = 100cents, 1ZAR = 100cents, 1NAD = 100cents |
2.5 预授权撤销
撤销预授权交易,被冻结的资金将会被退还到持卡人账户中。
参数名 | 类型 | 长度 | 请求 | 响应 | 说明 |
---|---|---|---|---|---|
version | String | M | M | API 版本,固定值“A01” | |
transType | String | M | M | 授权完成交易的类型代码,固定值 PREAUTHCANCEL | |
appId | String | 18 | M | - | 在PayCloud网关注册的支付应用程序 ID,请参阅 支付网关集成指南 |
loginMode | String | O | - | “Login” - 需要登录,默认值 “LoginFree” - 不需要登录 | |
userID | String | O | - | userID/Login ID | |
userPassword | String | O | - | userPassword/Login password | |
transData | JSON | M | C | ||
result | String | - | M | 请参阅附录 - 交易结果代码 | |
resultMsg | String | - | C | 结果消息 |
transData 字段
参数名 | 类型 | 长度 | 请求 | 响应 | 说明 |
---|---|---|---|---|---|
originBusinessOrderNo | String | 12 | M | - | 原始授权交易的订单号 |
businessOrderNo | String | M | M | 商家的POS应用程序或业务系统的 订单号码,必须在其系统中是唯一的 | |
paymentScenario | String | M | - | 支付场景 “CARD” – for Card Payment | |
amt | String | 12 | M | M | 授权确认金额。最终支付金额以及授权期间的任何多余金额将退还至客户账户,单位为币种最小单位cents,例如 1USD = 100cents, 1ZAR = 100cents, 1NAD = 100cents |
authCode | String | 6 | M | M | 授权码,该字段在信用卡交易时返回值 |
notifyUrl | String | 128 | O | O | 接收服务端交易通知webhook的服务地址URL |
paymentMethod | String | - | M | 请参考 支付方式 | |
transDate | String | 8 | - | M | 交易日期,格式:YYYYMMDD |
transTime | String | 6 | - | M | 交易时间,格式:HHMMSS |
operator | String | 4 | - | O | 操作员工号 |
refNo | String | 12 | - | M | 检索参考号码,该字段在信用卡交易时返回值 |
cardNo | String | 19 | - | M | 卡号,已根据 PCI 规范进行掩码处理。 示例:430277****5723. |
entryMode | String | 2 | - | O | 该字段在信用卡交易时返回值: 1 - 刷卡磁条卡 2 - 接触式芯片卡 3 - 非接触式芯片卡d 4 - 手动输入 |
cardIssuer | String | 10 | - | O | 发卡行名称 |
tipAmount | String | 12 | - | O | 小费金额,单位为币种最小单位cents,例如 1USD = 100cents, 1ZAR = 100cents, 1NAD = 100cents |