支付宝、微信、QQ收款二维码3合1

最近折腾了一下合并收款码,简单记录一下折腾的过程,方法不唯一,只是提供一种思路,如果各位大佬有更加简单粗暴的办法,一定要偷偷告诉我哈(=`ω´=)

Here we go!

原理

首先解析出三个二维码的内容,用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做了两张图:

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

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

小插曲

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

更换至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 SuccessSuccess;
			default_type text/html;
		}

		include enable-ssl-yecdn.conf;
	}

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


已有 14 条评论

  1. 搞一搞试试

  2. 跨世纪的评论
    https://www.hotapp.cn/shouqian
    这算不算更加简单粗暴的办法呢?o(* ̄▽ ̄*)ブ

    1. 我个人不是很信任这类第三方服务(⊃‿⊂)

      1. 那倒也是(●'◡'●)

  3. 难道这就是最新操作

    1. 没错这是最新操作

  4. -----BEGIN PGP SIGNED MESSAGE-----
    Hash: SHA512

    我选择不用收款码
    -----BEGIN PGP SIGNATURE-----

    iQE3BAEBCgAhGhxsaXdhbmdsaW4xMiA8aUBsd2wxMi5jb20+BQJZSlETAAoJEE3h
    CSku7FJCbYYH/2+EhnQPqEYaZ9H2XuxjmhTqGd+Al4/x4FJVJdSpWag23tE7v7fq
    v5WjcEDAZKPTNYg9NZeQquZNgOmQduEQeNvqQTrA+7Qe2QMTQONsW703hoLcCspf
    rqzmyd1/ImGiRcOl6c3Fveggj2w08ea1zkEIDnRSyjKBOGHfGdZ+cCkiv6LNig+E
    VFTjJyfnUeC+spn04eaGV9roB9kgXl/vpXlo4Z9hJ0++1iQEHnbAsAmqF5OxsXLD
    2MfFOwMEXkWRUXgO1kst9K8241oGlwfCS4atsZ5yFYoH4vIpiEIYqekm3m/n/MNk
    J/XZi3TCsVWrpAXafIdXKHbAomkrTA0vBtQ=
    =VEFe
    -----END PGP SIGNATURE-----

    1. 好像很厉害的样子...

  5. 这么厉害的么 OAQ

  6. 表示 iOS 版 QQ 只能长按保存 ( ๑´•ω•)

    1. 本宝宝没有iOS设备,没法测试(委屈脸

添加新评论