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编程中的异常处理详细方法介绍
Jul 29 PHP
PHP调用MySQL的存储过程的实现代码
Aug 12 PHP
PHP的cURL库功能简介 抓取网页、POST数据及其他
Apr 07 PHP
smarty获得当前url的方法分享
Feb 14 PHP
php代码审计比较有意思的例子
May 07 PHP
一个简单的PHP验证码实现代码
May 10 PHP
php中JSON的使用方法
Apr 30 PHP
PHP常用文件操作函数和简单实例分析
Jun 03 PHP
PHP 在数组中搜索给定的简单实例 array_search 函数
Jun 13 PHP
关于php支持的协议与封装协议总结(推荐)
Nov 17 PHP
phpstudy2018升级MySQL5.5为5.7教程(图文)
Oct 24 PHP
启用OPCache提高PHP程序性能的方法
Mar 21 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
ie6 动态缩略图不显示的原因
2009/06/21 PHP
如何在Ubuntu下启动Apache的Rewrite功能
2013/07/05 PHP
PHP父类调用子类方法的代码例子
2014/04/09 PHP
PHP面向对象程序设计__tostring()和__invoke()用法分析
2019/06/12 PHP
laravel admin实现分类树/模型树的示例代码
2020/06/10 PHP
JavaScript NodeTree导航栏(菜单项JSON类型/自制)
2013/02/01 Javascript
js+html5实现的自由落体运动效果代码
2016/01/28 Javascript
基于RequireJS和JQuery的模块化编程——常见问题全面解析
2016/04/14 Javascript
BootStrap 实现各种样式的进度条效果
2016/12/07 Javascript
jquery append与appendTo方法比较
2017/05/24 jQuery
vue生成token保存在客户端localStorage中的方法
2017/10/25 Javascript
基于vue.js的分页插件详解
2017/11/27 Javascript
JavaScript中arguments和this对象用法分析
2018/08/08 Javascript
iview实现select tree树形下拉框的示例代码
2018/12/21 Javascript
详解ng-alain动态表单SF表单项设置必填和正则校验
2019/06/11 Javascript
node.JS二进制操作模块buffer对象使用方法详解
2020/02/06 Javascript
详解Vue的组件中data选项为什么必须是函数
2020/08/17 Javascript
[01:19:35]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#2Fnatic VS OG第二局
2016/03/05 DOTA
[01:09:01]完美世界DOTA2联赛循环赛 Magma vs PXG BO2第一场 10.28
2020/10/28 DOTA
深入理解Python 代码优化详解
2014/10/27 Python
Python中类型关系和继承关系实例详解
2015/05/25 Python
Python中datetime常用时间处理方法
2015/06/15 Python
Python下载网络小说实例代码
2018/02/03 Python
python三引号输出方法
2019/02/27 Python
实例详解python函数的对象、函数嵌套、名称空间和作用域
2019/05/31 Python
python pillow模块使用方法详解
2019/08/30 Python
python 模拟创建seafile 目录操作示例
2019/09/26 Python
python中for循环变量作用域及用法详解
2019/11/05 Python
对django 2.x版本中models.ForeignKey()外键说明介绍
2020/03/30 Python
在Django中自定义filter并在template中的使用详解
2020/05/19 Python
美国珠宝精品店:Opulent Jewelers
2019/08/20 全球购物
德国受欢迎的旅游和休闲网站:lastminute.de
2019/09/23 全球购物
澳大利亚头发和美容产品购物网站:OZ Hair & Beauty
2020/03/27 全球购物
机电专业个人求职信范文
2013/12/30 职场文书
劲霸男装广告词
2014/03/21 职场文书
解决numpy和torch数据类型转化的问题
2021/05/23 Python