fix: 完成商务迁移复核与接口优化并清理历史资料
This commit is contained in:
@@ -222,12 +222,21 @@ func (s *PaymentService) Refund(ctx context.Context, req *dto.PaymentRefundReque
|
||||
|
||||
func (s *PaymentService) TestProvider(ctx context.Context, provider string) (*dto.PaymentTestResult, error) {
|
||||
result, err := s.uc.TestProvider(ctx, provider)
|
||||
// The usecase records provider diagnostics in server logs. Arbitrary adapter
|
||||
// errors can contain URLs, credentials or SQL; never forward them over HTTP.
|
||||
if err != nil {
|
||||
err = paymentbiz.ErrPaymentTestFailed
|
||||
}
|
||||
if result == nil {
|
||||
return nil, err
|
||||
}
|
||||
response := &dto.PaymentTestResult{Provider: result.Provider, TradeNo: result.TradeNo, Passed: result.Passed, FullFlow: result.FullFlow, Mode: result.Mode, Stages: make([]*dto.PaymentTestStage, 0, len(result.Stages))}
|
||||
for _, stage := range result.Stages {
|
||||
response.Stages = append(response.Stages, &dto.PaymentTestStage{Name: stage.Name, Status: stage.Status, Message: stage.Message, TradeNo: stage.TradeNo, Duration: stage.Duration})
|
||||
message := stage.Message
|
||||
if stage.Status == "failed" {
|
||||
message = "该步骤失败,请检查配置和服务端日志"
|
||||
}
|
||||
response.Stages = append(response.Stages, &dto.PaymentTestStage{Name: stage.Name, Status: stage.Status, Message: message, TradeNo: stage.TradeNo, Duration: stage.Duration})
|
||||
}
|
||||
response.Result = paymentResultResponse(result.Result)
|
||||
return response, err
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
package payment
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
paymentbiz "kra/internal/biz/payment"
|
||||
"testing"
|
||||
)
|
||||
|
||||
type diagnosticRepo struct{ paymentbiz.PaymentRepo }
|
||||
|
||||
func (diagnosticRepo) TestProvider(context.Context, string) (*paymentbiz.PaymentTestResult, error) {
|
||||
return &paymentbiz.PaymentTestResult{Provider: "alipay", Stages: []paymentbiz.PaymentTestStage{
|
||||
{Name: "config", Status: "passed", Message: "配置已检查"},
|
||||
{Name: "create", Status: "failed", Message: "https://merchant:secret@example.test/private?token=secret"},
|
||||
}}, errors.New("provider response contains a secret")
|
||||
}
|
||||
|
||||
func TestProviderDiagnosticsDoNotExposeRawErrors(t *testing.T) {
|
||||
s := NewPaymentService(paymentbiz.NewPaymentUsecase(diagnosticRepo{}, nil, nil, nil, nil, nil))
|
||||
result, err := s.TestProvider(context.Background(), "alipay")
|
||||
if err != paymentbiz.ErrPaymentTestFailed {
|
||||
t.Fatalf("unsafe diagnostic error: %v", err)
|
||||
}
|
||||
if result == nil || len(result.Stages) != 2 || result.Stages[0].Message != "配置已检查" || result.Stages[1].Message != "该步骤失败,请检查配置和服务端日志" {
|
||||
t.Fatalf("unexpected diagnostic response: %+v", result)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user