1.8.1业务功能
通知url将从如下地方获取。
- 商户交易时传的notifyurl参数,支付完成后,小象支付会把支付信息发送到该url上,商户需要处理信息。
- 小象支付商户管理中配置的异步回调URL(如有需要,请联系祥付宝运营人员)。
商户需要对此通知做出响应,当收到商户返回“success”的应答时,小象支付才会认为通知成功,否则认为失败,会按一定的策略(1m,1m,5m,10m,1h,6h,12h)重新发起通知。
商户需要对接收到的数据优先进行验签处理,确定是从小象支付发送的通知后再进行业务方面的处理,因为没有验签而导致的后果商户自行承担。
1.8.2请求参数
字段名 | 变量名 | 必填 | 类型 | 中文释义 |
商户订单号 | orderid | 是 | String(32) | 商户系统内部订单号 |
小象支付订单号 | outtranno | 是 | String(32) | 小象支付系统流水号 |
门店号 | storecode | 否 | String(32) | 商户的门店号 |
交易金额 | orderamt | 是 | String(12) | 订单金额 |
交易状态 | tradestate | 是 | String(20) | 支付成功:TRADE_SUCCESS退款成功:TRADE_REFUND撤销成功:REVOKED |
支付方式 | method | 是 | String(20) | 订单支付方式,说明见1.14 |
交易时间 | tradetime | 是 | String(16) | 支付时间,格式yyyyMMddhhmmss |
第三方订单号 | thirdorderid | 是 | String(32) | 第三方通道支付订单号 |
原订单号 | oldorder | 否 | String(32) | 退款异步通知才会有次参数 |
附加数据 | attach | 否 | String(128) | 附加数据,在查询API和支付通知中原样返回,该字段主要用于商户携带订单的自定义数据 |
签名 | sign | 是 | String(32) | 生成方法见1.2 |
1.8.3返回参数
商户处理成功后需要返回给祥付宝“success”来说明处理成功。
下面将详细说明编码形式。
假如异步通知地址是https://abc.com/notify.do,服务端将上述参数按1.2 Sign 签名生成方法处理后,按照key1=value1&key2=value2&key3=value3&…&paykey=商户paykey的形式进行md5加密生成一个sign,并将该sign和上述参数一起发送出去。此时待通知的url全路径即是
https://abc.com/notify.do?key1=value1&key2=value2&key3=value3&…&sign=CCC89C1585AC45450D669F12068B02BE
被通知端通过re.getParameterNames()获取到所有的key,然后
将所有数据放进一个TreeMap中,代码如下:
HttpServletRequest request = getRequest();
Map<String, String> map = new TreeMap<String, String>();
Enumeration<?> parameterNames = request.getParameterNames();
while (parameterNames.hasMoreElements()) {
String key = (String)parameterNames.nextElement();
String value = request.getParameter(key);
map.put(key, value);
}
但是要注意的是,在验签时要将sign从map中移出。
另外尤其要注意的是当异步通知地址中含有一定的参数时,即是https://abc.com/notify.do?param1=value1¶m2=value2&…时,上面的循环中将会把这些数据也会在map中,验签之前注意移出这些数据。