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 相关文章推荐
使用php+xslt在windows平台上
Oct 09 PHP
相对路径转化成绝对路径
Apr 10 PHP
php自定义函数call_user_func和call_user_func_array详解
Jul 14 PHP
php中DOMElement操作xml文档实例演示
Mar 26 PHP
phpmyadmin提示The mbstring extension is missing的解决方法
Dec 17 PHP
jQuery+PHP实现的掷色子抽奖游戏实例
Jan 04 PHP
php关联数组快速排序的方法
Apr 17 PHP
CI(CodeIgniter)框架实现图片上传的方法
Mar 24 PHP
PHP使用PDO抽象层获取查询结果的方法示例
May 10 PHP
Yii框架where查询用法实例分析
Oct 22 PHP
php查看一个变量的占用内存的实例代码
Mar 29 PHP
PHP日期和时间函数的使用示例详解
Aug 06 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
不支持fsockopen但支持culr环境下下ucenter与modoer通讯问题
2011/08/12 PHP
php截取字符串函数substr,iconv_substr,mb_substr示例以及优劣分析
2014/06/10 PHP
判断、添加和删除WordPress置顶文章的相关PHP函数小结
2015/12/10 PHP
CodeIgniter分页类pagination使用方法示例
2016/03/28 PHP
jQuery 1.2.x 升? 1.3.x 注意事项
2009/05/06 Javascript
jQuery 版本的文本输入框检查器Input Check
2009/07/09 Javascript
JS localStorage实现本地缓存的方法
2013/06/22 Javascript
基于jquery扩展漂亮的下拉框可以二次修改
2013/11/19 Javascript
收集json解析的四种方法分享
2014/01/17 Javascript
javascript去除字符串中所有标点符号和提取纯文本的正则
2014/06/07 Javascript
jQuery+PHP星级评分实现方法
2015/10/02 Javascript
Javascript中作用域的详细介绍
2016/10/06 Javascript
原生js的RSA和AES加密解密算法
2016/10/08 Javascript
jquery实现下拉框多选方法介绍
2017/01/03 Javascript
bootstrap侧边栏圆点导航
2017/01/11 Javascript
微信小程序 聊天室简单实现
2017/04/19 Javascript
vue.js实现数据库的JSON数据输出渲染到html页面功能示例
2019/08/03 Javascript
python sqlobject(mysql)中文乱码解决方法
2008/11/14 Python
Python构造自定义方法来美化字典结构输出的示例
2016/06/16 Python
淘宝秒杀python脚本 扫码登录版
2019/09/19 Python
分享8点超级有用的Python编程建议(推荐)
2019/10/13 Python
Python如何实现线程间通信
2020/07/30 Python
使用python把xmind转换成excel测试用例的实现代码
2020/10/12 Python
python爬取”顶点小说网“《纯阳剑尊》的示例代码
2020/10/16 Python
AmazeUI的下载配置与Helloworld的实现
2020/08/19 HTML / CSS
巴西男士胡须和头发护理产品商店:Beard
2017/11/13 全球购物
CK加拿大官网:Calvin Klein加拿大
2020/03/14 全球购物
介绍下Lucene建立索引的过程
2016/03/02 面试题
企业文化标语口号
2014/06/09 职场文书
工会趣味活动方案
2014/08/18 职场文书
2014年自愿离婚协议书范本
2014/09/25 职场文书
2014年移动公司工作总结
2014/12/08 职场文书
2014年医院党建工作总结
2014/12/20 职场文书
软件项目经理岗位职责
2015/04/01 职场文书
spring IOC容器的Bean管理XML自动装配过程
2022/05/30 Java/Android
Oracle中日期的使用方法实例
2022/07/07 Oracle