From 4b9ac0598fbcbfdd8a039dec3241143ac3c93f42 Mon Sep 17 00:00:00 2001 From: yml2213 Date: Wed, 10 Jun 2026 21:03:41 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=8B=89=E5=8D=A1=E6=8B=89?= =?UTF-8?q?=E9=80=80=E6=AC=BE=E6=88=90=E5=8A=9F=E7=8A=B6=E6=80=81=E8=AF=86?= =?UTF-8?q?=E5=88=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../integrations/payment/lakala/client.go | 14 +++++++----- .../payment/lakala/client_test.go | 22 +++++++++++++++++++ 2 files changed, 31 insertions(+), 5 deletions(-) diff --git a/backend/internal/integrations/payment/lakala/client.go b/backend/internal/integrations/payment/lakala/client.go index ac61fe0..1780193 100644 --- a/backend/internal/integrations/payment/lakala/client.go +++ b/backend/internal/integrations/payment/lakala/client.go @@ -612,17 +612,21 @@ func normalizePaymentStatus(raw map[string]string) string { func normalizeRefundStatus(raw map[string]string) string { value := strings.ToUpper(firstNonEmpty(raw["refund_status"], raw["trade_state"], raw["trade_status"], raw["status"])) - if value == "" && responseOK(raw) { - return "refunded" - } switch value { case "SUCCESS", "REFUND_SUCCESS", "TRADE_SUCCESS", "REFUNDED", "S", "11": return "refunded" case "FAIL", "FAILED", "REFUND_FAIL", "TRADE_FAIL", "F", "12": return "failed" - default: - return "refunding" } + if hasSuccessResponseCode(raw) { + return "refunded" + } + return "refunding" +} + +func hasSuccessResponseCode(raw map[string]string) bool { + code := firstNonEmpty(raw["code"], raw["resp_code"], raw["result_code"], raw["return_code"]) + return code != "" && responseOK(raw) } func responseOK(raw map[string]string) bool { diff --git a/backend/internal/integrations/payment/lakala/client_test.go b/backend/internal/integrations/payment/lakala/client_test.go index ed80cd8..9604399 100644 --- a/backend/internal/integrations/payment/lakala/client_test.go +++ b/backend/internal/integrations/payment/lakala/client_test.go @@ -87,6 +87,28 @@ func TestNormalizeRefundStatusTreatsSuccessCodeAsRefunded(t *testing.T) { } } +func TestNormalizeRefundStatusTreatsSuccessCodeWithRefundingAsRefunded(t *testing.T) { + status := normalizeRefundStatus(map[string]string{ + "code": "BBS00000", + "msg": "成功", + "status": "refunding", + "refund_amount": "960", + "trade_no": "20260610110110001231120132051564", + }) + if status != "refunded" { + t.Fatalf("normalizeRefundStatus() = %q, want refunded", status) + } +} + +func TestNormalizeRefundStatusKeepsUnknownWithoutCodeAsRefunding(t *testing.T) { + status := normalizeRefundStatus(map[string]string{ + "status": "processing", + }) + if status != "refunding" { + t.Fatalf("normalizeRefundStatus() = %q, want refunding", status) + } +} + func TestCreatePaymentOmitsCounterParamWhenPayModeBlank(t *testing.T) { body := captureCreatePaymentBody(t, "") reqData := body["req_data"].(map[string]any)