第四方支付:使用Android AccessibilityService完成个人收款服务
作者:互联网
因为AccessibilityService的使用很简单,本文第一篇只讲实现微信个人收款回调服务的思路以及介绍使用到的技术。我个人认为这部分的内容对比编写一个安卓脚本更有价值。
本文仅供技术交流,切勿用于非法用户
一、 了解AccessibilityService
无障碍服务旨在帮助残疾人使用Android设备和应用程序。它们在后台运行,当系统被触发时接收系统的回调。这样的事件表示用户界面中的一些状态转换,例如,焦点已经改变,按钮被点击等。这样的服务可以可选地请求查询活动窗口的内容的能力。可访问性服务的开发需要扩展该类并实现其抽象方法。
在AccessibilityService的支持下,可以使你的安卓程序支持监听页面、页面组件和消息通知等事件并支持一系列例如点击、滑动和手势等操作。由此,我们可以通过继承AccessibilityService编写脚本。但是仅仅是操作UI层面的脚本辅助,,好处是使用场景不需要root,只需要打开一些权限即可。
一般使用场景是微信抢红包、自动点赞之类的。理论上,我们能拿到通知栏就可以实现微信收款的回调。所以本文讲了如果投入到生产环境需要考虑的设计以及方案。
二、 收款回调服务
总体的逻辑是:自动生成二维码、解析二维码上传到服务器、收到收款通知的时候回调到服务器
里面就包括了一些细节,例如:请求时传输内容的加密、设备的唯一ID、心跳机制等
这样完成的支付是有很大的局限性的。例如:在设备数量有限的情况只能支持到低并发的支付请求、对设备的正常运行完全依赖
1. 自动生成收款二维码
这个步骤主要是脚本的操作。重复输入金额生成二维码。
这里说一下个人支付的方案: 假设用户目标支付是金额5元,那么最先5元的收款码一定要保留支付时间的,正常用户支付完成了就可以释放了,如果用户放弃支付,可能在1-2分钟释放这个付款码。所以我们有两种方法:
(1) 多台设备&&多个收款账户
(2) 金额偏移
第一个方案固然是可行并且最理想的。所以我们这里讲求次方案,就是生成5元支付金额时,向前(–)或者向后(++)生成数个支付码,例如4.99、4.98、5.01、5.02。当然我更倾向于向前的。
(3)两者结合
这样并发量就是一个组合结果了,对于个人收款应该足够(如果不够,应该去申请商业支付啦)
2. 解析二维码上传到服务端
因为权限问题,在一个service里面截图是被拒绝的。
(1) DisplayManagerService
这个方案是可行的。自行了解
(2) 利用微信本身的保存收钱码功能
嗯…这个香
3. 收到通知回调到服务器
(1) 生成设备指纹
这个搜索(android 设备指纹)一大堆啊就不过多阐述了。主要是生成一个唯一标识去辨别设备的。
(2) 传输加密
如果明文传输也可以。
这里加密主要是为了验证消息的确来自设备,万一接口暴露了,被伪造请求,会直接造成经济损失啊。
因为设备是自己保管的,不存在被逆向然后密钥泄漏风险(如果服务器被注入我就管不着了)
这里也是用常用的CBC加密PKCS7PADDING填充
具体好像搜索(android cbc)又有答案了…
(3) 心跳机制、前台服务
因为回调服务是完全依赖设备正常运行的。但是这里比较简单只是细节问题。
(1) 轮询
开一个子线程定时请求服务器,服务器去做检测,上次心跳时差大于30s就不要使用这个设备的收钱码了,并且发出通知,然后人工处理就好了。
(1) Socket
没啥好说的,自带心跳。还可以对接函数进行云控app。有想象力的自行发挥吧。
本文介绍就到这里了,下面上个demo演示视频
视频中就是我的收款码,觉得有用的直接可以赞赏咯
<iframe allowfullscreen="true" data-mediaembed="bilibili" id="lBASdW61-1620706823489" src="https://player.bilibili.com/player.html?aid=930494608"></iframe>使用Android AccessibilityService完成个人收款服务
标签:第四方,二维码,AccessibilityService,支付,服务器,Android,收款,设备 来源: https://blog.csdn.net/qq_39649991/article/details/116646691