这不前段时间一直在开发个人的网站嘛,目的当然是为了赚点米补贴一下艰难的日子啦,然后去微信支付官网关了一圈,发现所有方式都需要备案或者公司营业许可证,这些东西我一个小小打工人怎么可能有嘛。
好,既然官网没有。那我就自己去找找路子,必应、谷歌都搜索了一遍,发现它们的解决方案基本上都是再对接上一个第三方的支付平台,据它们说它们是和微信有合作的??然后它们还要收0.6%的手续费。。。。
想从我手上收钱?门都没有!然后就去github上找找有没有什么开源的项目可以解决。
苍天不负有心人,找到了一个1.4Kstar的项目,看了下项目介绍,貌似确实可以解决。但是这个项目是5年前的呀!作者已经很久没有维护了!!
这是一个php的项目,一共有2个端:web端和安卓端。在本地上进行测试,花了半天的时间安装环境、测试、对接自己项目的接口。
可是部署的时候,遇到难题了,网上的部署方式都是通过宝塔来进行的。一键配置mysql、nginx、php环境。可是我的服务器环境已经搭好了呀,用宝塔就会毁掉我现在的环境,然后重新搭建。
因此,踏上了自己安装php环境、配置nginx的路了。
问题就出现在nginx上,忘记什么问题了,死活配置不上。
因此,放弃了!想再找找有没有其他方式可以解决。
废话不多说了,直接步入整体吧。php版本的放弃了,但是后面找到个java编写的!而且还是同一个作者!!
然后测试,发现微信支付是可以成功监听,但是支付宝的是无法监听成功的。(应该是后面支付宝修改了协议了)。后面又找到了其他其他大佬改写的,测试了一下!终于可以用了!!呜呜~~研究这个东西花了我2天时间。。。。(在此,感谢这两位大佬的开源项目)
web端:主要是创建支付订单、显示个人收款码、配置个人数据等。
安卓端:监听手机收到的通知信息、回调指定接口。
我这边的做法是:用户输入金额后,提交——调用创建订单接口(携带上用户id),支付成功后,异步调用指定接口修改数据。同步调用用于跳转回首页。(项目无支付成功页面的)
因为项目使用的是H2数据库,是一款基于内存的数据库。(也支持持久化)
但是为了方便管理,我将它修改成MySQL数据库了。
修改数据库配置
spring:
datasource:
password: ''
url: ''
username: ''
引入maven
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.25</version>
</dependency>
CREATE TABLE `tmp_price` (
`price` varchar(255) NOT NULL,
PRIMARY KEY (`price`) USING BTREE
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
CREATE TABLE `setting` (
`vkey` varchar(255) NOT NULL,
`vvalue` varchar(255) DEFAULT NULL,
PRIMARY KEY (`vkey`) USING BTREE
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
CREATE TABLE `pay_qrcode` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`pay_url` varchar(255) DEFAULT NULL,
`price` double NOT NULL,
`type` int(11) NOT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
CREATE TABLE `pay_order` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`close_date` bigint(20) NOT NULL,
`create_date` bigint(20) NOT NULL,
`is_auto` int(11) NOT NULL,
`notify_url` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
`order_id` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
`param` varchar(30) CHARACTER SET utf8 DEFAULT NULL,
`pay_date` bigint(20) NOT NULL,
`pay_id` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
`pay_url` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
`price` double NOT NULL,
`really_price` double NOT NULL,
`return_url` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
`state` int(11) NOT NULL,
`type` int(11) NOT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;
这里其实可以不用tmp_price表的,这张表的目的是为了区分不同的用户。(2个用户同时创建5元订单时,有一个人是5.01的)。但是我们可以在param中传入用户id。(需要另外修改V免签web端的项目代码)