乐趣区

关于java:收款神器解读聚合收款码背后的原理

Hello,我是楼下小黑哥!

明天跟大家分享一下聚合收款码的领取原理,这也是我这大半年来始终在做的我的项目。

微信 / 支付宝收款码大家应该不会生疏,线下小微商户收款大多应用这个,就比方下图。

这种收款形式很不便,微信、支付宝后盾申请开明,而后还能够收费申请相干物料。

不过这种形式用户体验其实不是很好,之前有好几次拿出支付宝,却扫了微信领取码。

另外,这种集体的收款码通常还有单日收款的下限,比方支付宝单日下限 500 元。

有了需要,天然会有聪明人人想到解决方案,于是有了聚合收款码产品解决方案, 如下图。

一个收款码,反对多种客户端, 支流是微信、支付宝,当初常见还会反对银联,QQ 等。

用户抉择任一反对的客户端扫码,都能实现领取,再也不必纠结扫错码的难堪。

有没有很神奇?其实底层原理很简略,看完你就明确了,上面就让小黑哥带你解密聚合收款码的底层原理。

欢送关注我的公众号:程序通事 ,取得日常干货推送。
如果您对我的专题内容感兴趣,也能够关注我的博客:studyidea.cn

微信相干领取形式

聚合收款码底层领取其实还是离不开微信、支付宝反对的领取形式,所以咱们先从微信支付宝渠道登程,简略介绍这个过程将会应用的领取形式。

上篇文章,咱们以支付宝为例来介绍,这次咱们就以微信领取为例。

关上微信领取官网,能够看到很多领取形式。

其中付款码领取在前两篇文章残缺介绍过,这里不再介绍,感兴趣的小伙伴能够看下上面这两篇文章。

手机没网了,却还能领取,这是什么原理?| 原创

微微一扫,立即扣款,付款码背地的原理你不想晓得吗?| 原创

首先咱们介绍一下 微信 Native 领取,援用微信官网的解释:

Native 领取是商户零碎按微信领取协定生成领取二维码,用户再用微信“扫一扫”实现领取的模式。该模式实用于 PC 网站领取、实体店单品或订单领取、媒体广告领取等场景。

简略来讲就是商户后盾调用微信领取接口,微信返回预领取交易的链接,格局如下:

weixin://wxpay/bizpayurl?sr=123456

而后商户将其转为二维码,提供给客户应用微信扫码领取。

这种领取形式能够利用在 PC 网站购物场景,比如说英雄联盟官网购买相干游戏道具:

既然 微信 Native 领取 最初能够变成二维码实现领取,那么聚合收款码是不是能够采纳 微信 Native 领取 这种领取形式呢?

答案是能够,然而不适宜,产品体验不太好。

最好应用微信领取另外一种领取产品JSAPI 领取

至于起因,不要急,接下去看就会明确。

JSAPI 领取,又被称为公众号领取,名词解释援用一下官网介绍:

JSAPI 领取是用户在微信中关上商户的 H5 页面,商户在 H5 页面通过调用微信领取提供的 JSAPI 接口调起微信领取模块实现领取。

具体业务流程如下:

日常生活中,很多利用场景应用这种领取形式,比如说:极客工夫公众号上购买课程

这种领取形式绝对于 微信 Native 领取,比拟麻烦,还须要应用微信公众号登录受权性能,以此获取用户的 openid。

另外当咱们调用 微信 JSAPI 后盾接口,拿到微信返回的相干参数之后,咱们还须要应用 微信的 JSSDK,这样能力唤起微信领取。

聚合收款码外围原理

理解完聚合领取的所须要的底层领取形式,上面咱们来理解一下聚合收款码的外围原理。

聚合收款码业务流程如下:

第一步用户应用微信 / 支付宝 APP 扫码之后,将会关上一个收银台页面。

这个收银台页面能够自适应,不同 APP 显示不同的款式,比方支付宝关上收银台显示支付宝的 logo,微信关上就会显示微信的 logo。

第二步用户在收银台输出金额,点击领取之后将会唤起 APP 的领取弹窗。

好了,察看这个流程,咱们能够发现扫码之后,后盾利用须要辨认出以后 APP 到底是微信还是支付宝。

那如何判断以后应用的 APP 呢?

其实这个原理很简略,在支付宝 / 微信关上一个链接,理论将会应用内置的浏览器发动了 HTTP 申请,而 HTTP 的申请头将会携带 User-Agent(UA),用来标识用户代理软件的利用类型、操作系统、软件开发商以及版本号。

微信 / 支付宝中浏览器发动 HTTP 申请,携带的 User-Agent 别离为:

支付宝
UCBrowser/11.5.0.939 UCBS/2.10.1.6 Mobile Safari/537.36 AliApp(AP/10.0.15.051805) AlipayClient/10.0.15.051805 Language/zh-Hans

微信
MQQBrowser/6.2 TBS 043220 Safari/537.36 MicroMessenger/6.5.8.1060 NetType/4G Language/zh_CN

这里须要留神了,不同型号的手机,不同的版本 APP,User-Agent 不肯定会一样,其实咱们只须要判断是否蕴含某些关键字即可,比如说只有 User-Agent 蕴含 MicroMessenger 就是微信,蕴含 AlipayClient 就是支付宝。

上面应用 Java 代码为例:

