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)
|
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 {
|
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
|
ExternalOrderNo string `json:"external_order_no"` // 外部平台流水号,例如:1909274381102424065
|
||||||
PhoneNumber string `json:"phone_number" binding:"required"` // 手机号,例如:13590011234
|
PhoneNumber string `json:"phone_number" binding:"required"` // 手机号,例如:13590011234
|
||||||
Province string `json:"province"` // 省份,例如:广东
|
Province string `json:"province"` // 省份,例如:广东
|
||||||
|
@ -59,6 +59,11 @@ type MusicFeedbackResp struct {
|
||||||
ReturnDesc string `json:"return_desc"` // 返回描述
|
ReturnDesc string `json:"return_desc"` // 返回描述
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type CommonFeedbackResp struct {
|
||||||
|
ReturnCode int `json:"return_code"` // 返回代码
|
||||||
|
ReturnDesc string `json:"return_desc"` // 返回描述
|
||||||
|
}
|
||||||
|
|
||||||
func ParseMsg(msg string) (*MsgDetails, error) {
|
func ParseMsg(msg string) (*MsgDetails, error) {
|
||||||
parts := strings.Split(msg, "@")
|
parts := strings.Split(msg, "@")
|
||||||
if len(parts) < 6 {
|
if len(parts) < 6 {
|
||||||
|
|
|
@ -42,6 +42,8 @@ func registerMiGuControlManageUnAuthRouter(v1 *gin.RouterGroup) {
|
||||||
|
|
||||||
apiMusic.POST("login", apiMiGu.MusicLogin) // 咪咕音乐登陆
|
apiMusic.POST("login", apiMiGu.MusicLogin) // 咪咕音乐登陆
|
||||||
apiMusic.POST("query_order", apiMiGu.MusicQueryOrder) // 咪咕音乐查询订单
|
apiMusic.POST("query_order", apiMiGu.MusicQueryOrder) // 咪咕音乐查询订单
|
||||||
|
|
||||||
|
apiMusic.POST("common/feedback", apiMiGu.CommonFeedback) // 通用订单同步接口(支持不同产品不同渠道)
|
||||||
}
|
}
|
||||||
|
|
||||||
//api := v1.Group("/notice")
|
//api := v1.Group("/notice")
|
||||||
|
|
Loading…
Reference in New Issue
Block a user