前言
前面有一篇《聚 合 支 付之流程概述》和大家聊了一下关于聚 合 支 付的一个简单流程。很多小伙伴私信我,如何实现聚 合 支 付 码的自动跳转呢?
其实,刚开始接触的时候我也很迷茫,一个静态的二维码,如何去判断他是微信、支付宝、翼支付、云闪付亦或是其他银行的app扫码的动作?怎们进行页面的跳转就成了一个难题!!!
要实现的效果
先说说,要想实现的具体功能是如何的?
1、在我们预先生成的批量二维码,在没有绑定具体商户的情况下,扫描这个二维码,跳转到响应的宣传页面。
2、当我们预先生成的二维码绑定了具体商户的情况下,微信扫描二维码跳转到微信收银台页面,支付宝扫描二维码跳转支付宝收银台页面。其他的各款app如果做了相应的开发的,一样的逻辑,跳转相应的收银台支付页面。
3、当我们的没有对接过的app来扫码,则给他一个提示页面,告诉他请用我们对结果的,诸如微信、支付宝、翼支付、云闪付来扫一扫。
实现的过程逻辑
首先,我先告诉大家一个明确的结果,就是二维码的内容,其实很好理解,就是我们的请求接口域名+我们的二维码内容,如:"https://qr.xxx.abcpay.com/19090400655255256993"这么一个链接。
那么会有同学问了,这么一个链接如何实现跳转呢?
我来说一下我的思路,我们可以理解上面这个链接就是一个接口地址,19090400655255256993为此二维码的唯一标识,这个唯一标识可以理解为钱6位为当前日期,中间10位按照自己的规则,最后4位则为生成的顺序号。
根据唯一标识,查看是否绑定了商户,没有绑定商户则返回宣传页。
微信侧可以返回小程序的具体页面(或者也可以是固定的宣传页面),其他的客户端也可以跳转固定宣传页面。
当绑定了商户之后,则返回相对应的收银台,这里会给大家贴出代码!
实现代码
应该很简单,也很容易理解,就是判断u s e r A g e n t是ALIPAYCLIENT还是MICROMESSENGER 就可以了。
ALIPAYCLIENT:支 付 宝 支 付
MICROMESSENGER:微 信 支 付
前端页面的实现
前端扫描二维码显示了其对应的支付渠道,html的页面代码如下
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>支付方式的判断</title>
<meta name="viewport" content="width=device-width; initial-scale=1.0">
</head>
<body>
<div id="pay-id" style="margin-top: 100px;
font-weight: bold;
text-align: center;
font-size: 20px;">
</div>
</body>
<script type="text/javascript" >
function payType() {
var userAgent = window.navigator.userAgent.toUpperCase();
if (userAgent.indexOf('ALIPAYCLIENT') > 0) {
return '支付宝支付';
}
if (userAgent.indexOf('MICROMESSENGER') > 0) {
return '微信支付';
}
return '不明支付方式';
}
var info = payType();
var div = document.getElementById("pay-id");
div.innerHTML = info;
</script>
</html>
后端代码实现
java后端代码的其实原理是和前端一致的,也就是判断 u s e r A g e n t 是ALIPAYCLIENT还是MICROMESSENGER。
@RestController
public class InfoController {
@RequestMapping("{id}")
public String getPayType(@PathVariable("id") Long id,HttpServletRequest request) throws Exception {
// TODO 具体的 业务逻辑这里省略。只保留了判断是微信还是支付宝的判断
String userAgent = request.getHeader("User-Agent").toUpperCase();
String payType = null;
if (userAgent.indexOf("MICROMESSENGER") > 0) {
payType = "微信支付";
} else if (userAgent.indexOf("ALIPAYCLIENT") > 0) {
payType = "支付宝支付";
}
//TODO 根据 payType 的支付方式生成相应支付订单
return null;
}
}
好了,今天关于聚 合 支 付二维码如何实现自动识别扫码客户端跳转相应支付页面就到这里。
欢迎大家点击下方卡片,关注《coder练习生》
有需要聚合支付源码,公众号私信。非诚勿扰