POS 统一SDK接入指南
概述
本指南适用于 POS 终端渠道接入,支持以下渠道:
- CoGoLinks:CoGoLinks POS 终端
快速开始
1. 添加依赖
Android 项目:
dependencies {
implementation(files("libs/cogolinks-payment-unify-sdk-1.0.5.jar"))
}
Java 项目:
dependencies {
implementation files('libs/cogolinks-payment-unify-sdk-1.0.5.jar')
}
SDK下载
注意:SDK JAR 已包含所有必需依赖,无需额外添加。
2. 初始化 SDK
import com.cogolinks.payment.sdk.pos.UnifySDK;
// 初始化 CoGoLinks 渠道
UnifySDK.init("CoGoLinks", "192.168.10.60", "8090");
3. 调用接口
import org.json.JSONObject;
// 构建请求
JSONObject request = new JSONObject();
request.put("api", "/sale");
request.put("orderAmount", "10.00");
request.put("merchantOrderNo", "ORDER-20250101-001");
request.put("merchantSerialNo", "your-serial-no");
request.put("paymentType", "01");
request.put("currency", "HKD");
// 执行请求
String response = UnifySDK.execute(request.toString());
// 解析响应
JSONObject responseJson = new JSONObject(response);
if ("00".equals(responseJson.optString("code"))) {
JSONObject data = responseJson.optJSONObject("data");
// 处理成功响应
} else {
// 处理失败响应
}
支持的接口
POS 端渠道支持以下统一接口:
| 接口路径 | 功能说明 | CoGoLinks |
|---|---|---|
/sale | 消费交易 | ✅ |
/revoke | 撤销交易 | ✅ |
/refund | 退款交易 | ✅ |
/query/transaction | 查询交易 | ✅ |
/cancel/transaction | 取消交易 | ✅ |
常用场景
场景1:消费交易
// 初始化 CoGoLinks
UnifySDK.init("CoGoLinks", "192.168.10.60", "8090");
// 消费交易
JSONObject request = new JSONObject();
request.put("api", "/sale");
request.put("paymentType", "01"); // 01-银行卡
request.put("merchantOrderNo", "ORDER-001");
request.put("merchantSerialNo", "SERIAL-001");
request.put("orderAmount", "100.00");
request.put("currency", "HKD");
String response = UnifySDK.execute(request.toString());
场景2:撤销交易
JSONObject request = new JSONObject();
request.put("api", "/revoke");
request.put("originalTransactionNo", "原交易流水号");
request.put("merchantSerialNo", "SERIAL-002");
request.put("orderAmount", "100.00");
request.put("currency", "HKD");
String response = UnifySDK.execute(request.toString());
场景3:退款交易
JSONObject request = new JSONObject();
request.put("api", "/refund");
request.put("refundOrderAmount", "50.00");
request.put("merchantSerialNo", "SERIAL-003");
request.put("currency", "HKD");
String response = UnifySDK.execute(request.toString());
场景4:查询交易
JSONObject request = new JSONObject();
request.put("api", "/query/transaction");
request.put("merchantSerialNo", "SERIAL-001");
String response = UnifySDK.execute(request.toString());
核心 API
执行请求
// 方式1:使用已初始化的渠道和IP
String response = UnifySDK.execute(String requestJson);
// 方式2:指定渠道和IP(无需初始化)
String response = UnifySDK.execute(String requestJson, String channel, String posIp);
// 方式3:指定渠道、IP和端口
String response = UnifySDK.execute(String requestJson, String channel, String posIp, String posPort);
渠道管理
// 获取支持的渠道列表
List<String> channels = UnifySDK.getSupportedChannels();
// 检查渠道是否支持
boolean supported = UnifySDK.isChannelSupported("CoGoLinks");
配置管理
// 保存配置到本地(持久化,会替换本地已有配置)
boolean success = UnifySDK.saveChannelConfig("CoGoLinks", configJsonString);
// 注入配置到内存(临时,不持久化)
UnifySDK.injectChannelConfig("CoGoLinks", configJsonString);
// 从本地文件加载配置
UnifySDK.loadChannelConfigFromLocal("CoGoLinks");
// 检查配置是否存在
boolean exists = UnifySDK.hasChannelConfig("CoGoLinks");
// 移除配置
UnifySDK.removeChannelConfig("CoGoLinks");
// 刷新配置(先移除再注入)
UnifySDK.refreshChannelConfig("CoGoLinks", newConfigJsonString);
远程配置
// 设置配置列表URL(用于自动下载)
UnifySDK.setChannelListUrl("https://example.com/channelList.json");
// 设置配置 保存目录
UnifySDK.setConfigDir("/path/to/configs");
// 手动触发配置下载
UnifySDK.downloadConfigs();
响应格式
所有接口返回统一格式:
{
"code": "00",
"msg": "成功",
"data": {
"transactionNo": "交易流水号",
"orderAmount": "100.00",
"merchantOrderNo": "商户订单号",
"merchantSerialNo": "商户流水号",
// 其他业务字段...
}
}
响应码说明:
00:成功01:失败02:结果未知,需要查询确认22:已关单
配置管理
配置来源优先级
- 内存配置(通过
injectChannelConfig()注入) - 本地下载文件(通过
saveChannelConfig()或远程下载保存) - SDK预置配置(resources目录中的配置文件)
配置保存位置
- Android:
/data/data/{包名}/cache/.unify_sdk/configs/ - Java:
{user.home}/.unify_sdk/configs/ - 自定义:通过
setConfigDir()设置
自动下载配置
SDK 初始化时会自动从远程下载配置(如果配置了URL):
- 默认URL:
http://unifysdk.oss-cn-hangzhou.aliyuncs.com/channelList.json?... - 自定义URL:通过
setChannelListUrl()设置 - 下载的配置自动保存到本地,优先级高于SDK预置配置
- 下载在后台线程执行,不会阻塞主线程
注意事项
1. 金额单位
- 统一以元为单位传入(如
orderAmount: "100.00") - CoGoLinks 渠道:直接使用元单位
- 响应中的金额会自动转换回元
2. 线程安全
- SDK 支持多线程并发调用
- 建议在应用启动时初始化一次,后续直接调用
execute()
3. CoGoLinks 渠道特点
- 接口路径与统一接口路径一致
- 金额直接使用元单位
- 响应格式为嵌套结构(
data字段包含业务数据)
常见问题
Q1: 如何切换渠道?
A: 每次调用时指定渠道,或重新调用 init():
// 方式1:每次调用时指定
UnifySDK.execute(requestJson, "CoGoLinks", "192.168.10.60", "8090");
// 方式2:重新初始化
UnifySDK.init("CoGoLinks", "192.168.10.60", "8090");
UnifySDK.execute(requestJson);
Q2: 如何判断交易是否成功?
A: 检查响应中的 code 字段:
JSONObject response = new JSONObject(result);
String code = response.optString("code");
if ("00".equals(code)) {
// 交易成功
} else {
// 交易失败
}
Q3: 配置保存后如何验证是否生效?
A: 配置保存后会自动清除缓存并重新加载,可通过以下方式验证:
// 方式1:检查配置是否存在
boolean exists = UnifySDK.hasChannelConfig("CoGoLinks");
// 方式2:调用接口验证配置是否生效
// 如果配置中有特殊字段或行为,调用接口后检查响应是否符合预期
Q4: 如何查看配置保存位置?
A: 配置保存位置取决于平台:
- Android:
/data/data/{包名}/cache/.unify_sdk/configs/{ChannelName}.json - Java:
{user.home}/.unify_sdk/configs/{ChannelName}.json - 自定义:通过
setConfigDir()设置的目录