1.购买服务器阿里云:服务器购买地址https://t.aliyun.com/U/Bg6shY若失效,可用地址
阿里云:
服务器购买地址
https://t.aliyun.com/U/Bg6shY若失效,可用地址
https://www.aliyun.com/daily-act/ecs/activity_selection?source=5176.29345612&userCode=49hts92d腾讯云:
https://curl.qcloud.com/wJpWmSfU若失效,可用地址
https://cloud.tencent.com/act/cps/redirect?redirect=2446&cps_key=ad201ee2ef3b771157f72ee5464b1fea&from=console华为云
https://activity.huaweicloud.com/cps.html?fromacct=64b5cf7cc11b4840bb4ed2ea0b2f4468&utm_source=V1g3MDY4NTY=&utm_medium=cps&utm_campaign=2019052.部署教程
3.代码如下
import fetch from "node-fetch";import crypto from "crypto";// ==== 配置区域 ==== //const COOKIE = process.env.KOMOE_COOKIE;if (!COOKIE) {console.error("❌ 缺少 COOKIE");process.exit(1);}// ==== 工具函数 ==== //// 生成 nonce = 当前时间戳 + 10位随机字符function generateNonce() {const chars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";let str = "";for (let i = 0; i < 10; i++) {str += chars.charAt(Math.floor(Math.random() * chars.length));}return Date.now() + str;}// MD5 加密(hex 输出)function md5Hex(str) {return crypto.createHash("md5").update(str).digest("hex");}// 生成 signfunction generateSign(params) {const secret = "+RIq/MaHJf9h23eOdjyXB6lkXL0LjcTGuPiNRyTtZX4=";// 补全参数params = Object.assign({}, params, {nonce: generateNonce(),lang: "zh",ts: Date.now(),appkey: "7200bfa761c94eae9ceb168bf4b129d0"});if (params.sign) delete params.sign;// key排序 & 拼接const keys = Object.keys(params).sort();const str = keys.map(k => {let val = params[k];if (typeof val === "object") val = JSON.stringify(val);return `${k}=${val}`;}).join("&") + `&secret=${secret}`;// md5 加密生成 signconst sign = md5Hex(str);return { ...params, sign };}// ==== 执行签到 ==== //async function signIn() {const url = "https://activity-web.komoejoy.com/activity/sign/v2/in";// 初始化参数const params = {activity_group_id: "1755595320481626",activity_id: "10000244",app_id: "6829"};// 生成带 sign 的请求参数const signedParams = generateSign(params);// 转成 form-urlencodedconst body = new URLSearchParams(signedParams);try {const res = await fetch(url, {method: "POST",headers: {"accept": "application/json, text/plain, */*","content-type": "application/x-www-form-urlencoded;charset=UTF-8","cookie": COOKIE,"Referer": "https://komoejoy.com/"},body});const data = await res.json();console.log("✅ 签到结果:", data);} catch (err) {console.error("❌ 签到失败:", err);}}// ==== 执行脚本 ==== //signIn();
这是 Kom(komoejoy)活动签到脚本,特点是:
从环境变量
KOMOE_COOKIE读取登录态 Cookie;按指定规则生成接口需要的签名参数
sign(包含nonce、ts、appkey、secret等);调用
https://activity-web.com/activity/sign/v2/in接口,完成某个活动的自动签到;将签到接口返回的 JSON 结果直接打印到控制台。
主要函数
1. generateNonce()
生成接口需要的
nonce字段:格式为:当前时间戳 + 10位随机 [0-9a-zA-Z] 字符;
用于保证每次请求的随机性 / 唯一性。
2. md5Hex(str)
对输入字符串做 MD5 运算;
返回 32 位十六进制字符串,用来生成最终的
sign。
3. generateSign(params)
核心签名函数,负责生成带
sign的完整请求参数:nonce:调用generateNonce()lang: "zh"ts: 当前时间戳appkey: "7200bfa7..."在传入
params的基础上补全字段:删除原有
sign字段(如果有);按 key 排序后拼接为:
k1=v1&k2=v2&...&secret=固定secret;对拼接字符串做
md5Hex,得到sign;返回:原始参数 + sign 的新对象。
4. signIn()
签到主流程:
content-typecookie: KOMOE_COOKIEReferer等头;准备基础参数:
activity_group_id / activity_id / app_id;调用
generateSign(params)得到带签名的signedParams;使用
URLSearchParams转成application/x-www-form-urlencoded请求体;通过
fetch向签到接口发起 POST 请求,携带:解析返回 JSON,并输出 "✅ 签到结果" 或 "❌ 签到失败"。
5. 脚本入口
signIn();
直接执行签到流程,适合挂 CI / 青龙 / 定时任务。
注意:
本文部分变量已做脱敏处理,仅用于测试和学习研究,禁止用于商业用途,不能保证其合法性,准确性,完整性和有效性,请根据情况自行判断。技术层面需要提供帮助,可以通过打赏的方式进行探讨。
没有评论:
发表评论