优化支付日志和配置删除提示

This commit is contained in:
yml
2026-06-18 22:16:09 +08:00
parent fa14e0e36d
commit 9b06673efb
15 changed files with 381 additions and 92 deletions
@@ -3,12 +3,14 @@ package payment
import (
"context"
"encoding/json"
"gorm.io/gorm"
"gorm.io/gorm/clause"
"time"
"hfb_sys/backend/internal/model"
"hfb_sys/backend/internal/timeutil"
"log"
"time"
"go.uber.org/zap"
"gorm.io/gorm"
"gorm.io/gorm/clause"
)
// Start 发起订单支付,并按请求支付方式选择对应默认渠道配置。
@@ -58,8 +60,11 @@ func (r *Repository) Start(ctx context.Context, userID uint64, orderID uint64, r
return nil, ErrPaymentUnavailable
}
log.Printf("[payment] payment start order_id=%d order_no=%s payment_id=%d provider=%s amount_cent=%d third_order_id=%s",
orderID, orderRow.OrderNo, payment.ID, runtimeConfig.Provider, payment.AmountCent, payment.ThirdOrderID)
r.log().Info("payment start", paymentLogFields(ctx, appendFields(
paymentOrderFields(payment),
runtimeConfigFields(runtimeConfig),
)...,
)...)
resp, err := runtimeConfig.Channel.CreatePayment(ctx, channelCreatePaymentRequest{
ThirdOrderID: payment.ThirdOrderID,
AmountCent: payment.AmountCent,
@@ -73,14 +78,26 @@ func (r *Repository) Start(ctx context.Context, userID uint64, orderID uint64, r
})
if err != nil {
_ = r.markPaymentFailed(ctx, payment.ID, nil, err.Error())
log.Printf("[payment] payment request failed order_id=%d payment_id=%d provider=%s amount_cent=%d err=%v",
orderID, payment.ID, runtimeConfig.Provider, payment.AmountCent, err)
r.log().Warn("payment request failed", paymentLogFields(ctx, appendFields(
paymentOrderFields(payment),
runtimeConfigFields(runtimeConfig),
[]zap.Field{zap.Error(err)},
)...,
)...)
return nil, err
}
if !resp.OK {
_ = r.markPaymentFailed(ctx, payment.ID, resp.Raw, resp.ErrorMessage)
log.Printf("[payment] payment rejected order_id=%d payment_id=%d provider=%s amount_cent=%d code=%s message=%s",
orderID, payment.ID, runtimeConfig.Provider, payment.AmountCent, firstNonEmpty(resp.Raw["code"], resp.Raw["resp_code"], resp.Raw["result_code"]), resp.ErrorMessage)
r.log().Warn("payment rejected", paymentLogFields(ctx, appendFields(
paymentOrderFields(payment),
runtimeConfigFields(runtimeConfig),
[]zap.Field{
zap.String("channel_code", firstNonEmpty(resp.Raw["code"], resp.Raw["resp_code"], resp.Raw["result_code"])),
zap.String("channel_message", resp.ErrorMessage),
zap.Strings("raw_response_keys", stringMapKeys(resp.Raw)),
},
)...,
)...)
return nil, ErrPaymentUnavailable
}
if err := r.db.WithContext(ctx).Model(&model.PaymentOrder{}).Where("id = ?", payment.ID).Updates(map[string]any{
@@ -100,8 +117,11 @@ func (r *Repository) Start(ctx context.Context, userID uint64, orderID uint64, r
return nil, err
}
r.recordConfigUsage(ctx, runtimeConfig, latest)
log.Printf("[payment] payment result order_id=%d order_no=%s payment_id=%d provider=%s amount_cent=%d status=%s provider_order_id=%s",
orderID, orderRow.OrderNo, latest.ID, runtimeConfig.Provider, latest.AmountCent, latest.Status, latest.ProviderOrderID)
r.log().Info("payment result", paymentLogFields(ctx, appendFields(
paymentOrderFields(latest),
runtimeConfigFields(runtimeConfig),
)...,
)...)
dto := toDTO(*latest)
return &dto, nil
}