修复 确认收货 错误

This commit is contained in:
yml2213
2026-04-23 20:29:22 +08:00
parent 17ab393280
commit 4a0003b29d
3 changed files with 168 additions and 1 deletions
@@ -95,6 +95,48 @@ async function executeAgisoTradeWebhook(parsed, webhookEventId, { requestId = ''
})
}
const ignoreReason = resolveAgisoTradeIgnoreReason(parsed)
if (ignoreReason) {
await updateWebhookEvent(webhookEventId, {
processed: true,
process_error: `ignored_${ignoreReason}`,
related_order_id: null,
})
logWebhook('[webhook-service/agiso]', 'Webhook 已忽略:当前通知不应再次触发履约发送', {
requestId,
webhookEventId,
provider: parsed.provider,
platform: parsed.platform,
shopId: parsed.shopId,
shopName: parsed.shopName,
eventKey: parsed.eventKey,
eventType: parsed.eventType,
platformOrderId: parsed.platformOrderId,
ignoreReason,
})
return {
accepted: true,
ignored: true,
ignoreReason,
provider: parsed.provider,
platform: parsed.platform,
shopId: parsed.shopId,
shopName: parsed.shopName,
platformRaw: parsed.platformRaw,
eventType: parsed.eventType,
platformOrderId: parsed.platformOrderId,
orderId: null,
totalAmountFen: Number(parsed.totalAmount || 0),
enriched: false,
enrichReason: 'skipped_ignored_event',
taskCount: 0,
messageDeliveries: [],
tasks: [],
}
}
const shouldProcess = await hasConfiguredOrderItems({
provider: parsed.provider,
platform: parsed.platform,
@@ -424,6 +466,10 @@ function verifyAgisoSignature({ rawJson, timestamp, sign }) {
function resolveEventType(aopic, payload) {
const normalized = String(aopic || '').trim()
if (isTradeFinishedPayload(payload)) {
return 'buyer_confirm_goods'
}
if (normalized === '1') {
return 'payment_success'
}
@@ -436,7 +482,7 @@ function resolveEventType(aopic, payload) {
return 'trade_create'
}
if (normalized === '256') {
if (normalized === '16' || normalized === '256') {
return 'buyer_confirm_goods'
}
@@ -452,6 +498,22 @@ function resolveEventType(aopic, payload) {
return 'trade_event'
}
export function resolveAgisoTradeIgnoreReason(parsed) {
if (!parsed || parsed.provider !== 'agiso') {
return ''
}
if (parsed.eventType === 'buyer_confirm_goods') {
return 'buyer_confirm_goods'
}
if (parsed.platform === 'xianyu' && isTradeFinishedPayload(parsed.rawPayload)) {
return 'buyer_confirm_goods'
}
return ''
}
function resolveOrderStatus(eventType, payload) {
const providerStatus = resolveProviderStatus(payload)
@@ -770,6 +832,25 @@ function resolveProviderStatus(payload) {
return pickFirstNonEmpty([payload.PayTime, payload.payTime, payload.pay_time]) ? 'paid' : 'unknown'
}
function isTradeFinishedPayload(payload) {
const rawStatus = normalizeInteger(
pickFirstNonEmpty([payload?.order_status, payload?.orderStatus, payload?.status]),
)
if (rawStatus === 4) {
return true
}
const statusText = pickFirstNonEmpty([
payload?.Status,
payload?.status,
payload?.order_status_text,
payload?.orderStatusText,
]).toUpperCase()
return statusText === 'TRADE_FINISHED'
}
function normalizeProviderDateTime(value) {
const normalized = String(value || '').trim()