优化结构
This commit is contained in:
@@ -5,10 +5,9 @@ import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"kra/internal/biz/system"
|
||||
"strings"
|
||||
|
||||
"kra/internal/biz"
|
||||
|
||||
"github.com/go-pay/gopay"
|
||||
"github.com/go-pay/gopay/douyin"
|
||||
)
|
||||
@@ -35,7 +34,7 @@ func (a *douyinAdapter) client(c map[string]any) (*douyin.Client, error) {
|
||||
return client, nil
|
||||
}
|
||||
|
||||
func (a *douyinAdapter) Create(ctx context.Context, req *biz.PaymentRequest, c map[string]any) (*biz.PaymentResult, error) {
|
||||
func (a *douyinAdapter) Create(ctx context.Context, req *system.PaymentRequest, c map[string]any) (*system.PaymentResult, error) {
|
||||
if req == nil {
|
||||
return nil, errors.New("抖音支付下单请求为空")
|
||||
}
|
||||
@@ -78,7 +77,7 @@ func (a *douyinAdapter) Create(ctx context.Context, req *biz.PaymentRequest, c m
|
||||
return nil, errors.New("抖音支付 H5 下单响应缺少 h5_url")
|
||||
}
|
||||
payload, _ := json.Marshal(rsp.Response)
|
||||
return &biz.PaymentResult{Provider: biz.PaymentDouyin, Status: "client_pending", TradeNo: req.TradeNo, Payload: payload}, nil
|
||||
return &system.PaymentResult{Provider: system.PaymentDouyin, Status: "client_pending", TradeNo: req.TradeNo, Payload: payload}, nil
|
||||
case "native":
|
||||
rsp, callErr := client.NativeOrder(ctx, bm)
|
||||
if callErr != nil {
|
||||
@@ -91,7 +90,7 @@ func (a *douyinAdapter) Create(ctx context.Context, req *biz.PaymentRequest, c m
|
||||
return nil, errors.New("抖音支付 Native 下单响应缺少 code_url")
|
||||
}
|
||||
payload, _ := json.Marshal(rsp.Response)
|
||||
return &biz.PaymentResult{Provider: biz.PaymentDouyin, Status: "client_pending", TradeNo: req.TradeNo, Payload: payload}, nil
|
||||
return &system.PaymentResult{Provider: system.PaymentDouyin, Status: "client_pending", TradeNo: req.TradeNo, Payload: payload}, nil
|
||||
case "jsapi":
|
||||
rsp, callErr := client.JsapiOrder(ctx, bm)
|
||||
if callErr != nil {
|
||||
@@ -126,7 +125,7 @@ func douyinCreateMethod(extra, config map[string]any) (string, error) {
|
||||
}
|
||||
}
|
||||
|
||||
func douyinPrepayResult(client *douyin.Client, appID, tradeNo, prepayID string, app bool) (*biz.PaymentResult, error) {
|
||||
func douyinPrepayResult(client *douyin.Client, appID, tradeNo, prepayID string, app bool) (*system.PaymentResult, error) {
|
||||
if client == nil || strings.TrimSpace(prepayID) == "" {
|
||||
return nil, errors.New("抖音支付下单响应缺少 prepay_id")
|
||||
}
|
||||
@@ -142,15 +141,15 @@ func douyinPrepayResult(client *douyin.Client, appID, tradeNo, prepayID string,
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("生成抖音支付客户端调起参数: %w", err)
|
||||
}
|
||||
return &biz.PaymentResult{
|
||||
Provider: biz.PaymentDouyin,
|
||||
return &system.PaymentResult{
|
||||
Provider: system.PaymentDouyin,
|
||||
Status: "client_pending",
|
||||
TradeNo: tradeNo,
|
||||
Payload: mustJSON(params),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (a *douyinAdapter) Query(ctx context.Context, tradeNo string, c map[string]any) (*biz.PaymentResult, error) {
|
||||
func (a *douyinAdapter) Query(ctx context.Context, tradeNo string, c map[string]any) (*system.PaymentResult, error) {
|
||||
tradeNo = strings.TrimSpace(tradeNo)
|
||||
if tradeNo == "" {
|
||||
return nil, errors.New("抖音支付查单缺少 out_trade_no")
|
||||
@@ -178,7 +177,7 @@ func (a *douyinAdapter) Query(ctx context.Context, tradeNo string, c map[string]
|
||||
payload = append([]byte(nil), signedBody...)
|
||||
}
|
||||
}
|
||||
result := &biz.PaymentResult{Provider: biz.PaymentDouyin, Status: normalizeDouyinState(order.TradeState), TradeNo: order.OutTradeNo, ProviderTradeNo: order.TransactionId, Payload: payload}
|
||||
result := &system.PaymentResult{Provider: system.PaymentDouyin, Status: normalizeDouyinState(order.TradeState), TradeNo: order.OutTradeNo, ProviderTradeNo: order.TransactionId, Payload: payload}
|
||||
if result.TradeNo == "" {
|
||||
result.TradeNo = tradeNo
|
||||
} else if result.TradeNo != tradeNo {
|
||||
@@ -190,7 +189,7 @@ func (a *douyinAdapter) Query(ctx context.Context, tradeNo string, c map[string]
|
||||
return result, nil
|
||||
}
|
||||
|
||||
func (a *douyinAdapter) Refund(ctx context.Context, req *biz.PaymentRefundRequest, c map[string]any) (*biz.PaymentResult, error) {
|
||||
func (a *douyinAdapter) Refund(ctx context.Context, req *system.PaymentRefundRequest, c map[string]any) (*system.PaymentResult, error) {
|
||||
if req == nil {
|
||||
return nil, errors.New("抖音支付退款请求为空")
|
||||
}
|
||||
@@ -227,7 +226,7 @@ func (a *douyinAdapter) Refund(ctx context.Context, req *biz.PaymentRefundReques
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
result := &biz.PaymentResult{Provider: biz.PaymentDouyin, Status: normalizeRefundState(r.Status), TradeNo: tradeNo, ProviderTradeNo: refundID, Payload: mustJSON(r)}
|
||||
result := &system.PaymentResult{Provider: system.PaymentDouyin, Status: normalizeRefundState(r.Status), TradeNo: tradeNo, ProviderTradeNo: refundID, Payload: mustJSON(r)}
|
||||
if r.Amount == nil {
|
||||
return nil, errors.New("抖音支付退款响应缺少金额")
|
||||
}
|
||||
@@ -278,7 +277,7 @@ func validateDouyinRefundIdentity(refund *douyin.Refund, tradeNo, refundNo strin
|
||||
return refundID, nil
|
||||
}
|
||||
|
||||
func (a *douyinAdapter) Callback(ctx context.Context, callback *biz.PaymentCallback, c map[string]any) (*biz.PaymentResult, error) {
|
||||
func (a *douyinAdapter) Callback(ctx context.Context, callback *system.PaymentCallback, c map[string]any) (*system.PaymentResult, error) {
|
||||
if callback == nil {
|
||||
return nil, errors.New("抖音支付回调为空")
|
||||
}
|
||||
@@ -317,7 +316,7 @@ func (a *douyinAdapter) Callback(ctx context.Context, callback *biz.PaymentCallb
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
result := &biz.PaymentResult{Provider: biz.PaymentDouyin, Status: normalizeDouyinState(pay.TradeState), TradeNo: pay.OutTradeNo, ProviderTradeNo: pay.TransactionId, Payload: append([]byte(nil), plain...), EventID: notify.Id}
|
||||
result := &system.PaymentResult{Provider: system.PaymentDouyin, Status: normalizeDouyinState(pay.TradeState), TradeNo: pay.OutTradeNo, ProviderTradeNo: pay.TransactionId, Payload: append([]byte(nil), plain...), EventID: notify.Id}
|
||||
if err = populateDouyinPaymentAmount(result, pay.Amount, plain); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -339,7 +338,7 @@ func (a *douyinAdapter) Callback(ctx context.Context, callback *biz.PaymentCallb
|
||||
} else if strings.EqualFold(refund.RefundStatus, douyin.RefundStatusClosed) || strings.EqualFold(refund.RefundStatus, douyin.RefundStatusAbnormal) {
|
||||
status = "failed"
|
||||
}
|
||||
result := &biz.PaymentResult{Provider: biz.PaymentDouyin, Status: status, TradeNo: refund.OutTradeNo, ProviderTradeNo: refund.RefundId, Payload: mustJSON(refund), EventID: notify.Id}
|
||||
result := &system.PaymentResult{Provider: system.PaymentDouyin, Status: status, TradeNo: refund.OutTradeNo, ProviderTradeNo: refund.RefundId, Payload: mustJSON(refund), EventID: notify.Id}
|
||||
if refund.Amount != nil {
|
||||
result.Amount = int64(refund.Amount.Refund)
|
||||
result.Currency = strings.ToUpper(firstAny(c, "currency"))
|
||||
@@ -366,7 +365,7 @@ func validateDouyinMerchantIdentity(merchantID, appID string, c map[string]any,
|
||||
return nil
|
||||
}
|
||||
|
||||
func populateDouyinPaymentAmount(result *biz.PaymentResult, amount *douyin.AmountInfo, raw []byte) error {
|
||||
func populateDouyinPaymentAmount(result *system.PaymentResult, amount *douyin.AmountInfo, raw []byte) error {
|
||||
if result == nil || amount == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user