- 达达与美团配送的接口修改为较正式参数
This commit is contained in:
@@ -13,9 +13,9 @@ type CallbackResponse struct {
|
||||
}
|
||||
|
||||
type CallbackCommonMsg struct {
|
||||
AppKey string
|
||||
Timestamp int64
|
||||
Sign string
|
||||
AppKey string `json:"appkey"`
|
||||
Timestamp int64 `json:"timestamp"`
|
||||
Sign string `json:"sign"`
|
||||
}
|
||||
|
||||
type CallbackOrderMsg struct {
|
||||
@@ -35,6 +35,17 @@ type CallbackOrderExceptionMsg struct {
|
||||
ExceptionTime int64
|
||||
}
|
||||
|
||||
type CallbackShopStatusMsg struct {
|
||||
ShopName string `json:"shop_name"`
|
||||
ShopID string `json:"shop_id"`
|
||||
Status int `json:"status"`
|
||||
RejectMessage string `json:"reject_message"`
|
||||
|
||||
AppKey string `json:"appkey"`
|
||||
Timestamp int64 `json:"timestamp"`
|
||||
Sign string `json:"sign"`
|
||||
}
|
||||
|
||||
var (
|
||||
SuccessResponse = &CallbackResponse{Code: 0}
|
||||
SignatureIsNotOk = &CallbackResponse{Code: -1}
|
||||
@@ -117,6 +128,16 @@ func (a *API) GetOrderExceptionCallbackMsg(request *http.Request) (orderMsg *Cal
|
||||
ExceptionDescr: request.FormValue("exception_descr"),
|
||||
ExceptionTime: utils.Str2Int64(request.FormValue("exception_time")),
|
||||
}
|
||||
|
||||
return orderMsg, nil
|
||||
}
|
||||
|
||||
func (a *API) GetShopStatusCallbackMsg(request *http.Request) (shopStatusMsg *CallbackShopStatusMsg, callbackResponse *CallbackResponse) {
|
||||
if callbackResponse = a.CheckCallbackValidation(request); callbackResponse != nil {
|
||||
return nil, callbackResponse
|
||||
}
|
||||
err := utils.Map2StructByJson(utils.URLValues2Map(request.PostForm), &shopStatusMsg, false)
|
||||
if err != nil {
|
||||
callbackResponse = Err2CallbackResponse(err, "")
|
||||
}
|
||||
return shopStatusMsg, callbackResponse
|
||||
}
|
||||
|
||||
@@ -57,9 +57,10 @@ var (
|
||||
)
|
||||
|
||||
const (
|
||||
DeliveryServiceCodeRapid = 4011
|
||||
DeliveryServiceCodeIntime = 4012
|
||||
DeliveryServiceCodeTogether = 4013
|
||||
DeliveryServiceCodeSuperRapid = 4002 // 飞速达
|
||||
DeliveryServiceCodeRapid = 4011 // 快速达
|
||||
DeliveryServiceCodeIntime = 4012 // 及时达
|
||||
DeliveryServiceCodeTogether = 4013 // 集中送
|
||||
)
|
||||
|
||||
const (
|
||||
@@ -73,8 +74,8 @@ const (
|
||||
)
|
||||
|
||||
const (
|
||||
CoordinateTypeMars = 0
|
||||
CoordinateTypeBaidu = 1
|
||||
CoordinateTypeMars = 0 // 火星坐标(高德,腾讯地图均采用火星坐标),此为默认项
|
||||
CoordinateTypeBaidu = 1 // 百度坐标
|
||||
)
|
||||
|
||||
// 错误码
|
||||
@@ -97,6 +98,21 @@ const (
|
||||
CancelReasonRideerOther = 399
|
||||
)
|
||||
|
||||
const (
|
||||
ShopStatusAuditRejected = 10 // 审核驳回
|
||||
ShopStatusAuditPassed = 20 // 审核通过
|
||||
ShopStatusCreateSuccess = 30 // 创建成功
|
||||
ShopStatusOnline = 40 // 上线可发单
|
||||
)
|
||||
|
||||
const (
|
||||
ShopCategoryMarket = 120 // 生活超市
|
||||
ShopCategoryMarketConvenience = 120001 // 便利店
|
||||
|
||||
ShopCategoryFruit = 150 // 生鲜果蔬
|
||||
ShopCategoryFruitFruit = 150001 // 果蔬
|
||||
)
|
||||
|
||||
type OrderInfoCommon struct {
|
||||
DeliveryID int64
|
||||
MtPeisongID string
|
||||
@@ -148,10 +164,40 @@ type GoodsItem struct {
|
||||
GoodPrice float64 `json:"goodPrice"`
|
||||
GoodUnit string `json:"goodUnit"`
|
||||
}
|
||||
|
||||
type GoodsDetail struct {
|
||||
Goods []*GoodsItem `json:"goods"`
|
||||
}
|
||||
|
||||
type BusinessHour struct {
|
||||
BeginTime string `json:"beginTime"`
|
||||
EndTime string `json:"endTime"`
|
||||
}
|
||||
|
||||
type ShopInfo struct {
|
||||
ShopID string `json:"shop_id,omitempty"`
|
||||
ShopName string `json:"shop_name,omitempty"`
|
||||
Category int `json:"category,omitempty"`
|
||||
SecondCategory int `json:"second_category,omitempty"`
|
||||
ContactName string `json:"contact_name,omitempty"`
|
||||
ContactPhone string `json:"contact_phone,omitempty"`
|
||||
ContactEmail string `json:"contact_email,omitempty"`
|
||||
ShopAddress string `json:"shop_address,omitempty"`
|
||||
ShopAddressDetail string `json:"shop_address_detail,omitempty"`
|
||||
ShopLng int `json:"shop_lng,omitempty"`
|
||||
ShopLat int `json:"shop_lat,omitempty"`
|
||||
CoordinateType int `json:"coordinate_type"`
|
||||
DeliveryServiceCodes string `json:"delivery_service_codes,omitempty"`
|
||||
BusinessHours string `json:"business_hours,omitempty"`
|
||||
|
||||
// 以下为查询专有的
|
||||
City int `json:"city,omitempty"`
|
||||
DeliveryHours string `json:"delivery_hours,omitempty"`
|
||||
Prebook int `json:"prebook,omitempty"`
|
||||
PrebookOutOfBizTime int `json:"prebook_out_of_biz_time,omitempty"`
|
||||
PrebookPeriod string `json:"prebook_period,omitempty"`
|
||||
}
|
||||
|
||||
type API struct {
|
||||
appKey string
|
||||
secret string
|
||||
@@ -198,14 +244,11 @@ func (a *API) AccessAPI(action string, params map[string]interface{}) (retVal *R
|
||||
panic("params is nil!")
|
||||
}
|
||||
|
||||
params2 := make(url.Values)
|
||||
for k, v := range params {
|
||||
params2[k] = []string{fmt.Sprint(v)}
|
||||
}
|
||||
params2["appkey"] = []string{a.appKey}
|
||||
params2["timestamp"] = []string{utils.Int64ToStr(utils.GetCurTimestamp())}
|
||||
params2["version"] = []string{"1.0"}
|
||||
params2[signKey] = []string{a.signParams(params2)}
|
||||
params2 := utils.Map2URLValues(params)
|
||||
params2.Set("appkey", a.appKey)
|
||||
params2.Set("timestamp", utils.Int64ToStr(utils.GetCurTimestamp()))
|
||||
params2.Set("version", "1.0")
|
||||
params2.Set(signKey, a.signParams(params2))
|
||||
// baseapi.SugarLogger.Debug(params2.Encode())
|
||||
|
||||
err = platformapi.AccessPlatformAPIWithRetry(a.client,
|
||||
@@ -286,6 +329,25 @@ func (a *API) CancelOrder(deliveryId int64, mtPeiSongId string, cancelReasonId i
|
||||
}
|
||||
}
|
||||
|
||||
func (a *API) ShopCreate(shopInfo *ShopInfo) (status int, err error) {
|
||||
params := utils.Struct2MapByJson(shopInfo)
|
||||
result, err := a.AccessAPI("shop/create", params)
|
||||
if err == nil {
|
||||
status = int(utils.Interface2Int64WithDefault(result.Data["status"], 0))
|
||||
}
|
||||
return status, err
|
||||
}
|
||||
|
||||
func (a *API) ShopQuery(shopID string) (shopInfo *ShopInfo, err error) {
|
||||
result, err := a.AccessAPI("shop/query", map[string]interface{}{
|
||||
"shop_id": shopID,
|
||||
})
|
||||
if err == nil {
|
||||
err = utils.Map2StructByJson(result.Data, &shopInfo, false)
|
||||
}
|
||||
return shopInfo, err
|
||||
}
|
||||
|
||||
func (a *API) simulateOrderBehavior(action string, deliveryId int64, mtPeiSongId string) (err error) {
|
||||
params := map[string]interface{}{
|
||||
"delivery_id": deliveryId,
|
||||
|
||||
@@ -11,7 +11,7 @@ import (
|
||||
)
|
||||
|
||||
var (
|
||||
mtpsapi *API
|
||||
api *API
|
||||
sugarLogger *zap.SugaredLogger
|
||||
)
|
||||
|
||||
@@ -21,9 +21,9 @@ func init() {
|
||||
baseapi.Init(sugarLogger)
|
||||
|
||||
// sandbox
|
||||
mtpsapi = New("25e816550bc9484480642f19a95f13fd", "r4$HqrKx9~=7?2Jfo,$Z~a7%~k!Au&pEdI2)oPJvSbH2ao@2N0[8wSIvtuumh_J^")
|
||||
api = New("25e816550bc9484480642f19a95f13fd", "r4$HqrKx9~=7?2Jfo,$Z~a7%~k!Au&pEdI2)oPJvSbH2ao@2N0[8wSIvtuumh_J^")
|
||||
// prod
|
||||
// mtpsapi = New("3c0a05d464c247c19d7ec13accc78605", "b1M}9?:sTbsB[OF2gNORnN(|(iy9rB8(`7]|[wGLnbmt`evfM>E:A90DjHAW:UPE")
|
||||
// api = New("3c0a05d464c247c19d7ec13accc78605", "b1M}9?:sTbsB[OF2gNORnN(|(iy9rB8(`7]|[wGLnbmt`evfM>E:A90DjHAW:UPE")
|
||||
}
|
||||
|
||||
func handleError(t *testing.T, err error) {
|
||||
@@ -44,7 +44,7 @@ func TestAccessAPI(t *testing.T) {
|
||||
"delivery_id": 123456789,
|
||||
"mt_peisong_id": mtPeiSongId,
|
||||
}
|
||||
result, err := mtpsapi.AccessAPI("order/status/query", params)
|
||||
result, err := api.AccessAPI("order/status/query", params)
|
||||
if err != nil {
|
||||
t.Fatalf("Error when accessing AccessAPI result:%v, error:%v", result, err)
|
||||
} else {
|
||||
@@ -73,40 +73,73 @@ func TestCreateOrderByShop(t *testing.T) {
|
||||
OrderType: OrderTypeASAP,
|
||||
}
|
||||
|
||||
order, err := mtpsapi.CreateOrderByShop(basicParams, nil)
|
||||
order, err := api.CreateOrderByShop(basicParams, nil)
|
||||
handleError(t, err)
|
||||
if order != nil {
|
||||
sugarLogger.Debugf("order:%v", order)
|
||||
}
|
||||
}
|
||||
|
||||
func TestShopQuery(t *testing.T) {
|
||||
shopInfo, err := api.ShopQuery("not exist")
|
||||
if err == nil {
|
||||
t.Fatal("应该报错找不到门店")
|
||||
}
|
||||
shopInfo, err = api.ShopQuery("11726346")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
t.Log(utils.Format4Output(shopInfo, false))
|
||||
}
|
||||
|
||||
func TestShopCreate(t *testing.T) {
|
||||
shopInfo := &ShopInfo{
|
||||
ShopID: "11726346",
|
||||
ShopName: "测试门店",
|
||||
Category: ShopCategoryFruit,
|
||||
SecondCategory: ShopCategoryFruitFruit,
|
||||
ContactName: "徐",
|
||||
ContactPhone: "18180948107",
|
||||
ShopAddress: "北京市通州区五所南路与玉桥西路南延交叉口北100米梨园农副产品交易中心 水果区",
|
||||
ShopLng: 116672496,
|
||||
ShopLat: 39879491,
|
||||
CoordinateType: CoordinateTypeMars,
|
||||
DeliveryServiceCodes: utils.Int2Str(DeliveryServiceCodeRapid),
|
||||
BusinessHours: "[{\"beginTime\":\"09:00\",\"endTime\":\"18:00\"}]",
|
||||
}
|
||||
_, err := api.ShopCreate(shopInfo)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestSimulateArrange(t *testing.T) {
|
||||
err := mtpsapi.SimulateArrange(123456789, "1529387562097059")
|
||||
err := api.SimulateArrange(123456789, "1529387562097059")
|
||||
handleError(t, err)
|
||||
}
|
||||
|
||||
func TestSimulatePickup(t *testing.T) {
|
||||
err := mtpsapi.SimulatePickup(123456789, "1529387562097059")
|
||||
err := api.SimulatePickup(123456789, "1529387562097059")
|
||||
handleError(t, err)
|
||||
}
|
||||
|
||||
func TestSimulateRearrange(t *testing.T) {
|
||||
err := mtpsapi.SimulateRearrange(123456789, "1529387562097059")
|
||||
err := api.SimulateRearrange(123456789, "1529387562097059")
|
||||
handleError(t, err)
|
||||
}
|
||||
|
||||
func TestSimulateDeliver(t *testing.T) {
|
||||
err := mtpsapi.SimulateDeliver(123456789, "1529387562097059")
|
||||
err := api.SimulateDeliver(123456789, "1529387562097059")
|
||||
handleError(t, err)
|
||||
}
|
||||
|
||||
func TestSimulateReportException(t *testing.T) {
|
||||
err := mtpsapi.SimulateReportException(123456789, "1529387562097059")
|
||||
err := api.SimulateReportException(123456789, "1529387562097059")
|
||||
handleError(t, err)
|
||||
}
|
||||
|
||||
func TestCancelOrder(t *testing.T) {
|
||||
result, err := mtpsapi.CancelOrder(123456789, "1529387562097059", CancelReasonMerchantOther, "just a test")
|
||||
result, err := api.CancelOrder(123456789, "1529387562097059", CancelReasonMerchantOther, "just a test")
|
||||
handleError(t, err)
|
||||
sugarLogger.Debug(result)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user