新零售支付全家桶


安卓APP银联支付流程

银联支付的优势

我相信很多同学觉得,我们已经实现了微信支付和支付宝支付,这两种支付方式加到一起就能覆盖绝大多数的支付场景,我们为什么还要学习银联支付呢?这里我解释一下,让同学们了解银联支付有哪些优点。

首先在大额支付方面,银联更具备优势。我们使用支付宝或者微信,进行转账或者付款的时候,每天是有上限金额的。从几千元到上万元不等。比如说我们买卖贵重物品,需要大额支付,支付宝或者微信都不是最好的渠道,只能选择用银联支付。如果我们的银行卡开通网银的时候,绑定了U盾,那么你每日支付的额度上限会大很多。比如说你使用的是交通银行的银行卡,在是用U盾的情况下,允许用户每日支付的上线为100万元。电商网站为用户提供银联支付通道,这样你就可以用中国境内的各种银行卡来付款了,而且还支持大额交易,看来银联支付这种渠道还是不能砍掉的。

另外,银联支付的可追索行更好,银行方面打击金融犯罪的经验比微信和支付宝多,而且签约成为银联的签约客户门槛也更高,所以我们用银联进行交易安全性比微信和支付宝要好一些。

特殊说明

银联为我们提供了APP支付的案例和库文件,我们通过研究程序案例就能明白,怎么调用苹果支付和安卓支付了。无论是苹果支付,还是安卓支付,都必须要绑定银行卡,所以正好可以和银联业务对接。

用过苹果手机的同学,都知道苹果支付是怎么一回事儿,你必须要绑定银行卡才能使用苹果支付。安卓支付是谷歌公司推出的支付方案,内置到原生的安卓系统里面,但是谷歌的服务在中国境内不能使用,所以安卓支付也就不能在中国使用了。我们现在想要在安卓APP上面提供银联支付功能,这该怎么办呢?没关系有办法,我已经替各位同学想好了一个折中的解决办法,那就是绕开安卓支付,我们远离谷歌服务,就能使用银联付款了。大家还记得支付宝的Native付款方式吗?支付宝平台生成支付订单以后,会返回HTML代码给商户系统,商户系统把这段代码返回给前端页面。前端页面渲染到页面上,于是表单自动提交,然后浏览器就跳转到了支付宝页面,我们可以扫码进行支付。银联的Native支付也是这么个流程,返回的HTML代码放到浏览器上,就能跳转到银联页面,然后你输入付款信息就能支付了。我给安卓APP上面的银联支付想到的解决方案就是融合了银联Native支付,当支付的时候,让安卓APP打开浏览器,跳转到银联页面进行支付。付款成功之后,用户切换回安卓APP,页面自动刷新,于是订单状态就变成了已付款,大家觉得怎么样?

流程说明

刚才我已经跟大家介绍过了安卓APP上面的银联支付方案,下面我给大家展示一下流程图。

  1. 首先APP程序想商户系统发出请求,要求创建支付订单

  2. 商户系统向银联系统提出申请,要求创建支付订单。

  3. 银联系统创建好支付订单之后,会返回HTML代码给商户系统。商户系统不能把这个HTML代码返回给APP程序,因为APP程序不是浏览器,无法产生页面的跳转,所以用户就看不到银联付款页面。商户系统正确的做法是,把HTML代码保存到数据库或者Redis里面,这里我选择的是Redis,因为Redis可以为缓存数据设置超时时间,过期之后,数据就自动删除了,不需要我们自己管理。

  4. 商户系统要返回给APP程序一个相应,告诉APP程序,现在支付订单已经创建好了,并且我已经缓存好了HTML代码,你赶紧打开浏览器访问吧。

  5. 于是APP打开手机上面的浏览器,让浏览器访问商户系统的某个WEB方法。这个WEB方法会从Redis里面提取HTML代码,然后生成动态页面。

  6. 浏览器加载这个动态页面,就会自动提交表单给银联系统,于是浏览器的页面就产生了跳转,然后我们在银联付款的网页中填写好银行卡信息就能付款了。这个付款的全过程,我用程序来为大家演示一下。

时序图

刚才我们看到了安卓APP上面的银联支付案例,因为融合了银联的Native支付,所以成功绕过了谷歌服务,我们可以在任何安卓手机上面使用这个方式来付款。因为下节课要写代码,所以我们必须要看清楚安卓APP上面银联支付的时序图。我把支付的全过程,分成了两幅时序图。第一幅时序图讲的是如何创建支付订单,刚才我们已经看过了安卓程序的运行,所以理解这幅时序图并不困难。

  1. 要创建支付订单,首先安卓APP要向商户系统发出请求

  2. 然后商户系统向银联系统发出申请,要求创建支付订单

  3. 银联系统生成支付订单以后,给商户系统返回一段HTML代码。

  4. 商户系统把这段代码缓存到Redis里面

  5. 然后返回响应,告诉安卓APP,现在支付订单已经创建成功了,你可以打开浏览器访问我的Web方法了。

  1. 各位同学看到的这幅时序图讲的是,这幅时序图讲的是如何付款,刚才说到了安卓APP收到了响应,于是打开手机上面的浏览器

  2. 访问商户系统的Web方法,这个WEB方法会生成动态的HTML页面,其实就是把Redis中的数据提取出来,然后写到响应里面,返回给浏览器

  3. 浏览器加载HTML页面,就会自动想银联系统提交表单,这时候银联系统会返回付款页面给浏览器

  4. 我们在支付页面上输入自己的银行信息,就能进行付款了

  5. 银联系统接收到付款请求,验证通过之后,就会自动执行扣款

  6. 然后把付款结果发送给商户系统,并且让浏览器跳转到规定的回调页面。这个回调页面是我们创建支付订单时候必须要规定的。你可以把它看做是用前端的方式,通知商户系统支付结果。以前不管微信还是支付宝,都只有后端异步通知付款结果,现在银联除了提供后端异步通知以外,还提供了前端通知。前端通知的原理很简单,就是在响应中设置好跳转的地址和绑定的URL参数,让浏览器以重定向的方式跳转到商户系统的某个URL地址。其实我们在商户系统上面创建一个Web方法,接受浏览器的跳转访问。商户系统可以通过URL参数得到很多数据,其中就包括订单支付的结果。如果付款成功了,我们就修改本地商品订单的状态为已付款。现在有了银联这个前端通知方式,就省去我们自己发起请求查询支付结果了。

页面列表

ITEM_HTML