某德基全自动化实现
以下内容仅供学习交流使用
粗略讲解一下思路,要完全实现只靠以下这些内容还是不够的。
一、实现思路
全自动化实现用的是小程序版本。我们首先要分析整个下单的流程,以及这个流程中对应的接口。接着要破解接口中加密的参数,整个流程中只需要解决掉kbsv这个请求头参数即可,不过前面的接口基本都没有校验这个参数。最后比较难的还是自动支付这一块,解决支付我们再获取订单信息拿取取餐码就搞定了!
二、具体步骤
分析接口,破解参数,解决自动支付,拿取取餐码
1、分析接口
小程序要如何获取查看对应的接口信息这确实是个问题,不过目前有两个比较简单的方法可以解决:
第一种就是使用抓包工具 :目前市面上的抓包工具还是很多的,可以使用青花瓷(Charles),小黄鸟(HttpCanary),WireShark等都可以。
然后下载完后对应的抓包工具安装证书后,我们在电脑上访问很多页面都能被抓包工具截取到,毕竟请求都要走协议。
以下是打开抓包工具访问小程序获取的接口信息
第二种方式是使用github开源工具WeChatOpenDevTool:这个工具还有有一定的局限性的,需要运行可兼容的微信版本,就是你微信版本太高不一定能搞,所以需要给微信版本降级,然后按照md文档操作,你就会看到使用小程序可以打开开发者工具进行像浏览器那样的断点调试。这个工具还有一个不足的点就是,如果是webpack打包你要刷新网站获取调用模块这些可能不好使。但是要解决肯德基小程序加密参数的还原这个工具就够了,最后尽量使用小号去调试。
以下是使用这个工具后大致的页面情况,这样你可以像在浏览器一样去使用开发者工具了,还是非常便捷的。
最终kbsv参数的加密是一个标准的md5。很简单,就是拼接字符串,接口地址,时间戳,请求参数啥的拼接完后进行加密。不过基本上所有的接口都没有校验这个参数,只有在最后的支付环节,获取订单信息拿取餐码的时候需要校验。
2、破解接口
分析接口的时候已经知道唯一需要破解的参数是请求头参数kbsv,这是一个标准的md5算法,可以看到这个参数变量名还是比较有识别性的,我们可以直接通过全局搜索kbsv找到相关的代码位置,然后把它们都打上断点,代码没有混淆,可以很轻松的搞定。还原代码如下(前面两个印象中可以写死):
或者我们也可以通过xhr断点的形式,然后去跟栈找到对应的加密位置,这种不是很推荐,因为我跟的时候发现有异步,相对来说比较不好解决的。
3、解决自动支付
对了,这个全自动支付只完成了某德基大神卡的余额支付,涉及其他支付方式暂时无法解决。
跳大神卡余额支付的时候,某德基会返回的一个pay接口,拿到它里面返回的一个支付页面的url参数,这个是输入支付密码的前端页面,我们也可以拿取这个url在浏览器打开。
输入密码后会携带返回的表单参数一起发送请求,如果走协议接口请求的话这里会有环境检测以及其他检测,有能力的大佬可以通过对应的方式解决。当然我们可以换另外一种方式跳过检测,既然可以通过浏览器打开url,那我们走一下自动化框架自动输入密码也是照样可以解决,这里用你熟悉的自动化框架输入密码就行了。
4、获取订单
最后支付成功后会自动发送一个init接口请求重新初始化一个session,拿取这个新的id去请求OrderDetail接口获取取餐码就行了。
请求的时候需要携带三个必要的参数,一个是餐厅的storecode(字符串), 一个是就餐方式packType(1为外带,2为堂食,字符串), 一个是商品信息数据(传递的是一个列表)。以下是初期实现全自动的流程:
三、其他
每一个账号都有对应的token,我们可以创建一个后台管理系统存放这些肯德基账号的token信息,然后把大神卡的支付密码设置为同一个,这样就可以共用这一套全自动化脚本。
管理后台主要处理账号的token信息,每次优先调用日次数最少的,然后某个账号被调用都会修改状态以及今日使用次数。
还可以整成很多市面上已经存在的各种结果。
以上内容仅供学习交流使用