我想搞个人免签支付,但是似乎找不到靠谱的第四方聚合支付平台,于是去Github看了看,发现了一些挂一个手机,软件监控手机收款通知的解决方案,但是这些解决方案有个问题,每个金额需要开很多个收款码,每个支付会话占用一个收款码。

我的想法

众所周知,微信在收款的时候会收到一条消息。

我的想法是,能不能写一个机器人,他什么也不做,这样就不会被封,然后他监听微信给发的收款消息。

理论可行,但我没有找到能用的微信机器人库,找到一个伪装IOS的,但还要买IOS的一个什么token。

逆向

我发现了一个平台,也是类似的方案,但是这个不用开通很多个收款码,本来我还打算用这个,但是平台要收成的啊,我不想交。

感觉实现起来可能也很简单的呢,我很好奇,这是怎么做到的呢?

我直接下载他的监控APP,开始逆向。

上次用到的技术这次不适用了,这次我要看到他的Java代码,参考学习。

https://srcblog.ffeng123.win:23443/archives/77ceb78f-35b1-43be-bb23-cca856e3beb3

这次用到的是 Jadx ,直接打开 classes.dex 看代码。

我发现,他并没有什么特别的,也是监听通知,也是只获取到了金额信息。

写监控APP

不用他的,因为会被收成。

我要自己造一个。

虽然不会安卓原生开发,抄他的代码的话,写一个很简单啦,也没几行。

监控APP实际上做的事情就两个,1监控设备通知 2监控到的通知发送到服务器上。

他的APP写的,还有一些其他功能,扫码啦、存储配置文件啦。

但是我只需要做到基本功能就可以啦。

于是我把他监听这部分的代码借鉴(chao)过来了。

有一说一,这个代码写的是真一言难尽,if一层套一层,switch也不用…

其中有一些值得研究的地方,监听通知的这一部分代码实际上是单独的一个服务,这个服务和界面是同一个等级的,在系统允许的情况下这个服务可以自动后台运行(比我想象中的简单,我是因为安卓自启动什么的很麻烦),而且服务可以脱离界面运行。

这个APP监控能做到的只有,监控到收到了多少钱,并得不到谁付的、备注啦之类的信息。

订单管理

接下来是核心服务器的事情啦(我把监控APP优雅地称为“边缘服务器”)

服务费

首先提出一个叫服务费的东西(给用户看的)

因为监控只能监控到收款金额,所以需要让原本金额一样的订单区别开来,在生成订单时会做冲突检测,有冲突就递增服务费。

为了避免用户恶意占用金额,限制用户最大未支付订单数量,并根据未支付订单数量增加一个较大数额的服务费。


有了服务费,就能保证所有未支付订单的唯一性,所以监听到支付时,只需要简单去找一个金额就好啦~( ̄▽ ̄~)~

对于一个小系统来说,订单管理并没有什么技术含量,也就简单增删改查,图方便,监听APP直接走了向用户服务的路由,请求会携带一个密钥,用的都是https。

心跳机制

我不能保证挂APP的设备能时刻状态正常。

能想到的,我拿设备挂在学校里面,学校晚上会断网,实验室晚上会断电。

我需要一个机制,让挂支付的设备异常的时候禁止用户开订单。

心跳机制,也没有技术含量。


这样免签支付写好了,经测试也能用,要说有什么问题吧,那就是用户要手动输金额,有云服务器也必须拿手机挂。

我能想到的,最大的成功就是无愧于自己的心。