eleme union添加推广官方活动查询api

This commit is contained in:
wukesheng 2024-05-07 23:26:53 +08:00
parent 8bb3596457
commit ec5b255d9d
5 changed files with 607 additions and 17 deletions

19
go.mod
View File

@ -3,5 +3,20 @@ module gitee.com/chengdu-lenntc/third-platform-sdk
go 1.19
require (
github.com/zeromicro/go-zero v1.5.5
)
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
)

View File

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

View File

@ -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", // 必传 签名的摘要算法可选值为hmacmd5hmac-sha256。
Format: "json", // 否 返回内容响应格式。不传默认为xml格式可选值xmljson。
Simplify: false, // 否 是否采用精简JSON返回格式仅当format=json时有效可选值falsetrue不传为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)
}

View File

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

491
util/pointer/trans.go Normal file
View File

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