订单状态回调接口规范
# 规范说明
回调接口定义: 即商户后台下单时传入的回调接口地址,并且回调接口接收参数必须按照如下"请求参数"进行实现
回调接口作用: 当订单结束(成功或失败)时,TopPay会通过POST方式向商户后台发送请求,通知订单状态变化等信息
回调接口约束: 商户后台收到请求后,需返回"success"字符串,否则TopPay会认为回调失败
# 特别注意
回调接口验证: 商户后台收到请求后,需要用平台公钥对签名进行验证,能验证通过才是合法请求,才能进行业务处理
验证签名细节: 参数格式化时,需要过滤null和空字符串,详情可查看TopPaySignUtil#paramFormat方法代码实现
下面给出的示例代码,仅供参考,请根据实际情况进行修改
import java.util.HashMap;
import java.util.Map;
// import TopPaySignUtil;
public class CallBack {
//平台公钥来自商户后台
private static final String PLAT_PUBLIC_KEY = "MIGfMA0GCSqGSIb3DQEBAQUACahEnlP3aRj8yCT+WHzR+VvPBTw9S1i7iYWb+MY09CG/HYuHF4+IxshXDJygmndxKf/esuwPybS8mAd//yubHpmZsmBqg1FffT8VH1APa6ZRWASUp4U01ZrbCCp35QA8FuWrJGMJxGx4xk7KUtV2yujxC8noQIDAQAB";
//这里使用字典接收参数只是示例,实际开发中请根据实际情况进行修改
public String callBackMethod(Map<String, String> requestParams) {
//注意: 格式化请求参数之前 要确保去掉sign字段
String sign = requestParams.remove("sign");
//将接收到的参数格式化 并计算签名 并将签名值加入到请求参数中
String source = TopPaySignUtil.paramFormat(requestParams);
//签名验证
boolean validReq = TopPaySignUtil.verify(PLAT_PUBLIC_KEY, source, sign);
if (!validReq) {
// ... 签名验证错误
return "fail";
}
// ... 签名验证通过,执行正常的业务逻辑
return "success"; //最后成功处理 一定要返回"success"字符串 否则TopPay会认为回调失败
}
}
public class TestCallBack {
public static void main(String[] args) {
Map<String, String> requestParams = new HashMap<>();
requestParams.put("platOrderNum", "S820190712000002");
requestParams.put("merchantCode", "S820211021094748000001");
requestParams.put("orderType", "1");
requestParams.put("orderNum", "T1231511321515");
requestParams.put("orderAmount", "100.00");
requestParams.put("realAmount", "99.91");
requestParams.put("status", "30");
requestParams.put("timestamp", "1745377181");
requestParams.put("utr", "HDFC1234567890");
requestParams.put("sign", "Bf8ZfHn7UyHO8TsU8Xkh2sqa0hbpKH1HSPampNXxzBn5PvJoytb8zPkHuQ...");
// 实例化 CallBack 类
CallBack newObj = new CallBack();
// 调用方法并打印结果
String result = newObj.callBackMethod(requestParams);
System.out.println(result);
}
}
# 请求地址
- 请求方式 : POST
- 请求地址 : 自定义
# 请求参数
| 参数 | 必填 | 描述 | 示例 |
|---|---|---|---|
| platOrderNum | Y | 平台订单号 | S820190712000002 |
| merchantCode | Y | 商户ID | S820211021094748000001 |
| orderType | Y | 订单类型 | 1:代收 2:代付 |
| orderNum | Y | 商户订单号 | T1231511321515 |
| orderAmount | Y | 订单金额(单位:1卢比) | 100.00 回调金额以此为准 |
| realAmount | N | 用户实际支付金额(单位:1卢比) | 99.01仅需要时使用,几乎用不到 |
| status | Y | 订单状态 | 20:处理中 30:成功 40:失败 |
| timestamp | Y | 时间戳(秒),取系统实时时间戳 | 1745377181 |
| utr | N | 统一交易参考号 | HDFC1234567890 |
| sign | Y | 签名 | Bf8ZfHn7UyHO8TsU8Xkh2sqa0hbpKH1HSPampNXxzBn5PvJoytb8zPkHuQ |
# 请求报文示例
{
"platOrderNum": "S820190712000002",
"merchantCode": "S820211021094748000001",
"orderType": "1",
"orderNum": "T1231511321515",
"orderAmount": "100.00",
"realAmount": "99.01",
"status": "30",
"timestamp": "1745377181",
"utr": "HDFC1234567890",
"sign": "Bf8ZfHn7UyHO8TsU8Xkh2sqa0hbpKH1HSPampNXxzBn5PvJoytb8zPkHuQ"
}
# 响应参数
成功处理,返回success字符串
# 响应报文示例
"success"