功能概述
该脚本用于自动完成奈雪点单小程序的每日任务,包括:
- 自动检测 Token 有效性
- 自动签到(如果未签到)
- 获取用户基础信息(昵称、手机号)
- 查询当前奈雪币余额
- 记录连续签到天数
- 支持多账号执行,适用于 Node.js 脚本自动化平台(如青龙面板)定时运行。
使用方法
- 配置环境变量
NAIXUE_TOKEN
,内容为 Bearer Token(去掉 Bearer)。 - 多账号用
&
或换行分隔。 - 定时运行脚本。
完整代码实现
以下是完整的脚本代码:
const init = require('init')
const {$, notify, sudojia, checkUpdate} = init('奈雪点单');
const crypto = require('crypto');
const naiXueList = process.env.NAIXUE_TOKEN ? process.env.NAIXUE_TOKEN.split(/[\n&]/) : [];
let message = '';
// 接口地址
const baseUrl = 'https://tm-web.pin-dao.cn'
// openId
const openId = 'AsaSsGzbziPlZwfiXM';
!(async () => {
await checkUpdate($.name, naiXueList);
for (let i = 0; i < naiXueList.length; i++) {
const index = i + 1;
$.token = naiXueList[i];
console.log(`\n*****第[${index}]个${$.name}账号*****`);
const isLogin = await baseUserInfo();
if (!isLogin) {
console.error(`Token 已失效`);
await notify.sendNotify(`【Token失效通知】`, `${$.name}账号[${index}] Token 已失效,请重新登录获取 Token\n\n`);
continue;
}
message += `📣====${$.name}账号[${index}]====📣\n`;
message += `${$.nickName}(${$.mobile})\n`;
await $.wait(sudojia.getRandomWait(800, 1200));
await main();
await $.wait(sudojia.getRandomWait(2000, 2500));
}
if (message) {
await notify.sendNotify(`【${$.name}】`, `${message}`);
}
})().catch((e) => $.logErr(e)).finally(() => $.done());
// ... existing code ...
功能说明
方法列表
方法名 | 作用描述 |
---|---|
baseUserInfo() | 校验当前用户 Token 是否有效,获取用户昵称、手机号等基础信息 |
queryAndHandleSignIn() | 查询当前是否已签到,未签到则调用 performSignIn() 执行签到 |
performSignIn(nowDate) | 执行当天的签到操作(POST 提交签到日期) |
queryUserCoin() | 查询用户当前奈雪币余额与连续签到天数 |
sendRequest(apiOptions) | 所有接口请求的封装方法,自动附带签名和通用参数 |
getBody() | 生成请求签名和结构,包括 HMAC-SHA1 签名逻辑和时间戳 |
randomString() | 生成用于签名的 nonce 随机字符串(默认6位) |
formatDate(date) | 格式化日期为 YYYY-MM-DD 格式,用于签到接口参数 |
关键变量
变量名 | 说明 |
---|---|
NAIXUE_TOKEN | 环境变量,内容是 Bearer Token(去掉 Bearer) |
$.token | 当前用户的 token,用于 Authorization |
$.signCount | 连续签到的天数 |
$.nickName | 当前用户昵称 |
$.mobile | 当前用户手机号 |
openId | 固定写死的 openId,签名计算需要 |
执行流程图
以下是脚本的主要执行流程(Mermaid 语法):
注意事项
本文部分仅用于测试和学习研究,禁止用于商业用途,不能保证其合法性、准确性、完整性和有效性,请根据情况自行判断。