package ebaiapi import ( "errors" "fmt" "net/http" "git.rosy.net.cn/baseapi" "git.rosy.net.cn/baseapi/utils" ) type CallbackResponse ResponseResult type CallbackMsg struct { Cmd string TimeStamp int64 Body map[string]interface{} } func Err2CallbackResponse(err error, data interface{}) *CallbackResponse { if err == nil { return &CallbackResponse{ Error: "success", ErrNo: 0, Data: data, } } return &CallbackResponse{ Error: fmt.Sprintf("error:%v, data:%v", err, data), ErrNo: -1, Data: data, } } func (a *API) unmarshalData(data []byte, msg interface{}) (callbackResponse *CallbackResponse) { err := utils.UnmarshalUseNumber(data, msg) if err != nil { return Err2CallbackResponse(err, nil) } return nil } func (a *API) CheckCallbackValidation(request *http.Request) (callbackResponse *CallbackResponse) { sign := a.signParams(request.PostForm) if sign != request.FormValue(signKey) { msg := fmt.Sprintf("Signature is not ok, mine:%v, get:%v", sign, request.FormValue(signKey)) baseapi.SugarLogger.Info(msg) return Err2CallbackResponse(errors.New(msg), nil) } return nil } func (a *API) GetCallbackMsg(request *http.Request) (msg *CallbackMsg, callbackResponse *CallbackResponse) { request.ParseForm() if callbackResponse = a.CheckCallbackValidation(request); callbackResponse != nil { return nil, callbackResponse } msg = new(CallbackMsg) if callbackResponse = a.unmarshalData([]byte(request.FormValue("body")), &msg.Body); callbackResponse != nil { return nil, callbackResponse } msg.Cmd = request.FormValue("cmd") msg.TimeStamp = utils.MustInterface2Int64(request.FormValue("timestamp")) return msg, nil }