使用V免签搭建个人发卡平台

前言

这里说一下怎么用独角发卡和V免签搭建一个自己的发卡平台,支持支付宝和微信收款。注意:异地收款多了会被限制,流水多的话建议去办理官方收款。这些项目个人玩玩还行,真想搞商业化是不可能的。

现在无论搭建什么我都会先看看能不能docker搭建,如果不能会去自己写Dockerfile然后搭建,基本上遇到的开源项目都有官方或者第三方的docker镜像。因为docker搭建方便迁移备份也方便。

V免签搭建

开源地址: https://github.com/szvone/vmqphp

二开版: https://linux.do/t/topic/71190

这里我选择的二开版,其实原版也能用,只是觉得更新的话bug会少一些。不过未知的代码安全性不太好说,有兴趣的可以自己审查一下代码

docker镜像

vmq已经几年没有更新了,有docker镜像的可能性不高,看到的教程也都是使用宝塔来安装,那就选择宝塔的docker镜像1来搭建。

mkdir ~/baota
docker pull btpanel/baota:9.0_lts_lib
docker run -d \
    --name baota \
    -p 8888:8888 \
    -p 80:80 \
    -v ~/baota/website_data:/www/wwwroot \
    -v ~/baota/mysql_data:/www/server/data \
    -v ~/baota/vhost:/www/server/panel/vhost \
    btpanel/baota:9.0_lts_lib

这个镜像也支持ARM架构,我用的就是arm机器。然后就和正常机器上使用宝塔是一样的,使用http://ip:8888/btpanel访问后台,默认的用户名密码是btpanel/btpaneldocker,进去之后登录宝塔账号然后修改用户名密码。

安装nginx和php7.2,我选择的编译安装。mysql因为独角数卡也会用到,也为了方便管理,也用docker来安装。下面的命令注意修改用户名密码

docker run -d \
    --name mariadb \
    -p 3306:3306 \
    -e MARIADB_USER=vmqfaka \
    -e MARIADB_PASSWORD=fakavmq \
    -e MARIADB_DATABASE=faka \
    -e MARIADB_ROOT_PASSWORD=aaaaaaaaaaaa \
    -v ~/mariadb-data:/var/lib/mysql \
    mariadb:10.11

接着按这篇文章来操作:https://www.csl88.top/archives/612/,MySQL的配置就填上面创建的(ip可以填172.17.0.1,也可以填服务器公网ip)。

导入pay.sql我用的是navicat,pay.sql可以修改里面的b95fc22f02ab22dc8684af371a91ca23,这是要用到的通讯秘钥,后台修改不了只能修改数据库里的值。

后台设置

搭建完成后你会发现打开网站会访问www.qq.com,这是正常的,因为修改版做了跳转。真实的后台地址是 http://ip/houtai,默认账号和密码:admin/123456

进去后台之后在系统设置里改下账号和密码,然后修改下商户id(随便改成其他数字),到时候需要它,还有后台地址和通讯秘钥。如果是原版的则没有商户id。

上传收款码这些就不说了,按提示上传就行了(系统设置里上传无金额的,然后下面微信和支付宝二维码里上传有金额的)。系统设置里有个区分方式,一般设置成金额递减,这样如果有两个人同一时间购买,第二个人就会减一分钱,所以你得上传多个带金额的收款码。

例如价格是2元,你需要上传2.00/1.99/1.98这样的收款码以支持三个用户同一时间购买的情况,当然越多支持的同时下单的用户就越多。为什么需要这样操作?因为它区分用户是用金额来区分,比如点了一个2元的订单,正好收到2元的收款就认为是这个人付的款(所以是有误认为收款的情况)。

这样搭建占用内存还挺高的(1.541G是内存占用):

v免签监控端

官方的监控端肯定是用不了了,二开版提供的监控软件我又不想用。正好在github找到别人开源还在更新的手机监控端(同时支持支付宝和微信):https://github.com/zwc456baby/vmqApk