String userAgent = request.getHeader("user-agent");
if (Objects.equals(userAgent, "AlipayClient")) {// 支付宝} else if (Objects.equals(userAgent, "MicroMessenger")) {// 微信}

这个问题解决之后,前面的流程就很简略了,只有调用微信 / 支付宝的 JSAPI 领取 接口,拿到相干参数之后,唤起领取。

精确来讲,支付宝那边 JSAPI 领取官网名称为支付宝生存号领取。

这里解释一下下面的问题,为什么聚合收款码不能应用 微信 Native 领取 呢?

次要是因为 微信 Native 领取 接口返回是一个微信自定义 schema 协定,只能通过微信扫码关上,唤起领取。

如何聚合收款码应用 微信 Native 领取,收银台提交金额之后,须要将微信返回交易链接转成二维显示在页面,而后用户应用微信内置辨认二维码性能唤起领取。

这样一来比拟影响产品体验,升高领取的成功率。

支付宝也有相似 微信 Native 领取 领取接口 -当面付扫码领取,胜利调用之后也会返回领取链接。

那这里能够提大家提个小问题,聚合收款码是否能够应用 支付宝当面付扫码领取 接口那?

3.

2.

1.

答案是能够的,而且体验比 微信 Native 领取 好。

这是因为支付宝返回链接是一个规范 HTTP 连贯,如下:

https://qr.alipay.com/xxxx

这个链接只有在支付宝内中关上,就能够唤起领取。

所以如果聚合收款码应用 支付宝当面付扫码领取 接口,收银台金额提交之后,当拿到支付宝返回的领取链接,应用程序内只有应用 HTTP 302 跳转到领取链接,就能够唤起支付宝领取。

画外音:之前我也始终认为支付宝跟微信一样,不能应用。

那这样实际上聚合收款码底层应用领取形式就有了两种计划:

  • 微信 JSAPI 领取 / 支付宝生存领取
  • 微信 JSAPI 领取 / 支付宝面付扫码领取

那如何抉择那?
集体倡议应用第一种计划,微信、支付宝都采纳 JSAPI 领取。

次要是因为只有 302 跳转唤起支付宝领取,就会敞开咱们收银台页面,这样一来整个微信领取与支付宝领取流程就不太一样了

其次,当用户领取胜利之后,JSAPI 领取还能够跳转到一个胜利页面,这个页面咱们能够领取后果展现,或者骚一点,还能够挂些广告,或者引流其余公号上。

然而如果应用付宝面付扫码领取,领取实现之后,页面就被敞开了,就没方法实现领取页面跳转。

聚合收款码外围流程

介绍完原理,上面次要介绍一下市面上支流聚合收款码业务流程,其实聚合收款码能够分为三类:

  • 动态聚合收款码
  • 动静聚合收款码
  • 银联动态二维码

动态聚合收款码就相似如下这种,须要用户被动输出金额,能够有限次应用。

而动静聚合收款码是只能应用一次,并且由商家指定金额,用户只有扫码就能够领取指定金额。

这种利用场景比方 B 站购买大会员:

银联动态二维码其实性能上与动态聚合收款码差不多,然而它多了反对银联领取的性能。

除了这个以外,最次要的区别是银联动态二维码是银联发码,背地对应的地址是银联的地址,相似如下:

https://qr.95516.com/00010000/xxx

动态聚合收款码流程

动态聚合收款码次要领取流程次要能够分为二步,第一步为登录受权。

这里的登陆受权个别应用微信、支付宝匿名登录受权性能,这样这个过程普通用户其实是无感知的。

画外音:如果是程序员的话,可能会感触到这个过程通过了屡次跳转。

第二步,用户在收银台输出金额之后,利用外部将会创立相应的订单,而后再调用微信 / 支付宝的 JSAPI 领取。

另外,如果支付宝采纳面付扫码领取这种领取形式的话,那么其实不须要第一步登录受权了,能够间接跳到收银台发动领取。

动静聚合收款码流程

动静聚合收款码其实与动态收款码总体比拟相似,只不过创立动静码外部曾经创立了相应的订单,后续流程与动态聚合收款码差不多。

银联动态二维码流程

如果你应用微信、支付宝扫码关上银联二维码,将会关上咱们本人收银台页面,后续流程其实跟动态聚合收款码截然不同的。

然而如果你应用领取银联领取的 APP 扫码,比如说各大银行的手机 APP,美团,京东等,就会在这些 APP 内各自领取页面,而后实现领取。

咱们银联二维码的性能,将会在银联后盾报备一个跳转地址,比如说

https://www.heihei.com

当用户应用微信 / 支付宝拜访银联二维码,银联后盾本人辨认拜访申请 User-Agent , 而后后盾依据规定拼接重定向地址。

拼接规定如下:

https://www.heihei.com?qrCode=URLENCODE(https://qr.95516.com/00010000/xxx)

总结

聚合收款码对立了用户领取流程,进步商家的收款效率。

另外聚合收款码其实还能够跟商家后盾一些 ERP 等软件买通,这样还进步的商家生产效率。

不得不说,第一个设计出聚合收款码的的产品,实在个鬼才~

聚合收款码,背地原理一点也不难,依据用拜访申请的 User-Agent,以此判断用户以后扫码应用的客户端类型。

而后调用微信 / 支付宝匿名登录获取用户 id,最初用户输出金额之后,调用微信 / 支付宝实现领取。

好了,明天文章介绍到这里,最初,点个赞再走吧~

嘻嘻,国庆就要到了,大家再熬几天!!!

相干材料

  1. https://pay.weixin.qq.com/wik…
  2. https://opendocs.alipay.com/o…
  3. https://developers.weixin.qq….

欢送关注我的公众号:程序通事,取得日常干货推送。如果您对我的专题内容感兴趣,也能够关注我的博客:studyidea.cn

退出移动版