fix: 到期时间改取验证接口真实数据,不再把1天卡显示成永久;激活结果回读本机状态确认 v1.8.6
用户真实购买1天试用卡后投诉:①页面显示「到期时间:永久」(orders/query 不返回 expire_time,插件兜底写死永久)②对自动激活存疑。修复:authQueryOrder 从 verify 的 licenseState 透传真实 expire_time/is_permanent/remaining_days,showCard 优先级=永久卡→永久有效、限时卡→真实日期+剩余天数、兜底→套餐名,删除「默认永久」;activated 后回读 authGetStatus 确认 state=authorized 才算成功,否则走失败态;成功/失败两态均显示「如侧边栏未显示已授权→复制卡密→侧边栏粘贴激活」兜底指引。
This commit is contained in:
1 parent
f2af2955be
commit
6a8d395eb9
5 files changed
+46
-12
No files matched your search
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
> 一键搜索 · 自动点击 · 智能评论 —— 小红书运营引流的效率神器
|
> 一键搜索 · 自动点击 · 智能评论 —— 小红书运营引流的效率神器
|
||||||
|
|
||||||
[](https://dl.88531.cn/xhs.html)
|
[](https://dl.88531.cn/xhs.html)
|
||||||
[](#安装方法)
|
[](#安装方法)
|
||||||
[](#开发说明)
|
[](#开发说明)
|
||||||
|
|
||||||
@@ -104,10 +104,15 @@
|
|||||||
|
|
||||||
## 📜 版本历史
|
## 📜 版本历史
|
||||||
|
|
||||||
当前版本:**1.8.5**
|
当前版本:**1.8.6**
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>展开查看完整变更记录(v1.2.0 ~ v1.8.5)</summary>
|
<summary>展开查看完整变更记录(v1.2.0 ~ v1.8.6)</summary>
|
||||||
|
|
||||||
|
### 1.8.6
|
||||||
|
- **修复:到期时间错误显示「永久」**。根因是订单查询接口不返回到期时间,页面拿它兜底写死了「永久」——1 天套餐也显示成永久。现在到期信息一律取自授权验证接口的真实数据:永久卡显示「永久有效」,限时卡显示**真实到期日期 + 剩余天数**(如「2026-10-22 10:43:50(剩 1 天)」),拿不到时显示套餐名,**绝不再凭空写「永久」**
|
||||||
|
- **激活结果改为本地状态回读确认**:不再只信验证接口返回,激活后回读本机授权状态确认真正生效才显示「已自动激活」;宁可多提示手动激活,也不谎称成功
|
||||||
|
- **成功/失败两态都显示手动激活兜底指引**:「如侧边栏顶部未显示已授权,请复制上方卡密 → 侧边栏『输入卡密』粘贴 → 点激活」
|
||||||
|
|
||||||
### 1.8.5
|
### 1.8.5
|
||||||
- **标题旁显示版本号**:侧边栏顶部标题右侧新增版本徽章(如 `v1.8.5`),一眼确认装的是哪一版;页脚版本同步显示。徽章与页脚均**从 manifest 动态读取**,以后升版只需改 manifest 一处,不会再出现两处版本号不一致
|
- **标题旁显示版本号**:侧边栏顶部标题右侧新增版本徽章(如 `v1.8.5`),一眼确认装的是哪一版;页脚版本同步显示。徽章与页脚均**从 manifest 动态读取**,以后升版只需改 manifest 一处,不会再出现两处版本号不一致
|
||||||
|
|||||||
+16
-3
@@ -16,7 +16,7 @@ const DEFAULT_AI = {
|
|||||||
const AUTH_BASE = 'https://auth.88531.cn';
|
const AUTH_BASE = 'https://auth.88531.cn';
|
||||||
const AUTH_PROJECT_ID = 3;
|
const AUTH_PROJECT_ID = 3;
|
||||||
const AUTH_API_KEY = 'ak_bbf83b76df8219388d7f60b9e67c7db2';
|
const AUTH_API_KEY = 'ak_bbf83b76df8219388d7f60b9e67c7db2';
|
||||||
const CLIENT_VERSION = '1.8.5';
|
const CLIENT_VERSION = '1.8.6';
|
||||||
const TRIAL_MS = 72 * 60 * 60 * 1000; // 试用 72 小时(3 天)
|
const TRIAL_MS = 72 * 60 * 60 * 1000; // 试用 72 小时(3 天)
|
||||||
const TRIAL_QUOTA = 100; // 试用期最多 100 条评论(时间/条数先到先停,防止白嫖薅量)
|
const TRIAL_QUOTA = 100; // 试用期最多 100 条评论(时间/条数先到先停,防止白嫖薅量)
|
||||||
const GRACE_DAILY = 3; // 试用到期不硬锁:每天保留 3 条体验额度
|
const GRACE_DAILY = 3; // 试用到期不硬锁:每天保留 3 条体验额度
|
||||||
@@ -571,16 +571,29 @@ async function authQueryOrder(orderNo) {
|
|||||||
paid: data.status === 'paid' || !!data.card_key,
|
paid: data.status === 'paid' || !!data.card_key,
|
||||||
status: data.status,
|
status: data.status,
|
||||||
cardKey: data.card_key || '',
|
cardKey: data.card_key || '',
|
||||||
expireTime: data.expire_time || ''
|
cardTypeName: data.card_type_name || '',
|
||||||
|
expireTime: ''
|
||||||
};
|
};
|
||||||
|
|
||||||
// 自动发卡成功 → 自动激活绑定本机
|
// 自动发卡成功 → 自动激活绑定本机
|
||||||
if (result.cardKey) {
|
if (result.cardKey) {
|
||||||
const verifyRes = await authVerify(result.cardKey);
|
const verifyRes = await authVerify(result.cardKey);
|
||||||
result.activated = !!(verifyRes.ok && verifyRes.licenseState && verifyRes.licenseState.valid);
|
const ls = verifyRes.licenseState || {};
|
||||||
|
result.activated = !!(verifyRes.ok && ls.valid);
|
||||||
result.licenseState = verifyRes.licenseState;
|
result.licenseState = verifyRes.licenseState;
|
||||||
|
// 到期信息一律以 verify 为准(orders/query 不返回到期时间,用它兜底会把 1 天卡显示成永久)
|
||||||
|
result.expireTime = ls.expireTime || '';
|
||||||
|
result.isPermanent = !!ls.isPermanent;
|
||||||
|
result.remainingDays = ls.remainingDays ?? null;
|
||||||
if (result.activated) {
|
if (result.activated) {
|
||||||
await chrome.storage.local.remove(['pendingOrder']);
|
await chrome.storage.local.remove(['pendingOrder']);
|
||||||
|
// 回读本地授权状态确认真正落地,防止「接口说激活了、本地状态没生效」的假阳性
|
||||||
|
try {
|
||||||
|
const st = await authGetStatus();
|
||||||
|
result.confirmed = st.state === 'authorized';
|
||||||
|
} catch (e) {
|
||||||
|
result.confirmed = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
|
|||||||
@@ -121,15 +121,31 @@ function startPolling() {
|
|||||||
// 支付成功:显示卡密(激活成功/失败都显示,激活失败时给出手动激活指引)
|
// 支付成功:显示卡密(激活成功/失败都显示,激活失败时给出手动激活指引)
|
||||||
function showCard(res) {
|
function showCard(res) {
|
||||||
const status = $('order-status');
|
const status = $('order-status');
|
||||||
const ok = !!res.activated;
|
const ok = !!(res.activated && res.confirmed !== false);
|
||||||
|
|
||||||
|
// 到期信息:永久 → 永久;有 expire_time → 具体日期(含剩余天数);都没有 → 显示套餐名。绝不默认「永久」
|
||||||
|
let expireLine;
|
||||||
|
if (res.isPermanent) {
|
||||||
|
expireLine = '到期时间:永久有效';
|
||||||
|
} else if (res.expireTime) {
|
||||||
|
expireLine = '到期时间:' + res.expireTime + (res.remainingDays ? `(剩 ${res.remainingDays} 天)` : '');
|
||||||
|
} else if (res.cardTypeName) {
|
||||||
|
expireLine = '套餐:' + res.cardTypeName;
|
||||||
|
} else {
|
||||||
|
expireLine = '到期时间以侧边栏授权状态为准';
|
||||||
|
}
|
||||||
|
|
||||||
|
const manualTip = '如侧边栏顶部未显示「已授权」,请复制上方卡密 → 回到插件侧边栏「输入卡密」框粘贴 → 点「激活」即可。';
|
||||||
|
|
||||||
status.className = 'order-status ' + (ok ? 'success' : 'error');
|
status.className = 'order-status ' + (ok ? 'success' : 'error');
|
||||||
status.innerHTML = ok
|
status.innerHTML = ok
|
||||||
? `<div class="ok-title">✓ 支付成功,已自动激活本机</div>
|
? `<div class="ok-title">✓ 支付成功,已自动激活本机</div>
|
||||||
<div class="ok-line">到期时间:${esc(res.expireTime || '永久')}</div>
|
<div class="ok-line">${esc(expireLine)}</div>
|
||||||
<div class="ok-line muted">回到插件侧边栏即可使用全部功能。</div>`
|
<div class="ok-line muted">回到插件侧边栏即可使用全部功能。</div>
|
||||||
|
<div class="ok-line muted">${esc(manualTip)}</div>`
|
||||||
: `<div class="ok-title">✓ 支付成功</div>
|
: `<div class="ok-title">✓ 支付成功</div>
|
||||||
<div class="ok-line warn">自动激活未生效${(res.licenseState && res.licenseState.message) ? ':' + esc(res.licenseState.message) : ''}</div>
|
<div class="ok-line warn">自动激活未生效${(res.licenseState && res.licenseState.message) ? ':' + esc(res.licenseState.message) : ''}</div>
|
||||||
<div class="ok-line muted">请复制下面的卡密,回到插件侧边栏「输入卡密」框粘贴 → 点「激活」即可。</div>`;
|
<div class="ok-line muted">${esc(manualTip)}</div>`;
|
||||||
|
|
||||||
$('card-key').textContent = res.cardKey || '';
|
$('card-key').textContent = res.cardKey || '';
|
||||||
$('card-hint').textContent = ok
|
$('card-hint').textContent = ok
|
||||||
|
|||||||
+1
-1
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"manifest_version": 3,
|
"manifest_version": 3,
|
||||||
"name": "小红书自动评论助手",
|
"name": "小红书自动评论助手",
|
||||||
"version": "1.8.5",
|
"version": "1.8.6",
|
||||||
"description": "右侧侧边栏常驻的自动评论助手,支持试用/卡密授权、固定池/自定义文字/图片/AI评论",
|
"description": "右侧侧边栏常驻的自动评论助手,支持试用/卡密授权、固定池/自定义文字/图片/AI评论",
|
||||||
"permissions": [
|
"permissions": [
|
||||||
"storage",
|
"storage",
|
||||||
|
|||||||
+1
-1
@@ -16,7 +16,7 @@
|
|||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<h1>小红书自动评论助手 · 隐私政策</h1>
|
<h1>小红书自动评论助手 · 隐私政策</h1>
|
||||||
<div class="meta">生效日期:2026年10月10日 · 适用版本:v1.8.5 及以上</div>
|
<div class="meta">生效日期:2026年10月10日 · 适用版本:v1.8.6 及以上</div>
|
||||||
|
|
||||||
<p>感谢使用「小红书自动评论助手」浏览器扩展(以下简称"本插件")。我们重视你的隐私。本页面说明本插件收集哪些信息、如何使用以及如何保护。</p>
|
<p>感谢使用「小红书自动评论助手」浏览器扩展(以下简称"本插件")。我们重视你的隐私。本页面说明本插件收集哪些信息、如何使用以及如何保护。</p>
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user