Files
baseapi/platformapi/elmapi/callback.go
2018-07-06 17:52:00 +08:00

71 lines
1.9 KiB
Go

package elmapi
import (
"fmt"
"git.rosy.net.cn/baseapi"
"git.rosy.net.cn/baseapi/platformapi"
"git.rosy.net.cn/baseapi/utils"
"github.com/fatih/structs"
)
// https://open.shop.ele.me/openapi/documents/callback
const (
MsgTypeOrderValid = 10
MsgTypeMerchantValid = 12
MsgTypeOrderCanceled = 14
MsgTypeMerchantInvalid = 15
MsgTypeOrderForceInvalid = 17
MsgTypeOrderFinished = 18
MsgTypeClientUrgeOrder = 45
)
type CallbackResponse struct {
Message string `json:"message"`
}
type CallbackMsg struct {
AppID int `json:"appId"`
RequestID string `json:"requestId"`
Type int `json:"type"`
Message string `json:"message"`
ShopID int `json:"shopId"`
Timestamp int64 `json:"timestamp"`
UserID int64 `json:"userId"`
Signature string `json:"signature"`
}
var (
SuccessResponse = &CallbackResponse{"ok"}
)
func (a *API) unmarshalData(data []byte, msg interface{}) (callbackResponse *CallbackResponse) {
err := utils.UnmarshalUseNumber(data, msg)
if err != nil {
return &CallbackResponse{
Message: fmt.Sprintf(platformapi.ErrStrUnmarshalError, data, err),
}
}
return nil
}
func (a *API) CheckCallbackValidation(mapData map[string]interface{}) (callbackResponse *CallbackResponse) {
sign := a.signParamsMap(mapData, "")
if remoteSign, _ := mapData[signKey].(string); sign != remoteSign {
baseapi.SugarLogger.Infof("Signature is not ok, mine:%v, get:%v", sign, remoteSign)
return &CallbackResponse{Message: platformapi.ErrStrCallbackSignatureIsWrong}
}
return nil
}
func (a *API) GetCallbackMsg(data []byte) (msg *CallbackMsg, callbackResponse *CallbackResponse) {
msg = new(CallbackMsg)
if callbackResponse = a.unmarshalData(data, msg); callbackResponse != nil {
return nil, callbackResponse
}
mapData := structs.Map(msg)
callbackResponse = a.CheckCallbackValidation(mapData)
return msg, callbackResponse
}