转载:http://blog.mambaxin.com/article/56

发现很多博客都带了打赏功能,虽说打赏的人可能很少,但始终是一份心意,能让博主知道自己写的文章有用,能够帮助到人。所以,我也想加一个打赏功能~

分析

能不能把QQ微信支付宝三合一,只需要扫一个收款码就行呢?
这里涉及到一个知识点,则是User-Agent,大厂的webview都会携带自家的UA信息,比如说:

QQ:MQQBrowser/6.2 TBS/043221 Safari/537.36 QQ/7.0.0.3135
微信:MQQBrowser/6.2 TBS 043220 Safari/537.36 MicroMessenger/6.5.8.1060 NetType/4G Language/zh_CN
支付宝: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

这样就很轻松区分是QQ还是微信还是支付宝扫码了:

User-Agent 含有 QQ/ 为QQ
User-Agent 含有 MicroMessenger 为微信
User-Agent 含有 AlipayClient 为支付宝

既然能够区分每个软件,那就可以通过自建一个网址,通过二维码生成扫描这个网址后,判断浏览器的UA,来分发不同的收款码

大致的流程则为:
客户端扫码 -> 服务端根据 User-Agent 判断客户端类型 -> 分别返回不同的处理

生成

首先解码QQ、微信和支付宝生成的付款码,可以去这里在线解码。

QQ:https://i.qianbao.qq.com/wallet/sqrcode.htm?m=tenpay&a=1&u=462369233&ac=85CCA61B3297A14170CA733F85CFD04570EA3B81CB753F421194E5C79701B294&n=Mamba&f=wallet
(https 协议,无法唤醒QQ)
支付宝:HTTPS://QR.ALIPAY.COM/FKX028454NIDTGHALS3WAF
(https 协议,可直接唤醒支付宝 APP)
微信:wxp://f2f0OI0K-DjKTUUo5ijir72IR4EeOdb9__8h
(微信自己的支付协议,无法唤醒微信)

下面就可以直接写代码了,判断 User-Agent 如果是支付宝直接跳转支付宝链接,如果是QQ和微信则跳转QQ和微信的链接。

但由于QQ与微信无法直接唤醒APP,所以直接输出一个QQ与微信的二维码,然后长按扫码实现支付。

代码如下:

    <?php
