合并支付宝、微信、QQ收款码

简介

最近因为需要用,所以折腾了下合并收款码。虽然已经有了很多第三方服务,不过一是不敢用,而是觉得有的第三方服务或者其他的教程有些行为不太必要。当然可能会有比我更简便的方法,有知道的大佬请务必告诉我,嗯嗯。

原理

跟其他的服务一样,用一个服务器来检查 User-Agent 后,返回302,跳转到对应的支付链接。Nginx 本身就可以判断 User-Agent,所以直接改它配置。

工具

  • Simple QRCode Creater – Edi.Wang 的简单号用的二维码制作器
  • 在线的或者其他你喜欢的二维码扫描器,这个就多的是了

分析

支付宝的收款码里面的内容大概是这样的 HTTPS://QR.ALIPAY.COM/FKX07586SP67FM7AJXKL5D?t=1535983448548,从网上搜到的 UA 中必然包含 Alipay(嗯偷懒了下,在日志里看了下 UA 巨长

微信的收款码里面的内容大概是这样的 wxp://f2f0ml2dCWYTnUWbiJecMDmgnDTL1lYmi9Ju,UA 中包含 MicroMessenger

QQ的收款码里面的内容大概是这样的 https://i.qianbao.qq.com/wallet/sqrcode.htm?m=tenpay&f=wallet&a=1&ac=9E9975C8017A17982386A81B0333B8738BA85A1099B2F5F3197F4CEAF1ECA068&u=635114964&n=%E4%BB%93%E9%BC%A0,嗯超级长,后面 URI Encode 的文本是中文的我的 QQ 昵称,UA 中包含 QQ

于是 Nginx 的配置就可以出来了:

location /pay {
    if ( $http_user_agent ~* "MicroMessenger" ) {
        return 302 "wxp://f2f0ml2dCWYTnUWbiJecMDmgnDTL1lYmi9Ju";
    }
    if ( $http_user_agent ~* "Alipay" ) {
        return 302 "HTTPS://QR.ALIPAY.COM/FKX04705GEHQXEUWUIMTB1";
    }
    if ( $http_user_agent ~* "QQ" ) {
        return 302 "https://i.qianbao.qq.com/wallet/sqrcode.htm?m=tenpay&f=wallet&a=1&ac=9E9975C8017A17982386A81B0333B8738BA85A1099B2F5F3197F4CEAF1ECA068&u=635114964&n=%E4%BB%93%E9%BC%A0";
    }
    return 403;
}

但是这个其实只有支付宝能用(坑#1:支付宝请保持大写,转成小写会出问题,不知道支付宝那边怎么写的代码)。微信和 QQ 则完全无法弹出页面,页面是白的什么都没有出来,搜索了下发现微信和 QQ 只能用支付接口来直接收款,要求好像还很多要审核什么的。不过长按二维码还是可以扫收款码来收款的,所以,直接做出来收款码的图片,简单 PS 一下,然后扔到服务器上,把跳转链接改为图片即可。

坑#2:配置中判断条件两边要有空格,不然语法检查过不了

QRCode for WeChatQRCode for QQ

配置现在就变成了

location /pay {
    if ( $http_user_agent ~* "MicroMessenger" ) {
        return 302 "https://static.cother.org/pay/wechat.png";
    }
    if ( $http_user_agent ~* "Alipay" ) {
        return 302 "HTTPS://QR.ALIPAY.COM/FKX04705GEHQXEUWUIMTB1";
    }
    if ( $http_user_agent ~* "QQ" ) {
        return 302 "https://static.cother.org/pay/qq.png";
    }
    return 403;
}

于是现在给配置的路径和所在域名生成一个二维码即可。 Pay QRCode



blog comments powered by Disqus
本作品采用知识共享署名-相同方式共享 3.0 未本地化版本许可协议进行许可。
Theme by [Codepiano], First Modified Version by [pengx17], Latest Modified Version by [iHamsterball]