前言
这里说一下怎么用独角发卡和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一般会有一个过期时间,放上去的卡密可能在购买的时候已经过期了。
思考了下解决方式有以下两种:
卡密的token不设置过期时间和生效时间,只设置有效周期,在接口系统里做校验。 利用独角数卡里的回调事件,设置一个回调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