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 相关文章推荐
备份mysql数据库的php代码(一个表一个文件)
May 28 PHP
PHP filter_var() 函数 Filter 函数
Apr 25 PHP
PHP程序级守护进程的实现与优化的使用概述
May 02 PHP
强制PHP命令行脚本单进程运行的方法
Apr 15 PHP
PHP学习笔记之字符串编码的转换和判断
May 22 PHP
解析PHP强制转换类型及远程管理插件的安全隐患
Jun 30 PHP
PHP中strcmp()和strcasecmp()函数字符串比较用法分析
Jan 07 PHP
PHP编写daemon process 实例详解
Nov 13 PHP
php 数组处理函数extract详解及实例代码
Nov 23 PHP
[原创]PHP实现生成vcf vcard文件功能类定义与使用方法详解【附demo源码下载】
Sep 02 PHP
Referer原理与图片防盗链实现方法详解
Jul 03 PHP
详解Laravel制作API接口
May 31 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
《雄兵连》《烈阳天道》真的来了
2020/07/13 国漫
社区(php&amp;&amp;mysql)三
2006/10/09 PHP
通过Email发送PHP错误的方法
2015/07/20 PHP
php实现可逆加密的方法
2015/08/11 PHP
php采集神器cURL使用方法详解
2016/02/19 PHP
iOS+PHP注册登录系统 PHP部分(上)
2016/12/26 PHP
yii框架结合charjs统计上一年与当前年数据的方法示例
2020/04/04 PHP
初学JavaScript_03(ExtJs Grid的简单使用)
2008/10/02 Javascript
js获取提交的字符串的字节数
2009/02/09 Javascript
jquery Ajax 实现加载数据前动画效果的示例代码
2014/02/07 Javascript
基于javascript代码检测访问网页的浏览器呈现引擎、平台、Windows操作系统、移动设备和游戏系统
2015/12/03 Javascript
AngularJS Module方法详解
2015/12/08 Javascript
基于javascript实现图片滑动效果
2016/05/07 Javascript
js面向对象编程总结
2017/02/16 Javascript
详解win7 cmd执行vue不是内部命令的解决方法
2017/07/27 Javascript
mpvue中配置vuex并持久化到本地Storage图文教程解析
2018/03/15 Javascript
JavaScript实现写入文件到本地的方法【基于FileSaver.js插件】
2018/03/15 Javascript
layui 阻止图片上传的实例(before方法)
2019/09/26 Javascript
全面解析js中的原型,原型对象,原型链
2021/01/25 Javascript
Python httplib,smtplib使用方法
2008/09/06 Python
python解析html开发库pyquery使用方法
2014/02/07 Python
Linux下编译安装MySQL-Python教程
2015/02/02 Python
解决pycharm无法调用pip安装的包问题
2018/05/18 Python
Python求两个圆的交点坐标或三个圆的交点坐标方法
2018/11/07 Python
Python、 Pycharm、Django安装详细教程(图文)
2019/04/12 Python
python tkinter实现界面切换的示例代码
2019/06/14 Python
python实现图片中文字分割效果
2019/07/22 Python
英国最大的高品质珠宝和手表专家:Goldsmiths
2017/03/11 全球购物
雅高酒店中国:Accorhotels.com China
2018/03/26 全球购物
意大利男装网店:Vrients
2019/05/02 全球购物
电脑销售顾问自荐信
2014/01/29 职场文书
环保公益广告语
2014/03/13 职场文书
群众路线对照检查材料思想汇报怎么写
2014/09/18 职场文书
二年级语文下册复习计划
2015/01/19 职场文书
学者《孟子》名人名言
2019/08/09 职场文书
【海涛DOTA解说】EVE女子战队独家录像加ZSMJ神牛两连发
2022/04/01 DOTA