- ebai callback.
This commit is contained in:
65
platformapi/ebaiapi/callback.go
Normal file
65
platformapi/ebaiapi/callback.go
Normal file
@@ -0,0 +1,65 @@
|
||||
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
|
||||
}
|
||||
@@ -17,6 +17,13 @@ const (
|
||||
|
||||
signKey = "sign"
|
||||
)
|
||||
const (
|
||||
CmdOrderCreate = "order.create"
|
||||
CmdOrderDeliveryStatus = "order.devlieryStatus.push"
|
||||
CmdOrderPartRefund = "order.partrefund.push"
|
||||
CmdOrderStatus = "order.status.push"
|
||||
CmdOrderUserCancel = "order.user.cancel"
|
||||
)
|
||||
|
||||
type ResponseResult struct {
|
||||
ErrNo int `json:"errno"`
|
||||
@@ -101,9 +108,10 @@ func (a *API) AccessAPI(cmd string, body map[string]interface{}) (retVal *Respon
|
||||
return platformapi.ErrLevelSuccess, nil
|
||||
}
|
||||
newErr := utils.NewErrorIntCode(retVal.Error, retVal.ErrNo)
|
||||
if newErr.IntCode() == 20212 {
|
||||
return platformapi.ErrLevelExceedLimit, newErr
|
||||
}
|
||||
// todo 包括访问超频的很多错误都是这个错误号...
|
||||
// if newErr.IntCode() == 20212 {
|
||||
// return platformapi.ErrLevelExceedLimit, newErr
|
||||
// }
|
||||
return platformapi.ErrLevelCodeIsNotOK, newErr
|
||||
})
|
||||
return retVal, err
|
||||
|
||||
129
platformapi/ebaiapi/order.go
Normal file
129
platformapi/ebaiapi/order.go
Normal file
@@ -0,0 +1,129 @@
|
||||
package ebaiapi
|
||||
|
||||
import "git.rosy.net.cn/baseapi/utils"
|
||||
|
||||
const (
|
||||
CancelTypeNotInServiceArea = "1"
|
||||
CancelTypeShopClosed = "2"
|
||||
CancelTypeSoldOut = "3"
|
||||
CancelTypePriceChanged = "4"
|
||||
CancelTypeClientCanceled = "5"
|
||||
CancelTypeDuplicatedOrder = "6"
|
||||
CancelTypeTooBusy = "7"
|
||||
CancelTypeCanNotContactClient = "8"
|
||||
CancelTypeFakeOrder = "9"
|
||||
CancelTypePushOrderFailed = "53"
|
||||
CancelTypeCustom = "-1"
|
||||
)
|
||||
|
||||
const (
|
||||
OrderStatusNew = "1"
|
||||
OrderStatusAccepted = "5"
|
||||
OrderStatusCourierAccepted = "7"
|
||||
OrderStatusCourierPickedup = "8"
|
||||
OrderStatusFinished = "9"
|
||||
OrderStatusCanceled = "10"
|
||||
)
|
||||
|
||||
const (
|
||||
WaybillStatusNew = "2"
|
||||
WaybillStatusRequestDelivery = "3"
|
||||
WaybillStatusWait4Courier = "4"
|
||||
WaybillStatusCourierAccepted = "7"
|
||||
WaybillStatusCourierPickedup = "8"
|
||||
WaybillStatusDeliveryCancled = "15"
|
||||
WaybillStatusFinished = "16"
|
||||
WaybillStatusExceptional = "17"
|
||||
WaybillStatusSelfDelivery = "18"
|
||||
WaybillStatusNotInDelivering = "19"
|
||||
WaybillStatusDeliveryRejected = "20"
|
||||
)
|
||||
|
||||
type ExpressInfo struct {
|
||||
OrderID string `json:"order_id"`
|
||||
ExpressID string `json:"express_id"`
|
||||
ExpressCompany string `json:"express_company"`
|
||||
}
|
||||
|
||||
// 提供给合作方确认订单所用。 注:1、10分钟内未确认的订单系统自动取消。2、确认失败的订单请不要做餐。 2016年7月4号起,将由百度外卖负责完成订单。届时,对接方无需调用完成订单接口,继续调用可能导致订单结算有问题。
|
||||
func (a *API) OrderConfirm(orderID string) (err error) {
|
||||
_, err = a.AccessAPI("order.confirm", map[string]interface{}{
|
||||
"order_id": orderID,
|
||||
})
|
||||
return err
|
||||
}
|
||||
|
||||
// 提供给合作方取消订单所用。 注:1、百度物流配送且已经确认的订单无法取消。
|
||||
func (a *API) OrderCancel(orderID, cancelType, cancelReason string) (err error) {
|
||||
_, err = a.AccessAPI("order.cancel", map[string]interface{}{
|
||||
"order_id": orderID,
|
||||
"type": cancelType,
|
||||
"reason": cancelReason,
|
||||
})
|
||||
return err
|
||||
}
|
||||
|
||||
// 蜂鸟众包订单呼叫骑士配送,仅限蜂鸟众包商户调用
|
||||
func (a *API) OrderCallDelivery(orderID string) (err error) {
|
||||
_, err = a.AccessAPI("order.callDelivery", map[string]interface{}{
|
||||
"order_id": orderID,
|
||||
})
|
||||
return err
|
||||
}
|
||||
|
||||
// 蜂鸟众包订单取消呼叫骑士配送,仅限蜂鸟众包商户调用。
|
||||
func (a *API) OrderCancelDelivery(orderID string) (err error) {
|
||||
_, err = a.AccessAPI("order.cancelDelivery", map[string]interface{}{
|
||||
"order_id": orderID,
|
||||
})
|
||||
return err
|
||||
}
|
||||
|
||||
// 饿了么自配送订单回传订单已送出状态
|
||||
func (a *API) OrderSendOut(orderID, phone string) (err error) {
|
||||
_, err = a.AccessAPI("order.sendout", map[string]interface{}{
|
||||
"order_id": orderID,
|
||||
"phone": phone,
|
||||
})
|
||||
return err
|
||||
}
|
||||
|
||||
// 饿了么自配送订单回传订单送达状态,调用成功后订单状态变为已完成。需先调用订单送出接口,且接单5分钟后可调用
|
||||
func (a *API) OrderComplete(orderID, phone string) (err error) {
|
||||
_, err = a.AccessAPI("order.complete", map[string]interface{}{
|
||||
"order_id": orderID,
|
||||
"phone": phone,
|
||||
})
|
||||
return err
|
||||
}
|
||||
|
||||
// 提供给合作方在配送异常或物流拒单后选择自行配送
|
||||
func (a *API) OrderSwitchselfdelivery(orderID string) (err error) {
|
||||
_, err = a.AccessAPI("order.switchselfdelivery", map[string]interface{}{
|
||||
"order_id": orderID,
|
||||
})
|
||||
return err
|
||||
}
|
||||
|
||||
// 查看订单详情
|
||||
func (a *API) OrderGet(orderID string) (orderMap map[string]interface{}, err error) {
|
||||
result, err := a.AccessAPI("order.get", map[string]interface{}{
|
||||
"order_id": orderID,
|
||||
})
|
||||
if err == nil {
|
||||
return result.Data.(map[string]interface{}), nil
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// 设置订单快递单号
|
||||
func (a *API) OrderExpressCreate(shopID string, expressList []*ExpressInfo) (status int, err error) {
|
||||
result, err := a.AccessAPI("order.express.create", map[string]interface{}{
|
||||
KeyShopID: shopID,
|
||||
"express_list": expressList,
|
||||
})
|
||||
if err == nil {
|
||||
return int(utils.MustInterface2Int64(result.Data.(map[string]interface{})["status"])), nil
|
||||
}
|
||||
return 0, err
|
||||
}
|
||||
16
platformapi/ebaiapi/order_test.go
Normal file
16
platformapi/ebaiapi/order_test.go
Normal file
@@ -0,0 +1,16 @@
|
||||
package ebaiapi
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
)
|
||||
|
||||
func TestOrderGet(t *testing.T) {
|
||||
result, err := api.OrderGet("15380342248732")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
} else {
|
||||
t.Log(utils.Format4Output(result, false))
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user