我拿一台一加旧手机测试了,设置成后台无限制两天都没掉线,还是很稳定的。我自己也写了个Windows端的微信监控,原理跟之前写的机器人是一样的,只需要hook消息就能拿到收款的数据。

我很早很早之前还在码云开源过一个v免签pc的监控端,不过现在没更新了:https://gitee.com/kanadeblisst/vmqPCWeChat,有兴趣的可以去看看原理。

独角数卡

搭建

独角数卡的搭建就简单多了,可以用docker一键搭建。不过镜像别选官方文档里给的,我找到一个其他人写的更好用一些。

开源地址: https://github.com/Apocalypsor/dujiaoka-docker

作者给的是docker-compose.yaml启动方式,我还是用docker run来启动,因为我已经有了MySQL和redis容器了,没必要再启动一个。

docker pull hkccr.ccs.tencentyun.com/apocalypsor/dujiaoka:latest
docker run --rm -it \
    --name dujiaoka \
    -p 28088:80 \
    -e INSTALL=true \
    -v /home/kanade/docker-data/dujiaka/env.conf:/dujiaoka/.env \
    -v /home/kanade/docker-data/dujiaka/uploads:/dujiaoka/public/uploads \
    -v /home/kanade/docker-data/dujiaka/storage:/dujiaoka/storage \
    hkccr.ccs.tencentyun.com/apocalypsor/dujiaoka:latest

注意这里需要先设置INSTALL=true这个环境变量进入安装界面,然后关了容器再重新运行一个INSTALL=false的正式环境的容器,所以我这里选择了--rm-it,后面运行的时候改成-d,按web端的提示填写MySQL和redis连接信息。如果出现504的错误可能是redis连接有问题,一般都是MySQL和redis连接不了才会报错。

支付配置

这里需要注意的是,二开版支付配置时需要选易支付(微信选易支付微信),而不是选择v免签,因为二开版的接口跟易支付的接口一样了。商户ID填之前改的商户ID,商户key填后台地址+"/submit.php",例如http://a.com/submit.php,然后商户秘钥就是v免签的通讯秘钥。

升级https

如果想将v免签和独角数卡都升级到https,可以用宝塔里nginx反代自动申请证书来升级,注意映射端口的时候把443端口也映射了,这个就不多说了。我用http就够了,毕竟只是作为业余项目玩玩。

特殊需求

假设你设计了一个使用JWT验证的接口系统,现在想将jwt token作为卡密发放。但是jwt一般会有一个过期时间,放上去的卡密可能在购买的时候已经过期了。

思考了下解决方式有以下两种:

  1. 卡密的token不设置过期时间和生效时间,只设置有效周期,在接口系统里做校验。
  2. 利用独角数卡里的回调事件,设置一个回调URL。

接口校验

利用redis的话,实现比较简单。弄一个有序集合,值存放这个token,分数则存放第一次访问的时间作为nbf(生效时间),token字段里再携带一个有效期的字段,例如7天,每次获取生效时间和有效期跟当前时间对比一下就能对这个token做一个校验。

我更倾向于这一种方法,因为接口是我自己写的,现在只需要增加一个中间件就能实现。如果接口是用别人的,建议还是用下面回调事件的方式。

回调事件

这个官方完全没有文档,不过根据在独角数卡上配置回调事件1 这篇文章可以知道,这里是填写一个回调URL,然后订单完成的时候会将订单信息以POST形式发送到你填写的URL里,具体推送的数据格式可以看看前面那篇文章,或者是写一个接口测试看看。

那么可以将卡密设置成一个提示信息:正在生成卡密,请稍后查收邮件。然后写一个接口当收到订单信息时生成卡密并发送给订单里的邮箱。这个还有一个方便的点,可以自定义字段,例如你可以在商品页增加接口路径的字段,生成的token只能访问某个或某类接口。

引用链接

  • [1]: https://hub.docker.com/r/btpanel/baota
  • [2]: https://blog.csdn.net/qq_33689316/article/details/137255740


请使用浏览器的分享功能分享到微信等