$ua = $_SERVER['HTTP_USER_AGENT'];
if (strpos($ua, 'MicroMessenger')) {
$type = 'wepay';
$name = '微信支付';
//微信支付链接
$url = 'wxp://f2f0OI0K-DjKTUUo5ijir72IR4EeOdb9__8h';
$icon_img = '<img src="http://ww2.sinaimg.cn/large/005zWjpngy1fojrwgr20oj303k03kglg.jpg" width="48px" height="48px" alt="'.$name.'">';
}
elseif (strpos($ua, 'AlipayClient')) {
//支付宝链接
$url = 'HTTPS://QR.ALIPAY.COM/FKX028454NIDTGHALS3WAF';
header('location: ' . $url);
}
elseif (strpos($ua, 'QQ/')) {
$type = 'qq';
$name = 'QQ钱包支付';
//QQ钱包支付链接
$url = 'https://i.qianbao.qq.com/wallet/sqrcode.htm?m=tenpay&a=1&u=462369233&ac=85CCA61B3297A14170CA733F85CFD04570EA3B81CB753F421194E5C79701B294&n=Mamba&f=wallet';
$icon_img = '<img src="http://ww2.sinaimg.cn/large/005zWjpngy1fojrvmp427j303k03kjrb.jpg" width="48px" height="48px" alt="'.$name.'">';
}
else {
$type = 'other';
$name = '打赏作者';
$url = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
$icon_img = '<img src="http://ww2.sinaimg.cn/large/005zWjpngy1fojs089x6tj303k03kjr6.jpg" width="48px" height="48px" alt="'.$name.'">';
}
$qr_img = '<img src="http://qr.liantu.com/api.php?text='.urlencode($url).'">';
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=Edge, chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title><?=$name?></title>
<style type="text/css">
* {margin: auto;padding: ;border: ;}
html {-ms-text-size-adjust: %;-webkit-text-size-adjust: %}
body {font-family: -apple-system, SF UI Text, Arial, Microsoft YaHei, Hiragino Sans GB, WenQuanYi Micro Hei, sans-serif;color: #;}
img {max-width: %;}
h3 {padding: 10px;}
.container {text-align: center;}
.title {padding: 2em ;background-color: #fff;}
.content {padding: 2em 1em;color: #fff;}
.wepay {background-color: #23ac38;}
.qq {background-color: #4c97d5;}
.other {background-color: #ff7055;}
</style>
</head>
<body class="<?=$type?>">
<div class="container">
<div class="title"><?=$icon_img?><h1><?=$name?></h1></div>
<div class="content"><?=$type=='other'?$qr_img.'<h3>请使用支付宝、微信、QQ客户端扫码付款</h3>':$qr_img.'<h3>扫描或长按识别二维码,向TA付款</h3>'?></div>
</div>
</body>
</html>

Demo演示

可以通过扫描文章底部的二维码进行测试,或点击下面的演示地址:
http://pay.mambaxin.com/

制作QQ微信支付宝三合一收款码的更多相关文章

  1. 【php】PHP制作QQ微信支付宝三合一收款码

    分析 微信扫这个,支付宝扫那个,不仅要加载多张二维码,还要加css/js让它变的好看,作为一个又懒又不想写这些东西的程序猿来说,这可不行. 那能不能把QQ微信支付宝三合一,只需要扫一个收款码就行呢? ...

  2. Delphi制作QQ自动登录器源码

    Delphi制作QQ自动登录器源码  http://www.cnblogs.com/sunsoft/archive/2011/02/25/1964967.html 以TM2009为例,检查了一下,未登 ...

  3. 微信支付宝xposed个人收款免签支付源码

    源码介绍: 个人免签支付是指使用自己的微信支付宝账号作为个人网站的收款账号,网站订单支付成功后,网站能实时收到成功回调信息.        系统基于xposed逆向微信.支付宝.云闪付来实现个人收款免 ...

  4. java实现微信支付宝等多个支付平台合一的二维码支付(maven+spring springmvc mybatis框架)

    首先申明,本人实现微信支付宝等支付平台合多为一的二维码支付,并且实现有效时间内支付有效,本人采用的框架是spring springmvc mybatis 框架,maven管理.其实如果支付,不需要my ...

  5. 分享一下,PHP实现第四方QQ微信扫码登陆,不接入qq互联以及微信开发者平台就可以实现用户对接鹅厂,phpQQ微信扫码登陆

    自己抓的QQ包以及整合了网上一些已经封装好了的代码具体如下:QQ: <?php class QQ extends Curl_Api { //获取登录验证码 public function QRc ...

  6. app微信支付宝支付后台的插件模式+回调通过spring广播处理后续业务(已亲测可用)

    写在前面的话:每当我们做一个项目,基本上都会涉及到支付的业务,最常用的莫过于微信和支付宝的支付了,项目有bug,有问题,都不叫问题,可一旦钱出了问题,那就是大问题了,所以在支付业务上我们必须慎之又慎! ...

  7. 微信小程序源码推荐

    wx-gesture-lock  微信小程序的手势密码 WXCustomSwitch 微信小程序自定义 Switch 组件模板 WeixinAppBdNovel 微信小程序demo:百度小说搜索 sh ...

  8. 微信小程序源码案例大全

    微信小程序demo:足球,赛事分析 小程序简易导航 小程序demo:办公审批 小程序Demo:电魔方 小程序demo:借阅伴侣 微信小程序demo:投票 微信小程序demo:健康生活 小程序demo: ...

  9. 最新打赏正版V15微信视频打赏源码 带(百倍)暗雷 N秒试看 自动切换域名 自动防封

    免签支付域名防封随机跳转盒子推广设置试看N秒百倍 平台搭建:乌龟-源码科技QQ:64430146 全新版本 V15打赏版本功能介绍: 特别注意: 新增加功能!!!! 1.包括V14所有功能(除个别因优 ...

随机推荐

  1. 动态的GRE OVER IPSEC的实验模拟与分析

    此篇博客正在介绍的是下图中的Dynamic P2P GRE OVER IPSEC VPN: 为什么出现这种动态的GRE OVER IPSEC VPN技术呢? 首先在前面几篇博客中已经介绍过了,动态是为 ...

  2. C语言跳水比赛预测结果

    5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果A选手说:B第二,我第三:B选手说:我第二,E第四:C选手说:我第一,D第二:D选手说:C最后,我第三:E选手说:我第四,A第一:比赛结束后,每 ...

  3. HDU3394 点双连通分量

    Railway Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Sub ...

  4. 【转】I2C总线相关知识

    1. I2C access 1.1. I2C introduction I2C(Inter-Integrated Circuit)总线是由NXP恩智浦半导体公司在80年代开发的两线式串行总线,用来进行 ...

  5. 一个 lambda 表达式引起的思考

    一个 lambda表达式 引起的思考 fun = [lambda x: x*i for i in range(4)] for item in fun:    print(item(1)) 全文都是抄来 ...

  6. Lingo基本操作

    目录 Lingo基本操作 前言 一.Lingo基本运算符 1.1 算术运算符 1.2 逻辑运算符 1.3 关系运算符 二.函数 2.1 标准数学函数 2.2 集循环函数 三.待更新 Lingo基本操作 ...

  7. 16 pep8 编码规范

    pep8 编码规范 Python Enhancement Proposals :python改进方案 https://www.python.org/dev/peps/ 1. 每级缩进用4个空格. 括号 ...

  8. Servlet处理文件下载的编码问题,乱码。

    Servlet处理文件下载的编码问题,乱码. //处理文件名乱码问题 // 获得请求头中的User-Agent String agent = request.getHeader("User- ...

  9. myeclipse 配置堆内存

    2.非堆内存分配 JVM使用-XX:PermSize设置非堆内存初始值,默认是物理内存的1/64:由XX:MaxPermSize设置最大非堆内存的大小,默认是物理内存的1/4. 打开myeclipse ...

  10. nginx支持php配置

    location / { root /wwwroot/phptest; index index.html index.htm index.php; } location ~ \.(php|php5)$ ...