This commit is contained in:
richboo111
2023-05-29 10:26:48 +08:00
parent 11fc0151aa
commit 2a08672aa1
4 changed files with 46 additions and 33 deletions

View File

@@ -4,6 +4,8 @@ import (
"encoding/json"
"errors"
"fmt"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/globals"
"time"
)
@@ -12,7 +14,7 @@ func (a *API) PreCreateOrder(preOrder *PreCreateOrderReq) (price float64, err er
//补全默认参数
preOrder.PushTime = time.Now().Unix()
preOrder.DevId = a.devId
globals.SugarLogger.Debugf("PreCreateOrder req=%s", utils.Format4Output(preOrder, false))
resp := a.HttpPostJson("precreateorder", preOrder)
if resp.HttpStatusCode != HttpStatusSuccessCode {
return 0, errors.New("HTTP请求错误请检查重试")
@@ -23,6 +25,7 @@ func (a *API) PreCreateOrder(preOrder *PreCreateOrderReq) (price float64, err er
retVal := PreCreateOrderResp{}
s, _ := json.Marshal(resp.BaseRetVal.Result)
if err = json.Unmarshal(s, &retVal); err == nil {
globals.SugarLogger.Debugf("PreCreateOrder resp=%s", utils.Format4Output(retVal, false))
return retVal.EstimatePayMoney, nil
} else {
return 0, err
@@ -30,30 +33,31 @@ func (a *API) PreCreateOrder(preOrder *PreCreateOrderReq) (price float64, err er
}
// CreateOrder 创建订单(店铺)
func (a *API) CreateOrder(order *CreateOrderReq) (sfOrderID, sfBillID string, totalPrice int, err error) {
func (a *API) CreateOrder(order *CreateOrderReq) (sfOrderID, sfBillID string, totalPrice, reallyPayPrice float64, err error) {
//补全默认参数
order.PushTime = time.Now().Unix()
order.Version = DefaultVersion
order.DevId = a.devId
globals.SugarLogger.Debugf("CreateOrder req=%s", utils.Format4Output(order, false))
resp := a.HttpPostJson("createorder", order)
if resp.HttpStatusCode != HttpStatusSuccessCode {
return "", "", 0, errors.New("HTTP请求错误请检查重试")
return "", "", 0, 0, errors.New("HTTP请求错误请检查重试")
}
if resp.BaseRetVal.ErrorCode != SuccessCode {
return "", "", 0, fmt.Errorf("%s", resp.BaseRetVal.ErrorMsg)
return "", "", 0, 0, fmt.Errorf("%s", resp.BaseRetVal.ErrorMsg)
}
retVal := CreateOrderResp{}
s, _ := json.Marshal(resp.BaseRetVal.Result)
if err = json.Unmarshal(s, &retVal); err == nil {
return retVal.SFOrderID, retVal.SFBillID, retVal.TotalPrice, nil
globals.SugarLogger.Debugf("CreateOrder resp=%s", utils.Format4Output(retVal, false))
return retVal.SFOrderID, retVal.SFBillID, retVal.TotalPrice, retVal.RealPayMoney, nil
} else {
return "", "", 0, err
return "", "", 0, 0, err
}
}
// PreCancelOrder 预取消订单
func (a *API) PreCancelOrder(sfOrderID string) (isCancel bool, err error) {
func (a *API) PreCancelOrder(sfOrderID string) (deductionFee float64, err error) {
param := PreCancelOrderReq{
DevId: a.devId,
OrderID: sfOrderID,
@@ -61,17 +65,18 @@ func (a *API) PreCancelOrder(sfOrderID string) (isCancel bool, err error) {
}
resp := a.HttpPostJson("precancelorder", param)
if resp.HttpStatusCode != HttpStatusSuccessCode {
return false, errors.New("HTTP请求错误请检查重试")
return 0, errors.New("HTTP请求错误请检查重试")
}
if resp.BaseRetVal.ErrorCode != SuccessCode {
return false, fmt.Errorf("%s", resp.BaseRetVal.ErrorMsg)
return 0, fmt.Errorf("%s", resp.BaseRetVal.ErrorMsg)
}
retVal := PreCancelOrderResp{}
s, _ := json.Marshal(resp.BaseRetVal.Result)
if err = json.Unmarshal(s, &retVal); err == nil {
return retVal.CouldCancel, nil
globals.SugarLogger.Debugf("PreCancelOrder resp=%s", utils.Format4Output(retVal, false))
return retVal.DeductionFee, nil
} else {
return false, err
return 0, err
}
}
@@ -110,6 +115,7 @@ func (a *API) GetOrderStatus(sfOrderID string) (retVal *GetOrderStatusResp, err
}
s, _ := json.Marshal(resp.BaseRetVal.Result)
if err = json.Unmarshal(s, &retVal); err == nil {
globals.SugarLogger.Debugf("GetOrderStatus resp=%s", utils.Format4Output(retVal, false))
return retVal, nil
} else {
return nil, err
@@ -133,6 +139,7 @@ func (a *API) GetRiderLatestPosition(sfOrderID string) (retVal *RiderLatestPosit
}
s, _ := json.Marshal(resp.BaseRetVal.Result)
if err = json.Unmarshal(s, &retVal); err == nil {
globals.SugarLogger.Debugf("GetRiderLatestPosition resp=%s", utils.Format4Output(retVal, false))
return retVal, nil
} else {
return nil, err

View File

@@ -293,20 +293,21 @@ type CreateOrderResp struct {
ShopOrderID string `json:"shop_order_id"` //商家订单号
PushTime int `json:"push_time"` //推送时间
//以下字段受请求参数中 return_flag 控制return_flag中未包含的此字段将不存在请注意
TotalPrice int `json:"total_price"` //配送费总额当return_flag中包含1时返回单位分值为计算出来此单总价
DeliveryDistanceMeter int `json:"delivery_distance_meter"` //配送距离当return_flag中包含2时返回单位米值为计算出来实际配送距离
WeightGram int `json:"weight_gram"` //商品重量当return_flag中包含4时返回单位克值为下单传入参数回传
StartTime int `json:"start_time"` //起送时间当return_flag中包含8时返回时间格式为Unix时间戳注意转换
ExpectTime int `json:"expect_time"` //预计送达时间当return_flag中包含16时返回时间格式为Unix时间戳注意转换
TotalPayMoney int `json:"total_pay_money"` //支付费用当return_flag中包含32时返回单位分
RealPayMoney int `json:"real_pay_money"` //实际支付金额当return_flag中包含64时返回单位分实际支付金额=总金额-优惠券总金额)
CouponsTotalFee int `json:"coupons_total_fee"` //优惠券总金额当return_flag中包含128时返回单位分
SettlementType int `json:"settlement_type"` //结算方式当return_flag中包含256时返回
TotalPrice float64 `json:"total_price"` //配送费总额当return_flag中包含1时返回单位分值为计算出来此单总价
DeliveryDistanceMeter float64 `json:"delivery_distance_meter"` //配送距离当return_flag中包含2时返回单位米值为计算出来实际配送距离
WeightGram float64 `json:"weight_gram"` //商品重量当return_flag中包含4时返回单位克值为下单传入参数回传
StartTime float64 `json:"start_time"` //起送时间当return_flag中包含8时返回时间格式为Unix时间戳注意转换
ExpectTime float64 `json:"expect_time"` //预计送达时间当return_flag中包含16时返回时间格式为Unix时间戳注意转换
TotalPayMoney float64 `json:"total_pay_money"` //支付费用当return_flag中包含32时返回单位分
RealPayMoney float64 `json:"real_pay_money"` //实际支付金额当return_flag中包含64时返回单位分实际支付金额=总金额-优惠券总金额)
CouponsTotalFee float64 `json:"coupons_total_fee"` //优惠券总金额当return_flag中包含128时返回单位分
SettlementType float64 `json:"settlement_type"` //结算方式当return_flag中包含256时返回
PickUPCode int `json:"pick_up_code"` //取件码。在顺丰同城商户侧配置,配置后有此字段
CompleteCode int `json:"complete_code"` //签收码。在顺丰同城商户侧配置,配置后有此字段
OverflowFee int `json:"overflow_fee"` //爆单费,单位分
InsureFee int `json:"insure_fee"` //保价费,单位分
PickUPCode float64 `json:"pick_up_code"` //取件码。在顺丰同城商户侧配置,配置后有此字段
CompleteCode float64 `json:"complete_code"` //签收码。在顺丰同城商户侧配置,配置后有此字段
OverflowFee float64 `json:"overflow_fee"` //爆单费,单位分
InsureFee float64 `json:"insure_fee"` //保价费,单位分
SubsidyFee float64 `json:"subsidy_fee"`
}
// PreCancelOrderReq 预取消订单

View File

@@ -9,8 +9,12 @@ import (
var api = New(AppID, AppKey)
const (
AppID = 1663705378 //开发者ID
AppKey = "0838426b310fd2530c57dd6e770ddff1" //开发者密钥
//正式环境
AppID2 = 1663705444
AppKey2 = "600e22db5deb6402e527e58f0d6636a0"
AppID = 1663705378 //测试开发者ID
AppKey = "0838426b310fd2530c57dd6e770ddff1" //测试开发者密钥
TestSFStoreID = "3243279847393" //open测试平台型店铺
)
@@ -24,7 +28,7 @@ func TestPreCreateOrder(t *testing.T) {
UserAddress: "北京市海淀区学清嘉创大厦A座15层",
Weight: 1000,
ProductType: 4,
PushTime: 1684379930,
PushTime: 1684996039,
ShopType: 1,
LbsType: LbsTypeGD,
RiderPickMethod: 1,
@@ -49,12 +53,13 @@ func TestCreateOrder(t *testing.T) {
param := &CreateOrderReq{
DevId: AppID,
ShopId: TestSFStoreID,
ShopOrderId: "20230518Test",
ShopOrderId: "20230525Test",
OrderSequence: "测试",
OrderSource: OrderSourceELM,
OrderTime: 1684302448,
PushTime: 1684399264,
OrderTime: 1684997166,
PushTime: 1684997166,
Version: 19,
ReturnFlag: 511,
Receive: &ReceiveAddress{
UserLng: "116.339392",
UserLat: "40.002349",

View File

@@ -25,14 +25,14 @@ type BaseRetVal struct {
Result interface{} `json:"result"`
}
func New(devId int64, devKey string, config ...*platformapi.APIConfig) *API {
func New(devId int, devKey string, config ...*platformapi.APIConfig) *API {
curConfig := platformapi.DefAPIConfig
if len(config) > 0 {
curConfig = *config[0]
}
return &API{
devId: devId,
devId: int64(devId),
devKey: devKey,
locker: sync.RWMutex{},
client: &http.Client{Timeout: curConfig.ClientTimeout},