技术笔录资料整理

翼支付网关接口开发-WAP支付.

FavoriteLoadingAdd to favorites
    引言:移动端(如手机和Pad等)越来越强大,能做的事情也越来越丰富。上个月Apple刚发布的iPad Pro基本能与笔记版媲美,本月微软也同样推出了Surface pro 4。故而将来的世界,移动端会慢慢的走进生活,走进工业等。之前已经介绍过“翼支付的WEB支付”,本文主要介绍“翼支付WAP支付”,当然还提供“IVR支付(IVR语音支付)”,以后如有机会再另行介绍。
 
    最近公司的产品中,有配套的移动APP,其中也有相关产品的订单付款业务。下面就“翼支付”WAP接口的开发做简单的阐述,原理和流程等相关准备工作和结果验证工作,请参照《翼支付网关接口开发-Web支付开发流程》一文。
 
一. WEB支付和WAP支付的比较
 
1. 接口的相关参数比较
 (1) 金额处理
   –WEB支付中,产品金额、附加金额和订单总额都是以分为单位。
   如下图(文档提供):
翼支付WEB支付金额要求
 
  相关处理代码(JAVA):
 /**
  * 转换订单总额,以分为单位
  * @param orderAmount  以元为单位的订单总额
  * @return
  */
 public static String getOrderAmount(BigDecimal orderAmount){
  BigDecimal _multiplicand = new BigDecimal(“100”);
  return Integer.toString(orderAmount.multiply(_multiplicand).intValue());
 }
  –WAP支付中,都是以元为单位,且必须保留两位小数,如附件金额为0,参数需要填为0.00。
  如下图(文档提供):
翼支付WAP支付金额要求
  相关处理代码(JAVA):
 /**
  * 以元为单位,保留两位小数
  * @param orderAmount 以元为单位的订单总额
  * @return
  */
 public static String getOrderAmountFormat(BigDecimal orderAmount){
  DecimalFormat df = new DecimalFormat(“0.00”);  
        df.setRoundingMode(RoundingMode.HALF_UP);
        return df.format(orderAmount.doubleValue());
 }
 (2) CLIENTIP(客户端IP)的验证

             WEB支付中,为了防钓鱼,使用了客户端IP的加密验证,而WAP支付中,去除了该验证。
 (3)MAC校验
             WEB支付中,MAC的校验中多了客户端IP的验证,而在WAP支付中,移除了客户端IP的验证,所以MAC中的校验也随之变化了,同时两者加密的参数有所变化,请开发人员留意。
 (4) 交易结果中的签名sign验证变化
             在两种支付之后,“支付结果通知接口”中的数字签名也有所变化。具体变化也是相关参数的变化。
 
二、 WAP支付开发
 
与WEB支付开发原来相同。调用接口的方式同样是采用表单方式,商户将接口中的参数信息包含在表单中,直接SUBMIT到翼支付网关翼支付网关平台url上即可。
开发表单如下:
翼支付WAP订单提交页面
      该表单使用的是JQM(jQuery Mobile)实现,在上图中,加*号的字段是必传字段,还有一些商户信息和支付分期信息,因暂时没有用到,全部隐藏处理了,同时这里面所有的表单不可以修改,设置readonly等属性来控制。点击“支付”按钮即跳转至“翼支付”反馈页面,如下:
翼支付支付页面
下面的操作按照提示即可。有“翼支付账号”可以使用翼支付账户,没有的选择“手机银行”即可。
 
场景和开发说明:
     1. 当客户选好商品,确认订单,点击“提交订单”时,首先应该生成该订单,存入数据库。
     2. 再跳转至上图的“开发表单”,将需要传的参数全部填入表单中,表单使用POST方式,其他的参数一定要准确(如有不对,跳到翼支付页面时,也会有相关错误提示信息)。(1和2两步都是点       击“提交订单”后做的处理)
     3. 点击开发表单中的“支付”,此时要注意了,需要保存好订单支付的流水信息(其中最重要的就是订单流水号),此处保存请求流水记录的目的,一是为了保存支付记录,更重要的是,为了处理订单支付失败的情况产生。
         在翼支付中,有两个参数,一个“订单号”,一个“订单流水号”,提交至接口时,翼支付同时检测两个参数,如果已有记录,不管是否支付成功,都是不能再次支付的。所以如果由于某些情况,支付失败,需要再次支付时,就需要生成不同的“订单流水号”来区别。
         那订单流水号该用何策略来生成呢?这时利用支付流水记录就可以了,每次根据“订单号”查出该“订单号”相关的支付记录数,再+1处理,如果没有六位,数字前添0,保持六位(如记录数是10,那生成的流水号为:订单号+000011)。
    4. 下面就进入了翼支付的页面,进行想支付即可。如使用“手机银行”->选择“建行”->进入建行支付完成->返回翼支付->返回商户页面。
         翼支付返回商户页面的时候,会传输相关的验证参数,需要验证数字签名等,通过才能变更订单的支付状态等。当然这是给客户看的支付结果页面,此时翼支付也会给商户反馈。即接口中的“前台URL”和“后台URL”,这两个URL,都是商户提供的,必须要INTERNET网可访问,提供给翼支付完成后调用的。
         这两个其实是不可或缺的,比如,客户提交支付完成后,不点击“返回商户”(或直接关闭等),也就说,翼支付此时就不能调用“商户提供的前台URL”了,这时就不能指望通过“前台URL”来做事情了,就只能通过“后台URL”了,这样才能保证订单的支付状态能够正常的变更。
 
注意点:
    1. 如果是后续支付的话,在跳转至“开发表单”的过程中,就应该做相关处理,如该订单已经支付过了,肯定是不能再支付,应该直接跳转至一个反馈页面(提示“订单已经支付完成”之类的信息)。
    2. 商户开发提供的“前台URL”和“后台URL”最好都有交易结果的验证和订单支付状态的变更。
    3. 订单流水号的生成和控制。
 
如有问题,欢迎指出;如需转载,请标明出处,谢谢!
 
参考资料:
  • 翼支付官网提供的相关文档