我想搞个人免签支付,但是似乎找不到靠谱的第四方聚合支付平台,于是去Github看了看,发现了一些挂一个手机,软件监控手机收款通知的解决方案,但是这些解决方案有个问题,每个金额需要开很多个收款码,每个支付会话占用一个收款码。
我的想法
众所周知,微信在收款的时候会收到一条消息。
我的想法是,能不能写一个机器人,他什么也不做,这样就不会被封,然后他监听微信给发的收款消息。
理论可行,但我没有找到能用的微信机器人库,找到一个伪装IOS的,但还要买IOS的一个什么token。
逆向
我发现了一个平台,也是类似的方案,但是这个不用开通很多个收款码,本来我还打算用这个,但是平台要收成的啊,我不想交。
感觉实现起来可能也很简单的呢,我很好奇,这是怎么做到的呢?
我直接下载他的监控APP,开始逆向。
上次用到的技术这次不适用了,这次我要看到他的Java代码,参考学习。
这次用到的是 Jadx ,直接打开 classes.dex 看代码。
我发现,他并没有什么特别的,也是监听通知,也是只获取到了金额信息。
写监控APP
不用他的,因为会被收成。
我要自己造一个。
虽然不会安卓原生开发,抄他的代码的话,写一个很简单啦,也没几行。
监控APP实际上做的事情就两个,1监控设备通知 2监控到的通知发送到服务器上。
他的APP写的,还有一些其他功能,扫码啦、存储配置文件啦。
但是我只需要做到基本功能就可以啦。
于是我把他监听这部分的代码借鉴(chao)过来了。
有一说一,这个代码写的是真一言难尽,if一层套一层,switch也不用…
其中有一些值得研究的地方,监听通知的这一部分代码实际上是单独的一个服务,这个服务和界面是同一个等级的,在系统允许的情况下这个服务可以自动后台运行(比我想象中的简单,我是因为安卓自启动什么的很麻烦),而且服务可以脱离界面运行。
这个APP监控能做到的只有,监控到收到了多少钱,并得不到谁付的、备注啦之类的信息。
订单管理
接下来是核心服务器的事情啦(我把监控APP优雅地称为“边缘服务器”)
服务费
首先提出一个叫服务费的东西(给用户看的)
因为监控只能监控到收款金额,所以需要让原本金额一样的订单区别开来,在生成订单时会做冲突检测,有冲突就递增服务费。
为了避免用户恶意占用金额,限制用户最大未支付订单数量,并根据未支付订单数量增加一个较大数额的服务费。
有了服务费,就能保证所有未支付订单的唯一性,所以监听到支付时,只需要简单去找一个金额就好啦~( ̄▽ ̄~)~
对于一个小系统来说,订单管理并没有什么技术含量,也就简单增删改查,图方便,监听APP直接走了向用户服务的路由,请求会携带一个密钥,用的都是https。
心跳机制
我不能保证挂APP的设备能时刻状态正常。
能想到的,我拿设备挂在学校里面,学校晚上会断网,实验室晚上会断电。
我需要一个机制,让挂支付的设备异常的时候禁止用户开订单。
心跳机制,也没有技术含量。
这样免签支付写好了,经测试也能用,要说有什么问题吧,那就是用户要手动输金额,有云服务器也必须拿手机挂。