This commit is contained in:
邹宗楠
2026-01-21 14:14:26 +08:00
parent abaf8aa75e
commit ab96fc6343
11 changed files with 147 additions and 31 deletions

View File

@@ -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"` // 支付成功后跳转的页面(支付宝在支付成功后可以跳转到某个指定的页面,微信支付不支持)
}

View File

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

View File

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

View File

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

View File

@@ -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"` // 账户余额
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -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"` // 支付成功后跳转的页面(支付宝在支付成功后可以跳转到某个指定的页面,微信支付不支持)
}