1.新增通用订单同步接口;
This commit is contained in:
parent
88a0cb8fc3
commit
75887289f0
|
@ -613,3 +613,151 @@ func (e MiGuDeployService) MusicQueryOrder(c *gin.Context) {
|
|||
|
||||
app.MiGuOK(c, resp)
|
||||
}
|
||||
|
||||
// CommonFeedback 通用订单同步接口(支持不同产品不同渠道)
|
||||
// @Summary 通用订单同步接口
|
||||
// @Tags 2025-咪咕音乐-回调
|
||||
// @Produce json
|
||||
// @Accept json
|
||||
// @Param request body models.CallbackRequest true "通用订单同步接口"
|
||||
// @Success 200 {object} models.CommonFeedbackResp
|
||||
// @Router /api/v1/migu/music/common/feedback [post]
|
||||
func (e MiGuDeployService) CommonFeedback(c *gin.Context) {
|
||||
fmt.Println("CommonFeedback-start")
|
||||
logger.Info("CommonFeedback-start")
|
||||
|
||||
var resp models.CommonFeedbackResp
|
||||
resp.ReturnCode = 0
|
||||
// 读取 Body 参数 (JSON/Raw)
|
||||
bodyBytes, err := io.ReadAll(c.Request.Body)
|
||||
if err != nil {
|
||||
fmt.Println("Failed to read body:", err)
|
||||
logger.Error(err)
|
||||
resp.ReturnDesc = "参数错误,读取Body失败"
|
||||
app.MiGuOK(c, resp)
|
||||
return
|
||||
}
|
||||
|
||||
fmt.Println("Body Params:", string(bodyBytes))
|
||||
logger.Info("Body Params:", string(bodyBytes))
|
||||
|
||||
// 反序列化 JSON 为 Map
|
||||
var jsonData map[string]interface{}
|
||||
if err = json.Unmarshal(bodyBytes, &jsonData); err == nil {
|
||||
fmt.Println("JSON Params:", jsonData)
|
||||
} else {
|
||||
fmt.Println("Failed to unmarshal JSON:", err)
|
||||
}
|
||||
|
||||
req := &models.CallbackRequest{}
|
||||
if err = json.Unmarshal(bodyBytes, req); err != nil {
|
||||
logger.Errorf("CommonFeedback para err: %v", err)
|
||||
resp.ReturnDesc = "参数错误"
|
||||
app.MiGuOK(c, resp)
|
||||
return
|
||||
}
|
||||
|
||||
logger.Info("CommonFeedback req:", req)
|
||||
// 初始化数据库
|
||||
err = e.MakeContext(c).MakeOrm().Errors
|
||||
if err != nil {
|
||||
fmt.Println("CommonFeedback err:", err)
|
||||
e.Logger.Error(err)
|
||||
resp.ReturnDesc = "初始化失败"
|
||||
app.MiGuOK(c, resp)
|
||||
return
|
||||
}
|
||||
|
||||
// 判断渠道编号
|
||||
if !models.IsValidChannelEx(req.ChannelCode, e.Orm) {
|
||||
resp.ReturnDesc = "无效的渠道号"
|
||||
app.MiGuOK(c, resp)
|
||||
return
|
||||
}
|
||||
|
||||
channelInfo, err := models.GetChannelInfoByChannelCode(req.ChannelCode, e.Orm)
|
||||
if err != nil {
|
||||
fmt.Println("CommonFeedback GetChannelInfoByChannelCode err:", err)
|
||||
fmt.Println("CommonFeedback sub_channel_code is:", req.ChannelCode)
|
||||
logger.Errorf("CommonFeedback GetChannelInfoByChannelCode err, sub_channel_code is:", req.ChannelCode)
|
||||
}
|
||||
|
||||
// 记录数据库
|
||||
var sendLog models.MgTransactionLog
|
||||
sendLog.ProductID = int64(channelInfo.ProductID)
|
||||
sendLog.ChannelCode = req.ChannelCode
|
||||
sendLog.OutTradeNo = models.GetOrderSerial(e.Orm)
|
||||
sendLog.PhoneNumber = req.PhoneNumber
|
||||
sendLog.LinkId = req.ExternalOrderNo
|
||||
sendLog.ChannelTradeNo = req.ExternalOrderNo
|
||||
if req.ResCode != 1 {
|
||||
sendLog.Result = "999004"
|
||||
sendLog.VerificationCode = "999999"
|
||||
} else {
|
||||
sendLog.Result = "00000" // 跟咪咕钻石会员保持一致
|
||||
sendLog.VerificationCode = "666666"
|
||||
}
|
||||
if req.Province != "" && req.ResDesc != "" {
|
||||
sendLog.Reason = fmt.Sprintf("[%s]:%s", req.Province, req.ResDesc)
|
||||
} else if req.Province != "" {
|
||||
sendLog.Reason = fmt.Sprintf("[%s]", req.Province)
|
||||
} else if req.ResDesc != "" {
|
||||
sendLog.Reason = req.ResDesc
|
||||
} else {
|
||||
sendLog.Reason = ""
|
||||
}
|
||||
|
||||
err = e.Orm.Create(&sendLog).Error
|
||||
if err != nil {
|
||||
logger.Info("Create MgTransactionLog err:", err)
|
||||
|
||||
resp.ReturnDesc = err.Error()
|
||||
app.MiGuOK(c, resp)
|
||||
return
|
||||
}
|
||||
|
||||
if req.ResCode == 1 { // 成功消息
|
||||
var lastOrder models.MgOrder
|
||||
result := e.Orm.Model(&models.MgOrder{}).Where("phone_number = ? and product_id = ?", req.PhoneNumber, channelInfo.ProductID).
|
||||
Order("subscribe_time DESC").First(&lastOrder)
|
||||
|
||||
if errors.Is(result.Error, gorm.ErrRecordNotFound) {
|
||||
nowTime := time.Now()
|
||||
flag := true
|
||||
if lastOrder.ID != 0 {
|
||||
timeDiff := nowTime.Sub(lastOrder.CreatedAt)
|
||||
if timeDiff < 2*time.Minute {
|
||||
flag = false
|
||||
}
|
||||
}
|
||||
|
||||
if flag {
|
||||
// 插入新记录
|
||||
var orderInfo models.MgOrder
|
||||
orderInfo.ProductID = int64(channelInfo.ProductID)
|
||||
orderInfo.ChannelCode = req.ChannelCode
|
||||
orderInfo.OrderSerial = models.GetOrderSerial(e.Orm)
|
||||
orderInfo.SubscribeTime = &nowTime
|
||||
orderInfo.PhoneNumber = req.PhoneNumber
|
||||
orderInfo.SM4PhoneNumber, _ = tools.SM4Encrypt(models.SM4KEy, req.PhoneNumber)
|
||||
|
||||
if req.ExternalOrderNo == "" {
|
||||
req.ExternalOrderNo = orderInfo.OrderSerial
|
||||
}
|
||||
orderInfo.ChannelTradeNo = req.ExternalOrderNo
|
||||
orderInfo.ExternalOrderID = req.ExternalOrderNo
|
||||
orderInfo.State = models.SubscribeOK
|
||||
|
||||
if err = e.Orm.Create(&orderInfo).Error; err != nil {
|
||||
logger.Error(err)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fmt.Println("CommonFeedback-end")
|
||||
logger.Info("CommonFeedback-end")
|
||||
|
||||
resp.ReturnCode = 1
|
||||
app.MiGuOK(c, resp)
|
||||
}
|
||||
|
|
|
@ -28,7 +28,7 @@ const (
|
|||
)
|
||||
|
||||
type CallbackRequest struct {
|
||||
ChannelCode string `json:"channel_code" binding:"required"` // 渠道编码,例如:00211NV
|
||||
ChannelCode string `json:"channel_code" binding:"required"` // 渠道编码,例如:00211AI
|
||||
ExternalOrderNo string `json:"external_order_no"` // 外部平台流水号,例如:1909274381102424065
|
||||
PhoneNumber string `json:"phone_number" binding:"required"` // 手机号,例如:13590011234
|
||||
Province string `json:"province"` // 省份,例如:广东
|
||||
|
@ -59,6 +59,11 @@ type MusicFeedbackResp struct {
|
|||
ReturnDesc string `json:"return_desc"` // 返回描述
|
||||
}
|
||||
|
||||
type CommonFeedbackResp struct {
|
||||
ReturnCode int `json:"return_code"` // 返回代码
|
||||
ReturnDesc string `json:"return_desc"` // 返回描述
|
||||
}
|
||||
|
||||
func ParseMsg(msg string) (*MsgDetails, error) {
|
||||
parts := strings.Split(msg, "@")
|
||||
if len(parts) < 6 {
|
||||
|
|
|
@ -42,6 +42,8 @@ func registerMiGuControlManageUnAuthRouter(v1 *gin.RouterGroup) {
|
|||
|
||||
apiMusic.POST("login", apiMiGu.MusicLogin) // 咪咕音乐登陆
|
||||
apiMusic.POST("query_order", apiMiGu.MusicQueryOrder) // 咪咕音乐查询订单
|
||||
|
||||
apiMusic.POST("common/feedback", apiMiGu.CommonFeedback) // 通用订单同步接口(支持不同产品不同渠道)
|
||||
}
|
||||
|
||||
//api := v1.Group("/notice")
|
||||
|
|
Loading…
Reference in New Issue
Block a user