feat(支付): 添加支付金额转换日志并优化代码结构
All checks were successful
Build docker and publish / build (20.15.1) (push) Successful in 7m17s

为支付宝、Stripe、Epay和CryptoSaaS支付逻辑添加金额转换的日志记录
将支付请求参数提取为变量并添加日志记录
优化代码结构,提高可读性和可维护性
This commit is contained in:
shanshanzhong 2025-12-02 18:30:16 -08:00
parent 6fba1d683a
commit d1a620f939
2 changed files with 72 additions and 23 deletions

View File

@ -185,13 +185,20 @@ func (l *PurchaseCheckoutLogic) alipayF2fPayment(pay *payment.Payment, info *ord
l.Errorw("[PurchaseCheckout] queryExchangeRate error", logger.Field("error", err.Error()))
return "", errors.Wrapf(xerr.NewErrCode(xerr.ERROR), "queryExchangeRate error: %s", err.Error())
}
convertAmount := int64(math.Round(amount * 100)) // Convert to cents for API
convertAmount := int64(math.Round(amount * 100))
l.Infow("alipay amount",
logger.Field("src_cents", info.Amount),
logger.Field("decimal", amount),
logger.Field("cents", convertAmount),
)
// Create pre-payment trade and generate QR code
QRCode, err := client.PreCreateTrade(l.ctx, alipay.Order{
o := alipay.Order{
OrderNo: info.OrderNo,
Amount: convertAmount,
})
}
l.Infow("alipay request", logger.Field("order", o))
QRCode, err := client.PreCreateTrade(l.ctx, o)
if err != nil {
l.Errorw("[PurchaseCheckout] PreCreateTrade error", logger.Field("error", err.Error()))
return "", errors.Wrapf(xerr.NewErrCode(xerr.ERROR), "PreCreateTrade error: %s", err.Error())
@ -223,19 +230,24 @@ func (l *PurchaseCheckoutLogic) stripePayment(config string, info *order.Order,
l.Errorw("[PurchaseCheckout] queryExchangeRate error", logger.Field("error", err.Error()))
return nil, errors.Wrapf(xerr.NewErrCode(xerr.ERROR), "queryExchangeRate error: %s", err.Error())
}
convertAmount := int64(math.Round(amount * 100)) // Convert to cents for Stripe API
convertAmount := int64(math.Round(amount * 100))
l.Infow("stripe amount",
logger.Field("src_cents", info.Amount),
logger.Field("decimal", amount),
logger.Field("cents", convertAmount),
)
// Create Stripe payment sheet for client-side processing
result, err := client.CreatePaymentSheet(&stripe.Order{
ord := &stripe.Order{
OrderNo: info.OrderNo,
Subscribe: strconv.FormatInt(info.SubscribeId, 10),
Amount: convertAmount,
Currency: "cny",
Payment: stripeConfig.Payment,
},
&stripe.User{
Email: identifier,
})
}
usr := &stripe.User{Email: identifier}
l.Infow("stripe request", logger.Field("order", ord), logger.Field("user", usr))
result, err := client.CreatePaymentSheet(ord, usr)
if err != nil {
l.Errorw("[PurchaseCheckout] CreatePaymentSheet error", logger.Field("error", err.Error()))
return nil, errors.Wrapf(xerr.NewErrCode(xerr.ERROR), "CreatePaymentSheet error: %s", err.Error())
@ -276,6 +288,10 @@ func (l *PurchaseCheckoutLogic) epayPayment(config *payment.Payment, info *order
return "", err
}
amount = math.Round(amount*100) / 100
l.Infow("epay amount",
logger.Field("src_cents", info.Amount),
logger.Field("decimal", amount),
)
// Build notification URL for payment status callbacks
notifyUrl := ""
@ -290,14 +306,16 @@ func (l *PurchaseCheckoutLogic) epayPayment(config *payment.Payment, info *order
}
// Create payment URL for user redirection
url := client.CreatePayUrl(epay.Order{
ord := epay.Order{
Name: l.svcCtx.Config.Site.SiteName,
Amount: amount,
OrderNo: info.OrderNo,
SignType: "MD5",
NotifyUrl: notifyUrl,
ReturnUrl: returnUrl,
})
}
l.Infow("epay request", logger.Field("order", ord))
url := client.CreatePayUrl(ord)
return url, nil
}
@ -319,6 +337,10 @@ func (l *PurchaseCheckoutLogic) CryptoSaaSPayment(config *payment.Payment, info
return "", err
}
amount = math.Round(amount*100) / 100
l.Infow("crypto amount",
logger.Field("src_cents", info.Amount),
logger.Field("decimal", amount),
)
// Build notification URL for payment status callbacks
notifyUrl := ""
@ -333,14 +355,16 @@ func (l *PurchaseCheckoutLogic) CryptoSaaSPayment(config *payment.Payment, info
}
// Create payment URL for user redirection
url := client.CreatePayUrl(epay.Order{
ord := epay.Order{
Name: l.svcCtx.Config.Site.SiteName,
Amount: amount,
OrderNo: info.OrderNo,
SignType: "MD5",
NotifyUrl: notifyUrl,
ReturnUrl: returnUrl,
})
}
l.Infow("crypto request", logger.Field("order", ord))
url := client.CreatePayUrl(ord)
return url, nil
}

View File

@ -0,0 +1,25 @@
package main
import (
"fmt"
"math"
)
func main() {
price := int64(300 * 7)
discountPercent := 95.19
discount := discountPercent / 100.0
amount := int64(math.Round(float64(price) * discount))
fmt.Printf("price_cents=%d discount=%.4f amount_cents=%d amount=%.2f\n", price, discount, amount, float64(amount)/100.0)
couponPercent := 10.0
coupon := int64(math.Round(float64(amount) * (couponPercent / 100.0)))
amount -= coupon
fmt.Printf("coupon_percent=%.2f coupon_cents=%d amount_cents=%d amount=%.2f\n", couponPercent, coupon, amount, float64(amount)/100.0)
feePercent := 5.0
fee := int64(math.Round(float64(amount) * (feePercent / 100.0)))
total := amount + fee
fmt.Printf("fee_percent=%.2f fee_cents=%d total_cents=%d total=%.2f\n", feePercent, fee, total, float64(total)/100.0)
}