diff --git a/go.mod b/go.mod index 8a9c7ee..226c774 100644 --- a/go.mod +++ b/go.mod @@ -3,5 +3,20 @@ module gitee.com/chengdu-lenntc/third-platform-sdk go 1.19 require ( - github.com/zeromicro/go-zero v1.5.5 -) \ No newline at end of file + github.com/stretchr/testify v1.8.4 + github.com/zeromicro/go-zero v1.5.5 +) + +require ( + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/fatih/color v1.15.0 // indirect + github.com/mattn/go-colorable v0.1.13 // indirect + github.com/mattn/go-isatty v0.0.17 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/spaolacci/murmur3 v1.1.0 // indirect + go.opentelemetry.io/otel v1.14.0 // indirect + go.opentelemetry.io/otel/trace v1.14.0 // indirect + go.uber.org/automaxprocs v1.5.3 // indirect + golang.org/x/sys v0.11.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect +) diff --git a/platform/eleme-union/api.go b/platform/eleme-union/api.go index ef7cdb3..265f948 100644 --- a/platform/eleme-union/api.go +++ b/platform/eleme-union/api.go @@ -14,12 +14,12 @@ import ( type ElemeUnionApi interface { // Sign 签名 Sign(publicParam PublicParam, data map[string]interface{}) string - // GetLink 获取推广链接 - GetLink(req *request.AlibabaAlscUnionKbItemPromotionShareCreateRequest) (*response.AlibabaAlscUnionKbItemPromotionShareCreateResponse, error) - // GetOrders 获取推广订单明细 - GetOrders(req *request.AlibabaAlscUnionKbcpaOrderDetailsGetRequest) (*response.AlibabaAlscUnionKbcpaOrderDetailsGetResponse, error) - // GetPositiveOrders 获取推广订单明细报表 - GetPositiveOrders(req *request.AlibabaAlscUnionKbcpxPositiveOrderGetRequest) (*response.AlibabaAlscUnionKbcpxPositiveOrderGetResponse, error) + // KbItemPromotionShareCreate 本地生活媒体创建商品推广链接 + KbItemPromotionShareCreate(req *request.AlibabaAlscUnionKbItemPromotionShareCreateRequest) (*response.AlibabaAlscUnionKbItemPromotionShareCreateResponse, error) + // ElemePromotionOfficialActivityGet 本地联盟饿了么推广官方活动查询 + ElemePromotionOfficialActivityGet(req *request.AlibabaAlscUnionElemePromotionOfficialactivityGetRequest) (*response.AlibabaAlscUnionElemePromotionOfficialactivityGetResponse, error) + // KbcpxPositiveOrderGet 本地生活媒体推广订单明细报表查询 + KbcpxPositiveOrderGet(req *request.AlibabaAlscUnionKbcpxPositiveOrderGetRequest) (*response.AlibabaAlscUnionKbcpxPositiveOrderGetResponse, error) } type elemeUnionApiImpl struct { @@ -41,8 +41,8 @@ func (a *elemeUnionApiImpl) Sign(publicParam PublicParam, data map[string]interf return sdkutil.GetSign(util.StructToMap(publicParam), data, a.client.authConfig.AppSecret) } -// GetLink 获取推广链接 -func (a *elemeUnionApiImpl) GetLink(req *request.AlibabaAlscUnionKbItemPromotionShareCreateRequest) (*response.AlibabaAlscUnionKbItemPromotionShareCreateResponse, error) { +// KbItemPromotionShareCreate 本地生活媒体创建商品推广链接 +func (a *elemeUnionApiImpl) KbItemPromotionShareCreate(req *request.AlibabaAlscUnionKbItemPromotionShareCreateRequest) (*response.AlibabaAlscUnionKbItemPromotionShareCreateResponse, error) { resp, err := a.client.abilityClient.AlibabaAlscUnionKbItemPromotionShareCreate(req) if err != nil { a.log.WithFields(logx.LogField{Key: "req", Value: req}).Errorf("[elemeUnionApiImpl][GetLink] get link failed, error: %v", err) @@ -51,18 +51,18 @@ func (a *elemeUnionApiImpl) GetLink(req *request.AlibabaAlscUnionKbItemPromotion return resp, nil } -// GetOrders 获取推广订单 -func (a *elemeUnionApiImpl) GetOrders(req *request.AlibabaAlscUnionKbcpaOrderDetailsGetRequest) (*response.AlibabaAlscUnionKbcpaOrderDetailsGetResponse, error) { - resp, err := a.client.abilityClient.AlibabaAlscUnionKbcpaOrderDetailsGet(req) +// ElemePromotionOfficialActivityGet 本地联盟饿了么推广官方活动查询 +func (a *elemeUnionApiImpl) ElemePromotionOfficialActivityGet(req *request.AlibabaAlscUnionElemePromotionOfficialactivityGetRequest) (*response.AlibabaAlscUnionElemePromotionOfficialactivityGetResponse, error) { + resp, err := a.client.abilityClient.AlibabaAlscUnionElemePromotionOfficialactivityGet(req) if err != nil { - a.log.WithFields(logx.LogField{Key: "req", Value: req}).Errorf("[elemeUnionApiImpl][GetOrders] get orders failed, error: %v", err) + a.log.WithFields(logx.LogField{Key: "req", Value: req}).Errorf("[elemeUnionApiImpl][PromotionOfficialActivityGet] http request failed, error: %v", err) return nil, err } return resp, nil } -// GetPositiveOrders 获取推广订单明细报表 -func (a *elemeUnionApiImpl) GetPositiveOrders(req *request.AlibabaAlscUnionKbcpxPositiveOrderGetRequest) (*response.AlibabaAlscUnionKbcpxPositiveOrderGetResponse, error) { +// KbcpxPositiveOrderGet 本地生活媒体推广订单明细报表查询 +func (a *elemeUnionApiImpl) KbcpxPositiveOrderGet(req *request.AlibabaAlscUnionKbcpxPositiveOrderGetRequest) (*response.AlibabaAlscUnionKbcpxPositiveOrderGetResponse, error) { resp, err := a.client.abilityClient.AlibabaAlscUnionKbcpxPositiveOrderGet(req) if err != nil { a.log.WithFields(logx.LogField{Key: "req", Value: req}).Errorf("[elemeUnionApiImpl][GetPositiveOrders] get positive orders failed, error: %v", err) diff --git a/platform/eleme-union/api_test.go b/platform/eleme-union/api_test.go new file mode 100644 index 0000000..4c7182d --- /dev/null +++ b/platform/eleme-union/api_test.go @@ -0,0 +1,84 @@ +package eleme_union + +import ( + "context" + "testing" + "time" + + "github.com/stretchr/testify/suite" + "github.com/zeromicro/go-zero/core/logx" + + "gitee.com/chengdu-lenntc/third-platform-sdk/sdk/topsdk/defaultability/domain" + "gitee.com/chengdu-lenntc/third-platform-sdk/sdk/topsdk/defaultability/request" + "gitee.com/chengdu-lenntc/third-platform-sdk/util/pointer" +) + +// api-单元测试 +type apiClientSuite struct { + suite.Suite + api ElemeUnionApi +} + +func TestApiClient(t *testing.T) { + suite.Run(t, new(apiClientSuite)) +} + +func (a *apiClientSuite) SetupSuite() { + log := logx.WithContext(context.Background()) + apiClient := NewApiClient(log, AuthConfig{ + AppKey: "34632005", + AppSecret: "b0e6b6654825e6124f743b2528be95d7", + }) + a.api = apiClient +} + +func (a *apiClientSuite) Test_Sign() { + data := map[string]interface{}{ + "method": "test", + } + publicParam := PublicParam{ + Method: "taobao.item.seller.get", // 必传 API接口名称,具体参见各平台API接口文档,例:taobao.item.seller.get + AppKey: "34632005", // 必传 TOP分配给应用的AppKey。例:12345678 + Session: "", // 可选 用户授权成功后,平台颁发给应用的授权session,详细介绍请点击这里。当此API文档的标签上注明:“需要授权”,则此参数必传;“不需要授权”,则此参数不需要传。 + Timestamp: time.Now().Format("2006-01-02 15:04:05"), // 必传 时间戳,格式为yyyy-MM-dd HH:mm:ss,时区为GMT+8,例如:2016-01-01 12:00:00。淘宝API服务端允许客户端请求最大时间误差为10分钟。 + V: "2.0", // 必传 API协议版本,可选值:2.0 + SignMethod: "md5", // 必传 签名的摘要算法,可选值为:hmac,md5,hmac-sha256。 + Format: "json", // 否 返回内容响应格式。不传默认为xml格式,可选值:xml,json。 + Simplify: false, // 否 是否采用精简JSON返回格式,仅当format=json时有效,可选值:false,true,不传为false。 + } + + sign := a.api.Sign(publicParam, data) + a.T().Logf("=====[TestSign] sign: %s", sign) +} + +func (a *apiClientSuite) Test_ElemePromotionOfficialActivityGet() { + req := &request.AlibabaAlscUnionElemePromotionOfficialactivityGetRequest{ + QueryRequest: &domain.AlibabaAlscUnionElemePromotionOfficialactivityGetActivityRequest{ + Pid: pointer.String("alsc_23378482_4796002_15513017"), + ActivityId: pointer.String("10690"), + }, + } + resp, err := a.api.ElemePromotionOfficialActivityGet(req) + if err != nil { + a.T().Errorf("=====[Test_ElemePromotionOfficialActivityGet] err: %v", err) + return + } + a.T().Logf("=====[Test_ElemePromotionOfficialActivityGet] resp: %+v", resp) +} + +func (a *apiClientSuite) Test_KbcpxPositiveOrderGet() { + req := &request.AlibabaAlscUnionKbcpxPositiveOrderGetRequest{ + DateType: pointer.Int64(1), + Pid: pointer.String("alsc_23378482_4796002_15513017"), + BizUnit: pointer.Int64(2), + PageSize: pointer.Int64(10), + PageNumber: pointer.Int64(1), + StartDate: pointer.String("2024-05-01 00:00:00"), + } + resp, err := a.api.KbcpxPositiveOrderGet(req) + if err != nil { + a.T().Errorf("=====[Test_GetOrders] err: %v", err) + return + } + a.T().Logf("=====[Test_GetOrders] resp: %+v", resp) +} diff --git a/platform/eleme-union/client.go b/platform/eleme-union/client.go index 51f5c78..3789637 100644 --- a/platform/eleme-union/client.go +++ b/platform/eleme-union/client.go @@ -30,7 +30,7 @@ func NewApiClient(log logx.Logger, conf AuthConfig) ElemeUnionApi { } func newClient(log logx.Logger, conf AuthConfig) *Client { - tc := topsdk.NewDefaultTopClient(conf.AppKey, conf.AppSecret, "https://eco.taobao.com/router/rest", 10, 30) + tc := topsdk.NewDefaultTopClient(conf.AppKey, conf.AppSecret, "https://eco.taobao.com/router/rest", 20000, 20000) return &Client{ topClient: &tc, abilityClient: defaultability.NewDefaultability(&tc), diff --git a/util/pointer/trans.go b/util/pointer/trans.go new file mode 100644 index 0000000..4d048cd --- /dev/null +++ b/util/pointer/trans.go @@ -0,0 +1,491 @@ +package pointer + +func String(a string) *string { + return &a +} + +func StringValue(a *string) string { + if a == nil { + return "" + } + return *a +} + +func Int(a int) *int { + return &a +} + +func IntValue(a *int) int { + if a == nil { + return 0 + } + return *a +} + +func Int8(a int8) *int8 { + return &a +} + +func Int8Value(a *int8) int8 { + if a == nil { + return 0 + } + return *a +} + +func Int16(a int16) *int16 { + return &a +} + +func Int16Value(a *int16) int16 { + if a == nil { + return 0 + } + return *a +} + +func Int32(a int32) *int32 { + return &a +} + +func Int32Value(a *int32) int32 { + if a == nil { + return 0 + } + return *a +} + +func Int64(a int64) *int64 { + return &a +} + +func Int64Value(a *int64) int64 { + if a == nil { + return 0 + } + return *a +} + +func Bool(a bool) *bool { + return &a +} + +func BoolValue(a *bool) bool { + if a == nil { + return false + } + return *a +} + +func Uint(a uint) *uint { + return &a +} + +func UintValue(a *uint) uint { + if a == nil { + return 0 + } + return *a +} + +func Uint8(a uint8) *uint8 { + return &a +} + +func Uint8Value(a *uint8) uint8 { + if a == nil { + return 0 + } + return *a +} + +func Uint16(a uint16) *uint16 { + return &a +} + +func Uint16Value(a *uint16) uint16 { + if a == nil { + return 0 + } + return *a +} + +func Uint32(a uint32) *uint32 { + return &a +} + +func Uint32Value(a *uint32) uint32 { + if a == nil { + return 0 + } + return *a +} + +func Uint64(a uint64) *uint64 { + return &a +} + +func Uint64Value(a *uint64) uint64 { + if a == nil { + return 0 + } + return *a +} + +func Float32(a float32) *float32 { + return &a +} + +func Float32Value(a *float32) float32 { + if a == nil { + return 0 + } + return *a +} + +func Float64(a float64) *float64 { + return &a +} + +func Float64Value(a *float64) float64 { + if a == nil { + return 0 + } + return *a +} + +func IntSlice(a []int) []*int { + if a == nil { + return nil + } + res := make([]*int, len(a)) + for i := 0; i < len(a); i++ { + res[i] = &a[i] + } + return res +} + +func IntValueSlice(a []*int) []int { + if a == nil { + return nil + } + res := make([]int, len(a)) + for i := 0; i < len(a); i++ { + if a[i] != nil { + res[i] = *a[i] + } + } + return res +} + +func Int8Slice(a []int8) []*int8 { + if a == nil { + return nil + } + res := make([]*int8, len(a)) + for i := 0; i < len(a); i++ { + res[i] = &a[i] + } + return res +} + +func Int8ValueSlice(a []*int8) []int8 { + if a == nil { + return nil + } + res := make([]int8, len(a)) + for i := 0; i < len(a); i++ { + if a[i] != nil { + res[i] = *a[i] + } + } + return res +} + +func Int16Slice(a []int16) []*int16 { + if a == nil { + return nil + } + res := make([]*int16, len(a)) + for i := 0; i < len(a); i++ { + res[i] = &a[i] + } + return res +} + +func Int16ValueSlice(a []*int16) []int16 { + if a == nil { + return nil + } + res := make([]int16, len(a)) + for i := 0; i < len(a); i++ { + if a[i] != nil { + res[i] = *a[i] + } + } + return res +} + +func Int32Slice(a []int32) []*int32 { + if a == nil { + return nil + } + res := make([]*int32, len(a)) + for i := 0; i < len(a); i++ { + res[i] = &a[i] + } + return res +} + +func Int32ValueSlice(a []*int32) []int32 { + if a == nil { + return nil + } + res := make([]int32, len(a)) + for i := 0; i < len(a); i++ { + if a[i] != nil { + res[i] = *a[i] + } + } + return res +} + +func Int64Slice(a []int64) []*int64 { + if a == nil { + return nil + } + res := make([]*int64, len(a)) + for i := 0; i < len(a); i++ { + res[i] = &a[i] + } + return res +} + +func Int64ValueSlice(a []*int64) []int64 { + if a == nil { + return nil + } + res := make([]int64, len(a)) + for i := 0; i < len(a); i++ { + if a[i] != nil { + res[i] = *a[i] + } + } + return res +} + +func UintSlice(a []uint) []*uint { + if a == nil { + return nil + } + res := make([]*uint, len(a)) + for i := 0; i < len(a); i++ { + res[i] = &a[i] + } + return res +} + +func UintValueSlice(a []*uint) []uint { + if a == nil { + return nil + } + res := make([]uint, len(a)) + for i := 0; i < len(a); i++ { + if a[i] != nil { + res[i] = *a[i] + } + } + return res +} + +func Uint8Slice(a []uint8) []*uint8 { + if a == nil { + return nil + } + res := make([]*uint8, len(a)) + for i := 0; i < len(a); i++ { + res[i] = &a[i] + } + return res +} + +func Uint8ValueSlice(a []*uint8) []uint8 { + if a == nil { + return nil + } + res := make([]uint8, len(a)) + for i := 0; i < len(a); i++ { + if a[i] != nil { + res[i] = *a[i] + } + } + return res +} + +func Uint16Slice(a []uint16) []*uint16 { + if a == nil { + return nil + } + res := make([]*uint16, len(a)) + for i := 0; i < len(a); i++ { + res[i] = &a[i] + } + return res +} + +func Uint16ValueSlice(a []*uint16) []uint16 { + if a == nil { + return nil + } + res := make([]uint16, len(a)) + for i := 0; i < len(a); i++ { + if a[i] != nil { + res[i] = *a[i] + } + } + return res +} + +func Uint32Slice(a []uint32) []*uint32 { + if a == nil { + return nil + } + res := make([]*uint32, len(a)) + for i := 0; i < len(a); i++ { + res[i] = &a[i] + } + return res +} + +func Uint32ValueSlice(a []*uint32) []uint32 { + if a == nil { + return nil + } + res := make([]uint32, len(a)) + for i := 0; i < len(a); i++ { + if a[i] != nil { + res[i] = *a[i] + } + } + return res +} + +func Uint64Slice(a []uint64) []*uint64 { + if a == nil { + return nil + } + res := make([]*uint64, len(a)) + for i := 0; i < len(a); i++ { + res[i] = &a[i] + } + return res +} + +func Uint64ValueSlice(a []*uint64) []uint64 { + if a == nil { + return nil + } + res := make([]uint64, len(a)) + for i := 0; i < len(a); i++ { + if a[i] != nil { + res[i] = *a[i] + } + } + return res +} + +func Float32Slice(a []float32) []*float32 { + if a == nil { + return nil + } + res := make([]*float32, len(a)) + for i := 0; i < len(a); i++ { + res[i] = &a[i] + } + return res +} + +func Float32ValueSlice(a []*float32) []float32 { + if a == nil { + return nil + } + res := make([]float32, len(a)) + for i := 0; i < len(a); i++ { + if a[i] != nil { + res[i] = *a[i] + } + } + return res +} + +func Float64Slice(a []float64) []*float64 { + if a == nil { + return nil + } + res := make([]*float64, len(a)) + for i := 0; i < len(a); i++ { + res[i] = &a[i] + } + return res +} + +func Float64ValueSlice(a []*float64) []float64 { + if a == nil { + return nil + } + res := make([]float64, len(a)) + for i := 0; i < len(a); i++ { + if a[i] != nil { + res[i] = *a[i] + } + } + return res +} + +func StringSlice(a []string) []*string { + if a == nil { + return nil + } + res := make([]*string, len(a)) + for i := 0; i < len(a); i++ { + res[i] = &a[i] + } + return res +} + +func StringSliceValue(a []*string) []string { + if a == nil { + return nil + } + res := make([]string, len(a)) + for i := 0; i < len(a); i++ { + if a[i] != nil { + res[i] = *a[i] + } + } + return res +} + +func BoolSlice(a []bool) []*bool { + if a == nil { + return nil + } + res := make([]*bool, len(a)) + for i := 0; i < len(a); i++ { + res[i] = &a[i] + } + return res +} + +func BoolSliceValue(a []*bool) []bool { + if a == nil { + return nil + } + res := make([]bool, len(a)) + for i := 0; i < len(a); i++ { + if a[i] != nil { + res[i] = *a[i] + } + } + return res +}