行业电子凭证接入

- 新增 4 个回调接口:send-code/destroy-code/query-code/consume-code
- 支持快手开放平台 MD5/HMAC_SHA256 签名验签
- send-code 回调自动创建 order/order_items/fulfillment_tasks/profiles
- consume-code 回调与既有 flow.consume 结构兼容
- isKuaishouCloudTask 同时匹配 kuaishou-industry executor_key
- claim 页面自动验证行业凭证 task,跳过核销码输入
- 退回时行业 task 跳过快手核销 API
- 新增 KUASHOU_INDUSTRY_* 环境变量配置
This commit is contained in:
yml2213
2026-06-30 17:33:51 +08:00
parent 693f4de45a
commit f38efa2edf
16 changed files with 471 additions and 4 deletions
@@ -5,9 +5,16 @@ export const KUAISHOU_CLOUD_FIXED_VN_KEY = '1'
export type JsonObject = Record<string, any>
const KUAISHOU_CLOUD_EXECUTOR_KEYS = new Set(['kuaishou_ct_assisted', 'kuaishou-industry'])
export function isKuaishouCloudTask(task: unknown) {
const source = task && typeof task === 'object' ? (task as JsonObject) : {}
return String(source.executor_key || '').trim() === 'kuaishou_ct_assisted'
return KUAISHOU_CLOUD_EXECUTOR_KEYS.has(String(source.executor_key || '').trim())
}
export function isIndustryEVoucherTask(task: unknown) {
const source = task && typeof task === 'object' ? (task as JsonObject) : {}
return String(source.executor_key || '').trim() === 'kuaishou-industry'
}
export function normalizeKuaishouCloudFlow(value: unknown) {
@@ -24,6 +24,7 @@ import {
} from "../../platforms/kuaishou-eticket/source-config-service.js";
import {
isKuaishouCloudTask,
isIndustryEVoucherTask,
maskCode,
maskPhone,
normalizeKuaishouCloudFlow,
@@ -793,10 +794,15 @@ export async function returnKuaishouCloudFulfillmentTask(
let nextResultCode = "kuaishou_cloud_completed";
let nextResultMessage = "cloudtentacles 发货、退号并完成快手核销";
const consumeAlreadyCompleted = flow.consume.status === "success";
const isIndustryTask = isIndustryEVoucherTask(task)
if (consumeAlreadyCompleted) {
consumeStatus = "success";
consumedAt = flow.consume.consumedAt || now;
} else if (isIndustryTask) {
consumeStatus = "success";
consumedAt = flow.consume.consumedAt || now;
consumeErrorMessage = "行业电子凭证核销由平台回调处理,已跳过主动核销";
} else if (!order) {
consumeStatus = "failed";
consumeErrorMessage = "任务关联订单不存在,无法执行快手核销";