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获取163、gmail、126等邮箱联系人地址【已测试2009.10.10】
Oct 11 PHP
PHP中return 和 exit 、break和contiue 区别与用法
Apr 09 PHP
php下载excel无法打开的解决方法
Dec 24 PHP
PHP 面向对象程序设计(oop)学习笔记(三) - 单例模式和工厂模式
Jun 12 PHP
ThinkPHP控制器间实现相互调用的方法
Oct 31 PHP
PHP 快速排序算法详解
Nov 10 PHP
php中文繁体和简体相互转换的方法
Mar 21 PHP
开启PHP Static 关键字之旅模式
Nov 13 PHP
PHP创建单例后台进程的方法示例
May 23 PHP
利用PHPStorm如何开发Laravel应用详解
Aug 30 PHP
微信推送功能实现方式图文详解
Jul 12 PHP
laravel validate 设置为中文的例子(验证提示为中文)
Sep 29 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
Zend framework处理一个http请求的流程分析
2010/02/08 PHP
php读取csv实现csv文件下载功能
2013/12/18 PHP
初识Laravel
2014/10/30 PHP
php使用for语句输出三角形的方法
2015/06/09 PHP
php获取文件类型和文件信息的方法
2015/07/10 PHP
PHP简单获取多个checkbox值的方法
2016/06/13 PHP
jquery.autocomplete修改实现键盘上下键自动填充示例
2013/11/19 Javascript
IE6/IE7中JavaScript json提示缺少标识符、字符串或数字问题处理
2014/12/16 Javascript
详解JavaScript中常用的函数类型
2015/11/18 Javascript
AngularJS 2.0入门权威指南
2016/10/08 Javascript
JavaScript &amp; jQuery完美判断图片是否加载完毕
2017/01/08 Javascript
tab栏切换原理
2017/03/22 Javascript
Angular2使用Augury来调试Angular2程序
2017/05/21 Javascript
javascript修改浏览器title方法 JS动态修改浏览器标题
2017/11/30 Javascript
JS中使用new Option()实现时间联动效果
2018/12/10 Javascript
vue中监听返回键问题
2019/08/28 Javascript
layer关闭弹出窗口触发表单提交问题的处理方法
2019/09/25 Javascript
[04:02]DOTA2上海特锦赛小组赛第二日recap精彩回顾
2016/02/28 DOTA
python实现批量监控网站
2016/09/09 Python
详解python之heapq模块及排序操作
2019/04/04 Python
Python3.5内置模块之time与datetime模块用法实例分析
2019/04/27 Python
Python 根据数据模板创建shapefile的实现
2019/11/26 Python
pyCharm 实现关闭代码检查
2020/06/09 Python
Python dict的常用方法示例代码
2020/06/23 Python
Windows下PyCharm配置Anaconda环境(超详细教程)
2020/07/31 Python
CSS3解决移动页面上点击链接触发色块的问题
2016/06/03 HTML / CSS
Html5实现首页动态视频背景的示例代码
2019/09/25 HTML / CSS
社会实践感言
2014/01/25 职场文书
12月红领巾广播稿
2014/02/13 职场文书
2014年五四青年节活动方案
2014/03/29 职场文书
销售员未完成销售业绩的检讨书
2014/10/12 职场文书
2014年社区工会工作总结
2014/12/18 职场文书
鸟的天堂导游词
2015/01/31 职场文书
资料员岗位职责
2015/02/10 职场文书
Python selenium模拟网页点击爬虫交管12123违章数据
2021/05/26 Python
js作用域及作用域链工作引擎
2022/07/07 Javascript