统一领取流:Step1 填 UID,按平台分叉履约

领取页改为统一 UID 入口;lewan 强制角色 ID 匹配后才发货核销,feifei 将 uid 拼入 H5 并去掉 claim 短链,对外仍返回本站 claimUrl。
This commit is contained in:
yml2213
2026-07-10 13:30:22 +08:00
parent 1155b3c608
commit bb060e81a4
15 changed files with 898 additions and 285 deletions
@@ -1,10 +1,6 @@
import { buildClaimUrl } from '../../claim/claim-service.js'
import { TASK_STATUS } from '../../../domain/task-status.js'
import {
ensureKuaishouFeifeiClaimShortLink,
prepareKuaishouFeifeiTask,
resolveKuaishouFeifeiClaimUrl,
} from '../kuaishou-feifei/index.js'
import { parseTaskContext } from '../../../utils/task-json.js'
import { prepareKuaishouFeifeiTask } from '../kuaishou-feifei/index.js'
import {
FULFILLMENT_EXECUTOR_KEYS,
type FulfillmentDeliveryLink,
@@ -24,7 +20,19 @@ async function preparePaidTask(
deps: FulfillmentPrepareDeps,
): Promise<TaskRow | null> {
try {
return await prepareKuaishouFeifeiTask(task)
let workingTask = task
if (!task.primary_claim_token_id && !String(task.claim_token || '').trim()) {
const claimToken = await deps.createTaskClaimToken(task.id)
workingTask =
(await deps.updateTask(task.id, {
claim_token: claimToken.token,
claim_expires_at: claimToken.expired_at,
user_action_status: 'pending_claim',
updated_at: deps.nowIso(),
})) || task
}
return await prepareKuaishouFeifeiTask(workingTask)
} catch (error) {
const message = error instanceof Error ? error.message : 'kuaishou-feifei 订单创建失败'
const updatedTask = await deps.updateTask(task.id, {
@@ -44,19 +52,19 @@ async function preparePaidTask(
}
}
/**
* 对外(91 等)统一返回本站领取链接,不再返回 feifei H5 或短链。
*/
async function resolveDeliveryLink(task: TaskRow): Promise<FulfillmentDeliveryLink | null> {
let claimUrl = await ensureKuaishouFeifeiClaimShortLink(task)
if (!claimUrl) {
const context = parseTaskContext(task)
claimUrl = resolveKuaishouFeifeiClaimUrl(context.kuaishouFeifei)
}
const primaryToken = String(task.primary_claim_token || task.claim_token || '').trim()
const expireTime = String(task.primary_claim_expires_at || task.claim_expires_at || '').trim()
if (!claimUrl) {
if (!primaryToken) {
return null
}
return {
claimUrl,
expireTime: '',
claimUrl: buildClaimUrl(primaryToken),
expireTime,
}
}