抖音订单并非纯自动发货:内部 SKU 命中 AFFILIATE_DASH_SKU_MAPPING 才走自动通道, 未命中显式回落人工,且核销依赖买家自己到 /redeem 输订单号。此前核销侧在后台完全 不可见:自动核销是 void .catch(warn) 只落日志,cancelVerify 出网方法已就绪但没有入口。 照快手电子凭证的骨架做一套抖音版(两张表两套状态机,不复用): - 券码状态、平台侧状态、同步错误全部可视化,支持只看同步失败 - 核销/冲正/重新同步/平台对账/重发券码/作废,每个写操作都带审计 - 券码列显示「核销实际会用的券码」(platform_cert_no 优先),平台改过名时额外标注 - 冲正先打平台 cancelVerify 再回退本地,避免本地与平台状态漂移
73 lines
2.4 KiB
TypeScript
73 lines
2.4 KiB
TypeScript
import { apiGet, apiPost } from '@/lib/http'
|
|
import type {
|
|
AdminDouyinMashidaCertificateActionPayload,
|
|
AdminDouyinMashidaCertificateCheckResult,
|
|
AdminDouyinMashidaCertificateInvalidateResult,
|
|
AdminDouyinMashidaCertificateListPayload,
|
|
AdminDouyinMashidaCertificateListResult,
|
|
AdminDouyinMashidaCertificateResendResult,
|
|
AdminDouyinMashidaCertificateSyncResult,
|
|
AdminDouyinMashidaCertificateVerifyResult,
|
|
AdminDouyinMashidaOrderDetailResult,
|
|
} from '@/types/admin'
|
|
|
|
/** 后台「抖音券核销」接口。与快手电子凭证(kuaishou-industry)是两套独立的表与状态机。 */
|
|
const BASE = '/api/v1/admin/douyin-mashida'
|
|
|
|
export function fetchAdminDouyinMashidaCertificates(
|
|
params: AdminDouyinMashidaCertificateListPayload = {},
|
|
) {
|
|
return apiGet<AdminDouyinMashidaCertificateListResult>(
|
|
`${BASE}/certificates`,
|
|
params as Record<string, unknown>,
|
|
)
|
|
}
|
|
|
|
export function verifyAdminDouyinMashidaCertificate(
|
|
payload: AdminDouyinMashidaCertificateActionPayload,
|
|
) {
|
|
return apiPost<AdminDouyinMashidaCertificateVerifyResult>(`${BASE}/certificates/verify`, payload)
|
|
}
|
|
|
|
export function cancelAdminDouyinMashidaCertificateVerify(
|
|
payload: AdminDouyinMashidaCertificateActionPayload,
|
|
) {
|
|
return apiPost<AdminDouyinMashidaCertificateVerifyResult>(
|
|
`${BASE}/certificates/cancel-verify`,
|
|
payload,
|
|
)
|
|
}
|
|
|
|
export function syncAdminDouyinMashidaCertificate(
|
|
payload: AdminDouyinMashidaCertificateActionPayload,
|
|
) {
|
|
return apiPost<AdminDouyinMashidaCertificateSyncResult>(`${BASE}/certificates/sync`, payload)
|
|
}
|
|
|
|
export function checkAdminDouyinMashidaCertificate(
|
|
payload: AdminDouyinMashidaCertificateActionPayload,
|
|
) {
|
|
return apiPost<AdminDouyinMashidaCertificateCheckResult>(`${BASE}/certificates/check`, payload)
|
|
}
|
|
|
|
export function resendAdminDouyinMashidaCertificate(
|
|
payload: AdminDouyinMashidaCertificateActionPayload,
|
|
) {
|
|
return apiPost<AdminDouyinMashidaCertificateResendResult>(`${BASE}/certificates/resend`, payload)
|
|
}
|
|
|
|
export function invalidateAdminDouyinMashidaCertificate(
|
|
payload: AdminDouyinMashidaCertificateActionPayload,
|
|
) {
|
|
return apiPost<AdminDouyinMashidaCertificateInvalidateResult>(
|
|
`${BASE}/certificates/invalidate`,
|
|
payload,
|
|
)
|
|
}
|
|
|
|
export function fetchAdminDouyinMashidaOrderDetail(
|
|
payload: AdminDouyinMashidaCertificateActionPayload,
|
|
) {
|
|
return apiPost<AdminDouyinMashidaOrderDetailResult>(`${BASE}/order-detail`, payload)
|
|
}
|