diff --git a/controllers/common/wechat_oauth.go b/controllers/common/wechat_oauth.go index 12b1aec..c2aa398 100644 --- a/controllers/common/wechat_oauth.go +++ b/controllers/common/wechat_oauth.go @@ -78,14 +78,6 @@ func (t *WeChatOauthCtl) CallbackOrder() { logger.Error(fmt.Sprintf("出现错误: %v", err)) return } - err = pay_service.HandleSuccess(&pay_service.OrderDelayQueueParam{ - Order: order, - }) - - if err != nil { - logger.Error(fmt.Sprintf("出现错误: %v", err)) - return - } param := new(CallbackParam) param.ReturnCode = CDATA{Text: "SUCCESS"} diff --git a/services/pay/order.go b/services/pay/order.go index 437954c..af9d790 100644 --- a/services/pay/order.go +++ b/services/pay/order.go @@ -11,6 +11,7 @@ import ( "hudongzhuanjia/models" "hudongzhuanjia/utils" "io" + "io/ioutil" "math" "strconv" "time" @@ -264,15 +265,20 @@ type NotifyRequest struct { func NotifyOrder(w io.Reader) (order *models.UserOrder, err error) { var exist bool - res := new(NotifyRequest) - err = xml.NewDecoder(w).Decode(res) + res := NotifyRequest{} + body, err := ioutil.ReadAll(w) if err != nil { - err = fmt.Errorf("xml.NewDecoder.Decode:%w", err) + err = fmt.Errorf("body read all error:%+v", err) + return nil, err + } + err = xml.Unmarshal(body, &res) + if err != nil { + err = fmt.Errorf("xml unmarsal error:%+v", err) return } if res.ReturnCode != CODE_SUCCESS { - return nil, fmt.Errorf("network error, retrun_code: %v and return_msg: %v", res.ReturnCode, res.ReturnMsg) + return nil, fmt.Errorf("network error, retrun_code: %+v and return_msg: %+v", res.ReturnCode, res.ReturnMsg) } if res.ResultCode == CODE_SUCCESS && res.TradeType == CODE_TRADE_SUCCESS { @@ -286,13 +292,20 @@ func NotifyOrder(w io.Reader) (order *models.UserOrder, err error) { } exist, err = userOrder.GetByOutTradeNo(res.OutTradeNo) if err == nil || !exist { - err = fmt.Errorf("network error, retrun_code: %v and return_msg: %v", res.ReturnCode, res.ReturnMsg) + err = fmt.Errorf("user order get by out_trade_no: %+v, error: %+v, exist: %+v", res.OutTradeNo, err, exist) return } + err = HandleSuccess(&OrderDelayQueueParam{ + Order: userOrder, + }) + if err != nil { + logger.Error(fmt.Sprintf("handle success: %v", err)) + return + } return userOrder, nil } else { - err = fmt.Errorf("trade error, err_code: %v and err_code_des: %v", res.ErrCode, res.ErrCodeDes) + err = fmt.Errorf("trade error, err_code: %+v and err_code_des: %+v", res.ErrCode, res.ErrCodeDes) return } }