通用通知

1.8.1业务功能

通知url将从如下地方获取。

  1. 商户交易时传的notifyurl参数,支付完成后,小象支付会把支付信息发送到该url上,商户需要处理信息。
  2. 小象支付商户管理中配置的异步回调URL(如有需要,请联系祥付宝运营人员)。

商户需要对此通知做出响应,当收到商户返回“success”的应答时,小象支付才会认为通知成功,否则认为失败,会按一定的策略(1m,1m,5m,10m,1h,6h,12h)重新发起通知。

商户需要对接收到的数据优先进行验签处理,确定是从小象支付发送的通知后再进行业务方面的处理,因为没有验签而导致的后果商户自行承担。

1.8.2请求参数

字段名变量名必填类型中文释义
商户订单号orderidString(32)商户系统内部订单号
小象支付订单号outtrannoString(32)小象支付系统流水号
门店号storecodeString(32)商户的门店号
交易金额orderamtString(12)订单金额
交易状态tradestateString(20)支付成功:TRADE_SUCCESS退款成功:TRADE_REFUND撤销成功:REVOKED
支付方式methodString(20)订单支付方式,说明见1.14
交易时间tradetimeString(16)支付时间,格式yyyyMMddhhmmss
第三方订单号thirdorderidString(32)第三方通道支付订单号
原订单号oldorderString(32)退款异步通知才会有次参数
附加数据attachString(128)附加数据,在查询API和支付通知中原样返回,该字段主要用于商户携带订单的自定义数据
签名signString(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中,验签之前注意移出这些数据。

此文章有帮助吗?