PHP实现QQ、微信和支付宝三合一收款码实例代码


Posted in PHP onFebruary 19, 2018

前言

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

分析

但在github逛了一圈之后发现,打赏插件基本上千篇一律的:QQ扫码/微信扫码/支付宝扫码。

PHP实现QQ、微信和支付宝三合一收款码实例代码

有的是点击每个按钮出现每个收款码

PHP实现QQ、微信和支付宝三合一收款码实例代码

有的则是每个收款码全部展现出来

微信扫这个,支付宝扫那个,不仅要加载多张二维码,还要加css/js让它变的好看,作为一个又懒又不想写这些东西的程序猿来说,这可不行。

那能不能把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=17878127&ac=E04BE442991E7FFED28B3B5C3E187148F063DC3C6DACAD2983C87B482FC9E7AD&n=薛定谔的猫&f=wallet

(https 协议,无法唤醒QQ)

支付宝:HTTPS://QR.ALIPAY.COM/FKX03549OW666ME7BXWF7A

(https 协议,可直接唤醒支付宝 APP)

微信:wxp://f2f09hjzo72AAYEITIBaolV-3cvGrDjE0q7k

(微信自己的支付协议,无法唤醒微信)

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

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

代码如下:

<?php
$ua = $_SERVER['HTTP_USER_AGENT'];
if (strpos($ua, 'MicroMessenger')) {
 $type = 'wepay';
 $name = '微信支付';
 //微信支付链接
 $url = 'wxp://f2f09hjzo72AAYEITIBaolV-3cvGrDjE0q7k';
 $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/FKX03479QJ0RVOS3UJLQAE';
 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=17878127&ac=E04BE442991E7FFED28B3B5C3E187148F063DC3C6DACAD2983C87B482FC9E7AD&n=薛定谔的猫&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: 0;border: 0;}
  html {-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%}
  body {font-family: -apple-system, SF UI Text, Arial, Microsoft YaHei, Hiragino Sans GB, WenQuanYi Micro Hei, sans-serif;color: #333;}
  img {max-width: 100%;}
  h3 {padding: 10px;}
  .container {text-align: center;}
  .title {padding: 2em 0;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>

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

PHP 相关文章推荐
真正面向对象编程:PHP5.01发布
Oct 09 PHP
Discuz!5的PHP代码高亮显示插件(黑暗中的舞者更新)
Jan 29 PHP
解析php做推送服务端实现ios消息推送
Jul 01 PHP
PHP删除数组中空值的方法介绍
Apr 14 PHP
php实现的替换敏感字符串类实例
Sep 22 PHP
php通过rmdir删除目录的简单用法
Mar 18 PHP
php冒泡排序与快速排序实例详解
Dec 07 PHP
学习php设计模式 php实现状态模式
Dec 07 PHP
joomla数据库操作示例代码
Jan 06 PHP
workerman结合laravel开发在线聊天应用的示例代码
Oct 30 PHP
Laravel框架查询构造器 CURD操作示例
Sep 04 PHP
Laravel 解决419错误 -ajax请求错误的问题(CSRF验证)
Oct 25 PHP
浅析PHP数据导出知识点
Feb 17 #PHP
PHP 应用容器化以及部署方法
Feb 12 #PHP
PHP使用Redis长连接的方法详解
Feb 12 #PHP
PHP长连接实现与使用方法详解
Feb 11 #PHP
搜索附近的人PHP实现代码
Feb 11 #PHP
PHP的RSA加密解密方法以及开发接口使用
Feb 11 #PHP
php+ajax实现无刷新文件上传功能(ajaxuploadfile)
Feb 11 #PHP
You might like
国外比较好的几个的Php开源建站平台小结
2010/04/22 PHP
浅析PHP中的UNICODE 编码与解码
2013/06/29 PHP
ThinkPHP中处理表单中的注意事项
2014/11/22 PHP
php如何执行非缓冲查询API
2016/07/22 PHP
实现超用户体验 table排序javascript实现代码
2009/06/22 Javascript
关于js注册事件的常用方法
2013/04/03 Javascript
js改变img标签的src属性在IE下没反应的解决方法
2013/07/23 Javascript
JavaScript通过setTimeout实时显示当前时间的方法
2015/04/16 Javascript
JS+CSS实现滑动切换tab菜单效果
2015/08/25 Javascript
浅谈js中同名函数和同名变量的执行问题
2017/02/12 Javascript
文本溢出插件jquery.dotdotdot.js使用方法详解
2017/06/22 jQuery
Bootstrap Table从零开始
2017/06/30 Javascript
说说如何使用Vuex进行状态管理(小结)
2019/04/14 Javascript
详解JavaScript 新语法之Class 的私有属性与私有方法
2019/04/23 Javascript
jQuery-Citys省市区三级菜单联动插件使用详解
2019/07/26 jQuery
微信小程序获取复选框全选反选选中的值(实例代码)
2019/12/17 Javascript
[03:26]《DAC最前线》之EG经理自述DOTA2经历
2015/02/02 DOTA
python控制台显示时钟的示例
2014/02/24 Python
详解Python中 __get__和__getattr__和__getattribute__的区别
2016/06/16 Python
Python利用openpyxl库遍历Sheet的实例
2018/05/03 Python
pandas通过loc生成新的列方法
2018/11/28 Python
Pycharm小白级简单使用教程
2020/01/08 Python
opencv 实现特定颜色线条提取与定位操作
2020/06/02 Python
Python优秀开源项目Rich源码解析的流程分析
2020/07/06 Python
浅谈如何使用python抓取网页中的动态数据实现
2020/08/17 Python
python+selenium自动化实战携带cookies模拟登陆微博
2021/01/19 Python
Lands’ End官网:经典的美国生活方式品牌
2016/08/14 全球购物
WEB控件及HTML服务端控件能否调用客户端方法?如果能,请解释如何调用?
2015/08/25 面试题
好的自荐信的要求
2013/10/30 职场文书
安全在我心中演讲稿
2014/09/01 职场文书
学前教育专业求职信
2014/09/02 职场文书
机关领导查摆四风思想汇报
2014/09/13 职场文书
人身损害赔偿协议书
2016/03/22 职场文书
详解Nginx 工作原理
2021/03/31 Servers
python tkinter模块的简单使用
2021/04/07 Python
高并发下Redis如何保持数据一致性(避免读后写)
2022/03/18 Redis