收款神器!解读聚合支付代码背后的原理

2024-01-18
来源:网络整理

今天给大家分享一下聚合支付码的支付原理。 这也是我过去六个月一直在做的一个项目。

微信/支付宝支付码大家应该都很熟悉了。 线下小微商户大多用这个来收款,如下图。

这种支付方式非常方便。 您可以在微信和支付宝后台申请激活,然后就可以免费申请相关材料。

但这种方式的用户体验其实并不是很好。 之前多次拿出支付宝,但都是扫微信支付码。

另外,这种个人收款码通常都有单日收款上限,比如支付宝的单日收款上限为500元。

有了需求,聪明人自然会想出解决方案,于是就有了聚合支付码产品解决方案,如下图。

一个支付码支持多个客户端,主流的是微信、支付宝,现在也常见支持云闪付等。

用户可以选择任意支持的客户端扫描二维码完成支付,再也不用担心扫错码的尴尬。

神奇吗? 事实上,底层原理非常简单。 读完你就会明白。 让小黑带你解密聚合支付代码的底层原理。

微信相关支付方式

聚合支付代码的底层支付其实是离不开微信和支付宝支持的支付方式的,所以我们就从微信和支付宝渠道入手,简单介绍一下这个过程中会用到的支付方式。

上一篇文章我们以支付宝为例。 这次我们就以微信支付为例。

打开微信支付官方网站,可以看到多种支付方式。

首先介绍一下“微信支付”,引用微信官网的解释:

❝支付是商户系统根据微信支付协议生成支付二维码,然后用户使用微信“扫一扫”完成支付的模式。 该模式适用于PC网站支付、实体店单品或订单支付、媒体广告支付等场景。

简单来说,商户在后台调用微信支付接口,微信返回预付款交易的链接,格式如下:

weixin://wxpay/bizpayurl?sr=123456

然后,商家将其转换为二维码,提供给顾客使用微信扫描支付。

摘自微信分行官网

该支付方式可用于PC网站购物场景,例如在英雄联盟官方网站购买相关游戏道具:

既然“微信支付”终于可以变成二维码来完成支付,那么聚合支付码是否可以像“微信支付”一样作为支付方式呢?

答案是肯定的,但是不太适合,产品体验也不是很好。

最好使用微信支付,另一种支付产品“支付宝”。

至于原因,不用担心,看接下来的内容你就明白了。

聚合收款码支付宝无法收款_聚合收款码支付宝无法付款_聚合支付收款码

“支付”也称为公众账户支付。 该术语的解释引用自官网:

❝ 支付时,用户在微信中打开商户的H5页面,商户通过调用H5页面上微信支付提供的接口来激活微信支付模块完成支付。

具体业务流程如下:

摘自微信分行官网

日常生活中,很多应用场景都会用到这种支付方式,例如:极客时间公众号购买课程

与“微信支付”相比,这种支付方式比较麻烦。 它还需要使用微信公众号登录授权功能来获取用户的信息。

另外,当我们调用“微信”后端接口并获取微信返回的相关参数时,我们还需要使用“微信”来触发微信支付。

聚合支付代码核心原理

了解了聚合支付所需的底层支付方式后,我们再来看看聚合支付代码的核心原理。

聚合支付码业务流程如下:

聚合支付代码

第一步,用户使用微信/支付宝APP扫码后,会打开结账页面。

这个结账页面可以自适应,不同的APP显示不同的风格。 例如,支付宝打开结账时显示支付宝标志,打开微信时显示微信标志。

第二步,用户在收银台输入金额并点击支付,会触发APP的支付弹窗。

好了,观察这个过程我们可以发现,扫描二维码后,后台应用需要识别当前APP是微信还是支付宝。

那么如何判断当前使用的APP呢?

其实原理很简单。 当你在支付宝/微信中打开链接时,实际上会使用内置浏览器发起HTTP请求,HTTP请求头中会携带“User-(UA)”来标识用户代理软件。 应用程序类型、操作系统、软件开发商和版本号。

微信/支付宝中的浏览器发起HTTP请求时,携带的“User-”为:

支付宝 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-”可能不一样。 其实我们只需要判断是否包含某些关键词即可。 例如,只要“User-”包含“”,就是微信。,其中“”表示支付宝。

下面以Java代码为例:

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

这个问题解决之后,后续的流程就会非常简单。 只需调用微信/支付宝的“支付”接口,获取相关参数,调用支付即可。

❝准确来说,支付宝支付的正式名称是支付宝生活账户支付。

我在这里解释一下上面的问题。 为什么聚合支付码不能使用“微信支付”?

