记录退款失败请求参数

This commit is contained in:
yml
2026-06-18 21:53:46 +08:00
parent 6d385478a6
commit fa14e0e36d
4 changed files with 140 additions and 8 deletions
@@ -1,6 +1,8 @@
package payment
import (
"context"
"encoding/json"
"testing"
"time"
@@ -114,6 +116,53 @@ func createPayableOrderFixture(t *testing.T, db *gorm.DB, suffix string, createP
return f
}
func TestMarkRefundFailedPersistsRawRequest(t *testing.T) {
db := setupPaymentTestDB(t)
f := createPayableOrderFixture(t, db, "RAWREQ", true)
refund := model.PaymentOrder{
PaymentNo: "PAYREFRAWREQ",
OrderID: f.Order.ID,
OrderNo: f.Order.OrderNo,
UserID: f.Renter.ID,
Provider: "lakala",
MerchantID: "merchant-1",
ThirdOrderID: "REFRAWREQ",
ProviderOrderID: "",
AmountCent: 99,
BizType: "checkout_refund",
Status: "refunding",
}
if err := db.Create(&refund).Error; err != nil {
t.Fatalf("create refund payment failed: %v", err)
}
repo := NewRepository(db, nil, nil)
rawRequest := map[string]string{
"merchant_no": "merchant-1",
"out_trade_no": "REFRAWREQ",
"refund_amount": "99",
"origin_trade_no": "TRADE123",
}
err := repo.markRefundFailed(context.Background(), refund.ID, f.Order.ID, refund.AmountCent, map[string]string{"error": "lakala http status 400"}, rawRequest)
if err != nil {
t.Fatalf("mark refund failed: %v", err)
}
var saved model.PaymentOrder
if err := db.First(&saved, refund.ID).Error; err != nil {
t.Fatalf("find refund payment failed: %v", err)
}
var got map[string]string
if err := json.Unmarshal(saved.RawRequest, &got); err != nil {
t.Fatalf("decode raw_request: %v", err)
}
for key, want := range rawRequest {
if got[key] != want {
t.Fatalf("raw_request[%s] = %q, want %q; full=%v", key, got[key], want, got)
}
}
}
// TestCanReusePaymentWithSameProvider 测试相同渠道可复用
func TestCanReusePaymentWithSameProvider(t *testing.T) {
payment := model.PaymentOrder{