码农笔记 码农笔记
首页
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

itlaonong

野生Java程序员
首页
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 历史文章
itlaonong
2018-05-14

微信、支付宝付款码二合一

# 写在前面

前段时间,看到有网站可以将微信和支付宝的付款码合并成一个,觉得很有意思,但是在我准备尝试的时候发现是收费的。

作为一个天天付钱不收钱的,这就没有必要了。其实之前在店里面扫码付钱的时候好像就见过这样的付款码。

今天突发奇想,作为一个码农,自己就可以写一个呀。

# 思路

二合一无非就是微信或者支付宝扫码打开的都是同一个服务请求。服务器接收到请求的时候根据如 request 中的 useragent 进行判断。根据判断结果将请求重定向到对应 app 的地址。

# 过程

这样分析之后我们就需要知道支付宝和微信的 useragent 都是什么。通过网上查询知道支付宝的 useragent 中有 Alipay,微信的 useragent 中有 micromessenger。

然后就自己动手,在之前搭建的一个 web 项目中新增加一个方法。

代码完成之后在浏览器访问发现没有反应。将请求地址(局域网地址)生成为二维码。使用手机(与电脑在同一局域网)支付宝扫码测试发现可以打开,微信扫码会提示不是域名访问。处于安全考虑不允许打开。

这么看方法应该是对的,可惜没有买域名和 vps,这个也是能自己这么玩玩了。

# 之后

因为微信要是进行服务端重定向需要域名才行,只能到此为止了。

之后突然想到,也可以通过 js 进行前端的判断,之后通过 window.location.href 进行“重定向”。

<html>
  <head>
    <meta charset="UTF-8" />
  </head>
  <body>
    <h1 id="message"></h1>
  </body>
  <script>
    function isAlipayOrWechat() {
      var userAgent = navigator.userAgent.toLowerCase();
      if (userAgent.indexOf("alipay") != -1) {
        window.location.href = "HTTPS://QR.ALIPAY.COM/FKX00483JOOAAMITN2W2C1";
      } else if (userAgent.indexOf("micromessenger") != -1) {
        window.location.href = "wxp://f2f0fHq8R3hDDhWV4a6sKZrb5_EF0CGMljOP";
      } else {
        document.getElementById("message").innerHTML =
          "请使用支付宝或者微信扫码";
      }
    }
    isAlipayOrWechat();
  </script>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

用 nginx 在局域网测试发现支付宝是可以成功的。微信前面说了有限制,也就没有尝试了

这样只要一个 html 就可以,比如可以把这个 html 放到这个博客里面,这样不就不需要买域名和 vps 了。

可是当我把文件放到博客之后,还是支付宝可以成功。微信扫码打开就只是一个空白页。看来微信做了限制,不允许通过 window.location.href 来指定页面请求。

# 最后

目前这个功能也就这样了,后面有机会买了 vps 和域名,再试试吧,先记一下。

#支付宝#微信#扫码支付
上次更新: 2022/10/09, 14:18:05
最近更新
01
1-1 导学
10-09
02
PVE 安装黑群晖笔记
06-13
03
Video测试
06-02
更多文章>
Theme by Vdoing | Copyright © 2016-2022 itlaonong
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式