支付相关

This commit is contained in:
Yvan
2026-08-20 12:21:08 +08:00
parent e54cbd1207
commit b88c220e20
42 changed files with 6173 additions and 274 deletions
+10 -22
View File
@@ -2,11 +2,11 @@ package handler
import (
"io"
"kra/internal/biz"
"net/http"
"kra/internal/server/httpx"
"kra/internal/service"
"kra/internal/service/dto"
"net/http"
"github.com/gin-gonic/gin"
)
@@ -28,7 +28,7 @@ func (h *Payment) SaveConfig(c *gin.Context) {
httpx.Fail(c, err.Error())
return
}
if err := h.service.SaveConfig(c.Request.Context(), &biz.PaymentConfig{Provider: req.Provider, Enabled: req.Enabled, Values: req.Config}); err != nil {
if err := h.service.SaveConfig(c.Request.Context(), &req); err != nil {
httpx.Fail(c, err.Error())
return
}
@@ -54,12 +54,7 @@ func (h *Payment) Create(c *gin.Context) {
return
}
req.ClientIP = c.ClientIP()
result, err := h.service.Create(c.Request.Context(), &biz.PaymentRequest{
Provider: req.Provider, TradeNo: req.TradeNo, Subject: req.Subject,
Amount: req.Amount, OriginalAmount: req.OriginalAmount, Currency: req.Currency, NotifyURL: req.NotifyURL,
ReturnURL: req.ReturnURL, ClientIP: req.ClientIP, Extra: req.Extra,
BusinessType: req.BusinessType, BusinessID: req.BusinessID, PaymentMode: req.PaymentMode,
})
result, err := h.service.Create(c.Request.Context(), &req)
if err != nil {
httpx.Fail(c, err.Error())
return
@@ -72,7 +67,7 @@ func (h *Payment) Query(c *gin.Context) {
httpx.Fail(c, err.Error())
return
}
result, err := h.service.Query(c.Request.Context(), req.Provider, req.TradeNo)
result, err := h.service.Query(c.Request.Context(), &req)
if err != nil {
httpx.Fail(c, err.Error())
return
@@ -85,7 +80,7 @@ func (h *Payment) Refund(c *gin.Context) {
httpx.Fail(c, err.Error())
return
}
result, err := h.service.Refund(c.Request.Context(), req.Provider, req.TradeNo, req.Amount)
result, err := h.service.Refund(c.Request.Context(), &req)
if err != nil {
httpx.Fail(c, err.Error())
return
@@ -96,7 +91,7 @@ func (h *Payment) Callback(c *gin.Context) {
c.Request.Body = http.MaxBytesReader(c.Writer, c.Request.Body, 8<<20)
raw, err := io.ReadAll(c.Request.Body)
if err != nil {
writePaymentCallbackAck(c, biz.DefaultPaymentCallbackAck(c.Param("provider"), false))
writePaymentCallbackAck(c, service.DefaultPaymentCallbackAck(c.Param("provider"), false))
return
}
headers := map[string]string{}
@@ -111,19 +106,12 @@ func (h *Payment) Callback(c *gin.Context) {
query[k] = v[0]
}
}
result, err := h.service.Callback(c.Request.Context(), &biz.PaymentCallback{Provider: c.Param("provider"), Headers: headers, Body: raw, Query: query})
if err != nil {
writePaymentCallbackAck(c, biz.CallbackFailure(err, biz.DefaultPaymentCallbackAck(c.Param("provider"), false)))
return
}
ack := biz.DefaultPaymentCallbackAck(c.Param("provider"), true)
if result != nil && result.SuccessAck.StatusCode != 0 {
ack = result.SuccessAck
}
ack, err := h.service.Callback(c.Request.Context(), &dto.PaymentCallbackRequest{Provider: c.Param("provider"), Headers: headers, Body: raw, Query: query})
writePaymentCallbackAck(c, ack)
_ = err
}
func writePaymentCallbackAck(c *gin.Context, ack biz.PaymentCallbackAck) {
func writePaymentCallbackAck(c *gin.Context, ack dto.PaymentCallbackAck) {
if ack.StatusCode == 0 {
ack.StatusCode = http.StatusInternalServerError
}
+2 -2
View File
@@ -5,14 +5,14 @@ import (
"testing"
"github.com/gin-gonic/gin"
"kra/internal/biz"
"kra/internal/service/dto"
)
func TestWritePaymentCallbackAckDoesNotExposeError(t *testing.T) {
gin.SetMode(gin.TestMode)
recorder := httptest.NewRecorder()
context, _ := gin.CreateTestContext(recorder)
writePaymentCallbackAck(context, biz.PaymentCallbackAck{
writePaymentCallbackAck(context, dto.PaymentCallbackAck{
StatusCode: 500,
ContentType: "text/plain; charset=utf-8",
Body: []byte("failure"),