- 达达与美团配送的接口修改为较正式参数

This commit is contained in:
gazebo
2019-07-23 09:12:33 +08:00
parent 7ac11981b3
commit 7242dd435e
9 changed files with 255 additions and 81 deletions

View File

@@ -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
}

View File

@@ -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,

View File

@@ -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)
}