支付宝、微信、QQ 收款二维码三合一

支付宝、微信、QQ 收款二维码三合一_第1张图片

最近折腾了一下合并收款码,简单记录一下折腾的过程,方法不唯一,只是提供一种思路,如果各位大佬有更加简单粗暴的办法,那就更好了。

原理

首先解析出三个二维码的内容,用 Nginx 判断 User agent 后,返回302,跳转到对应的 URL。

支付宝

支付宝的收款码内容大概是这个样子的:

HTTPS://QR.ALIPAY.COM/FKX04064LA1PNS8SI7BLE4

抓了一下支付宝的 UA,大概是这个样子的:

Mozilla/5.0 (Linux; U; Android 6.0.1; zh-CN; A0001 Build/MMB29M) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/40.0.2214.89 UCBrowser/11.3.8.909 UCBS/2.10.1.4 Mobile Safari/537.36 Nebula AlipayDefined(nt:WIFI,ws:432|0|2.5) AliApp(AP/10.0.12.042101) AlipayClient/10.0.12.042101 Language/en useStatusBar/true

然后就有了下面这段 Nginx 配置

if ( $http_user_agent ~* "AlipayClient" ) { return 302 "HTTPS://QR.ALIPAY.COM/FKX04064LA1PNS8SI7BLE4"; }

经过测试,支付宝正常弹出支付窗口。

微信&QQ

同理,得到了下面这段 Nginx 配置

if ( $http_user_agent ~* "MicroMessenger" ) { return 302 "wxp://f2f0adN69vNDsE9d2xVmp258P9cAqEU_07EU"; }if ( $http_user_agent ~* "QQ" ) { return 302 "https://i.qianbao.qq.com/wallet/sqrcode.htm?m=tenpay&a=1&u=1798390978&ac=EE86F6B43A000048EEABEE3E0CA8BE91F063DC3C6DACAD291A98B1CDF4108FA9&n=Zohar Wang&f=wallet"; }

但是经过测试,微信和 QQ 都不能正常弹出支付窗口,搜了一下,貌似是因为调用微信和 QQ 的支付需要申请一个特殊的支付接口,而且相当麻烦,不然只能扫收款码进行支付。

但是,长按二维码识别,也是可以正常弹出支付窗口,于是,曲线救国,用 Photoshop 做了两张图:

支付宝、微信、QQ 收款二维码三合一_第2张图片
支付宝、微信、QQ 收款二维码三合一_第3张图片

然后,用 Nginx 判断 User agent 后,跳转到相应的图片。

经过测试,微信和 QQ 正常弹出支付窗口。

小插曲

我最初使用的是 pay.iwch.me 这个域名做跳转,但微信扫描后出现下图的风险通知:

支付宝、微信、QQ 收款二维码三合一_第4张图片

更换至 pay.yecdn.com 域名后,没有再次出现这个风险通知,初步怀疑是 iwch.me 域名没有备案,而 yecdn.com 有备案的原因。但是因为我没有其他有备案的域名做测试,所以不能确定是不是因为域名没备案而导致的风险通知。

总结

完整的 Nginx 配置如下:

server {   listen 80;   listen [::]:80;   listen 443 ssl http2;   listen [::]:443 ssl http2;   server_name pay.yecdn.com;   server_tokens off;   location /generate_204 { return 204; }   location /zohar {     if ( $http_user_agent ~* "AlipayClient" ) { return 302 "HTTPS://QR.ALIPAY.COM/FKX04064LA1PNS8SI7BLE4"; }     if ( $http_user_agent ~* "MicroMessenger" ) { return 302 "https://static.yecdn.com/static/pay/zohar-wechat.png"; }     if ( $http_user_agent ~* "QQ" ) { return 302 "https://static.yecdn.com/static/pay/zohar-qq.png"; }   }   location / {     return 200 Success;     default_type text/html;   }   include enable-ssl-yecdn.conf; }

最后,生成一个跳转域名的二维码即可使用。

支付宝、微信、QQ 收款二维码三合一_第5张图片

转载|出处:http://t.cn/R8MGN2W
参考:http://t.cn/R8Mqhfc

招生课程:

  • Python 实战班第 18 期

  • 自动化运维课程第 7 期

  • golang 课程第 3 期

  • 架构师班第 7 期

你可能感兴趣的:(支付宝、微信、QQ 收款二维码三合一)