现在支付产品种类繁多,涵盖了线上(手机app、手机网页、扫码、公众号、跨境等)及线下(传统pos、订单pos、netpos、卡牌等)的微信、支付宝、银联支付业务为大中型企业提供可靠的聚合支付服务,获得众多企业的好评。公司网址:www.ipaynow.cn
聚合支付前一篇文章也介绍过,只要对接一次,便可拥有市面上主流的支付方式,节约开发成本,提高对账效率;
下面来介绍手机网页端的支付接入:
1.产品使用场景:
银联支付:
用户在手机网页中选择银联支付,跳转到银联卡支付页面。用户输入银行卡号后,会收到银联发送的短信验证码,输入验证码后完成支付。
支付宝支付:
在手机网页选择支付宝支付,跳转到支付宝网页。如果手机安装有支付宝APP,则会自动唤起只需输入密码即可完成支付;如果没有安装支付宝APP,则需要在浏览器中输入支付宝账号与密码完成订单支付;
流程同支付宝官方(截图忽略)
微信支付:
产品优势不做介绍,接过就知道。
产品流程:
(1)用户通过手机浏览器请求商户页面,用户确认订单后提交订单信息
(2) 商户服务端收到用户请求后,按照现在支付统一下单接口生成请求参数。商户服务端通过HTTPS工具请求现在支付交易系统
(3) 现在支付交易系统记录商户订单信息,并根据报文信息请求对应支付渠道
(4) 支付渠道返回下单报文
(5) 现在支付交易系统生成返回报文,并将报文返回给商户服务端
(6) 商户从现在支付下单返回报文中获取支付链接,并请求支付链接跳转到支付渠道,支付渠道页面会唤起对应手机App
(7) App提示用户输入密码,用户在app中输入支付密码
(8) 支付渠道确认支付成功后,发送后台异步通知给现在支付交易系统
(9) 现在支付交易系统确认渠道异步通知后,给商户服务端发送后台异步通知
(10) 商户服务端确认异步通知后,返回确认报文给现在支付。
(11) 银联或支付宝渠道,需要用户在页面中点击返回商户按钮,然后跳转到商户前台通知页面
(12) 商户根据前台通知展示支付结果。注意,交易状态以现在支付后台异步通知为准。
通知机制:
重复通知机制:现在支付交易系统在第一次通知失败后,将在30秒后发起第二次通知,如果还是失败将再隔2分钟发起第三次通知,以后如果还是不成功,将再间隔10分钟、30分钟、60分钟、2个小时、6个小时、10个小时、15个小时后重复通知。最终在25小时内完成9次重复通知后,将不再继续重复通知。当然,在每一次通知后,如果收到“success=Y”的应答就停止重复通知。重复通知时间间隔如下:30秒、2分钟、10分钟、30分钟、1小时、2小时、6小时、10小时、15小时。
请求报文样例:
appId=14897224287****&consumerCreateIp=**.**.**.**&deviceType=0601&frontNotifyUrl=http%3A%2F%2Flocalhost%3A10802%2Ffront&
funcode=WP001&mhtCharset=UTF8&mhtCurrencyType=156&mhtLimitPay=1&mhtOrderAmt=1&mhtOrderDetail=mhtOrderDetail&mhtOrderNam
e=merchantTest&mhtOrderNo=20170101202020001XZ&mhtOrderStartTime=20171012152127&mhtOrderTimeOut=3600&mhtOrderType=01&mht
Reserved=aadfsdfsdf&mhtSignType=MD5&mhtSignature=3265cfee37c93c040eacf992b211a642¬ifyUrl=http%3A%2F%2Flocalhost%3A10
802%2Fnotify&outputType=0&payChannelType=13&version=1.0.0
请求参数:
服务端通知接口接入注意事项:
1.通知方式采用HTTPS协议POST方式通知;
2.报文数据以字符串流的形式放在报文体中,所以直接getParameter是得不到数据的。
数据接收Java版示例代码:
//获取通知数据需要从body中流式读取
BufferedReader reader = req.getReader();
StringBuilder reportBuilder = new StringBuilder();
String tempStr = "";
while((tempStr = reader.readLine()) != null){
reportBuilder.append(tempStr);
}
//报文数据字符串
String reportContent= reportBuilder.toString();