# test_api **Repository Path**: thinklive1/test_api ## Basic Information - **Project Name**: test_api - **Description**: 测试与微信小程序的对接功能 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-10-27 - **Last Updated**: 2026-02-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 程序说明 ## 数据: 1. 使用一个json文件储存中间数据, 即当前目录下的database.json(运行一次会自动创建) 1. token: 获取的accesskey 2. expire_time: 上述token的过期时间 3. orders_cache: 上一次请求订单时得到的订单数据 4. finished_orders: 已完成订单的id(对一个特定设备是唯一的)组成的列表 5. lastDate: 上次运行的日期, 用于检测是否经过了一天需要重置订单 2. 请求token,请求订单等请求都有自己的对象,名字形如`token_data`,`token_config`等 3. 全局数据token_in_use: 存储目前使用的key, 每次执行查询请求前会检查是否过期, 从数据文件中初始化, 若没有则为空字符串 4. 加密的密钥, 设备名等暂时是硬编码的 5. 日志, 存储在logs目录下, 按天划分文件 6. `goods_list.json`: 存储目前已有的商品名称列表,用于`gen_taskjson.js`生成工作流的json ## 程序 按文件里从上至下的顺序, 工具函数有: 1. `readData`用于读取数据文件`database.json` 2. `writeData`用于保存数据文件`database.json` 3. `generateRandomString,padTo16Bytes,aesEncrypt,generateSign,aesDecrypt`: 均为aes加密解密相关函数 4. `gen_taskjson_from_oredes , gen_taskjson_from_goods `: 分别用于从数据文件/给定商品名列表查询调用`replace.py`生成任务的json数据, 在需要的时候运行 5. `get_orders`: 用于向订单接口请求数据, 该函数会使用全局数据中的`token_in_use` , 假定该数据不为空 6. `get_token_and_orders `: 先获取token, 等待获取到后(axios的请求是异步操作)再请求订单, 也就是调用 `get_orders()` 7. `update_orders`: 检索数据文件里的key, 判断是否过期, 如果过期调用 `get_token_and_orders()`, 否则调用 `get_orders()` ; 最后调用`gen_tasks()` 8. `gen_tasks()`: 从数据文件读取订单和finished数据, 对订单id不在finished列表中的订单, 由于一个订单可能有复数商品, 对每个订单生成一个**任务列表**,这个列表长度至少为1,所有**任务列表**存储在一个数组中,即该函数产生一个**二维列表**, 将这个**二维列表**传给`send_task` 9. `send_task()`: 遍历**二维任务列表**, 假定task需要的json存在当前目录下的 `./tasks_json`目录, 名字就是商品名, 例如`农夫山泉550ml.json`, 以其为数据发送给机器的对应api生成机器任务,每隔1s查询任务是否完成, 若完成则继续下一个任务, 每遍历完一个任务列表, 相当于完成了一个订单的所有任务, 向数据文件的finished列表写入对应订单id; 错误处理待定 10. `checkDayChange`: 检查日期是否改变, 若改变删除当前的key且清空`finished_orders`列表(小程序接口只返回当天订单) 11. `main`: 以一个定时器递归调用自己,调用顺序为: main -> update_orders -> get_orders || get_token_and_orders -> gen_tasks -> send_task -> 定时器 -> main …… ## 使用 1. 确保当前目录下的`goods_list.json`包含全部商品名称, 然后运行`gen_taskjson.js`确保生成了任务json 2. 运行`get_orders_util.js`, 不断轮询订单并发送任务 ## to do list 1. 在真实场景下检测是否是否能轮询订单