zoukankan      html  css  js  c++  java
  • 支付流程注意事项

    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()
  • 相关阅读:
    Mac brew命令踩坑
    Git 使用总结
    idea debug的使用技巧和快捷键
    pv、uv、ip,tps、qps、rps术语
    MySQL进阶(八)MySQL表设计原则
    反射机制
    Gradle 依赖关系中 compile和 implementation的区别
    HashMap的最大容量为什么是2的30次方?
    深入理解SELECT ... LOCK IN SHARE MODE和SELECT ... FOR UPDATE
    $.query.get()
  • 原文地址:https://www.cnblogs.com/jpfss/p/9836446.html
Copyright © 2011-2022 走看看