旧版 API 接口文档 (GlobalPay V1.4.1)
说明
此文档为旧版 API,使用 MD5/RSA 签名方式提交业务参数。建议新接入方使用新版 API(RSA+AES 混合加密 + encryptedPayload)。
一、技术规范
1.1 请求方式
| 项目 | 说明 |
|---|---|
| 请求协议 | HTTP / HTTPS |
| 请求方法 | POST |
| Content-Type | application/x-www-form-urlencoded 或 application/json(两种均支持) |
| 字符编码 | UTF-8 |
| 响应格式 | JSON |
1.2 提交方式说明
旧版接口同时支持以下两种提交方式,任选其一即可:
| 提交方式 | Content-Type | 参数格式 | 说明 |
|---|---|---|---|
| 表单提交 | application/x-www-form-urlencoded | key1=value1&key2=value2 | 传统表单方式 |
| JSON 提交 | application/json | {"key1":"value1","key2":"value2"} | 以 JSON 请求体提交 |
重要
两种提交方式使用相同的业务参数和签名规则,服务端会根据 Content-Type 自动识别提交方式。签名时参数的拼接规则保持一致(按参数名 ASCII 字典序排序拼接为 key1=value1&key2=value2),只是最终发送时的请求体格式不同。
示例对比
表单提交:
bash
curl -X POST "http://接口域名/alliesPay/bussiness/order" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "alliesNo=test001&tradeNo=ORDER001&totalAmount=100.00&tradeType=31&sign=XXXX"JSON 提交:
bash
curl -X POST "http://接口域名/alliesPay/bussiness/order" \
-H "Content-Type: application/json" \
-d '{"alliesNo":"test001","tradeNo":"ORDER001","totalAmount":"100.00","tradeType":"31","sign":"XXXX"}'1.3 请求头参数(不参与签名,非必填)
| 参数名 | 类型 | 是否必填 | 示例值 | 说明 |
|---|---|---|---|---|
| X-ClientId | String | 否 | f1f24a9d296ca47d8f0b1 | 友商接入 ID |
1.4 公共响应格式
| 参数名 | 类型 | 示例值 | 说明 |
|---|---|---|---|
| code | String | 10000 | 代码对应业务请参照业务代码表格 |
| msg | String | 成功 | 响应信息 |
二、签名规则
2.1 签名生成步骤
第一步:参数排序
- 将所有发送或者接收到的数据为集合 M
- 将集合 M 内非空参数值的参数按照参数名 ASCII 码从小到大排序(字典序)
- 使用 URL 键值对的格式(即
key1=value1&key2=value2&…)拼接成字符串 stringA
第二步:拼接密钥并 MD5
- 在 stringA 最后拼接上
&key=商户密钥得到 stringSignTemp - 对 stringSignTemp 进行 MD5 运算
- 将得到的字符串所有字符转换为大写,得到 sign 值
2.2 签名示例
假设传送的参数如下:
alliesNo: d930ea5d5a258f4f
tradeNo: 10000100
totalAmount: 1000
tradeType: 31
productId: 310
noticeUrl: https://example.com/notify
frontNotifyUrl: https://example.com/return
attach: eyAiYmF... (Base64编码的JSON串)第一步:对参数按照 key=value 的格式,并按照参数名 ASCII 字典序排序如下:
stringA=alliesNo=d930ea5d5a258f4f&attach=eyAiYmF...&frontNotifyUrl=https://example.com/return¬iceUrl=https://example.com/notify&productId=310&totalAmount=1000&tradeNo=10000100&tradeType=31第二步:拼接 API 密钥:
stringSignTemp=stringA&key=192006250b4c09247ec02edce69f6a2d
sign=MD5(stringSignTemp).toUpperCase()=3E541783111209F709ACDA0F4BFD17EA2.3 attach 参数签名规则
attach 字段签名规则如下:
- 把 attach 参数转换为 JSON 串
- 并用 Base64 编码 方式,把加密完的字符串放入 attach 字段
Java 示例:
java
JSONObject jsonObject = new JSONObject();
jsonObject.put("bankAccount", "小王");
jsonObject.put("bankCard", "3501101111255501");
jsonObject.put("bankMark", "CCB");
jsonObject.put("bankName", "建设银行");
String jsonData = jsonObject.toJSONString();
// JSON内容: {"bankAccount":"小王","bankCard":"3501101111255501","bankMark":"CCB","bankName":"建设银行"}
byte[] a = Base64Utils.encode(jsonData.getBytes());
String attach = new String(a);PHP 示例:
php
$attachData = [
'bankAccount' => '小王',
'bankCard' => '3501101111255501',
'bankMark' => 'CCB',
'bankName' => '建设银行',
];
$attach = base64_encode(json_encode($attachData, JSON_UNESCAPED_UNICODE));三、接口列表
| 序号 | 接口路径 | 接口名称 |
|---|---|---|
| 1 | /alliesPay/bussiness/order | 代收下单接口 |
| 2 | /alliesPay/bussiness/query | 代收订单查询接口 |
| 3 | /alliesPay/bussiness/queryBalance | 友商余额查询接口 |
| 4 | /peerpay/bussiness/order | 代付下单接口 |
| 5 | /peerpay/bussiness/query | 代付订单查询接口 |
接口说明目录
四、业务返回码
| 代码 | 描述 |
|---|---|
| 10000 | 处理成功 |
| 2003 | ClientId 错误 |
| 2004 | 友商不存在 |
| 2005 | 未传金额 |
| 2006 | 未传订单号 |
| 2007 | 未传回调地址 |
| 2008 | 订单号已存在 |
| 2009 | 未传支付方式 |
| 2010 | 签名错误 |
| 9999 | 系统异常 |
五、回调响应要求
当通知方式为服务器后台异步通知时,友商系统在收到通知并处理完成后,必须打印输出包含 success 这个字符串。
如果响应内容不包含 success,支付平台系统会认为通知失败。
正确示例(PHP):
php
echo "success";正确示例(Java Spring):
java
@RequestMapping("/notify")
@ResponseBody
public String notify(HttpServletRequest request) {
// 处理业务逻辑...
return "success";
}