Contents
前言
因为一些文章不想直接发布出来(可能比较敏感?),用加密码的方式又感觉较low。。。,想起以前看到一些博主的设置VIP方式比较有技术含量,想着也许以后可能也能用得上,所以决定自己也搞一个。因为要涉及到支付方式,就想当然的想去申请个正式的支付宝或者微信的付款码(例如支付宝的当面付,就是平时我们吃饭时付账的那种),但是貌似现在全都要营业执照了(以前说是还比较宽松,现在经济形势这个样,估计是蚂蚁虽小也是肉,统统不放过了),我只是想搞个科研,整个项目,总不能因此去弄个营业执照吧,这个貌似有点过了。
微信和支付宝的个人码收钱如何呢?金额小,笔数少的时候无所谓,但是如果多了就麻烦了:
万一以后我做大做强了咋办?又经过一番研究,发现微信的赞赏码和支付宝的商家码可以避免风控(至少现在是,以后就难说了),申请也简单,分分钟的事。
但是,用赞赏码和支付宝的商家码又涉及到另一个问题,就是支付过程管控。比如网站的用户A充了10元,网站如何知道用户A扫码是否付款成功?如果同时用户B充了20元,如何知道是哪个用户充的10元,哪个用户充的20元?所以需要一个系统来自动完成收费、确认付款是否成功以及和网站用户进行对应的操作(本来如果是支付宝或者微信的正式商用的商家码就提供这些功能,所以别人收手续费也是应该的。。)。研究了一番,最终选择了V免签(其实还有另一个叫xpay,在github上也有4.6k的star,大家有兴趣也可以试试),本次搭建将全部基于宝塔linux面板进行源码搭建,因为的确这个安装用宝塔会比较方便,而且我也有现成的宝塔环境(用来做反向代理的)。当然也可以用docker,大家理解了精神以后用docker安装其实是一样的。
简单说一下v免签的工作原理。v免签由2个部分组成:网站和监控端。当用户A在网站调出二维码支付页面准备扫码的时候,支付页面就会不停向监控端请求获取支付的结果,当监控端监控到交易完成时(方法很多,app监控端就监控通知栏消息,pc监控端就监控应用的通知,比如阿里旺旺和微信的通知),就会告诉支付页面交易已完成,支付页面就会根据监控端发回的交易信息判断是哪一个用户(此例中是用户A)完成了交易,然后给用户A跳转到交易成功完成的页面。
源码搭建V免签的网站
下载v免签php版的源码
原作者的github网址如下:https://github.com/szvone/Vmqphp,这个版本可以用,不过php版本推荐是5.6-7.3。其实也能用php7.4,只是需要做如下修改:
/thinkphp/library/think/db/Query.php 第568行 value{0}改成 value[0]
我用的另一个修改版:
https://github.com/Jiu-ci/vmq,这个就可以直接使用php7.4:
直接点击上图中的红框下载源码的zip包。如果github无法访问,也可以访问以下链接下载:无敌的文件共享,访问密码为:”blog.tangwudi.com”,下载其中的”vmq-main.zip”文件即可。
安装mysql 5.6
按照以下步骤安装mysql 5.6
注:我喜欢用编译安装,时间长一点,但是稳妥,不过极速安装一般来说也没啥问题,这纯属个人习惯,后面一样。
安装PHP7.4
按照以下步骤安装php7.4
安装并使用phpmyadmin对数据库进行初始化
安装phpmyadmin
按照以下步骤安装phpmyadmin
初始化数据库
修改默认mysql5.6的默认密码,假设为123456:
进入phpmyadmin:
使用账号root及前面设置的密码(本例中为123456)登录:
进入数据库后,默认只有3个库,我们需要创建一个名为vmq的库用来给V免签使用,入下图所示:
然后在左边点击选中刚刚创建的库”vmq”,然后在右边点击红框中的”导入”:
点击下图中框中的”选择文件”按钮:
进入v免签zip包解压缩以后的文件夹里,选择”vmq.sql”,然后点击下方的打开:
最后点击右下角红框中的”执行”按钮:
成功后可以看到原本空的库”vmq”已经有了4个表:
(可选)修改root账号主机名:
如果需要修改root账号的可访问主机,可以在如下红框中修改。不过本例中,数据库也是在宝塔中安装的,所以访问数据库只需要访问127.0.0.1即可,默认值localhost就可以,所以不用修改。
配置域名解析
为v免签的站点分配一个可用域名,本例中就为vmq.example.com(也可以带非标端口),有没有443端口理论上无所谓,只要监控端的配置网站支持非标端口(:port)的方式就行,需要在域名供应商进行正确的DNS配置。如果只是在内网做测试,通过host或者dnsmaq的方式实现正确域名解析也可以。
用下载的源码创建网站
添加站点
上传源码到站点目录
网站文件夹路径为:
/www/wwwroot/vmq.example.com
使用文件菜单上传前面下载的源码zip文件:
解压缩源码zip包:
解压以后进入解压出来的文件夹:
选中所有文件然后剪切到上级目录:
最终效果如下:
对网站进行设置
进行如下设置:
SSL根据需要配置,建议配置。
设置数据库,修改如下文件:
/www/wwwroot/vmq.example.com/config/database.php
如果前面是按照前文一步一步做的,这里基本只需要改以下数据库的密码就可以了;如果不是,则按实际情况进行修改。
配置网站
使用http(s)://vmq.example.com登录,默认用户名和密码都是admin。
登录系统后默认界面如下:
重点介绍下系统设置和监控端设置项。
系统设置界面如下:
在上图中,异步回调和同步回调是监控端和网站通信的地址,地址分别如下:
http(s)://vmq.example.com/example/notify.php #异步回调
http(s)://vmq.example.com/example/return.php #同步回调
通信密钥是首次admin账号登录时系统自动生成的,监控端和v免签网站通信,以及wordpress的插件和v免签网站通信都要用到通信密钥。
微信二维码和支付宝二维码,如果直接使用个人码也不是不行,但是如果交易金额大了容易被风控。要避免风控,支付宝可以用商家收钱码(个人用户可以免费升级的),微信有个赞赏码,但是貌似v免签不能识别赞赏码,所以微信我暂时用的个人收款码。
监控端设置:
在上图中,监控端状态运行正常,是因为我已经正确配置了监控端,心跳正常的时候才会显示运行正常。另一个关键的是配置数据,实际上就是网站加通信密钥,本例中类似于:
vmq.example.com/xdbdfdfdfsskldjfk
这种格式,这个是需要在监控端进行配置的。
监控端配置
关于监控端,其实比较麻烦,因为没有很好很完美的解决方案,有点看人品。其实目前主要有2类:app监控端和pc监控端。我分别尝试过的app监控端和pc监控端分别如下:
app:https://github.com/shinian-a/Vmq-App
pc端监控:https://github.com/zh66y/vmqpc
app监控的方式需要一个安卓系统来安装apk,我因为没有安卓手机,所以就装了个安卓模拟器(别人本来是用来打游戏的~)来安装,结果是app上看起来一切都正常,但是最后回调有问题,付款以后支付界面收不到app发来的支付成功的消息(但是app上是看的到的),实在是不知道是不是安卓模拟器的问题,而我又不想花精力用docker搭个安卓环境,所以最终放弃了。我看了下评价,有些朋友还是可以用的,所以这个最终就看大家的选择了。
我最终是用pc端监控来实现的,具体实现细节我就不写了,github上别人写得很清楚,只不过,这个软件的使用需要找别人免费授权下,也可能有些小问题,不过别人态度非常好,还有群,使用问题也能交流,我暂时先用着这个,以后有心情了看看其他有没有好选择。不过大家在下载的时候要注意,尽量用github上的,我试的一个搜索引擎上找到的,直接一点开就要给我系统添加根证书,然后就要把我往一个看起来是支付宝的网址上面跳转,那网站的证书还是这个根证书颁发的~~~,太狠了。。
测试
网站是有专门的测试页面的,网址如下:
https://vmq.example.com/example/
不过要使用这个测试页,需要提前将main.php,notify.php,return.php这3个页面里的$key改为你的通讯密钥,这3个页面的路径位于:
/www/wwwroot/vmq.example.com/public/example/
修改之后就可以进行测试了,比如要测试微信支付,直接点击上图中的支付:
使用微信扫码支付0.1以后,如果监控端正常,就会返回如下页面:
此时在pc端监控里可以看到交易记录:
同时,在v免签的订单列表里也能看到这笔订单的实际收款金额:
支付宝的同理。
友情提醒:微信需要注册一个新号,因为在pc监控端里需要pc版微信长期挂机,支付宝因为可以用淘宝旺旺代替,所以不用注册新号。
配置公网访问
如果要发布到公网上的,大家需要根据实际环境和自己使用的反向代理选择最适合自己的发布方式,可以参考我以前的几篇文章:
1、docker系列 使用docker基于NPM搭建自己的反向代理
2、linux面板系列 配置反向代理并使用非443端口进行发布
3、家庭数据中心系列 通过国内备案云主机白嫖cloudflare实现国外快速访问国内站点
4、家庭数据中心系列 通过无公网IP的家庭宽带白嫖cloudflare实现快速建站(通用)
其中第1,2种方式适合有公网ip却没有合法443端口的环境(家庭宽带、未备案的云主机),需要在url后面加非标端口(如果使用cloudflare建站的不需要加端口,但是需要自定义源站端口,这个可以参考:家庭数据中心系列 通过cloudflare的Origin Rules解决建站有公网IP却没有合法的80、443端口的问题)。第3种方式适合有备案的云主机,第4种方式适合所有环境(包括没有公网IP的环境),也是我建议的方式(不管你的环境有没有公网IP,因为这种方式不需要直接在公网上跑https流量)。