This commit is contained in:
2024-12-25 11:59:33 +08:00
parent a5fa833937
commit 36dd01056e
35 changed files with 2328 additions and 244 deletions

View File

@@ -16,6 +16,7 @@ import (
wxutils "github.com/wechatpay-apiv3/wechatpay-go/utils"
"gorm.io/gorm"
"log"
"math"
"net/http"
"qnc-server/config"
"qnc-server/db"
@@ -44,16 +45,17 @@ func InitPay(group *gin.RouterGroup) {
payPublicGroup.GET("refund_details/:id", p.RefundDetailsHTML) // 内部退款订单详情页面
payPublicGroup.POST("refund/:id", p.Refund) // 内部退款按钮
payPublicGroup.POST("refund_callback/:platform", p.RefundCallback) // 微信退款回调
payPublicGroup.POST("ali_callback", p.AlipayCallback) // 阿里退款回调
payPublicGroup.POST("ali_callback", p.AlipayCallback) // 阿里回调
payPublicGroup.POST("complaint_callback/:platform", p.WxPayComplaintCallback)
}
{
payPrivateGroup := group.Group("pay")
payPrivateGroup.Use(JWTAuth())
payPrivateGroup.POST("prepay", p.Prepay) // 创建微信支付订单
payPrivateGroup.GET("order_list", p.GetOrderList) // 获取订单列表
payPrivateGroup.POST("ali_prepay", p.AliPrepay) // 创建支付宝支付订单
payPrivateGroup.GET("get_query_cache", p.GetQueryCache) // 获取网页的查询缓存
payPrivateGroup.POST("prepay", p.Prepay) // 创建微信支付订单
payPrivateGroup.GET("order_list", p.GetOrderList) // 获取订单列表
payPrivateGroup.GET("promotion_list", p.GetPromotionList) // 获取订单列表
payPrivateGroup.POST("ali_prepay", p.AliPrepay) // 创建支付宝支付订单
payPrivateGroup.GET("get_query_cache", p.GetQueryCache) // 获取网页的查询缓存
}
}
func (p *Pay) GetOrderList(c *gin.Context) {
@@ -81,6 +83,55 @@ func (p *Pay) GetOrderList(c *gin.Context) {
}
response.OkWithData(list, c)
}
func (p *Pay) GetPromotionList(c *gin.Context) {
userId := utils.GetUserID(c)
user, err := userService.GetUserByUserid(userId)
if err != nil {
log.Println("get user info error:", err)
response.FailWithMessage("系统开小差啦, 请稍后再试~", c)
return
}
if user.Promotion == "" {
response.FailWithMessage("您不是代理推广人哦", c)
return
}
// 从查询参数中获取分页参数
pageSizeStr := c.DefaultQuery("page_size", "10")
pageNumStr := c.DefaultQuery("page_num", "1")
pageSize, err := strconv.Atoi(pageSizeStr)
if err != nil {
response.FailWithMessage(err.Error(), c)
return
}
pageNum, err := strconv.Atoi(pageNumStr)
if err != nil {
response.FailWithMessage(err.Error(), c)
return
}
list, err := orderService.GetListByPromotion(pageSize, pageNum, user.Promotion)
if err != nil {
log.Println("get order list error:", err)
response.FailWithMessage(err.Error(), c)
return
}
// 获取总单数和总金额
totalCount, totalAmount, err := orderService.GetSummaryByPromotion(user.Promotion)
if err != nil {
log.Println("get order summary error:", err)
response.FailWithMessage(err.Error(), c)
return
}
// 计算总金额的 30%,并保留两位小数
totalAmount30 := math.Round((totalAmount/30.0)*100) / 100
response.OkWithData(gin.H{
"list": list,
"points": 30,
"total_count": totalCount,
"total_amount": totalAmount30, // 总金额的30%
}, c)
}
func (p *Pay) Prepay(c *gin.Context) {
Claims, err := utils.GetClaims(c)
if err != nil {
@@ -102,6 +153,9 @@ func (p *Pay) Prepay(c *gin.Context) {
appid string
mchID string
)
log.Printf("Claims, %+v", Claims)
log.Printf("reqBody, %+v", reqBody)
// 获取用户ip
clientIP := c.ClientIP()
switch reqBody.Platform {
@@ -116,6 +170,10 @@ func (p *Pay) Prepay(c *gin.Context) {
case model.PlatformH5:
appid = config.ConfigData.System.WxH5AppId
mchID = config.ConfigData.WxPay.MchH5ID
case model.PlatformTYDATA:
openid = Claims.AuthIdentifiers.OpenID
appid = config.ConfigData.System.WxTyDataAppId
mchID = config.ConfigData.WxPay.MchH5ID
default:
response.FailWithMessage("ProductName Must be wx or mp-h5 or h5", c)
return
@@ -154,7 +212,14 @@ func (p *Pay) Prepay(c *gin.Context) {
return
}
} else if reqBody.Platform == model.PlatformMPH5 {
resp, err = orderService.WechatJSAPIPrepay(appid, mchID, product, outTradeNo, amount, model.PlatformMPH5, openid, global.GlobalData.PayH5Client)
resp, err = orderService.WechatJSAPIPrepay(appid, mchID, product, outTradeNo, amount, openid, model.PlatformMPH5, global.GlobalData.PayH5Client)
if err != nil {
log.Printf("【创建微信支付订单】创建支付失败,系统错误: %v", err)
response.FailWithMessage("创建支付失败,系统错误", c)
return
}
} else if reqBody.Platform == model.PlatformTYDATA {
resp, err = orderService.WechatJSAPIPrepay(appid, mchID, product, outTradeNo, amount, openid, model.PlatformTYDATA, global.GlobalData.PayH5Client)
if err != nil {
log.Printf("【创建微信支付订单】创建支付失败,系统错误: %v", err)
response.FailWithMessage("创建支付失败,系统错误", c)
@@ -178,6 +243,7 @@ func (p *Pay) Prepay(c *gin.Context) {
Product: &product,
Platform: reqBody.Platform,
PaymentMethod: model.PaymentMethod_WECHAT,
Promotion: reqBody.Promotion,
}
err = db.DB.Create(&payOrder).Error
if err != nil {
@@ -201,7 +267,7 @@ func (p *Pay) Callback(c *gin.Context) {
mchCertificateSerialNumber = config.ConfigData.WxPay.MchCertificateSerialNumber
mchAPIv3Key = config.ConfigData.WxPay.MchAPIv3Key
privateKeyPath = "merchant/mp/apiclient_key.pem"
case model.PlatformH5, model.PlatformMPH5:
case model.PlatformH5, model.PlatformMPH5, model.PlatformTYDATA:
mchID = config.ConfigData.WxPay.MchH5ID
mchCertificateSerialNumber = config.ConfigData.WxPay.MchH5CertificateSerialNumber
mchAPIv3Key = config.ConfigData.WxPay.MchH5APIv3Key
@@ -327,7 +393,7 @@ func (p *Pay) Refund(c *gin.Context) {
switch order.Platform {
case model.PlatformMPWEIXIN:
payClient = global.GlobalData.PayClient
case model.PlatformH5, model.PlatformMPH5:
case model.PlatformH5, model.PlatformMPH5, model.PlatformTYDATA:
payClient = global.GlobalData.PayH5Client
}
outRefundNo := utils.GenerateOrderRefundNumber()
@@ -373,7 +439,7 @@ func (p *Pay) RefundCallback(c *gin.Context) {
mchCertificateSerialNumber = config.ConfigData.WxPay.MchCertificateSerialNumber
mchAPIv3Key = config.ConfigData.WxPay.MchAPIv3Key
privateKeyPath = "merchant/mp/apiclient_key.pem"
case model.PlatformH5, model.PlatformMPH5:
case model.PlatformH5, model.PlatformMPH5, model.PlatformTYDATA:
mchID = config.ConfigData.WxPay.MchH5ID
mchCertificateSerialNumber = config.ConfigData.WxPay.MchH5CertificateSerialNumber
mchAPIv3Key = config.ConfigData.WxPay.MchH5APIv3Key
@@ -485,7 +551,7 @@ func (p *Pay) AliPrepay(c *gin.Context) {
pay.Subject = product.ProductName // 订单标题
pay.OutTradeNo = outTradeNo // 生成的唯一订单号
pay.TotalAmount = amount // 支付金额,单位元
pay.ProductCode = "QUICK_WAP_PAY" // WAP支付的产品代码
pay.ProductCode = "QUICK_WAP_PAY" // WAP支付的产品代码w
payURL, err := global.GlobalData.AliPayClient.TradeWapPay(pay)
if err != nil {
@@ -592,7 +658,7 @@ func (p *Pay) WxPayComplaintCallback(c *gin.Context) {
mchCertificateSerialNumber = config.ConfigData.WxPay.MchCertificateSerialNumber
mchAPIv3Key = config.ConfigData.WxPay.MchAPIv3Key
privateKeyPath = "merchant/mp/apiclient_key.pem"
case model.PlatformH5, model.PlatformMPH5:
case model.PlatformH5, model.PlatformMPH5, model.PlatformTYDATA:
platformString = "公众号"
mchID = config.ConfigData.WxPay.MchH5ID
mchCertificateSerialNumber = config.ConfigData.WxPay.MchH5CertificateSerialNumber