cc
This commit is contained in:
88
api/pay.go
88
api/pay.go
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user