修复拉卡拉退款成功状态识别

This commit is contained in:
yml2213
2026-06-10 21:03:41 +08:00
parent 6d990c97bc
commit 4b9ac0598f
2 changed files with 31 additions and 5 deletions
@@ -612,17 +612,21 @@ func normalizePaymentStatus(raw map[string]string) string {
func normalizeRefundStatus(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"])) value := strings.ToUpper(firstNonEmpty(raw["refund_status"], raw["trade_state"], raw["trade_status"], raw["status"]))
if value == "" && responseOK(raw) {
return "refunded"
}
switch value { switch value {
case "SUCCESS", "REFUND_SUCCESS", "TRADE_SUCCESS", "REFUNDED", "S", "11": case "SUCCESS", "REFUND_SUCCESS", "TRADE_SUCCESS", "REFUNDED", "S", "11":
return "refunded" return "refunded"
case "FAIL", "FAILED", "REFUND_FAIL", "TRADE_FAIL", "F", "12": case "FAIL", "FAILED", "REFUND_FAIL", "TRADE_FAIL", "F", "12":
return "failed" 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 { func responseOK(raw map[string]string) bool {
@@ -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) { func TestCreatePaymentOmitsCounterParamWhenPayModeBlank(t *testing.T) {
body := captureCreatePaymentBody(t, "") body := captureCreatePaymentBody(t, "")
reqData := body["req_data"].(map[string]any) reqData := body["req_data"].(map[string]any)