主要是因为“微信支付”接口返回的是微信自定义协议,只有扫描微信二维码才能打开触发支付。

如何聚合支付码使用“微信支付”? 收银员提交金额后,需要将微信返回交易链接转换为页面上的二维显示,然后用户使用微信内置的二维码识别功能发起支付。

这会影响产品体验,降低支付成功率。

支付宝也有类似“微信支付”的支付接口——“当面扫描二维码支付”,调用成功后会返回支付链接。

我想在这里问你一个小问题。 聚合支付码可以通过“支付宝扫码当面支付”接口使用吗?

答案是肯定的,而且体验比“微信支付”更好。

这是因为支付宝返回链接是标准的HTTP连接,如下:

https://qr.alipay.com/xxxx

只要在支付宝中打开这个链接,就可以触发付款。

因此,如果聚合支付码使用“支付宝面对面扫码支付”接口,在收银台提交金额后,当您获取支付宝返回的支付链接时,可以使用HTTP 302调用支付宝支付跳转到应用程序中的付款链接。 。

❝画外音:我一直以为支付宝和微信一样不能用。

这样,聚合支付代码底部的支付方式的使用方式实际上有两种选择:

那么如何选择呢? 个人推荐使用第一种,微信和支付宝都可以进行支付。

主要原因是只要302跳转触发了支付宝支付,我们的收银页面就会被关闭,这样整个微信支付和支付宝支付流程就会不一样。

其次,当用户支付成功时,还可以跳转到支付成功页面。 在这个页面上,我们可以展示支付结果,让其更加显眼,挂一些广告,或者吸引其他公众账号的流量。

但如果使用支付宝扫描二维码支付,支付完成后页面会关闭,无法完成跳转到支付页面。

聚合支付代码核心流程

介绍完原理之后,我们主要介绍一下市面上主流的聚合采集码业务流程。 其实聚合集合代码可以分为三类:

静态聚合支付代码类似如下,需要用户主动输入金额,可以无限次使用。

静态支付码

动态聚合支付码只能使用一次,金额由商户指定。 用户只需扫码即可支付指定金额。

这个应用场景就像是在B站购买大会员:

云闪付静态二维码实际上与静态聚合收款码功能类似,但增加了支持云闪付支付的功能。

除此之外,主要区别在于,联动闪付的静态二维码是由联动闪付签发的,其后面对应的地址就是联动闪付的地址,类似如下:

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

静态聚合支付代码流程

聚合收款码支付宝无法收款_聚合支付收款码_聚合收款码支付宝无法付款

静态聚合支付码的主要支付流程可以分为两步。 第一步是登录授权。

聚合支付码-登录授权

这里的登录授权一般采用微信、支付宝的匿名登录授权功能,这样普通用户实际上是察觉不到这个过程的。

❝画外音:如果你是一名程序员,你可能会觉得这个过程经历了很多跳跃。

第二步,用户在收银台输入金额后,应用内会创建相应的订单,然后调用微信/支付宝支付。

聚合支付码支付

另外,如果支付宝采用面对面扫码支付的支付方式,那么就不需要第一步登录授权,可以直接跳转到收银台发起支付。

聚合支付码-支付宝支付动态聚合支付码流程

事实上,动态聚合支付代码大体上与静态聚合支付代码类似,只不过动态代码内部已经创建了对应的订单,后续流程与静态聚合支付代码类似。

聚合支付码-动态码内部创建云快通静态二维码流程

如果您使用微信或支付宝扫描银联闪付二维码,就会打开我们自己的收银页面。 后续流程与支付码静态聚合完全相同。

但如果你使用云闪付支付的APP扫码,比如各大银行、美团、京东等的手机APP,你会进入这些APP中各自的支付页面,然后完成支付支付。

我们的云闪付二维码功能会在云闪付后台报告一个跳转地址,例如

https://www.heihei.com

当用户使用微信/支付宝访问云闪付二维码时,云闪付后端识别出访问请求“用户-”,然后后端按照规则拼接重定向地址。

拼接规则如下:

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

聚合支付码-银联闪付二维码扫描流程汇总

聚合支付码统一用户支付流程,提高商户支付效率。

另外,聚合的支付码实际上可以与商户后台的一些ERP等软件进行对接,这也可以提高商户的生产效率。

不得不说第一个设计聚合支付码的产品真是天才啊~

聚合支付代码背后的原理并不难。 根据访问请求的“User-”,判断用户当前扫码使用的客户端类型。

然后调用微信/支付宝匿名登录获取用户ID。 最后,用户输入金额后,调用微信/支付宝完成支付。

相关信息

有道而无术,则术能成;有道而无术,则术能成; 有术无道,术可成

分享