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

原理

首先解析出三个二维码的内容,用 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 ~* "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 Success;
     default_type text/html;
   }

   include enable-ssl-yecdn.conf;
 }

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

参考:http://t.cn/R8Mqhfc

转载:http://t.cn/R8MGN2W

Python学习交流群:238757010

支付宝、微信、QQ 收款二维码三合一的更多相关文章

  1. 微信QQ的二维码登录原理js代码解析

    这篇文章主要大家详细解析了微信QQ的二维码登录原理js代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 在很多地方就是都出现了使用二维码登录,二维码付款,二维码账户等应用(这里的二维码种马,诈骗 ...

  2. 微信QQ的二维码登录原理浅析

    在非常多地方就是都出现了使用二维码登录,二维码付款,二维码账户等应用(这里的二维码种马,诈骗就不说了),二维码验证,多终端辅助授权应用開始多起来,这里先说下啥是二维码,事实上二维码就是存了二进制数据的 ...

  3. java 扫描微信公众号二维码,关注并登录逻辑

    场景:户扫描微信公众号的二维码,关注后自动登录网站,若已关注则直接登录. 逻辑: 系统生成带参数的临时二维码:参数 scene_str 自定义为唯一值(可以是uuid),临时二维码的生成方式参照官方接 ...

  4. Java 扫描微信公众号二维码,关注并自动登录网站

    https://blog.csdn.net/qq_42851002/article/details/81327770 场景:用户扫描微信公众号的二维码,关注后自动登录网站,若已关注则直接登录. 逻辑: ...

  5. Java 获取微信小程序二维码(可以指定小程序页面 与 动态参数)

    一.准备工作 微信公众平台接口调试工具 小程序的唯一标识(appid) 小程序的密钥(secret) 二.获取access_token 打开微信公众平台接口调试工具,在参数列表中输入小程序的appid ...

  6. 微信小程序生成二维码并且扫码跳转并且携带参数

    话不多说,直接上代码,直接把APPID和APPSECRET改成自己的就能用了 <?php header('content-type:text/html;charset=utf-8'); //配置 ...

  7. 官网app下载更换成微信公众号二维码 测试

    微信现在很火啊.公司官网原先提供的ios和andriod的app下载链接要求切换成微信公众号二维码.简单的替换,大家都说不需要测试直接上线.还是测了下. 1 验证所有与下载相关的信息都已去除. 包括下 ...

  8. iphone微信长按二维码识别不了

    在安卓版的微信长按二维码可以识别(前提是你的微信版本到支持此功能),但是到了苹果版的微信就识别不了,经个人测试发现是缩放的问题: 1.设置了初始缩放设置为1,最大缩放值要>=1,不支持缩放.-- ...

  9. 微信小程序参数二维码6问6答

    微信小程序参数二维码[基础知识篇],从6个常见问题了解小程序参数二维码的入门知识. 1.什么是小程序参数码? 微信小程序参数二维码:针对小程序特定页面,设定相应参数值,用户扫描后进入相应的页面. 2. ...

随机推荐

  1. programming-languages学习笔记--第3部分

    programming-languages学习笔记–第3部分 */--> pre.src {background-color: #292b2e; color: #b2b2b2;} pre.src ...

  2. 全球参考系统(WRS)概述及常用工具汇总

    1.全球参考系统(WRS)简介 WRS(Worldwide Reference System)是Landsat卫星采用的全球参考系统,也是国际上非常具有代表意义的全球参考系统之一.WRS是依据卫星地面 ...

  3. HDU 3635 Dragon Balls(超级经典的带权并查集!!!新手入门)

    Dragon Balls Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tota ...

  4. FD.io社区中国行暨未来网络技术沙龙·南京站 会议小结

    What is FD.io VPP? FD.io VPP(Fast Data Input/Output Vector Packet Processing)is a new network multi- ...

  5. SQL Server 数据收缩

    1. 数据库的相关属性 在MS中创建数据库时会为数据库分配初始的大小(如下图:数据库和日志两个文件),随着数据库的使用文件会逐渐增大.数据库文件大小的增加有两种方式: 自动增长:在自动增长中可以设置每 ...

  6. OC字符串处理

    接到一个需求, 现有多个品牌的商品,使用字符串保存已选中的品牌,使用','隔开,可以反选. 分析问题可知: 1. 字符串由多个品牌名字组成,由 ',' 隔开. 2.如果选中的品牌不在字符串内,则拼接到 ...

  7. nodejs( koa2 )配置 browserHistory

    前言 既然能搜到并且还点进来看这篇文章, 那么肯定是知道后台为什么要配置 browserHistory, 也肯定知道为什么非要去用相对来说更麻烦的吧browserHistory, 而不用更简单点的不需 ...

  8. 偏前端-纯css,手写轮播-(焦点切换 和 自动轮播 只可选择一种,两者不可共存)

    现在我们一般都是在网上找个轮播插件,各种功能应有尽有,是吧!!~大家似乎已经生疏了手写是什么感觉.万一哪天想不起来,人家要手写,就尴尬了!~~跟我一起复习一下吧 不多说:效果图看一下: 高度不能是固定 ...

  9. Bootstrap源码解读之栅格化篇

    本文纯属自己研究所写笔记,如果有错误还请多多指教提出 版心(container) 版心:class名为.container的容器,其版心的宽度在各个屏幕设备下是不一样的值,版心两边就是留白. 各尺寸下 ...

  10. 九九乘法表,全js编写,放入table表格带入页面渲染出来

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...