重构支付接口,以动态支持多种产品类型,整合长短效套餐的购买支付逻辑;引入 decimal 类型的金额计算;
This commit is contained in:
@@ -2,13 +2,13 @@ package handlers
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/shopspring/decimal"
|
||||
"log/slog"
|
||||
"net/http"
|
||||
trade2 "platform/web/domains/trade"
|
||||
g "platform/web/globals"
|
||||
q "platform/web/queries"
|
||||
s "platform/web/services"
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
"github.com/gofiber/fiber/v2"
|
||||
@@ -53,7 +53,7 @@ func AlipayCallback(c *fiber.Ctx) error {
|
||||
case string(alipay.TradeStatusSuccess):
|
||||
|
||||
// 收集交易状态
|
||||
payment, err := strconv.ParseFloat(notification.TotalAmount, 64)
|
||||
payment, err := decimal.NewFromString(notification.TotalAmount)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -70,14 +70,14 @@ func AlipayCallback(c *fiber.Ctx) error {
|
||||
|
||||
// 余额充值
|
||||
case trade2.TypeRecharge:
|
||||
err := s.User.RechargeConfirm(c.Context(), notification.OutTradeNo, verified)
|
||||
err := s.User.RechargeConfirm(notification.OutTradeNo, verified)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// 购买产品
|
||||
case trade2.TypePurchase:
|
||||
err = s.Resource.CompleteResource(c.Context(), notification.OutTradeNo, verified)
|
||||
err = s.Resource.CompleteResource(notification.OutTradeNo, time.Now(), verified)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -89,13 +89,7 @@ func AlipayCallback(c *fiber.Ctx) error {
|
||||
|
||||
// 购买产品
|
||||
case trade2.TypePurchase:
|
||||
|
||||
cancelAt, err := time.Parse("2006-01-02 15:04:05", notification.GmtClose)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = s.Resource.CancelResource(c.Context(), notification.OutTradeNo, cancelAt, trade2.MethodAlipay)
|
||||
err = s.Resource.CancelResource(notification.OutTradeNo, time.Now(), true)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -163,7 +157,7 @@ func WechatPayCallback(c *fiber.Ctx) error {
|
||||
case "SUCCESS":
|
||||
|
||||
// 收集交易状态
|
||||
payment := float64(*content.Amount.PayerTotal) / 100
|
||||
payment := decimal.NewFromInt(*content.Amount.PayerTotal).Div(decimal.NewFromInt(100))
|
||||
paidAt, err := time.Parse(time.RFC3339, *content.SuccessTime)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -178,14 +172,14 @@ func WechatPayCallback(c *fiber.Ctx) error {
|
||||
|
||||
// 余额充值
|
||||
case trade.Type == int32(trade2.TypeRecharge):
|
||||
err := s.User.RechargeConfirm(c.Context(), *content.OutTradeNo, verified)
|
||||
err := s.User.RechargeConfirm(*content.OutTradeNo, verified)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// 购买产品
|
||||
case trade.Type == int32(trade2.TypePurchase):
|
||||
err = s.Resource.CompleteResource(c.Context(), *content.OutTradeNo, verified)
|
||||
err = s.Resource.CompleteResource(*content.OutTradeNo, time.Now(), verified)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user