引言:移动端(如手机和Pad等)越来越强大,能做的事情也越来越丰富。上个月Apple刚发布的iPad Pro基本能与笔记版媲美,本月微软也同样推出了Surface pro 4。故而将来的世界,移动端会慢慢的走进生活,走进工业等。之前已经介绍过“翼支付的WEB支付”,本文主要介绍“翼支付WAP支付”,当然还提供“IVR支付(IVR语音支付)”,以后如有机会再另行介绍。
最近公司的产品中,有配套的移动APP,其中也有相关产品的订单付款业务。下面就“翼支付”WAP接口的开发做简单的阐述,原理和流程等相关准备工作和结果验证工作,请参照《翼支付网关接口开发-Web支付开发流程》一文。
一. WEB支付和WAP支付的比较
1. 接口的相关参数比较
(1) 金额处理
–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。
如下图(文档提供):
相关处理代码(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上即可。
开发表单如下:
该表单使用的是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. 订单流水号的生成和控制。
如有问题,欢迎指出;如需转载,请标明出处,谢谢!
参考资料:
- 翼支付官网提供的相关文档