行业电子凭证接入

- 新增 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
@@ -4,6 +4,7 @@ import { createRateLimitMiddleware } from '../middleware/rate-limit.js'
import { handleSendCode } from '../services/platforms/kuaishou-industry/send-code-service.js'
import { handleDestroyCode } from '../services/platforms/kuaishou-industry/destroy-code-service.js'
import { handleQueryCode } from '../services/platforms/kuaishou-industry/query-code-service.js'
import { handleConsumeCode } from '../services/platforms/kuaishou-industry/consume-code-service.js'
import { buildIndustryErrorResponse } from '../services/platforms/kuaishou-industry/response.js'
import { createRequestId, logIntegration } from '../utils/logger.js'
@@ -117,6 +118,39 @@ router.post('/query-code', industryRateLimit, async (req, res) => {
}
})
router.post('/consume-code', industryRateLimit, async (req, res) => {
const requestId = createRequestId('ksind')
const startedAt = Date.now()
logIntegration('[kuaishou-industry/consume-code]', '收到快手行业电子凭证核销回调', {
requestId,
method: req.method,
originalUrl: req.originalUrl,
ip: req.ip,
query: req.query,
body: req.body,
})
try {
const params = mergeRequestParams(req)
const result = await handleConsumeCode(params)
logIntegration('[kuaishou-industry/consume-code]', '核销处理完成', {
requestId,
durationMs: Date.now() - startedAt,
result,
})
res.status(200).json(result)
} catch (error) {
const message = error instanceof Error ? error.message : '系统异常'
logIntegration('[kuaishou-industry/consume-code]', '核销处理失败', {
requestId,
durationMs: Date.now() - startedAt,
error,
}, { level: 'error' })
res.status(200).json(buildIndustryErrorResponse(4010003, message))
}
})
function mergeRequestParams(req: any): Record<string, any> {
const query = req.query || {}
const body = req.body || {}