diff --git a/platformapi/dadaapi/shop.go b/platformapi/dadaapi/shop.go index b5e146cc..a816fcc9 100644 --- a/platformapi/dadaapi/shop.go +++ b/platformapi/dadaapi/shop.go @@ -1,6 +1,9 @@ package dadaapi -import "git.rosy.net.cn/baseapi/utils" +import ( + "fmt" + "git.rosy.net.cn/baseapi/utils" +) const ( BusinessTypeSnack = 1 @@ -111,3 +114,38 @@ func (a *API) ShopUpdate(shopInfo *ShopInfo) (err error) { _, err = a.AccessAPI("api/shop/update", shopInfo) return err } + +// QueryBillBalance 查询达达账户余额 +func (a *API) QueryBillBalance() (balance int64, err error) { + params := map[string]interface{}{ + "category": 3, + } + result, err := a.AccessAPI("api/balance/query", params) + if err != nil { + return 0, err + } + + if result.Code != 0 { + return 0, fmt.Errorf(result.Msg) + } + return utils.Float64TwoInt64(utils.MustInterface2Float64(result.Result.(map[string]interface{})["deliverBalance"]) * 100), err +} + +func (a *API) BalanceRecharge(param *RechargeParam) (string, error) { + params := utils.Struct2MapByJson(param) + result, err := a.AccessAPI("api/recharge", params) + if err != nil { + return "", err + } + + if result.Code != 0 { + return "", fmt.Errorf(result.Msg) + } + return result.Result.(string), err +} + +type RechargeParam struct { + Amount float64 `json:"amount"` // 充值金额,元 + Category string `json:"category"` // 生成链接适应场景(category有二种类型值:PC、H5) + NotifyUrl string `json:"notify_url"` // 支付成功后跳转的页面(支付宝在支付成功后可以跳转到某个指定的页面,微信支付不支持) +} diff --git a/platformapi/dadaapi/shop_test.go b/platformapi/dadaapi/shop_test.go index f7ff1a15..da5dec5c 100644 --- a/platformapi/dadaapi/shop_test.go +++ b/platformapi/dadaapi/shop_test.go @@ -1,5 +1,23 @@ package dadaapi +import ( + "fmt" + "testing" +) + +func TestQueryBillBalance(t *testing.T) { + dadaapi.QueryBillBalance() +} +func TestBalanceRecharge(t *testing.T) { + result, err := dadaapi.BalanceRecharge(&RechargeParam{ + Amount: 0.01, + Category: "H5", + NotifyUrl: "", + }) + fmt.Println(result) + fmt.Println(err) +} + // //import ( // "testing" diff --git a/platformapi/ebaiapi/shop_sku_test.go b/platformapi/ebaiapi/shop_sku_test.go index 9f6e44e5..cdf3ae3f 100644 --- a/platformapi/ebaiapi/shop_sku_test.go +++ b/platformapi/ebaiapi/shop_sku_test.go @@ -329,7 +329,7 @@ func TestDeleteStoreSku(t *testing.T) { // TestDeleteSku 删除饿了么商品 func TestDeleteSku(t *testing.T) { - shopId := "805178" + shopId := "804591" param1 := &SkuListParams{ Page: 1, PageSize: 100, diff --git a/platformapi/fnpsapi/fn_test.go b/platformapi/fnpsapi/fn_test.go index fdc22180..8cf07202 100644 --- a/platformapi/fnpsapi/fn_test.go +++ b/platformapi/fnpsapi/fn_test.go @@ -20,9 +20,9 @@ func init() { sugarLogger = logger.Sugar() baseapi.Init(sugarLogger) - api = New("6705486294797503379", "c1e6c280-e618-4103-9d0a-673bc54fb22e", "5375691", "") + api = New("6705486294797503379", "c1e6c280-e618-4103-9d0a-673bc54fb22e", "51658", "") //token, _ := api.GetAccessToken() - api.accessToken = "0d572b0b-9742-4e2b-9d00-5a6609867dd3" + api.accessToken = "2f2898e8-bf14-438a-944f-a1a0df7e6d21" } func TestGetAccessToken(t *testing.T) { @@ -34,10 +34,7 @@ func TestGetAccessToken(t *testing.T) { // 查询单个门店 func TestQueryOneStore(t *testing.T) { - api = New("6705486294797503379", "c1e6c280-e618-4103-9d0a-673bc54fb22e", "51658", "") - //token, err := api.GetAccessToken() - api.accessToken = "eb855784-ca08-460b-be73-5681ceb28222" - data, err := api.GetStore("5000009") + data, err := api.GetStore("805224") fmt.Println(data) fmt.Println(err) } @@ -191,9 +188,7 @@ func TestGetOrder(t *testing.T) { } func TestQueryOrder(t *testing.T) { - api = New("6705486294797503379", "c1e6c280-e618-4103-9d0a-673bc54fb22e", "51658", "") - api.accessToken = "b267ad9e-eaef-48d7-a987-1814c0c27315" - data, err := api.QueryOrder("3801487132448868438") // 1100537991119839487 1100536591119839487 + data, err := api.QueryOrder("4201952231529175730") // 1100537991119839487 1100536591119839487 globals.SugarLogger.Debug("data:= %s", utils.Format4Output(data, false)) globals.SugarLogger.Debug("err:= %s", utils.Format4Output(err, false)) } @@ -217,3 +212,7 @@ func TestComplaintRider(t *testing.T) { err := api.ComplaintRider("1100643132821623946", "300000718145112173", 160, "1") fmt.Println(err) } + +func TestQueryBillBalance(t *testing.T) { + api.QueryBillBalance() +} diff --git a/platformapi/fnpsapi/fnps_v3.go b/platformapi/fnpsapi/fnps_v3.go index 6a6aa787..72436876 100644 --- a/platformapi/fnpsapi/fnps_v3.go +++ b/platformapi/fnpsapi/fnps_v3.go @@ -12,8 +12,6 @@ const ( RefreshTokenUrl = "https://open-anubis.ele.me/anubis-webapi/openapi/refreshToken" // 正式环境刷新token //TokenURL = "https://exam-anubis.ele.me/anubis-webapi/openapi/token" // 沙箱环境 //ApiURL = "https://exam-anubis.ele.me/anubis-webapi/v3/invoke" // 沙箱环境 - RequestPost = "POST" - RequestGet = "GET" ) // 注册请求api @@ -457,3 +455,10 @@ type OrderClaimSkuDto struct { //#endregion //#endregion + +// Balance 账号余额 +type Balance struct { + BalanceStatus int64 `json:"balance_status"` // 账户状态 + FrozenBalanceAmountCent int64 `json:"frozen_balance_amount_cent"` // 账户冻结余额 + BalanceAmountCent int64 `json:"balance_amount_cent"` // 账户余额 +} diff --git a/platformapi/fnpsapi/fnpsapi.go b/platformapi/fnpsapi/fnpsapi.go index 67630ec7..6e50e0c0 100644 --- a/platformapi/fnpsapi/fnpsapi.go +++ b/platformapi/fnpsapi/fnpsapi.go @@ -94,7 +94,7 @@ func (a *API) AccessAPI(baseUrl, actionApi, method string, bizParams map[string] // 发送请求 sendUrl := func() *http.Request { var request *http.Request - if RequestPost == method { + if http.MethodPost == method { request, _ = http.NewRequest(http.MethodPost, fullURL, strings.NewReader(string(data))) } else { request, _ = http.NewRequest(http.MethodGet, utils.GenerateGetURL(baseUrl, actionApi, bizParams), nil) @@ -135,11 +135,11 @@ func (a *API) GetAccessToken() (tokenInfo *TokenInfo, err error) { switch { case a.accessToken != "" && a.refreshToken != "": parameter["refresh_token"] = a.refreshToken - result, err = a.AccessAPI(RefreshTokenUrl, "", RequestPost, parameter) + result, err = a.AccessAPI(RefreshTokenUrl, "", http.MethodPost, parameter) case a.accessToken == "" && a.refreshToken == "": parameter["grant_type"] = "authorization_code" parameter["code"] = a.code - result, err = a.AccessAPI(TokenURL, "", RequestPost, parameter) + result, err = a.AccessAPI(TokenURL, "", http.MethodPost, parameter) default: return nil, errors.New("更换code,请在配置表中删除原蜂鸟token") } diff --git a/platformapi/fnpsapi/order.go b/platformapi/fnpsapi/order.go index 56b46d1b..c2cf73c3 100644 --- a/platformapi/fnpsapi/order.go +++ b/platformapi/fnpsapi/order.go @@ -5,6 +5,7 @@ import ( "errors" "fmt" "git.rosy.net.cn/baseapi/utils" + "net/http" "time" ) @@ -44,7 +45,7 @@ func (a *API) PreCreateByShopFn(basicParams *PreCreateOrder) (deliveryFee, baseD return 0, 0, err } preOrder["business_data"] = string(bytes) - result, err := a.AccessAPI(ApiURL, "preCreateOrder", RequestPost, preOrder) + result, err := a.AccessAPI(ApiURL, "preCreateOrder", http.MethodPost, preOrder) if err != nil { return 0, 0, err } @@ -80,7 +81,7 @@ func (a *API) CreateOrder(createOrderParam *CreateOrderReqParam) (result string, return "", err } orderHead["business_data"] = string(bytes) - resultData, err := a.AccessAPI(ApiURL, "createOrder", RequestPost, orderHead) + resultData, err := a.AccessAPI(ApiURL, "createOrder", http.MethodPost, orderHead) if err != nil { return "", err } @@ -111,7 +112,7 @@ func (a *API) AddTip(req *AddTipRes) (err error) { } orderHead["businessData"] = string(addTipString) - if _, err = a.AccessAPI(ApiURL, "addTip", RequestPost, orderHead); err != nil { + if _, err = a.AccessAPI(ApiURL, "addTip", http.MethodPost, orderHead); err != nil { return err } return nil @@ -130,7 +131,7 @@ func (a *API) GetCancelReasonList(req *GetOrderDetailReq) (result *GetCancelReas return nil, err } orderHead["businessData"] = string(business) - data, err := a.AccessAPI(ApiURL, "getCancelReasonList", RequestPost, orderHead) + data, err := a.AccessAPI(ApiURL, "getCancelReasonList", http.MethodPost, orderHead) if err != nil { return nil, err } @@ -156,7 +157,7 @@ func (a *API) PreCancelOrder(req *PreCancelOrderReq) (actualCancelCostCent int64 } orderHead["businessData"] = string(business) - data, err := a.AccessAPI(ApiURL, "preCancelOrder", RequestPost, orderHead) + data, err := a.AccessAPI(ApiURL, "preCancelOrder", http.MethodPost, orderHead) if err != nil { return 0, err } @@ -181,7 +182,7 @@ func (a *API) CancelOrder(req *CancelOrderReq) (err error) { } orderHead["business_data"] = string(business) - data, err := a.AccessAPI(ApiURL, "cancelOrder", RequestPost, orderHead) + data, err := a.AccessAPI(ApiURL, "cancelOrder", http.MethodPost, orderHead) if err != nil { return err } @@ -200,7 +201,7 @@ func (a *API) QueryOrder(partnerOrderCode string) (result *GetOrderDetailRes, er } orderHead["business_data"] = string(bytes) - data, err := a.AccessAPI(ApiURL, "getOrderDetail", RequestPost, orderHead) + data, err := a.AccessAPI(ApiURL, "getOrderDetail", http.MethodPost, orderHead) if err != nil { return nil, err } @@ -226,7 +227,7 @@ func (a *API) GetKnightInfo(req *GetOrderDetailReq) (result *GetKnightInfoRes, e } orderHead["business_data"] = string(bytes) - data, err := a.AccessAPI(ApiURL, "getKnightInfo", RequestPost, orderHead) + data, err := a.AccessAPI(ApiURL, "getKnightInfo", http.MethodPost, orderHead) if err != nil { return nil, err } @@ -241,7 +242,7 @@ func (a *API) GetKnightInfo(req *GetOrderDetailReq) (result *GetKnightInfoRes, e // 余额查询 func (a *API) GetAmount() (outAmount map[string]interface{}, err error) { orderHead := a.MakeFnRequestHead() - result, err := a.AccessAPI(ApiURL, "getAmount", RequestPost, orderHead) + result, err := a.AccessAPI(ApiURL, "getAmount", http.MethodPost, orderHead) if err != nil { return nil, err } @@ -266,7 +267,7 @@ func (a *API) ComplaintOrder(req *ComplaintOrderReq) (err error) { return err } orderHead["businessData"] = string(bytes) - _, err = a.AccessAPI(ApiURL, "cancelOrder", RequestPost, orderHead) + _, err = a.AccessAPI(ApiURL, "cancelOrder", http.MethodPost, orderHead) return err } @@ -283,6 +284,6 @@ func (a *API) ComplaintRider(partnerOrderCode string, orderId string, orderCompl return err } orderHead["business_data"] = string(bytes) - _, err = a.AccessAPI(ApiURL, "complaintOrder", RequestPost, orderHead) + _, err = a.AccessAPI(ApiURL, "complaintOrder", http.MethodPost, orderHead) return err } diff --git a/platformapi/fnpsapi/store.go b/platformapi/fnpsapi/store.go index 546fc453..5c06883b 100644 --- a/platformapi/fnpsapi/store.go +++ b/platformapi/fnpsapi/store.go @@ -43,7 +43,7 @@ func (a *API) CreateStore(createStoreParam *CreateStoreBaseInfo) (result1 string return "", err } requestHead["business_data"] = string(storeByte) - result, err := a.AccessAPI(ApiURL, "chainstoreCreate", RequestPost, requestHead) + result, err := a.AccessAPI(ApiURL, "chainstoreCreate", http.MethodPost, requestHead) if err != nil { return "", err } @@ -70,10 +70,38 @@ func (a *API) UpdateStore(updateStore *UpdateStoreParam) (err error) { return err } requestHead["business_data"] = string(storeByte) - _, err = a.AccessAPI(ApiURL, "chainstoreUpdate", RequestPost, requestHead) + _, err = a.AccessAPI(ApiURL, "chainstoreUpdate", http.MethodPost, requestHead) return } +// QueryBillBalance 获取账号余额 +func (a *API) QueryBillBalance() (int64, error) { + requestHead := a.MakeFnRequestHead() + requestHead["business_data"] = "" + result, err := a.AccessAPI(ApiURL, "getAmount", http.MethodGet, requestHead) + if err != nil { + return 0, err + } + if result["code"].(string) != "200" { + return 0, fmt.Errorf("%s", result["msg"]) + } + balance := &Balance{} + if storeData, ok := result["business_data"]; ok { + if err := json.Unmarshal([]byte(utils.Interface2String(storeData)), balance); err != nil { + return 0, err + } + } else { + return 0, fmt.Errorf("%s", result["msg"]) + } + + return balance.BalanceAmountCent, err +} + +// BalanceRecharge 余额充值 +func (a *API) BalanceRecharge() (err error) { + return fmt.Errorf("蜂鸟暂不支持充值接口") +} + func (a *API) GetStore(storeID string) (getStoreResult *GetOneStoreRespData, err error) { params := GetOneStoreParam{ BaseInfo: BaseInfo{ @@ -94,7 +122,7 @@ func (a *API) GetStore(storeID string) (getStoreResult *GetOneStoreRespData, err params.BusinessData = string(data) paramsMap := utils.Struct2FlatMap(params) - result, err := a.AccessAPI(ApiURL, "chainstoreQuery", RequestPost, paramsMap) + result, err := a.AccessAPI(ApiURL, "chainstoreQuery", http.MethodPost, paramsMap) if err != nil { return nil, err } diff --git a/platformapi/mtwmapi/order.go b/platformapi/mtwmapi/order.go index 69b3c3a4..feb6366b 100644 --- a/platformapi/mtwmapi/order.go +++ b/platformapi/mtwmapi/order.go @@ -845,3 +845,18 @@ type CommonAttrValueList struct { } `json:"valueListIterator"` ValueListSize int `json:"valueListSize"` } + +// GetOrderAddress 获取美团订单加密地址 +// https://tscc.meituan.com/home/doc/market/10619 +func (a *API) GetOrderAddress(orderId int64, reasonType int) (address string, err error) { + result, err := a.AccessAPI2("ecommerce/order/getOrderRecipientAddress", true, map[string]interface{}{ + "order_id": orderId, + "reason_type": reasonType, + }, "success_map", "") + + if err != nil { + return "", err + } + + return result.(map[string]interface{})["recipient_address"].(string), nil +} diff --git a/platformapi/mtwmapi/order_test.go b/platformapi/mtwmapi/order_test.go index e409a220..71649a43 100644 --- a/platformapi/mtwmapi/order_test.go +++ b/platformapi/mtwmapi/order_test.go @@ -31,7 +31,7 @@ func getTimeFromTimestamp(timeStamp int64) time.Time { } func TestOrderGetOrderDetail(t *testing.T) { - result, err := api.OrderGetOrderDetail(4001715692418465050, false) + result, err := api.OrderGetOrderDetail(301957391218748322, false) if err != nil { t.Fatal(err) } @@ -461,3 +461,9 @@ func BatchInitSkuMT2MT(fromSku []*AppFood, toApi *API, vendorStoreID string, off return errList, nil } + +func TestGetOrderAddress(t *testing.T) { + address, err := api.GetOrderAddress(301957513500953108, 3) + fmt.Println(address) + fmt.Println(err) +} diff --git a/utils/riderInfo.go b/utils/riderInfo.go index 31385468..dff41cd7 100644 --- a/utils/riderInfo.go +++ b/utils/riderInfo.go @@ -24,3 +24,9 @@ type RiderInfo struct { Longitude string `json:"longitude"` // 骑手当前的经度,美团使用的是高德坐标系。 OpCode string `json:"opcode"` // 抖音状态(抖音才需要) } + +type RechargeBalance struct { + Amount float64 `json:"amount"` // 充值金额,元 + Category string `json:"category"` // 生成链接适应场景(category有二种类型值:PC、H5) + NotifyUrl string `json:"notify_url"` // 支付成功后跳转的页面(支付宝在支付成功后可以跳转到某个指定的页面,微信支付不支持) +}