refactor(utility): 重构 tmall API 调用逻辑- 引入 retry 包实现请求重试机制
- 优化错误处理,使用 gerror 包进行错误封装 - 统一请求响应处理,使用指针类型进行空值判断 -调整变量命名,提高代码可读性
This commit is contained in:
@@ -4,6 +4,8 @@ import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"github.com/duke-git/lancet/v2/pointer"
|
||||
"github.com/duke-git/lancet/v2/retry"
|
||||
"github.com/gogf/gf/v2/errors/gerror"
|
||||
"github.com/gogf/gf/v2/os/glog"
|
||||
"github.com/gogf/gf/v2/os/gtime"
|
||||
@@ -23,18 +25,22 @@ func (c *InnerClient) OAuth2Login(ctx context.Context, code string) (res *tmallM
|
||||
return
|
||||
}
|
||||
cli := topsdk.NewDefaultTopClient(cfg.AppKey, cfg.AppSecret, cfg.Gateway, 1000*60*5, 1000*60*5)
|
||||
retResponse, err := ability304.NewAbility304(&cli).TaobaoTopAuthTokenCreate(&request.TaobaoTopAuthTokenCreateRequest{
|
||||
Code: &code,
|
||||
})
|
||||
if retResponse == nil || err != nil {
|
||||
err = errors.Join(err, gerror.New("淘宝授权错误"))
|
||||
return
|
||||
resp := new(response.TaobaoTopAuthTokenCreateResponse)
|
||||
if err2 := retry.Retry(func() error {
|
||||
resp, err = ability304.NewAbility304(&cli).TaobaoTopAuthTokenCreate(&request.TaobaoTopAuthTokenCreateRequest{
|
||||
Code: &code,
|
||||
})
|
||||
if pointer.IsNil(resp) || resp.RequestId == "" || err != nil {
|
||||
err = gerror.New(err.Error())
|
||||
}
|
||||
return err
|
||||
}, retry.Context(ctx), retry.RetryTimes(5)); err2 != nil {
|
||||
return nil, errors.Join(err, gerror.New("淘宝授权错误"))
|
||||
}
|
||||
glog.Info(ctx, "淘宝授权结果", retResponse)
|
||||
glog.Info(ctx, "淘宝授权结果", resp)
|
||||
res = &tmallModel.OAuthResponse{}
|
||||
if err2 := json.Unmarshal([]byte(retResponse.TokenResult), &res); err2 == nil {
|
||||
if err2 := json.Unmarshal([]byte(resp.TokenResult), &res); err2 == nil {
|
||||
_ = cache.NewCache().Set(ctx, cache.TMallGameThirdPartyCacheKeyTMall, *res, time.Duration(res.ExpiresIn)*gtime.S)
|
||||
} else {
|
||||
}
|
||||
return
|
||||
}
|
||||
@@ -46,17 +52,17 @@ func (c *InnerClient) OAuth2TokenRefresh(ctx context.Context, refreshToken strin
|
||||
}
|
||||
//重试次数
|
||||
retResponse := &response.TaobaoTopAuthTokenRefreshResponse{}
|
||||
for range 5 {
|
||||
if err2 := retry.Retry(func() error {
|
||||
cli := topsdk.NewDefaultTopClient(cfg.AppKey, cfg.AppSecret, cfg.Gateway, 1000*60*5, 1000*60*5)
|
||||
retResponse, err = ability304.NewAbility304(&cli).TaobaoTopAuthTokenRefresh(&request.TaobaoTopAuthTokenRefreshRequest{
|
||||
RefreshToken: &refreshToken,
|
||||
})
|
||||
if err == nil || retResponse != nil {
|
||||
break
|
||||
if pointer.IsNil(retResponse) || retResponse.RequestId == "" || err != nil {
|
||||
err = gerror.New(err.Error())
|
||||
}
|
||||
}
|
||||
if retResponse == nil || err != nil {
|
||||
return nil, errors.Join(err, gerror.New("淘宝授权错误"))
|
||||
return err
|
||||
}, retry.Context(ctx), retry.RetryTimes(5)); err2 != nil {
|
||||
return nil, errors.Join(err, gerror.New("淘宝刷新token错误"))
|
||||
}
|
||||
res = &tmallModel.OAuthResponse{}
|
||||
if err = json.Unmarshal([]byte(retResponse.TokenResult), &res); err == nil {
|
||||
|
||||
@@ -5,6 +5,7 @@ import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"github.com/duke-git/lancet/v2/pointer"
|
||||
"github.com/duke-git/lancet/v2/retry"
|
||||
"github.com/gogf/gf/v2/errors/gerror"
|
||||
"github.com/gogf/gf/v2/util/gconv"
|
||||
"kami/utility/integration/tmall"
|
||||
@@ -20,14 +21,18 @@ func (c *InnerClient) TradeRatesAdd(ctx context.Context, oid int64) (isSucceed b
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
cli := topsdk.NewDefaultTopClient(cfg.AppKey, cfg.AppSecret, cfg.Gateway, 1000*60*5, 1000*60*5)
|
||||
result, err := defaultability.NewDefaultability(&cli).TaobaoTraderateExplainAdd(&request.TaobaoTraderateExplainAddRequest{
|
||||
Oid: gconv.PtrInt64(oid),
|
||||
Reply: gconv.PtrString("买家爽快💐💐💐"),
|
||||
}, sessionInfo.AccessToken)
|
||||
if pointer.IsNil(result) || err != nil {
|
||||
err = errors.Join(err, gerror.New("淘宝授权错误"))
|
||||
return
|
||||
if err2 := retry.Retry(func() error {
|
||||
cli := topsdk.NewDefaultTopClient(cfg.AppKey, cfg.AppSecret, cfg.Gateway, 1000*60*5, 1000*60*5)
|
||||
result, err2 := defaultability.NewDefaultability(&cli).TaobaoTraderateExplainAdd(&request.TaobaoTraderateExplainAddRequest{
|
||||
Oid: gconv.PtrInt64(oid),
|
||||
Reply: gconv.PtrString("买家爽快💐💐💐"),
|
||||
}, sessionInfo.AccessToken)
|
||||
if pointer.IsNil(result) || result.RequestId == "" || err2 != nil {
|
||||
err2 = errors.Join(err2, gerror.New("淘宝授权错误"))
|
||||
}
|
||||
return err2
|
||||
}, retry.Context(ctx), retry.RetryTimes(5)); err2 != nil {
|
||||
return isSucceed, errors.Join(err, gerror.New("淘宝评价错误"))
|
||||
}
|
||||
isSucceed = true
|
||||
return
|
||||
@@ -40,15 +45,19 @@ func (c *InnerClient) SendImageMsg(ctx context.Context, oid int64) (isSucceed bo
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
cli := topsdk.NewDefaultTopClient(cfg.AppKey, cfg.AppSecret, cfg.Gateway, 1000*60*5, 1000*60*5)
|
||||
result, err := defaultability.NewDefaultability(&cli).TaobaoTmcMessageProduce(&request.TaobaoTmcMessageProduceRequest{
|
||||
Content: gconv.PtrString(fmt.Sprintf("{\"tid\":2895732958732,\"seller_nick\":\"helloworld\"}")),
|
||||
Topic: nil,
|
||||
MediaContent: nil,
|
||||
}, sessionInfo.AccessToken)
|
||||
if pointer.IsNil(result) || err != nil {
|
||||
err = errors.Join(err, gerror.New("淘宝授权错误"))
|
||||
return
|
||||
if err2 := retry.Retry(func() error {
|
||||
cli := topsdk.NewDefaultTopClient(cfg.AppKey, cfg.AppSecret, cfg.Gateway, 1000*60*5, 1000*60*5)
|
||||
result, err2 := defaultability.NewDefaultability(&cli).TaobaoTmcMessageProduce(&request.TaobaoTmcMessageProduceRequest{
|
||||
Content: gconv.PtrString(fmt.Sprintf("{\"tid\":2895732958732,\"seller_nick\":\"helloworld\"}")),
|
||||
Topic: nil,
|
||||
MediaContent: nil,
|
||||
}, sessionInfo.AccessToken)
|
||||
if pointer.IsNil(result) || err2 != nil {
|
||||
err2 = errors.Join(err, gerror.New("淘宝授权错误"))
|
||||
}
|
||||
return err2
|
||||
}, retry.Context(ctx), retry.RetryTimes(5)); err2 != nil {
|
||||
return isSucceed, errors.Join(err, gerror.New("淘宝图片消息错误"))
|
||||
}
|
||||
isSucceed = true
|
||||
return
|
||||
|
||||
@@ -4,6 +4,7 @@ import (
|
||||
"context"
|
||||
"errors"
|
||||
"github.com/duke-git/lancet/v2/pointer"
|
||||
"github.com/duke-git/lancet/v2/retry"
|
||||
"github.com/gogf/gf/v2/errors/gerror"
|
||||
"github.com/gogf/gf/v2/util/gconv"
|
||||
"kami/utility/integration/tmall"
|
||||
@@ -12,6 +13,7 @@ import (
|
||||
"topsdk/ability648"
|
||||
"topsdk/ability648/domain"
|
||||
"topsdk/ability648/request"
|
||||
"topsdk/ability648/response"
|
||||
"topsdk/util"
|
||||
)
|
||||
|
||||
@@ -23,14 +25,19 @@ func (c *InnerClient) TBMallTradeGet(ctx context.Context, tid int) (res *domain.
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
cli := topsdk.NewDefaultTopClient(cfg.AppKey, cfg.AppSecret, cfg.Gateway, 1000*60*5, 1000*60*5)
|
||||
result, err := ability648.NewAbility648(&cli).TaobaoTradeGet(&request.TaobaoTradeGetRequest{
|
||||
Tid: gconv.PtrInt64(tid),
|
||||
Fields: &[]string{"tid", "buyer_nick", "type", "status", "buyer_memo", "payment", "end_time", "created", "seller_rate", "buyer_rate", "total_fee", "pay_time", "end_time", "modified", "consign_time", "buyer_memo", "seller_memo", "alipay_no", "buyer_message"},
|
||||
}, sessionInfo.AccessToken)
|
||||
if pointer.IsNil(result) || err != nil {
|
||||
err = errors.Join(err, gerror.New("天猫订单获取错误"))
|
||||
return
|
||||
result := new(response.TaobaoTradeGetResponse)
|
||||
if err2 := retry.Retry(func() error {
|
||||
cli := topsdk.NewDefaultTopClient(cfg.AppKey, cfg.AppSecret, cfg.Gateway, 1000*60*5, 1000*60*5)
|
||||
result, err = ability648.NewAbility648(&cli).TaobaoTradeGet(&request.TaobaoTradeGetRequest{
|
||||
Tid: gconv.PtrInt64(tid),
|
||||
Fields: &[]string{"tid", "buyer_nick", "type", "status", "buyer_memo", "payment", "end_time", "created", "seller_rate", "buyer_rate", "total_fee", "pay_time", "end_time", "modified", "consign_time", "buyer_memo", "seller_memo", "alipay_no", "buyer_message"},
|
||||
}, sessionInfo.AccessToken)
|
||||
if pointer.IsNil(result) || result.RequestId == "" || err != nil {
|
||||
err = errors.Join(err, gerror.New("天猫订单获取错误"))
|
||||
}
|
||||
return err
|
||||
}, retry.Context(ctx), retry.RetryTimes(5)); err2 != nil {
|
||||
return nil, errors.Join(err, gerror.New("天猫订单获取错误"))
|
||||
}
|
||||
return &result.Trade, nil
|
||||
}
|
||||
@@ -47,17 +54,22 @@ func (c *InnerClient) GetTradeGetListByCreatedTime(ctx context.Context, tradeSta
|
||||
var pageNo int64 = 1
|
||||
hasNext := true
|
||||
for hasNext {
|
||||
result, err2 := ability648.NewAbility648(&cli).TaobaoTradesSoldGet(&request.TaobaoTradesSoldGetRequest{
|
||||
StartCreated: &startCreated,
|
||||
Fields: &[]string{"tid", "type", "status", "payment", "oid", "orders"},
|
||||
PageNo: &pageNo,
|
||||
Status: gconv.PtrString(tradeStatus),
|
||||
PageSize: gconv.PtrInt64(100),
|
||||
UseHasNext: gconv.PtrBool(true),
|
||||
}, sessionInfo.AccessToken)
|
||||
if pointer.IsNil(result) || err2 != nil {
|
||||
err = gerror.Wrap(err2, "淘宝授权错误")
|
||||
return
|
||||
result := new(response.TaobaoTradesSoldGetResponse)
|
||||
if err2 := retry.Retry(func() error {
|
||||
result, err = ability648.NewAbility648(&cli).TaobaoTradesSoldGet(&request.TaobaoTradesSoldGetRequest{
|
||||
StartCreated: &startCreated,
|
||||
Fields: &[]string{"tid", "type", "status", "payment", "oid", "orders"},
|
||||
PageNo: &pageNo,
|
||||
Status: gconv.PtrString(tradeStatus),
|
||||
PageSize: gconv.PtrInt64(100),
|
||||
UseHasNext: gconv.PtrBool(true),
|
||||
}, sessionInfo.AccessToken)
|
||||
if pointer.IsNil(result) || result.RequestId == "" || err != nil {
|
||||
err = gerror.Wrap(err, "淘宝授权错误")
|
||||
}
|
||||
return err
|
||||
}, retry.Context(ctx), retry.RetryTimes(5)); err2 != nil {
|
||||
return tradeList, errors.Join(err, gerror.New("淘宝授权错误"))
|
||||
}
|
||||
hasNext = result.HasNext
|
||||
pageNo++ // 页码+1
|
||||
@@ -78,18 +90,23 @@ func (c *InnerClient) GetTradeGetListByCreatedTimeAndRateStatus(ctx context.Cont
|
||||
var pageNo int64 = 1
|
||||
hasNext := true
|
||||
for hasNext {
|
||||
result, err2 := ability648.NewAbility648(&cli).TaobaoTradesSoldGet(&request.TaobaoTradesSoldGetRequest{
|
||||
StartCreated: &startCreated,
|
||||
Fields: &[]string{"tid", "type", "status", "payment", "oid", "orders"},
|
||||
PageNo: &pageNo,
|
||||
RateStatus: gconv.PtrString(rateStatus),
|
||||
Status: gconv.PtrString(tradeStatus),
|
||||
PageSize: gconv.PtrInt64(100),
|
||||
UseHasNext: gconv.PtrBool(true),
|
||||
}, sessionInfo.AccessToken)
|
||||
if pointer.IsNil(result) || err2 != nil {
|
||||
err = gerror.Wrap(err2, "淘宝授权错误")
|
||||
return
|
||||
result := new(response.TaobaoTradesSoldGetResponse)
|
||||
if err2 := retry.Retry(func() error {
|
||||
result, err = ability648.NewAbility648(&cli).TaobaoTradesSoldGet(&request.TaobaoTradesSoldGetRequest{
|
||||
StartCreated: &startCreated,
|
||||
Fields: &[]string{"tid", "type", "status", "payment", "oid", "orders"},
|
||||
PageNo: &pageNo,
|
||||
RateStatus: gconv.PtrString(rateStatus),
|
||||
Status: gconv.PtrString(tradeStatus),
|
||||
PageSize: gconv.PtrInt64(100),
|
||||
UseHasNext: gconv.PtrBool(true),
|
||||
}, sessionInfo.AccessToken)
|
||||
if pointer.IsNil(result) || result.RequestId == "" || err != nil {
|
||||
err = gerror.Wrap(err, "淘宝授权错误")
|
||||
}
|
||||
return err
|
||||
}, retry.Context(ctx), retry.RetryTimes(5)); err2 != nil {
|
||||
return tradeList, errors.Join(err, gerror.New("淘宝授权错误"))
|
||||
}
|
||||
hasNext = result.HasNext
|
||||
pageNo++ // 页码+1
|
||||
@@ -105,12 +122,18 @@ func (c *InnerClient) VirtualDelivery(ctx context.Context, tid int64) (isSucceed
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
var result *response.TaobaoLogisticsDummySendResponse
|
||||
cli := topsdk.NewDefaultTopClient(cfg.AppKey, cfg.AppSecret, cfg.Gateway, 1000*60*5, 1000*60*5)
|
||||
result, err := ability648.NewAbility648(&cli).TaobaoLogisticsDummySend(&request.TaobaoLogisticsDummySendRequest{
|
||||
Tid: &tid,
|
||||
}, sessionInfo.AccessToken)
|
||||
if pointer.IsNil(result) || err != nil {
|
||||
return
|
||||
if err2 := retry.Retry(func() error {
|
||||
result, err = ability648.NewAbility648(&cli).TaobaoLogisticsDummySend(&request.TaobaoLogisticsDummySendRequest{
|
||||
Tid: &tid,
|
||||
}, sessionInfo.AccessToken)
|
||||
if pointer.IsNil(result) || result.RequestId == "" || err != nil {
|
||||
err = errors.Join(err, gerror.New("淘宝授权错误"))
|
||||
}
|
||||
return err
|
||||
}, retry.Context(ctx), retry.RetryTimes(5)); err2 != nil {
|
||||
return isSucceed, errors.Join(err, gerror.New("淘宝授权错误"))
|
||||
}
|
||||
isSucceed = *result.Shipping.IsSuccess
|
||||
return
|
||||
@@ -123,15 +146,21 @@ func (c *InnerClient) TradeRatesGet(ctx context.Context, tid int64) (tradeRate [
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
cli := topsdk.NewDefaultTopClient(cfg.AppKey, cfg.AppSecret, cfg.Gateway, 1000*60*5, 1000*60*5)
|
||||
result, err := ability648.NewAbility648(&cli).TaobaoTraderatesGet(&request.TaobaoTraderatesGetRequest{
|
||||
RateType: gconv.PtrString("give"),
|
||||
Role: gconv.PtrString("buyer"),
|
||||
Tid: &tid,
|
||||
PageSize: gconv.PtrInt64(150),
|
||||
}, sessionInfo.AccessToken)
|
||||
if pointer.IsNil(result) || err != nil {
|
||||
return
|
||||
var result *response.TaobaoTraderatesGetResponse
|
||||
if err2 := retry.Retry(func() error {
|
||||
cli := topsdk.NewDefaultTopClient(cfg.AppKey, cfg.AppSecret, cfg.Gateway, 1000*60*5, 1000*60*5)
|
||||
result, err = ability648.NewAbility648(&cli).TaobaoTraderatesGet(&request.TaobaoTraderatesGetRequest{
|
||||
RateType: gconv.PtrString("give"),
|
||||
Role: gconv.PtrString("buyer"),
|
||||
Tid: &tid,
|
||||
PageSize: gconv.PtrInt64(150),
|
||||
}, sessionInfo.AccessToken)
|
||||
if pointer.IsNil(result) || result.RequestId == "" || err != nil {
|
||||
err = errors.Join(err, gerror.New("淘宝授权错误"))
|
||||
}
|
||||
return err
|
||||
}, retry.Context(ctx), retry.RetryTimes(5)); err2 != nil {
|
||||
return tradeRate, errors.Join(err, gerror.New("淘宝授权错误"))
|
||||
}
|
||||
tradeRate = result.TradeRates
|
||||
return
|
||||
|
||||
Reference in New Issue
Block a user