Files
baseapi/platformapi/ebaiapi/callback.go
2018-09-27 17:53:03 +08:00

66 lines
1.7 KiB
Go

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
}