foreword
When I was browsing blogs recently, I found that many blogs have a reward function. Although there may be very few people who give rewards, it is always a heartfelt, so that bloggers know that the articles they write are useful and can help others. So, I also want to add a reward function~
analyze
But after shopping around github, I found that the tipping plug-ins are basically the same: QQ scan code / WeChat scan code / Alipay scan code.
Some are clicked on each button to appear each payment code
Others show each payment code in its entirety
Wechat scans this, Alipay scans that, not only to load multiple QR codes, but also to add css/js to make it look good. As a lazy programmer who doesn't want to write these things, this is not acceptable.
Can you combine QQ, WeChat and Alipay into one, and only need to scan a collection code? There is a knowledge point involved here, which is User-Agent. The webviews of major manufacturers will carry their own UA information, for example:
QQ: MQQBrowser/6.2 TBS/043221 Safari/537.36 QQ/7.0.0.3135
WeChat: MQQBrowser/6.2 TBS 043220 Safari/537.36 MicroMessenger/6.5.8.1060 NetType/4G Language/zh_CN
Alipay: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
In this way, it is easy to distinguish whether it is QQ, WeChat or Alipay to scan the code:
User QQ/
- QQ User-Agent contains MicroMessenger
WeChat User AlipayClient
- Alipay
Since you can distinguish each software, you can create a website by yourself, generate and scan the website through the QR code, and determine the UA of the browser to distribute different payment codes.
The general process is: Scan the code on the client side -> the server side judges the client type according to the User-Agent -> return different processing respectively
start tossing
First decode the payment codes generated by QQ, WeChat and Alipay, you can go here to decode online.
QQ: https://i.qianbao.qq.com/wallet/sqrcode.htm?m=tenpay&a=1&u=17878127&ac=E04BE442991E7FFED28B3B5C3E187148F063DC3C6DACAD2983C87B482FC9E7AD&n=薛定谔的猫&f=wallet
(https protocol, can not wake up QQ) Alipay: HTTPS://QR.ALIPAY.COM/FKX03549OW666ME7BXWF7A
(https protocol, can directly wake up Alipay APP) WeChat: wxp://f2f09hjzo72AAYEITIBaolV-3cvGrDjE0q7k
(WeChat's own payment protocol, can't wake WeChat)
You can directly write the code below, and judge that if User-Agent is Alipay, it will jump directly to the Alipay link, and if it is QQ and WeChat, it will jump to the link of QQ and WeChat.
However, since QQ and WeChat cannot directly wake up the APP, they directly output a QR code of QQ and WeChat, and then long-press to scan the code to realize payment.
code show as below:
<?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>
Demo presentation
You can test by scanning the QR code at the bottom of the article, or click the demo address below: http://lab.sangsir.com/api/donate.php