现在支付_聚合支付_手机网页接入

现在支付产品种类繁多,涵盖了线上(手机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&notifyUrl=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();


阅读更多

更多精彩内容