支付流程注意事项

  1. 参数
    参数可以写注解校验,可以用切面校验。
    参数校验包括长度, 取值范围,重复提交(订单号重复,批次号重复等)。
    举个栗子:
    收款账号类型个人还是对公,交易金额限额,汇路,同行跨行,付款账号是否存在,批次信息错误,给出错误项,下标,非空校验,正整数校验,时间类型开始时间,长度,正则,整这些行了,^_^
  2. 异常
    先说这个问题吧,异常,一定要捕获,一定要捕获,一定要捕获!!!
    至少报错了能给下游返回,能给出错误原因就比较好了,能总结出错误代码(比如成功100000,系统错误199999)就更好了,能发邮件就最好了。
    好了,不扯淡,以上事实上都需要有,是一个渐进的过程吧,上线时间紧张的话,至少保证第一个。
    异常要打日志, 异常要打日志, 异常要打日志!!!
    最痛苦的事情就是,生产出了事故,没有日志,是自己写的代码还好,不怨别人,如果你写了代码,离职了,出事故了,人一追日志,没有日志,没有,没。。
    定义异常:
    异常ID,用于表示某一异常实例,每一个异常实例都有一个唯一的异常ID。
    异常信息,包含必要的上下文业务信息,用于打印日志。
    具体异常码,即异常码code的后3位,由各具体异常实例化时自己定义。
    异常码描述。
  3. 异步
    拿批量付款举例吧,批量的交易,我们一般做异步处理,也就是说入库之后我们就给下游返回已处理,之后我们起线程和上游交互。
    和下游交互过程如下:
    a.参数转换,入参转换为批次信息,明细信息;
    b.校验相关必要信息, 入库;
    和上游交互过程如下:
    a.转换报文,包括一些商户号,账号,用户名,密码,注意编码格式,钱的单位&格式(分,元有无逗号之类的);
    b.发送报文;
    c.处理返回结果:
    <1>判断是不是终态,如果是终态通知下游;
    <2>更新数据库。

  4. 返回dto
    4个参数必不可少,返回码,返回信息,上游返回码,上游返回信息。
    返回码对应系统返回状态,上游返回码对应上游返回状态,上游返回状态要递归,举个栗子:最外层报文成功了,找下一个状态,下一个状态失败了,这个状态返回;这个状态成功了,找下一个状态,好像在说绕口令,总之一句话,如果有失败的状态返回第一个失败的状态(最外层);如果没有失败的状态,返回最后一个成功状态(最里层)。

ps.
对象转xml我们用的XStream,发送报文我们用的HttpClient.
XStream maven依赖

 <dependency>
     <groupId>com.thoughtworks.xstream</groupId>
     <artifactId>xstream</artifactId>
     <version>1.4.3</version>
 </dependency>

HttpClient maven依赖

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.3.5</version>
</dependency>

分2元

BigDecimal.valueOf(Long.valueOf(amount)).divide(new BigDecimal(100)).toString()
posted @ 2018-10-23 14:30  星朝  阅读(436)  评论(0编辑  收藏  举报