feat:top sdk

This commit is contained in:
dylan 2024-08-05 15:29:07 +08:00
commit a8a51379ef
68 changed files with 2744 additions and 0 deletions

8
.idea/.gitignore vendored Normal file
View File

@ -0,0 +1,8 @@
# 默认忽略的文件
/shelf/
/workspace.xml
# 基于编辑器的 HTTP 客户端请求
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml

8
.idea/modules.xml Normal file
View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/topsdk.iml" filepath="$PROJECT_DIR$/.idea/topsdk.iml" />
</modules>
</component>
</project>

9
.idea/topsdk.iml Normal file
View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="WEB_MODULE" version="4">
<component name="Go" enabled="true" />
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

6
.idea/vcs.xml Normal file
View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
</component>
</project>

198
ability132/Ability132.go Normal file
View File

@ -0,0 +1,198 @@
package ability132
import (
"errors"
"log"
"topsdk"
"topsdk/ability132/request"
"topsdk/ability132/response"
"topsdk/util"
)
type Ability132 struct {
Client *topsdk.TopClient
}
func NewAbility132(client *topsdk.TopClient) *Ability132 {
return &Ability132{client}
}
/*
批量发送消息
*/
func (ability *Ability132) TaobaoTmcMessagesProduce(req *request.TaobaoTmcMessagesProduceRequest) (*response.TaobaoTmcMessagesProduceResponse, error) {
if ability.Client == nil {
return nil, errors.New("Ability132 topClient is nil")
}
var jsonStr, err = ability.Client.Execute("taobao.tmc.messages.produce", req.ToMap(), req.ToFileMap())
var respStruct = response.TaobaoTmcMessagesProduceResponse{}
if err != nil {
log.Println("taobaoTmcMessagesProduce error", err)
return &respStruct, err
}
err = util.HandleJsonResponse(jsonStr, &respStruct)
if respStruct.Body == "" || len(respStruct.Body) == 0 {
respStruct.Body = jsonStr
}
return &respStruct, err
}
/*
获取自定义用户分组列表
*/
func (ability *Ability132) TaobaoTmcGroupsGet(req *request.TaobaoTmcGroupsGetRequest) (*response.TaobaoTmcGroupsGetResponse, error) {
if ability.Client == nil {
return nil, errors.New("Ability132 topClient is nil")
}
var jsonStr, err = ability.Client.Execute("taobao.tmc.groups.get", req.ToMap(), req.ToFileMap())
var respStruct = response.TaobaoTmcGroupsGetResponse{}
if err != nil {
log.Println("taobaoTmcGroupsGet error", err)
return &respStruct, err
}
err = util.HandleJsonResponse(jsonStr, &respStruct)
if respStruct.Body == "" || len(respStruct.Body) == 0 {
respStruct.Body = jsonStr
}
return &respStruct, err
}
/*
删除指定的分组或分组下的用户
*/
func (ability *Ability132) TaobaoTmcGroupDelete(req *request.TaobaoTmcGroupDeleteRequest) (*response.TaobaoTmcGroupDeleteResponse, error) {
if ability.Client == nil {
return nil, errors.New("Ability132 topClient is nil")
}
var jsonStr, err = ability.Client.Execute("taobao.tmc.group.delete", req.ToMap(), req.ToFileMap())
var respStruct = response.TaobaoTmcGroupDeleteResponse{}
if err != nil {
log.Println("taobaoTmcGroupDelete error", err)
return &respStruct, err
}
err = util.HandleJsonResponse(jsonStr, &respStruct)
if respStruct.Body == "" || len(respStruct.Body) == 0 {
respStruct.Body = jsonStr
}
return &respStruct, err
}
/*
为已开通用户添加用户分组
*/
func (ability *Ability132) TaobaoTmcGroupAdd(req *request.TaobaoTmcGroupAddRequest) (*response.TaobaoTmcGroupAddResponse, error) {
if ability.Client == nil {
return nil, errors.New("Ability132 topClient is nil")
}
var jsonStr, err = ability.Client.Execute("taobao.tmc.group.add", req.ToMap(), req.ToFileMap())
var respStruct = response.TaobaoTmcGroupAddResponse{}
if err != nil {
log.Println("taobaoTmcGroupAdd error", err)
return &respStruct, err
}
err = util.HandleJsonResponse(jsonStr, &respStruct)
if respStruct.Body == "" || len(respStruct.Body) == 0 {
respStruct.Body = jsonStr
}
return &respStruct, err
}
/*
删除消息topic分组路由
*/
func (ability *Ability132) TaobaoTmcTopicGroupDelete(req *request.TaobaoTmcTopicGroupDeleteRequest) (*response.TaobaoTmcTopicGroupDeleteResponse, error) {
if ability.Client == nil {
return nil, errors.New("Ability132 topClient is nil")
}
var jsonStr, err = ability.Client.Execute("taobao.tmc.topic.group.delete", req.ToMap(), req.ToFileMap())
var respStruct = response.TaobaoTmcTopicGroupDeleteResponse{}
if err != nil {
log.Println("taobaoTmcTopicGroupDelete error", err)
return &respStruct, err
}
err = util.HandleJsonResponse(jsonStr, &respStruct)
if respStruct.Body == "" || len(respStruct.Body) == 0 {
respStruct.Body = jsonStr
}
return &respStruct, err
}
/*
点对点消息topic分组路由
*/
func (ability *Ability132) TaobaoTmcTopicGroupAdd(req *request.TaobaoTmcTopicGroupAddRequest) (*response.TaobaoTmcTopicGroupAddResponse, error) {
if ability.Client == nil {
return nil, errors.New("Ability132 topClient is nil")
}
var jsonStr, err = ability.Client.Execute("taobao.tmc.topic.group.add", req.ToMap(), req.ToFileMap())
var respStruct = response.TaobaoTmcTopicGroupAddResponse{}
if err != nil {
log.Println("taobaoTmcTopicGroupAdd error", err)
return &respStruct, err
}
err = util.HandleJsonResponse(jsonStr, &respStruct)
if respStruct.Body == "" || len(respStruct.Body) == 0 {
respStruct.Body = jsonStr
}
return &respStruct, err
}
/*
确认消费消息的状态
*/
func (ability *Ability132) TaobaoTmcMessagesConfirm(req *request.TaobaoTmcMessagesConfirmRequest) (*response.TaobaoTmcMessagesConfirmResponse, error) {
if ability.Client == nil {
return nil, errors.New("Ability132 topClient is nil")
}
var jsonStr, err = ability.Client.Execute("taobao.tmc.messages.confirm", req.ToMap(), req.ToFileMap())
var respStruct = response.TaobaoTmcMessagesConfirmResponse{}
if err != nil {
log.Println("taobaoTmcMessagesConfirm error", err)
return &respStruct, err
}
err = util.HandleJsonResponse(jsonStr, &respStruct)
if respStruct.Body == "" || len(respStruct.Body) == 0 {
respStruct.Body = jsonStr
}
return &respStruct, err
}
/*
消费多条消息
*/
func (ability *Ability132) TaobaoTmcMessagesConsume(req *request.TaobaoTmcMessagesConsumeRequest) (*response.TaobaoTmcMessagesConsumeResponse, error) {
if ability.Client == nil {
return nil, errors.New("Ability132 topClient is nil")
}
var jsonStr, err = ability.Client.Execute("taobao.tmc.messages.consume", req.ToMap(), req.ToFileMap())
var respStruct = response.TaobaoTmcMessagesConsumeResponse{}
if err != nil {
log.Println("taobaoTmcMessagesConsume error", err)
return &respStruct, err
}
err = util.HandleJsonResponse(jsonStr, &respStruct)
if respStruct.Body == "" || len(respStruct.Body) == 0 {
respStruct.Body = jsonStr
}
return &respStruct, err
}
/*
TMC授权token
*/
func (ability *Ability132) TaobaoTmcAuthGet(req *request.TaobaoTmcAuthGetRequest) (*response.TaobaoTmcAuthGetResponse, error) {
if ability.Client == nil {
return nil, errors.New("Ability132 topClient is nil")
}
var jsonStr, err = ability.Client.Execute("taobao.tmc.auth.get", req.ToMap(), req.ToFileMap())
var respStruct = response.TaobaoTmcAuthGetResponse{}
if err != nil {
log.Println("taobaoTmcAuthGet error", err)
return &respStruct, err
}
err = util.HandleJsonResponse(jsonStr, &respStruct)
if respStruct.Body == "" || len(respStruct.Body) == 0 {
respStruct.Body = jsonStr
}
return &respStruct, err
}

View File

@ -0,0 +1,12 @@
package domain
type TaobaoTmcGroupsGetTmcGroup struct {
/*
分组名称 */
Name *string `json:"name,omitempty" `
}
func (s *TaobaoTmcGroupsGetTmcGroup) SetName(v string) *TaobaoTmcGroupsGetTmcGroup {
s.Name = &v
return s
}

View File

@ -0,0 +1,64 @@
package domain
import (
"topsdk/util"
)
type TaobaoTmcMessagesConsumeTmcMessage struct {
/*
消息所属的用户编号 */
UserId *int64 `json:"user_id,omitempty" `
/*
用户的昵称 */
UserNick *string `json:"user_nick,omitempty" `
/*
消息详细内容格式为JSON/XML */
Content *string `json:"content,omitempty" `
/*
消息ID */
Id *int64 `json:"id,omitempty" `
/*
消息发布时间 */
PubTime *util.LocalTime `json:"pub_time,omitempty" `
/*
消息发布者的AppKey */
PubAppKey *string `json:"pub_app_key,omitempty" `
/*
消息所属主题 */
Topic *string `json:"topic,omitempty" `
}
func (s *TaobaoTmcMessagesConsumeTmcMessage) SetUserId(v int64) *TaobaoTmcMessagesConsumeTmcMessage {
s.UserId = &v
return s
}
func (s *TaobaoTmcMessagesConsumeTmcMessage) SetUserNick(v string) *TaobaoTmcMessagesConsumeTmcMessage {
s.UserNick = &v
return s
}
func (s *TaobaoTmcMessagesConsumeTmcMessage) SetContent(v string) *TaobaoTmcMessagesConsumeTmcMessage {
s.Content = &v
return s
}
func (s *TaobaoTmcMessagesConsumeTmcMessage) SetId(v int64) *TaobaoTmcMessagesConsumeTmcMessage {
s.Id = &v
return s
}
func (s *TaobaoTmcMessagesConsumeTmcMessage) SetPubTime(v util.LocalTime) *TaobaoTmcMessagesConsumeTmcMessage {
s.PubTime = &v
return s
}
func (s *TaobaoTmcMessagesConsumeTmcMessage) SetPubAppKey(v string) *TaobaoTmcMessagesConsumeTmcMessage {
s.PubAppKey = &v
return s
}
func (s *TaobaoTmcMessagesConsumeTmcMessage) SetTopic(v string) *TaobaoTmcMessagesConsumeTmcMessage {
s.Topic = &v
return s
}

View File

@ -0,0 +1,28 @@
package domain
type TaobaoTmcMessagesProduceTmcProduceResult struct {
/*
错误码 */
ErrorCode *string `json:"error_code,omitempty" `
/*
错误信息 */
ErrorMessage *string `json:"error_message,omitempty" `
/*
是否成功 */
IsSuccess *bool `json:"is_success,omitempty" `
}
func (s *TaobaoTmcMessagesProduceTmcProduceResult) SetErrorCode(v string) *TaobaoTmcMessagesProduceTmcProduceResult {
s.ErrorCode = &v
return s
}
func (s *TaobaoTmcMessagesProduceTmcProduceResult) SetErrorMessage(v string) *TaobaoTmcMessagesProduceTmcProduceResult {
s.ErrorMessage = &v
return s
}
func (s *TaobaoTmcMessagesProduceTmcProduceResult) SetIsSuccess(v bool) *TaobaoTmcMessagesProduceTmcProduceResult {
s.IsSuccess = &v
return s
}

View File

@ -0,0 +1,44 @@
package domain
type TaobaoTmcMessagesProduceTmcPublishMessage struct {
/*
消息内容的JSON表述必须按照topic的定义来填充 */
Content *string `json:"content,omitempty" `
/*
消息的扩增属性用json格式表示 */
JsonExContent *string `json:"json_ex_content,omitempty" `
/*
直发消息需要传入目标appkey */
TargetAppKey *string `json:"target_app_key,omitempty" `
/*
目标分组 */
TargetGroup *string `json:"target_group,omitempty" `
/*
消息类型 */
Topic *string `json:"topic,omitempty" `
}
func (s *TaobaoTmcMessagesProduceTmcPublishMessage) SetContent(v string) *TaobaoTmcMessagesProduceTmcPublishMessage {
s.Content = &v
return s
}
func (s *TaobaoTmcMessagesProduceTmcPublishMessage) SetJsonExContent(v string) *TaobaoTmcMessagesProduceTmcPublishMessage {
s.JsonExContent = &v
return s
}
func (s *TaobaoTmcMessagesProduceTmcPublishMessage) SetTargetAppKey(v string) *TaobaoTmcMessagesProduceTmcPublishMessage {
s.TargetAppKey = &v
return s
}
func (s *TaobaoTmcMessagesProduceTmcPublishMessage) SetTargetGroup(v string) *TaobaoTmcMessagesProduceTmcPublishMessage {
s.TargetGroup = &v
return s
}
func (s *TaobaoTmcMessagesProduceTmcPublishMessage) SetTopic(v string) *TaobaoTmcMessagesProduceTmcPublishMessage {
s.Topic = &v
return s
}

View File

@ -0,0 +1,25 @@
package request
type TaobaoTmcAuthGetRequest struct {
/*
tmc组名 */
Group *string `json:"group,omitempty" required:"false" `
}
func (s *TaobaoTmcAuthGetRequest) SetGroup(v string) *TaobaoTmcAuthGetRequest {
s.Group = &v
return s
}
func (req *TaobaoTmcAuthGetRequest) ToMap() map[string]interface{} {
paramMap := make(map[string]interface{})
if req.Group != nil {
paramMap["group"] = *req.Group
}
return paramMap
}
func (req *TaobaoTmcAuthGetRequest) ToFileMap() map[string]interface{} {
fileMap := make(map[string]interface{})
return fileMap
}

View File

@ -0,0 +1,49 @@
package request
import (
"topsdk/util"
)
type TaobaoTmcGroupAddRequest struct {
/*
分组名称同一个应用下需要保证唯一性最长32个字符添加分组后消息通道会为用户的消息分配独立分组但之前的消息还是存储于默认分组中不能以default开头default开头为系统默认组 */
GroupName *string `json:"group_name" required:"true" `
/*
用户昵称列表以半角逗号分隔支持子账号支持增量添加用户 */
Nicks *[]string `json:"nicks" required:"true" `
/*
用户所属于的平台类型tbUIC:淘宝用户; icbu: icbu用户;ae:ae用户 defalutValue<EFBFBD><EFBFBD>tbUIC */
UserPlatform *string `json:"user_platform,omitempty" required:"false" `
}
func (s *TaobaoTmcGroupAddRequest) SetGroupName(v string) *TaobaoTmcGroupAddRequest {
s.GroupName = &v
return s
}
func (s *TaobaoTmcGroupAddRequest) SetNicks(v []string) *TaobaoTmcGroupAddRequest {
s.Nicks = &v
return s
}
func (s *TaobaoTmcGroupAddRequest) SetUserPlatform(v string) *TaobaoTmcGroupAddRequest {
s.UserPlatform = &v
return s
}
func (req *TaobaoTmcGroupAddRequest) ToMap() map[string]interface{} {
paramMap := make(map[string]interface{})
if req.GroupName != nil {
paramMap["group_name"] = *req.GroupName
}
if req.Nicks != nil {
paramMap["nicks"] = util.ConvertBasicList(*req.Nicks)
}
if req.UserPlatform != nil {
paramMap["user_platform"] = *req.UserPlatform
}
return paramMap
}
func (req *TaobaoTmcGroupAddRequest) ToFileMap() map[string]interface{} {
fileMap := make(map[string]interface{})
return fileMap
}

View File

@ -0,0 +1,49 @@
package request
import (
"topsdk/util"
)
type TaobaoTmcGroupDeleteRequest struct {
/*
分组名称分组删除后用户的消息将会存储于默认分组中警告由于分组已经删除用户之前未消费的消息将无法再获取不能以default开头default开头为系统默认组 */
GroupName *string `json:"group_name" required:"true" `
/*
用户列表不传表示删除整个分组如果用户全部删除后也会自动删除整个分组 */
Nicks *[]string `json:"nicks,omitempty" required:"false" `
/*
用户所属于的平台类型tbUIC:淘宝用户; icbu: icbu用户;ae:ae用户 defalutValue<EFBFBD><EFBFBD>tbUIC */
UserPlatform *string `json:"user_platform,omitempty" required:"false" `
}
func (s *TaobaoTmcGroupDeleteRequest) SetGroupName(v string) *TaobaoTmcGroupDeleteRequest {
s.GroupName = &v
return s
}
func (s *TaobaoTmcGroupDeleteRequest) SetNicks(v []string) *TaobaoTmcGroupDeleteRequest {
s.Nicks = &v
return s
}
func (s *TaobaoTmcGroupDeleteRequest) SetUserPlatform(v string) *TaobaoTmcGroupDeleteRequest {
s.UserPlatform = &v
return s
}
func (req *TaobaoTmcGroupDeleteRequest) ToMap() map[string]interface{} {
paramMap := make(map[string]interface{})
if req.GroupName != nil {
paramMap["group_name"] = *req.GroupName
}
if req.Nicks != nil {
paramMap["nicks"] = util.ConvertBasicList(*req.Nicks)
}
if req.UserPlatform != nil {
paramMap["user_platform"] = *req.UserPlatform
}
return paramMap
}
func (req *TaobaoTmcGroupDeleteRequest) ToFileMap() map[string]interface{} {
fileMap := make(map[string]interface{})
return fileMap
}

View File

@ -0,0 +1,49 @@
package request
import (
"topsdk/util"
)
type TaobaoTmcGroupsGetRequest struct {
/*
要查询分组的名称多个分组用半角逗号分隔不传代表查询所有分组信息但不会返回组下面的用户信息如果应用没有设置分组则返回空组名不能以default开头default开头是系统默认的组 */
GroupNames *[]string `json:"group_names,omitempty" required:"false" `
/*
页码 defalutValue<EFBFBD><EFBFBD>1 */
PageNo *int64 `json:"page_no,omitempty" required:"false" `
/*
每页返回多少个分组 defalutValue<EFBFBD><EFBFBD>40 */
PageSize *int64 `json:"page_size,omitempty" required:"false" `
}
func (s *TaobaoTmcGroupsGetRequest) SetGroupNames(v []string) *TaobaoTmcGroupsGetRequest {
s.GroupNames = &v
return s
}
func (s *TaobaoTmcGroupsGetRequest) SetPageNo(v int64) *TaobaoTmcGroupsGetRequest {
s.PageNo = &v
return s
}
func (s *TaobaoTmcGroupsGetRequest) SetPageSize(v int64) *TaobaoTmcGroupsGetRequest {
s.PageSize = &v
return s
}
func (req *TaobaoTmcGroupsGetRequest) ToMap() map[string]interface{} {
paramMap := make(map[string]interface{})
if req.GroupNames != nil {
paramMap["group_names"] = util.ConvertBasicList(*req.GroupNames)
}
if req.PageNo != nil {
paramMap["page_no"] = *req.PageNo
}
if req.PageSize != nil {
paramMap["page_size"] = *req.PageSize
}
return paramMap
}
func (req *TaobaoTmcGroupsGetRequest) ToFileMap() map[string]interface{} {
fileMap := make(map[string]interface{})
return fileMap
}

View File

@ -0,0 +1,49 @@
package request
import (
"topsdk/util"
)
type TaobaoTmcMessagesConfirmRequest struct {
/*
分组名称不传代表默认分组 */
GroupName *string `json:"group_name,omitempty" required:"false" `
/*
处理成功的消息ID列表 最大 200个ID */
SMessageIds *[]int64 `json:"s_message_ids" required:"true" `
/*
处理失败的消息ID列表--已废弃无需传此字段 */
FMessageIds *[]int64 `json:"f_message_ids,omitempty" required:"false" `
}
func (s *TaobaoTmcMessagesConfirmRequest) SetGroupName(v string) *TaobaoTmcMessagesConfirmRequest {
s.GroupName = &v
return s
}
func (s *TaobaoTmcMessagesConfirmRequest) SetSMessageIds(v []int64) *TaobaoTmcMessagesConfirmRequest {
s.SMessageIds = &v
return s
}
func (s *TaobaoTmcMessagesConfirmRequest) SetFMessageIds(v []int64) *TaobaoTmcMessagesConfirmRequest {
s.FMessageIds = &v
return s
}
func (req *TaobaoTmcMessagesConfirmRequest) ToMap() map[string]interface{} {
paramMap := make(map[string]interface{})
if req.GroupName != nil {
paramMap["group_name"] = *req.GroupName
}
if req.SMessageIds != nil {
paramMap["s_message_ids"] = util.ConvertBasicList(*req.SMessageIds)
}
if req.FMessageIds != nil {
paramMap["f_message_ids"] = util.ConvertBasicList(*req.FMessageIds)
}
return paramMap
}
func (req *TaobaoTmcMessagesConfirmRequest) ToFileMap() map[string]interface{} {
fileMap := make(map[string]interface{})
return fileMap
}

View File

@ -0,0 +1,35 @@
package request
type TaobaoTmcMessagesConsumeRequest struct {
/*
用户分组名称不传表示消费默认分组如果应用没有设置用户分组传入分组名称将会返回错误 */
GroupName *string `json:"group_name,omitempty" required:"false" `
/*
每次批量消费消息的条数最小值10最大值200 defalutValue<EFBFBD><EFBFBD>100 */
Quantity *int64 `json:"quantity,omitempty" required:"false" `
}
func (s *TaobaoTmcMessagesConsumeRequest) SetGroupName(v string) *TaobaoTmcMessagesConsumeRequest {
s.GroupName = &v
return s
}
func (s *TaobaoTmcMessagesConsumeRequest) SetQuantity(v int64) *TaobaoTmcMessagesConsumeRequest {
s.Quantity = &v
return s
}
func (req *TaobaoTmcMessagesConsumeRequest) ToMap() map[string]interface{} {
paramMap := make(map[string]interface{})
if req.GroupName != nil {
paramMap["group_name"] = *req.GroupName
}
if req.Quantity != nil {
paramMap["quantity"] = *req.Quantity
}
return paramMap
}
func (req *TaobaoTmcMessagesConsumeRequest) ToFileMap() map[string]interface{} {
fileMap := make(map[string]interface{})
return fileMap
}

View File

@ -0,0 +1,30 @@
package request
import (
"topsdk/ability132/domain"
"topsdk/util"
)
type TaobaoTmcMessagesProduceRequest struct {
/*
tmc消息列表, 最多50条元素结构与taobao.tmc.message.produce一致用json表示的消息列表例如[{"content": "{\"tid\":1234554321,\"status\":\"X_LOGISTICS_PRINTED\",\"action_time\":\"2014-08-08 18:24:00\",\"seller_nick\": \"向阳aa\",\"operator\":\"小张\"}","topic": "taobao_jds_TradeTrace"},{"content": "{\"tid\":1234554321,\"status\":\"X_LOGISTICS_PRINTED\",\"action_time\":\"2014-08-08 18:24:00\",\"seller_nick\": \"向阳aa\",\"operator\":\"小张\"}","topic": "taobao_jds_TradeTrace"}] */
Messages *[]domain.TaobaoTmcMessagesProduceTmcPublishMessage `json:"messages" required:"true" `
}
func (s *TaobaoTmcMessagesProduceRequest) SetMessages(v []domain.TaobaoTmcMessagesProduceTmcPublishMessage) *TaobaoTmcMessagesProduceRequest {
s.Messages = &v
return s
}
func (req *TaobaoTmcMessagesProduceRequest) ToMap() map[string]interface{} {
paramMap := make(map[string]interface{})
if req.Messages != nil {
paramMap["messages"] = util.ConvertStructList(*req.Messages)
}
return paramMap
}
func (req *TaobaoTmcMessagesProduceRequest) ToFileMap() map[string]interface{} {
fileMap := make(map[string]interface{})
return fileMap
}

View File

@ -0,0 +1,39 @@
package request
import (
"topsdk/util"
)
type TaobaoTmcTopicGroupAddRequest struct {
/*
消息分组名如果不存在会自动创建 */
GroupName *string `json:"group_name" required:"true" `
/*
消息topic名称多个以逗号(,)分割 */
Topics *[]string `json:"topics" required:"true" `
}
func (s *TaobaoTmcTopicGroupAddRequest) SetGroupName(v string) *TaobaoTmcTopicGroupAddRequest {
s.GroupName = &v
return s
}
func (s *TaobaoTmcTopicGroupAddRequest) SetTopics(v []string) *TaobaoTmcTopicGroupAddRequest {
s.Topics = &v
return s
}
func (req *TaobaoTmcTopicGroupAddRequest) ToMap() map[string]interface{} {
paramMap := make(map[string]interface{})
if req.GroupName != nil {
paramMap["group_name"] = *req.GroupName
}
if req.Topics != nil {
paramMap["topics"] = util.ConvertBasicList(*req.Topics)
}
return paramMap
}
func (req *TaobaoTmcTopicGroupAddRequest) ToFileMap() map[string]interface{} {
fileMap := make(map[string]interface{})
return fileMap
}

View File

@ -0,0 +1,49 @@
package request
import (
"topsdk/util"
)
type TaobaoTmcTopicGroupDeleteRequest struct {
/*
消息分组名 */
GroupName *string `json:"group_name" required:"true" `
/*
消息分组Id一般不用填写如果分组已经被删除则根据问题排查工具返回的ID删除路由关系 */
GroupId *int64 `json:"group_id,omitempty" required:"false" `
/*
消息topic名称多个以逗号(,)分割 */
Topics *[]string `json:"topics" required:"true" `
}
func (s *TaobaoTmcTopicGroupDeleteRequest) SetGroupName(v string) *TaobaoTmcTopicGroupDeleteRequest {
s.GroupName = &v
return s
}
func (s *TaobaoTmcTopicGroupDeleteRequest) SetGroupId(v int64) *TaobaoTmcTopicGroupDeleteRequest {
s.GroupId = &v
return s
}
func (s *TaobaoTmcTopicGroupDeleteRequest) SetTopics(v []string) *TaobaoTmcTopicGroupDeleteRequest {
s.Topics = &v
return s
}
func (req *TaobaoTmcTopicGroupDeleteRequest) ToMap() map[string]interface{} {
paramMap := make(map[string]interface{})
if req.GroupName != nil {
paramMap["group_name"] = *req.GroupName
}
if req.GroupId != nil {
paramMap["group_id"] = *req.GroupId
}
if req.Topics != nil {
paramMap["topics"] = util.ConvertBasicList(*req.Topics)
}
return paramMap
}
func (req *TaobaoTmcTopicGroupDeleteRequest) ToFileMap() map[string]interface{} {
fileMap := make(map[string]interface{})
return fileMap
}

View File

@ -0,0 +1,21 @@
package response
import ()
type TaobaoTmcAuthGetResponse struct {
/*
System request id
*/
RequestId string `json:"request_id,omitempty" `
/*
System body
*/
Body string
/*
result
*/
Result string `json:"result,omitempty" `
}

View File

@ -0,0 +1,27 @@
package response
import (
"topsdk/util"
)
type TaobaoTmcGroupAddResponse struct {
/*
System request id
*/
RequestId string `json:"request_id,omitempty" `
/*
System body
*/
Body string
/*
创建时间
*/
Created util.LocalTime `json:"created,omitempty" `
/*
分组名称
*/
GroupName string `json:"group_name,omitempty" `
}

View File

@ -0,0 +1,21 @@
package response
import ()
type TaobaoTmcGroupDeleteResponse struct {
/*
System request id
*/
RequestId string `json:"request_id,omitempty" `
/*
System body
*/
Body string
/*
是否成功
*/
IsSuccess bool `json:"is_success,omitempty" `
}

View File

@ -0,0 +1,27 @@
package response
import (
"topsdk/ability132/domain"
)
type TaobaoTmcGroupsGetResponse struct {
/*
System request id
*/
RequestId string `json:"request_id,omitempty" `
/*
System body
*/
Body string
/*
dasdasd
*/
Groups []domain.TaobaoTmcGroupsGetTmcGroup `json:"groups,omitempty" `
/*
分组总数
*/
TotalResults int64 `json:"total_results,omitempty" `
}

View File

@ -0,0 +1,21 @@
package response
import ()
type TaobaoTmcMessagesConfirmResponse struct {
/*
System request id
*/
RequestId string `json:"request_id,omitempty" `
/*
System body
*/
Body string
/*
是否成功
*/
IsSuccess bool `json:"is_success,omitempty" `
}

View File

@ -0,0 +1,23 @@
package response
import (
"topsdk/ability132/domain"
)
type TaobaoTmcMessagesConsumeResponse struct {
/*
System request id
*/
RequestId string `json:"request_id,omitempty" `
/*
System body
*/
Body string
/*
消息列表
*/
Messages []domain.TaobaoTmcMessagesConsumeTmcMessage `json:"messages,omitempty" `
}

View File

@ -0,0 +1,27 @@
package response
import (
"topsdk/ability132/domain"
)
type TaobaoTmcMessagesProduceResponse struct {
/*
System request id
*/
RequestId string `json:"request_id,omitempty" `
/*
System body
*/
Body string
/*
是否全部成功
*/
IsAllSuccess bool `json:"is_all_success,omitempty" `
/*
发送结果与发送时的参数顺序一致如果is_all_success为true时不用校验result是否成功
*/
Results []domain.TaobaoTmcMessagesProduceTmcProduceResult `json:"results,omitempty" `
}

View File

@ -0,0 +1,21 @@
package response
import ()
type TaobaoTmcTopicGroupAddResponse struct {
/*
System request id
*/
RequestId string `json:"request_id,omitempty" `
/*
System body
*/
Body string
/*
true
*/
Result bool `json:"result,omitempty" `
}

View File

@ -0,0 +1,21 @@
package response
import ()
type TaobaoTmcTopicGroupDeleteResponse struct {
/*
System request id
*/
RequestId string `json:"request_id,omitempty" `
/*
System body
*/
Body string
/*
true
*/
Result bool `json:"result,omitempty" `
}

218
ability304/Ability304.go Normal file
View File

@ -0,0 +1,218 @@
package ability304
import (
"errors"
"log"
"topsdk"
"topsdk/ability304/request"
"topsdk/ability304/response"
"topsdk/util"
)
type Ability304 struct {
Client *topsdk.TopClient
}
func NewAbility304(client *topsdk.TopClient) *Ability304 {
return &Ability304{client}
}
/*
获取授权账号对应的OpenUid
*/
func (ability *Ability304) TaobaoOpenuidGet(req *request.TaobaoOpenuidGetRequest, session string) (*response.TaobaoOpenuidGetResponse, error) {
if ability.Client == nil {
return nil, errors.New("Ability304 topClient is nil")
}
var jsonStr, err = ability.Client.ExecuteWithSession("taobao.openuid.get", req.ToMap(), req.ToFileMap(), session)
var respStruct = response.TaobaoOpenuidGetResponse{}
if err != nil {
log.Println("taobaoOpenuidGet error", err)
return &respStruct, err
}
err = util.HandleJsonResponse(jsonStr, &respStruct)
if respStruct.Body == "" || len(respStruct.Body) == 0 {
respStruct.Body = jsonStr
}
return &respStruct, err
}
/*
通过订单获取对应买家的openUID
*/
func (ability *Ability304) TaobaoOpenuidGetBytrade(req *request.TaobaoOpenuidGetBytradeRequest, session string) (*response.TaobaoOpenuidGetBytradeResponse, error) {
if ability.Client == nil {
return nil, errors.New("Ability304 topClient is nil")
}
var jsonStr, err = ability.Client.ExecuteWithSession("taobao.openuid.get.bytrade", req.ToMap(), req.ToFileMap(), session)
var respStruct = response.TaobaoOpenuidGetBytradeResponse{}
if err != nil {
log.Println("taobaoOpenuidGetBytrade error", err)
return &respStruct, err
}
err = util.HandleJsonResponse(jsonStr, &respStruct)
if respStruct.Body == "" || len(respStruct.Body) == 0 {
respStruct.Body = jsonStr
}
return &respStruct, err
}
/*
TOPDNS配置
*/
func (ability *Ability304) TaobaoHttpdnsGet(req *request.TaobaoHttpdnsGetRequest) (*response.TaobaoHttpdnsGetResponse, error) {
if ability.Client == nil {
return nil, errors.New("Ability304 topClient is nil")
}
var jsonStr, err = ability.Client.Execute("taobao.httpdns.get", req.ToMap(), req.ToFileMap())
var respStruct = response.TaobaoHttpdnsGetResponse{}
if err != nil {
log.Println("taobaoHttpdnsGet error", err)
return &respStruct, err
}
err = util.HandleJsonResponse(jsonStr, &respStruct)
if respStruct.Body == "" || len(respStruct.Body) == 0 {
respStruct.Body = jsonStr
}
return &respStruct, err
}
/*
获取TOP通道解密秘钥
*/
func (ability *Ability304) TaobaoTopSecretGet(req *request.TaobaoTopSecretGetRequest) (*response.TaobaoTopSecretGetResponse, error) {
if ability.Client == nil {
return nil, errors.New("Ability304 topClient is nil")
}
var jsonStr, err = ability.Client.Execute("taobao.top.secret.get", req.ToMap(), req.ToFileMap())
var respStruct = response.TaobaoTopSecretGetResponse{}
if err != nil {
log.Println("taobaoTopSecretGet error", err)
return &respStruct, err
}
err = util.HandleJsonResponse(jsonStr, &respStruct)
if respStruct.Body == "" || len(respStruct.Body) == 0 {
respStruct.Body = jsonStr
}
return &respStruct, err
}
/*
通过mixnick转换openuid
*/
func (ability *Ability304) TaobaoOpenuidGetBymixnick(req *request.TaobaoOpenuidGetBymixnickRequest) (*response.TaobaoOpenuidGetBymixnickResponse, error) {
if ability.Client == nil {
return nil, errors.New("Ability304 topClient is nil")
}
var jsonStr, err = ability.Client.Execute("taobao.openuid.get.bymixnick", req.ToMap(), req.ToFileMap())
var respStruct = response.TaobaoOpenuidGetBymixnickResponse{}
if err != nil {
log.Println("taobaoOpenuidGetBymixnick error", err)
return &respStruct, err
}
err = util.HandleJsonResponse(jsonStr, &respStruct)
if respStruct.Body == "" || len(respStruct.Body) == 0 {
respStruct.Body = jsonStr
}
return &respStruct, err
}
/*
获取ISV发起请求服务器IP
*/
func (ability *Ability304) TaobaoAppipGet(req *request.TaobaoAppipGetRequest) (*response.TaobaoAppipGetResponse, error) {
if ability.Client == nil {
return nil, errors.New("Ability304 topClient is nil")
}
var jsonStr, err = ability.Client.Execute("taobao.appip.get", req.ToMap(), req.ToFileMap())
var respStruct = response.TaobaoAppipGetResponse{}
if err != nil {
log.Println("taobaoAppipGet error", err)
return &respStruct, err
}
err = util.HandleJsonResponse(jsonStr, &respStruct)
if respStruct.Body == "" || len(respStruct.Body) == 0 {
respStruct.Body = jsonStr
}
return &respStruct, err
}
/*
业务文件获取
*/
func (ability *Ability304) TaobaoFilesGet(req *request.TaobaoFilesGetRequest) (*response.TaobaoFilesGetResponse, error) {
if ability.Client == nil {
return nil, errors.New("Ability304 topClient is nil")
}
var jsonStr, err = ability.Client.Execute("taobao.files.get", req.ToMap(), req.ToFileMap())
var respStruct = response.TaobaoFilesGetResponse{}
if err != nil {
log.Println("taobaoFilesGet error", err)
return &respStruct, err
}
err = util.HandleJsonResponse(jsonStr, &respStruct)
if respStruct.Body == "" || len(respStruct.Body) == 0 {
respStruct.Body = jsonStr
}
return &respStruct, err
}
/*
刷新Access Token
*/
func (ability *Ability304) TaobaoTopAuthTokenRefresh(req *request.TaobaoTopAuthTokenRefreshRequest) (*response.TaobaoTopAuthTokenRefreshResponse, error) {
if ability.Client == nil {
return nil, errors.New("Ability304 topClient is nil")
}
var jsonStr, err = ability.Client.Execute("taobao.top.auth.token.refresh", req.ToMap(), req.ToFileMap())
var respStruct = response.TaobaoTopAuthTokenRefreshResponse{}
if err != nil {
log.Println("taobaoTopAuthTokenRefresh error", err)
return &respStruct, err
}
err = util.HandleJsonResponse(jsonStr, &respStruct)
if respStruct.Body == "" || len(respStruct.Body) == 0 {
respStruct.Body = jsonStr
}
return &respStruct, err
}
/*
获取Access Token
*/
func (ability *Ability304) TaobaoTopAuthTokenCreate(req *request.TaobaoTopAuthTokenCreateRequest) (*response.TaobaoTopAuthTokenCreateResponse, error) {
if ability.Client == nil {
return nil, errors.New("Ability304 topClient is nil")
}
var jsonStr, err = ability.Client.Execute("taobao.top.auth.token.create", req.ToMap(), req.ToFileMap())
var respStruct = response.TaobaoTopAuthTokenCreateResponse{}
if err != nil {
log.Println("taobaoTopAuthTokenCreate error", err)
return &respStruct, err
}
err = util.HandleJsonResponse(jsonStr, &respStruct)
if respStruct.Body == "" || len(respStruct.Body) == 0 {
respStruct.Body = jsonStr
}
return &respStruct, err
}
/*
sdk信息回调
*/
func (ability *Ability304) TaobaoTopSdkFeedbackUpload(req *request.TaobaoTopSdkFeedbackUploadRequest) (*response.TaobaoTopSdkFeedbackUploadResponse, error) {
if ability.Client == nil {
return nil, errors.New("Ability304 topClient is nil")
}
var jsonStr, err = ability.Client.Execute("taobao.top.sdk.feedback.upload", req.ToMap(), req.ToFileMap())
var respStruct = response.TaobaoTopSdkFeedbackUploadResponse{}
if err != nil {
log.Println("taobaoTopSdkFeedbackUpload error", err)
return &respStruct, err
}
err = util.HandleJsonResponse(jsonStr, &respStruct)
if respStruct.Body == "" || len(respStruct.Body) == 0 {
respStruct.Body = jsonStr
}
return &respStruct, err
}

View File

@ -0,0 +1,32 @@
package domain
import (
"topsdk/util"
)
type TaobaoFilesGetTopDownloadRecordDo struct {
/*
下载链接 */
Url *string `json:"url,omitempty" `
/*
文件创建时间 */
Created *util.LocalTime `json:"created,omitempty" `
/*
下载链接状态1:未下载2:已下载 */
Status *int64 `json:"status,omitempty" `
}
func (s *TaobaoFilesGetTopDownloadRecordDo) SetUrl(v string) *TaobaoFilesGetTopDownloadRecordDo {
s.Url = &v
return s
}
func (s *TaobaoFilesGetTopDownloadRecordDo) SetCreated(v util.LocalTime) *TaobaoFilesGetTopDownloadRecordDo {
s.Created = &v
return s
}
func (s *TaobaoFilesGetTopDownloadRecordDo) SetStatus(v int64) *TaobaoFilesGetTopDownloadRecordDo {
s.Status = &v
return s
}

View File

@ -0,0 +1,14 @@
package request
type TaobaoAppipGetRequest struct {
}
func (req *TaobaoAppipGetRequest) ToMap() map[string]interface{} {
paramMap := make(map[string]interface{})
return paramMap
}
func (req *TaobaoAppipGetRequest) ToFileMap() map[string]interface{} {
fileMap := make(map[string]interface{})
return fileMap
}

View File

@ -0,0 +1,49 @@
package request
import (
"topsdk/util"
)
type TaobaoFilesGetRequest struct {
/*
下载链接状态1:未下载2:已下载 */
Status *int64 `json:"status,omitempty" required:"false" `
/*
搜索开始时间 */
StartDate *util.LocalTime `json:"start_date" required:"true" `
/*
搜索结束时间 */
EndDate *util.LocalTime `json:"end_date" required:"true" `
}
func (s *TaobaoFilesGetRequest) SetStatus(v int64) *TaobaoFilesGetRequest {
s.Status = &v
return s
}
func (s *TaobaoFilesGetRequest) SetStartDate(v util.LocalTime) *TaobaoFilesGetRequest {
s.StartDate = &v
return s
}
func (s *TaobaoFilesGetRequest) SetEndDate(v util.LocalTime) *TaobaoFilesGetRequest {
s.EndDate = &v
return s
}
func (req *TaobaoFilesGetRequest) ToMap() map[string]interface{} {
paramMap := make(map[string]interface{})
if req.Status != nil {
paramMap["status"] = *req.Status
}
if req.StartDate != nil {
paramMap["start_date"] = *req.StartDate
}
if req.EndDate != nil {
paramMap["end_date"] = *req.EndDate
}
return paramMap
}
func (req *TaobaoFilesGetRequest) ToFileMap() map[string]interface{} {
fileMap := make(map[string]interface{})
return fileMap
}

View File

@ -0,0 +1,14 @@
package request
type TaobaoHttpdnsGetRequest struct {
}
func (req *TaobaoHttpdnsGetRequest) ToMap() map[string]interface{} {
paramMap := make(map[string]interface{})
return paramMap
}
func (req *TaobaoHttpdnsGetRequest) ToFileMap() map[string]interface{} {
fileMap := make(map[string]interface{})
return fileMap
}

View File

@ -0,0 +1,25 @@
package request
type TaobaoOpenuidGetBymixnickRequest struct {
/*
无线类应用获取到的混淆的nick */
MixNick *string `json:"mix_nick" required:"true" `
}
func (s *TaobaoOpenuidGetBymixnickRequest) SetMixNick(v string) *TaobaoOpenuidGetBymixnickRequest {
s.MixNick = &v
return s
}
func (req *TaobaoOpenuidGetBymixnickRequest) ToMap() map[string]interface{} {
paramMap := make(map[string]interface{})
if req.MixNick != nil {
paramMap["mix_nick"] = *req.MixNick
}
return paramMap
}
func (req *TaobaoOpenuidGetBymixnickRequest) ToFileMap() map[string]interface{} {
fileMap := make(map[string]interface{})
return fileMap
}

View File

@ -0,0 +1,25 @@
package request
type TaobaoOpenuidGetBytradeRequest struct {
/*
订单ID */
Tid *int64 `json:"tid" required:"true" `
}
func (s *TaobaoOpenuidGetBytradeRequest) SetTid(v int64) *TaobaoOpenuidGetBytradeRequest {
s.Tid = &v
return s
}
func (req *TaobaoOpenuidGetBytradeRequest) ToMap() map[string]interface{} {
paramMap := make(map[string]interface{})
if req.Tid != nil {
paramMap["tid"] = *req.Tid
}
return paramMap
}
func (req *TaobaoOpenuidGetBytradeRequest) ToFileMap() map[string]interface{} {
fileMap := make(map[string]interface{})
return fileMap
}

View File

@ -0,0 +1,14 @@
package request
type TaobaoOpenuidGetRequest struct {
}
func (req *TaobaoOpenuidGetRequest) ToMap() map[string]interface{} {
paramMap := make(map[string]interface{})
return paramMap
}
func (req *TaobaoOpenuidGetRequest) ToFileMap() map[string]interface{} {
fileMap := make(map[string]interface{})
return fileMap
}

View File

@ -0,0 +1,35 @@
package request
type TaobaoTopAuthTokenCreateRequest struct {
/*
授权codegrantType==authorization_code 时需要 */
Code *string `json:"code" required:"true" `
/*
非必填与生成code的uuid配对使用方式参考文档 */
Uuid *string `json:"uuid,omitempty" required:"false" `
}
func (s *TaobaoTopAuthTokenCreateRequest) SetCode(v string) *TaobaoTopAuthTokenCreateRequest {
s.Code = &v
return s
}
func (s *TaobaoTopAuthTokenCreateRequest) SetUuid(v string) *TaobaoTopAuthTokenCreateRequest {
s.Uuid = &v
return s
}
func (req *TaobaoTopAuthTokenCreateRequest) ToMap() map[string]interface{} {
paramMap := make(map[string]interface{})
if req.Code != nil {
paramMap["code"] = *req.Code
}
if req.Uuid != nil {
paramMap["uuid"] = *req.Uuid
}
return paramMap
}
func (req *TaobaoTopAuthTokenCreateRequest) ToFileMap() map[string]interface{} {
fileMap := make(map[string]interface{})
return fileMap
}

View File

@ -0,0 +1,25 @@
package request
type TaobaoTopAuthTokenRefreshRequest struct {
/*
grantType==refresh_token 时需要 */
RefreshToken *string `json:"refresh_token" required:"true" `
}
func (s *TaobaoTopAuthTokenRefreshRequest) SetRefreshToken(v string) *TaobaoTopAuthTokenRefreshRequest {
s.RefreshToken = &v
return s
}
func (req *TaobaoTopAuthTokenRefreshRequest) ToMap() map[string]interface{} {
paramMap := make(map[string]interface{})
if req.RefreshToken != nil {
paramMap["refresh_token"] = *req.RefreshToken
}
return paramMap
}
func (req *TaobaoTopAuthTokenRefreshRequest) ToFileMap() map[string]interface{} {
fileMap := make(map[string]interface{})
return fileMap
}

View File

@ -0,0 +1,35 @@
package request
type TaobaoTopSdkFeedbackUploadRequest struct {
/*
1回传加密信息 */
Type *string `json:"type" required:"true" `
/*
具体内容json形式 */
Content *string `json:"content,omitempty" required:"false" `
}
func (s *TaobaoTopSdkFeedbackUploadRequest) SetType(v string) *TaobaoTopSdkFeedbackUploadRequest {
s.Type = &v
return s
}
func (s *TaobaoTopSdkFeedbackUploadRequest) SetContent(v string) *TaobaoTopSdkFeedbackUploadRequest {
s.Content = &v
return s
}
func (req *TaobaoTopSdkFeedbackUploadRequest) ToMap() map[string]interface{} {
paramMap := make(map[string]interface{})
if req.Type != nil {
paramMap["type"] = *req.Type
}
if req.Content != nil {
paramMap["content"] = *req.Content
}
return paramMap
}
func (req *TaobaoTopSdkFeedbackUploadRequest) ToFileMap() map[string]interface{} {
fileMap := make(map[string]interface{})
return fileMap
}

View File

@ -0,0 +1,45 @@
package request
type TaobaoTopSecretGetRequest struct {
/*
秘钥版本号 */
SecretVersion *int64 `json:"secret_version,omitempty" required:"false" `
/*
伪随机数 */
RandomNum *string `json:"random_num" required:"true" `
/*
自定义用户id */
CustomerUserId *int64 `json:"customer_user_id,omitempty" required:"false" `
}
func (s *TaobaoTopSecretGetRequest) SetSecretVersion(v int64) *TaobaoTopSecretGetRequest {
s.SecretVersion = &v
return s
}
func (s *TaobaoTopSecretGetRequest) SetRandomNum(v string) *TaobaoTopSecretGetRequest {
s.RandomNum = &v
return s
}
func (s *TaobaoTopSecretGetRequest) SetCustomerUserId(v int64) *TaobaoTopSecretGetRequest {
s.CustomerUserId = &v
return s
}
func (req *TaobaoTopSecretGetRequest) ToMap() map[string]interface{} {
paramMap := make(map[string]interface{})
if req.SecretVersion != nil {
paramMap["secret_version"] = *req.SecretVersion
}
if req.RandomNum != nil {
paramMap["random_num"] = *req.RandomNum
}
if req.CustomerUserId != nil {
paramMap["customer_user_id"] = *req.CustomerUserId
}
return paramMap
}
func (req *TaobaoTopSecretGetRequest) ToFileMap() map[string]interface{} {
fileMap := make(map[string]interface{})
return fileMap
}

View File

@ -0,0 +1,21 @@
package response
import ()
type TaobaoAppipGetResponse struct {
/*
System request id
*/
RequestId string `json:"request_id,omitempty" `
/*
System body
*/
Body string
/*
ISV发起请求服务器IP
*/
Ip string `json:"ip,omitempty" `
}

View File

@ -0,0 +1,23 @@
package response
import (
"topsdk/ability304/domain"
)
type TaobaoFilesGetResponse struct {
/*
System request id
*/
RequestId string `json:"request_id,omitempty" `
/*
System body
*/
Body string
/*
results
*/
Results []domain.TaobaoFilesGetTopDownloadRecordDo `json:"results,omitempty" `
}

View File

@ -0,0 +1,21 @@
package response
import ()
type TaobaoHttpdnsGetResponse struct {
/*
System request id
*/
RequestId string `json:"request_id,omitempty" `
/*
System body
*/
Body string
/*
HTTP DNS配置信息
*/
Result string `json:"result,omitempty" `
}

View File

@ -0,0 +1,21 @@
package response
import ()
type TaobaoOpenuidGetBymixnickResponse struct {
/*
System request id
*/
RequestId string `json:"request_id,omitempty" `
/*
System body
*/
Body string
/*
OpenUID
*/
OpenUid string `json:"open_uid,omitempty" `
}

View File

@ -0,0 +1,21 @@
package response
import ()
type TaobaoOpenuidGetBytradeResponse struct {
/*
System request id
*/
RequestId string `json:"request_id,omitempty" `
/*
System body
*/
Body string
/*
当前交易tid对应买家的openuid
*/
OpenUid string `json:"open_uid,omitempty" `
}

View File

@ -0,0 +1,21 @@
package response
import ()
type TaobaoOpenuidGetResponse struct {
/*
System request id
*/
RequestId string `json:"request_id,omitempty" `
/*
System body
*/
Body string
/*
OpenUID
*/
OpenUid string `json:"open_uid,omitempty" `
}

View File

@ -0,0 +1,21 @@
package response
import ()
type TaobaoTopAuthTokenCreateResponse struct {
/*
System request id
*/
RequestId string `json:"request_id,omitempty" `
/*
System body
*/
Body string
/*
返回的是json信息和之前调用https://oauth.taobao.com/tac/token https://oauth.alibaba.com/token 换token返回的字段信息一致
*/
TokenResult string `json:"token_result,omitempty" `
}

View File

@ -0,0 +1,21 @@
package response
import ()
type TaobaoTopAuthTokenRefreshResponse struct {
/*
System request id
*/
RequestId string `json:"request_id,omitempty" `
/*
System body
*/
Body string
/*
返回的是json信息
*/
TokenResult string `json:"token_result,omitempty" `
}

View File

@ -0,0 +1,21 @@
package response
import ()
type TaobaoTopSdkFeedbackUploadResponse struct {
/*
System request id
*/
RequestId string `json:"request_id,omitempty" `
/*
System body
*/
Body string
/*
控制回传间隔单位
*/
UploadInterval int64 `json:"upload_interval,omitempty" `
}

View File

@ -0,0 +1,37 @@
package response
import ()
type TaobaoTopSecretGetResponse struct {
/*
System request id
*/
RequestId string `json:"request_id,omitempty" `
/*
System body
*/
Body string
/*
下次更新秘钥间隔单位
*/
Interval int64 `json:"interval,omitempty" `
/*
最长有效期容灾使用单位
*/
MaxInterval int64 `json:"max_interval,omitempty" `
/*
秘钥值
*/
Secret string `json:"secret,omitempty" `
/*
秘钥版本号
*/
SecretVersion int64 `json:"secret_version,omitempty" `
/*
app配置信息
*/
AppConfig string `json:"app_config,omitempty" `
}

23
constants.go Normal file
View File

@ -0,0 +1,23 @@
package topsdk
/*
*
sdk使用常量请勿修改
*/
const (
// SdkVersion 版本号
SdkVersion = "new_go_sdk_20240801"
// ApiFormat api格式
ApiFormat = "json"
// SignMethod 签名算法
SignMethod = "hmac-sha256"
// Version 网关版本号
TopVersion = "2.0"
// DateFormat 日期格式
DateFormat = "2006-01-02 15:04:05"
)

View File

@ -0,0 +1,118 @@
package defaultability
import (
"errors"
"log"
"topsdk"
"topsdk/defaultability/request"
"topsdk/defaultability/response"
"topsdk/util"
)
type Defaultability struct {
Client *topsdk.TopClient
}
func NewDefaultability(client *topsdk.TopClient) *Defaultability {
return &Defaultability{client}
}
/*
关键词过滤匹配
*/
func (ability *Defaultability) TaobaoKfcKeywordSearch(req *request.TaobaoKfcKeywordSearchRequest, session string) (*response.TaobaoKfcKeywordSearchResponse, error) {
if ability.Client == nil {
return nil, errors.New("Defaultability topClient is nil")
}
var jsonStr, err = ability.Client.ExecuteWithSession("taobao.kfc.keyword.search", req.ToMap(), req.ToFileMap(), session)
var respStruct = response.TaobaoKfcKeywordSearchResponse{}
if err != nil {
log.Println("taobaoKfcKeywordSearch error", err)
return &respStruct, err
}
err = util.HandleJsonResponse(jsonStr, &respStruct)
if respStruct.Body == "" || len(respStruct.Body) == 0 {
respStruct.Body = jsonStr
}
return &respStruct, err
}
/*
获取商家所在分组及其已授权(广播)消息topics
*/
func (ability *Defaultability) TaobaoTmcUserGet(req *request.TaobaoTmcUserGetRequest) (*response.TaobaoTmcUserGetResponse, error) {
if ability.Client == nil {
return nil, errors.New("Defaultability topClient is nil")
}
var jsonStr, err = ability.Client.Execute("taobao.tmc.user.get", req.ToMap(), req.ToFileMap())
var respStruct = response.TaobaoTmcUserGetResponse{}
if err != nil {
log.Println("taobaoTmcUserGet error", err)
return &respStruct, err
}
err = util.HandleJsonResponse(jsonStr, &respStruct)
if respStruct.Body == "" || len(respStruct.Body) == 0 {
respStruct.Body = jsonStr
}
return &respStruct, err
}
/*
发布单条消息
*/
func (ability *Defaultability) TaobaoTmcMessageProduce(req *request.TaobaoTmcMessageProduceRequest) (*response.TaobaoTmcMessageProduceResponse, error) {
if ability.Client == nil {
return nil, errors.New("Defaultability topClient is nil")
}
var jsonStr, err = ability.Client.Execute("taobao.tmc.message.produce", req.ToMap(), req.ToFileMap())
var respStruct = response.TaobaoTmcMessageProduceResponse{}
if err != nil {
log.Println("taobaoTmcMessageProduce error", err)
return &respStruct, err
}
err = util.HandleJsonResponse(jsonStr, &respStruct)
if respStruct.Body == "" || len(respStruct.Body) == 0 {
respStruct.Body = jsonStr
}
return &respStruct, err
}
/*
取消用户的消息服务
*/
func (ability *Defaultability) TaobaoTmcUserCancel(req *request.TaobaoTmcUserCancelRequest) (*response.TaobaoTmcUserCancelResponse, error) {
if ability.Client == nil {
return nil, errors.New("Defaultability topClient is nil")
}
var jsonStr, err = ability.Client.Execute("taobao.tmc.user.cancel", req.ToMap(), req.ToFileMap())
var respStruct = response.TaobaoTmcUserCancelResponse{}
if err != nil {
log.Println("taobaoTmcUserCancel error", err)
return &respStruct, err
}
err = util.HandleJsonResponse(jsonStr, &respStruct)
if respStruct.Body == "" || len(respStruct.Body) == 0 {
respStruct.Body = jsonStr
}
return &respStruct, err
}
/*
为已授权的用户开通消息服务
*/
func (ability *Defaultability) TaobaoTmcUserPermit(req *request.TaobaoTmcUserPermitRequest, session string) (*response.TaobaoTmcUserPermitResponse, error) {
if ability.Client == nil {
return nil, errors.New("Defaultability topClient is nil")
}
var jsonStr, err = ability.Client.ExecuteWithSession("taobao.tmc.user.permit", req.ToMap(), req.ToFileMap(), session)
var respStruct = response.TaobaoTmcUserPermitResponse{}
if err != nil {
log.Println("taobaoTmcUserPermit error", err)
return &respStruct, err
}
err = util.HandleJsonResponse(jsonStr, &respStruct)
if respStruct.Body == "" || len(respStruct.Body) == 0 {
respStruct.Body = jsonStr
}
return &respStruct, err
}

View File

@ -0,0 +1,32 @@
package domain
type TaobaoKfcKeywordSearchKfcSearchResult struct {
/*
是否匹配到关键词,匹配到则为true. */
Matched *bool `json:"matched,omitempty" `
/*
匹配到的关键词的等级值为null或为ABCD
当匹配不到关键词时值为null否则值为ABCD中的一个
ABCD等级按严重程度从高至低排列 */
Level *string `json:"level,omitempty" `
/*
过滤后的文本
当匹配到B等级的词时文本中的关键词被替换为*content即为关键词替换后的文本
其他情况content始终为null */
Content *string `json:"content,omitempty" `
}
func (s *TaobaoKfcKeywordSearchKfcSearchResult) SetMatched(v bool) *TaobaoKfcKeywordSearchKfcSearchResult {
s.Matched = &v
return s
}
func (s *TaobaoKfcKeywordSearchKfcSearchResult) SetLevel(v string) *TaobaoKfcKeywordSearchKfcSearchResult {
s.Level = &v
return s
}
func (s *TaobaoKfcKeywordSearchKfcSearchResult) SetContent(v string) *TaobaoKfcKeywordSearchKfcSearchResult {
s.Content = &v
return s
}

View File

@ -0,0 +1,72 @@
package domain
import (
"topsdk/util"
)
type TaobaoTmcUserGetTmcUser struct {
/*
用户首次开通时间 */
Created *util.LocalTime `json:"created,omitempty" `
/*
接收用户消息的组名 */
GroupName *string `json:"group_name,omitempty" `
/*
用户授权是否有效true表示授权有效false表示授权过期 */
IsValid *bool `json:"is_valid,omitempty" `
/*
用户最后开通时间 */
Modified *util.LocalTime `json:"modified,omitempty" `
/*
用户开通的消息类型列表如果为空表示应用开通的所有类型 */
Topics *[]string `json:"topics,omitempty" `
/*
用户ID */
UserId *int64 `json:"user_id,omitempty" `
/*
用户昵称 */
UserNick *string `json:"user_nick,omitempty" `
/*
用户所属的平台类型tbUIC:淘宝用户; icbu: icbu用户 */
UserPlatform *string `json:"user_platform,omitempty" `
}
func (s *TaobaoTmcUserGetTmcUser) SetCreated(v util.LocalTime) *TaobaoTmcUserGetTmcUser {
s.Created = &v
return s
}
func (s *TaobaoTmcUserGetTmcUser) SetGroupName(v string) *TaobaoTmcUserGetTmcUser {
s.GroupName = &v
return s
}
func (s *TaobaoTmcUserGetTmcUser) SetIsValid(v bool) *TaobaoTmcUserGetTmcUser {
s.IsValid = &v
return s
}
func (s *TaobaoTmcUserGetTmcUser) SetModified(v util.LocalTime) *TaobaoTmcUserGetTmcUser {
s.Modified = &v
return s
}
func (s *TaobaoTmcUserGetTmcUser) SetTopics(v []string) *TaobaoTmcUserGetTmcUser {
s.Topics = &v
return s
}
func (s *TaobaoTmcUserGetTmcUser) SetUserId(v int64) *TaobaoTmcUserGetTmcUser {
s.UserId = &v
return s
}
func (s *TaobaoTmcUserGetTmcUser) SetUserNick(v string) *TaobaoTmcUserGetTmcUser {
s.UserNick = &v
return s
}
func (s *TaobaoTmcUserGetTmcUser) SetUserPlatform(v string) *TaobaoTmcUserGetTmcUser {
s.UserPlatform = &v
return s
}

View File

@ -0,0 +1,50 @@
package request
type TaobaoKfcKeywordSearchRequest struct {
/*
发布信息的淘宝会员名可以不传 */
Nick *string `json:"nick,omitempty" required:"false" `
/*
应用点分为一级应用点二级应用点其中一级应用点通常是指某一个系统或产品比如淘宝的商品应用taobao_auction二级应用点是指一级应用点下的具体的分类比如商品标题(title)商品描述(content)不同的二级应用可以设置不同关键词
这里的apply参数是由一级应用点与二级应用点合起来的字符一级应用点+"."+二级应用点如taobao_auction.title
通常apply参数是不需要传递的如有特殊需求比如特殊的过滤需求需要自己维护一套自己词库需传递此参数 */
Apply *string `json:"apply,omitempty" required:"false" `
/*
需要过滤的文本信息 */
Content *string `json:"content" required:"true" `
}
func (s *TaobaoKfcKeywordSearchRequest) SetNick(v string) *TaobaoKfcKeywordSearchRequest {
s.Nick = &v
return s
}
func (s *TaobaoKfcKeywordSearchRequest) SetApply(v string) *TaobaoKfcKeywordSearchRequest {
s.Apply = &v
return s
}
func (s *TaobaoKfcKeywordSearchRequest) SetContent(v string) *TaobaoKfcKeywordSearchRequest {
s.Content = &v
return s
}
func (req *TaobaoKfcKeywordSearchRequest) ToMap() map[string]interface{} {
paramMap := make(map[string]interface{})
if req.Nick != nil {
paramMap["nick"] = *req.Nick
}
if req.Apply != nil {
paramMap["apply"] = *req.Apply
}
if req.Content != nil {
paramMap["content"] = *req.Content
}
return paramMap
}
func (req *TaobaoKfcKeywordSearchRequest) ToFileMap() map[string]interface{} {
fileMap := make(map[string]interface{})
return fileMap
}

View File

@ -0,0 +1,139 @@
package request
import (
"topsdk/util"
)
type TaobaoTmcMessageProduceRequest struct {
/*
消息内容的JSON表述必须按照topic的定义来填充 */
Content *string `json:"content" required:"true" `
/*
消息的扩增属性用json格式表示 */
ExContent *string `json:"ex_content,omitempty" required:"false" `
/*
直发消息需要传入目标appkey */
TargetAppkey *string `json:"target_appkey,omitempty" required:"false" `
/*
目标分组一般为default defalutValue<EFBFBD><EFBFBD>default */
TargetGroup *string `json:"target_group,omitempty" required:"false" `
/*
消息类型 */
Topic *string `json:"topic" required:"true" `
/*
回传的文件内容目前仅支持jpg,png,bmp,gif,pdf类型的文件文件最大1M只有消息中有byte[]类型的数据时才需要传此字段; 否则不需要传此字段 */
MediaContent *[]byte `json:"media_content,omitempty" required:"false" `
/*
回传的文件内容目前仅支持jpg,png,bmp,gif,pdf类型的文件文件最大1M只有消息中有byte[]类型的数据时才需要传此字段; 否则不需要传此字段具体对应到沙体中的什么值请参考消息字段说明 */
MediaContent2 *[]byte `json:"media_content2,omitempty" required:"false" `
/*
回传的文件内容目前仅支持jpg,png,bmp,gif,pdf类型的文件文件最大1M只有消息中有byte[]类型的数据时才需要传此字段; 否则不需要传此字段具体对应到沙体中的什么值请参考消息字段说明 */
MediaContent3 *[]byte `json:"media_content3,omitempty" required:"false" `
/*
回传的文件内容目前仅支持jpg,png,bmp,gif,pdf类型的文件文件最大1M只有消息中有byte[]类型的数据时才需要传此字段; 否则不需要传此字段具体对应到沙体中的什么值请参考消息字段说明 */
MediaContent5 *[]byte `json:"media_content5,omitempty" required:"false" `
/*
回传的文件内容目前仅支持jpg,png,bmp,gif,pdf类型的文件文件最大1M只有消息中有byte[]类型的数据时才需要传此字段; 否则不需要传此字段具体对应到沙体中的什么值请参考消息字段说明 */
MediaContent4 *[]byte `json:"media_content4,omitempty" required:"false" `
/*
延时参数 时间戳 预期发送时间 defalutValue<EFBFBD><EFBFBD>0 */
DelayMillis *int64 `json:"delay_millis,omitempty" required:"false" `
/*
提前过期 相对时间差 毫秒 defalutValue<EFBFBD><EFBFBD>0 */
ExpiresMillis *int64 `json:"expires_millis,omitempty" required:"false" `
}
func (s *TaobaoTmcMessageProduceRequest) SetContent(v string) *TaobaoTmcMessageProduceRequest {
s.Content = &v
return s
}
func (s *TaobaoTmcMessageProduceRequest) SetExContent(v string) *TaobaoTmcMessageProduceRequest {
s.ExContent = &v
return s
}
func (s *TaobaoTmcMessageProduceRequest) SetTargetAppkey(v string) *TaobaoTmcMessageProduceRequest {
s.TargetAppkey = &v
return s
}
func (s *TaobaoTmcMessageProduceRequest) SetTargetGroup(v string) *TaobaoTmcMessageProduceRequest {
s.TargetGroup = &v
return s
}
func (s *TaobaoTmcMessageProduceRequest) SetTopic(v string) *TaobaoTmcMessageProduceRequest {
s.Topic = &v
return s
}
func (s *TaobaoTmcMessageProduceRequest) SetMediaContent(v []byte) *TaobaoTmcMessageProduceRequest {
s.MediaContent = &v
return s
}
func (s *TaobaoTmcMessageProduceRequest) SetMediaContent2(v []byte) *TaobaoTmcMessageProduceRequest {
s.MediaContent2 = &v
return s
}
func (s *TaobaoTmcMessageProduceRequest) SetMediaContent3(v []byte) *TaobaoTmcMessageProduceRequest {
s.MediaContent3 = &v
return s
}
func (s *TaobaoTmcMessageProduceRequest) SetMediaContent5(v []byte) *TaobaoTmcMessageProduceRequest {
s.MediaContent5 = &v
return s
}
func (s *TaobaoTmcMessageProduceRequest) SetMediaContent4(v []byte) *TaobaoTmcMessageProduceRequest {
s.MediaContent4 = &v
return s
}
func (s *TaobaoTmcMessageProduceRequest) SetDelayMillis(v int64) *TaobaoTmcMessageProduceRequest {
s.DelayMillis = &v
return s
}
func (s *TaobaoTmcMessageProduceRequest) SetExpiresMillis(v int64) *TaobaoTmcMessageProduceRequest {
s.ExpiresMillis = &v
return s
}
func (req *TaobaoTmcMessageProduceRequest) ToMap() map[string]interface{} {
paramMap := make(map[string]interface{})
if req.Content != nil {
paramMap["content"] = *req.Content
}
if req.ExContent != nil {
paramMap["ex_content"] = *req.ExContent
}
if req.TargetAppkey != nil {
paramMap["target_appkey"] = *req.TargetAppkey
}
if req.TargetGroup != nil {
paramMap["target_group"] = *req.TargetGroup
}
if req.Topic != nil {
paramMap["topic"] = *req.Topic
}
if req.DelayMillis != nil {
paramMap["delay_millis"] = *req.DelayMillis
}
if req.ExpiresMillis != nil {
paramMap["expires_millis"] = *req.ExpiresMillis
}
return paramMap
}
func (req *TaobaoTmcMessageProduceRequest) ToFileMap() map[string]interface{} {
fileMap := make(map[string]interface{})
if req.MediaContent != nil {
fileMap["media_content"] = *req.MediaContent
}
if req.MediaContent2 != nil {
fileMap["media_content2"] = *req.MediaContent2
}
if req.MediaContent3 != nil {
fileMap["media_content3"] = *req.MediaContent3
}
if req.MediaContent5 != nil {
fileMap["media_content5"] = *req.MediaContent5
}
if req.MediaContent4 != nil {
fileMap["media_content4"] = *req.MediaContent4
}
return fileMap
}

View File

@ -0,0 +1,35 @@
package request
type TaobaoTmcUserCancelRequest struct {
/*
用户昵称 */
Nick *string `json:"nick" required:"true" `
/*
用户所属的平台类型tbUIC:淘宝用户; icbu: icbu用户;ae:ae用户 defalutValue<EFBFBD><EFBFBD>tbUIC */
UserPlatform *string `json:"user_platform,omitempty" required:"false" `
}
func (s *TaobaoTmcUserCancelRequest) SetNick(v string) *TaobaoTmcUserCancelRequest {
s.Nick = &v
return s
}
func (s *TaobaoTmcUserCancelRequest) SetUserPlatform(v string) *TaobaoTmcUserCancelRequest {
s.UserPlatform = &v
return s
}
func (req *TaobaoTmcUserCancelRequest) ToMap() map[string]interface{} {
paramMap := make(map[string]interface{})
if req.Nick != nil {
paramMap["nick"] = *req.Nick
}
if req.UserPlatform != nil {
paramMap["user_platform"] = *req.UserPlatform
}
return paramMap
}
func (req *TaobaoTmcUserCancelRequest) ToFileMap() map[string]interface{} {
fileMap := make(map[string]interface{})
return fileMap
}

View File

@ -0,0 +1,49 @@
package request
import (
"topsdk/util"
)
type TaobaoTmcUserGetRequest struct {
/*
需返回的字段列表多个字段以半角逗号分隔可选值TmcUser结构体中的所有字段一定要返回topic */
Fields *[]string `json:"fields" required:"true" `
/*
用户昵称 */
Nick *string `json:"nick" required:"true" `
/*
用户所属的平台类型tbUIC:淘宝用户; icbu: icbu用户;ae:ae用户 defalutValue<EFBFBD><EFBFBD>tbUIC */
UserPlatform *string `json:"user_platform,omitempty" required:"false" `
}
func (s *TaobaoTmcUserGetRequest) SetFields(v []string) *TaobaoTmcUserGetRequest {
s.Fields = &v
return s
}
func (s *TaobaoTmcUserGetRequest) SetNick(v string) *TaobaoTmcUserGetRequest {
s.Nick = &v
return s
}
func (s *TaobaoTmcUserGetRequest) SetUserPlatform(v string) *TaobaoTmcUserGetRequest {
s.UserPlatform = &v
return s
}
func (req *TaobaoTmcUserGetRequest) ToMap() map[string]interface{} {
paramMap := make(map[string]interface{})
if req.Fields != nil {
paramMap["fields"] = util.ConvertBasicList(*req.Fields)
}
if req.Nick != nil {
paramMap["nick"] = *req.Nick
}
if req.UserPlatform != nil {
paramMap["user_platform"] = *req.UserPlatform
}
return paramMap
}
func (req *TaobaoTmcUserGetRequest) ToFileMap() map[string]interface{} {
fileMap := make(map[string]interface{})
return fileMap
}

View File

@ -0,0 +1,29 @@
package request
import (
"topsdk/util"
)
type TaobaoTmcUserPermitRequest struct {
/*
消息主题列表用半角逗号分隔当用户订阅的topic是应用订阅的子集时才需要设置不设置表示继承应用所订阅的所有topic一般情况建议不要设置 */
Topics *[]string `json:"topics,omitempty" required:"false" `
}
func (s *TaobaoTmcUserPermitRequest) SetTopics(v []string) *TaobaoTmcUserPermitRequest {
s.Topics = &v
return s
}
func (req *TaobaoTmcUserPermitRequest) ToMap() map[string]interface{} {
paramMap := make(map[string]interface{})
if req.Topics != nil {
paramMap["topics"] = util.ConvertBasicList(*req.Topics)
}
return paramMap
}
func (req *TaobaoTmcUserPermitRequest) ToFileMap() map[string]interface{} {
fileMap := make(map[string]interface{})
return fileMap
}

View File

@ -0,0 +1,23 @@
package response
import (
"topsdk/defaultability/domain"
)
type TaobaoKfcKeywordSearchResponse struct {
/*
System request id
*/
RequestId string `json:"request_id,omitempty" `
/*
System body
*/
Body string
/*
KFC 关键词过滤匹配结果
*/
KfcSearchResult domain.TaobaoKfcKeywordSearchKfcSearchResult `json:"kfc_search_result,omitempty" `
}

View File

@ -0,0 +1,29 @@
package response
import ()
type TaobaoTmcMessageProduceResponse struct {
/*
System request id
*/
RequestId string `json:"request_id,omitempty" `
/*
System body
*/
Body string
/*
是否成功
*/
IsSuccess bool `json:"is_success,omitempty" `
/*
投递目标数
*/
Total int64 `json:"total,omitempty" `
/*
消息ID
*/
MsgIds []string `json:"msg_ids,omitempty" `
}

View File

@ -0,0 +1,21 @@
package response
import ()
type TaobaoTmcUserCancelResponse struct {
/*
System request id
*/
RequestId string `json:"request_id,omitempty" `
/*
System body
*/
Body string
/*
是否成功,如果为false并且没有错误码表示删除的用户不存在
*/
IsSuccess bool `json:"is_success,omitempty" `
}

View File

@ -0,0 +1,23 @@
package response
import (
"topsdk/defaultability/domain"
)
type TaobaoTmcUserGetResponse struct {
/*
System request id
*/
RequestId string `json:"request_id,omitempty" `
/*
System body
*/
Body string
/*
开通的用户数据
*/
TmcUser domain.TaobaoTmcUserGetTmcUser `json:"tmc_user,omitempty" `
}

View File

@ -0,0 +1,21 @@
package response
import ()
type TaobaoTmcUserPermitResponse struct {
/*
System request id
*/
RequestId string `json:"request_id,omitempty" `
/*
System body
*/
Body string
/*
是否成功
*/
IsSuccess bool `json:"is_success,omitempty" `
}

3
go.mod Normal file
View File

@ -0,0 +1,3 @@
module topsdk
go 1.16

190
topclient.go Normal file
View File

@ -0,0 +1,190 @@
package topsdk
import (
"bytes"
"fmt"
"io"
"io/ioutil"
"log"
"mime/multipart"
"net"
"net/http"
"net/url"
"strings"
"time"
"topsdk/util"
)
type TopClient struct {
AppKey string
AppSecret string
ServerUrl string
Format string
SignMethod string
ConnectTimeout int64
ReadTimeout int64
Version string
Simplify bool
httpClient *http.Client
}
type HttpTransportConfig struct {
DialTimeout int64
KeepAlive int64
MaxIdleConns int
MaxIdleConnsPerHost int
IdleConnTimeout int64
MaxConnsPerHost int
}
func NewDefaultTopClient(AppKey string, AppSecret string, ServerUrl string, connectTimeount int64, readTimeout int64) TopClient {
var httpTransportConfig = &HttpTransportConfig{
DialTimeout: 30000,
KeepAlive: 30000,
MaxIdleConns: 100,
MaxIdleConnsPerHost: 50,
IdleConnTimeout: 30000,
}
return NewTopClientWithConfig(AppKey, AppSecret, ServerUrl, connectTimeount, readTimeout, httpTransportConfig)
}
func NewTopClientWithConfig(AppKey string, AppSecret string, ServerUrl string, connectTimeount int64, readTimeout int64, httpTransportConfig *HttpTransportConfig) TopClient {
httpClient := http.Client{
Timeout: time.Duration(connectTimeount) * time.Millisecond,
Transport: &http.Transport{
DialContext: (&net.Dialer{
Timeout: time.Duration(httpTransportConfig.DialTimeout) * time.Millisecond,
KeepAlive: time.Duration(httpTransportConfig.KeepAlive) * time.Millisecond,
}).DialContext,
ForceAttemptHTTP2: true,
MaxIdleConns: httpTransportConfig.MaxIdleConns,
MaxIdleConnsPerHost: httpTransportConfig.MaxIdleConnsPerHost,
IdleConnTimeout: time.Duration(httpTransportConfig.IdleConnTimeout) * time.Millisecond,
TLSHandshakeTimeout: 10 * time.Second,
ExpectContinueTimeout: 1 * time.Second,
},
}
return TopClient{
AppKey: AppKey,
AppSecret: AppSecret,
ServerUrl: ServerUrl,
Format: ApiFormat,
SignMethod: SignMethod,
ConnectTimeout: connectTimeount,
ReadTimeout: readTimeout,
Version: TopVersion,
Simplify: true,
httpClient: &httpClient,
}
}
func (client *TopClient) ExecuteWithSession(method string, data map[string]interface{}, fileData map[string]interface{}, session string) (string, error) {
var publicParam = make(map[string]interface{})
publicParam["method"] = method
publicParam["app_key"] = client.AppKey
publicParam["timestamp"] = time.Now().Format(DateFormat)
publicParam["v"] = client.Version
publicParam["sign_method"] = client.SignMethod
publicParam["format"] = client.Format
publicParam["simplify"] = client.Simplify
publicParam["partner_id"] = SdkVersion
if session != "" {
publicParam["session"] = session
}
sign := util.GetSign(publicParam, data, client.AppSecret)
// 构建url
serverUrl, _ := url.Parse(client.ServerUrl)
urlValues := url.Values{}
urlValues.Add("sign", sign)
for k, v := range publicParam {
urlValues.Add(k, fmt.Sprint(v))
}
serverUrl.RawQuery = urlValues.Encode()
urlPath := serverUrl.String()
// 构建body
if fileData != nil && len(fileData) > 0 {
return doPostWithFile(urlPath, data, fileData, client.httpClient)
} else {
return doPost(urlPath, data, client.httpClient)
}
}
func doPost(urlPath string, data map[string]interface{}, httpClient *http.Client) (string, error) {
bodyParam := url.Values{}
for k, v := range data {
bodyParam.Add(k, fmt.Sprint(v))
}
resp, err := httpClient.Post(urlPath, "application/x-www-form-urlencoded", strings.NewReader(bodyParam.Encode()))
if resp != nil {
defer resp.Body.Close()
}
if err != nil {
log.Println("http.PostForm error", err)
return "", err
}
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Println("ioutil.ReadAll", err)
return "", err
}
return string(body), nil
}
func doPostWithFile(urlPath string, data map[string]interface{}, fileData map[string]interface{}, httpClient *http.Client) (string, error) {
bodyBuf := &bytes.Buffer{}
writer := multipart.NewWriter(bodyBuf)
for k, v := range data {
err := writer.WriteField(k, fmt.Sprint(v))
if err != nil {
return "", err
}
}
for k, v := range fileData {
value, ok := v.([]byte)
if ok {
fileWriter, err := writer.CreateFormFile(k, "file")
if err != nil {
return "", err
}
_, err = io.Copy(fileWriter, bytes.NewReader(value))
if err != nil {
return "", err
}
} else {
value, ok := v.(*util.FileItem)
if ok {
fileWriter, err := writer.CreateFormFile(k, value.FileName)
if err != nil {
return "", err
}
_, err = io.Copy(fileWriter, bytes.NewReader(value.Content))
if err != nil {
return "", err
}
}
}
}
err := writer.Close()
if err != nil {
return "", err
}
resp, err := httpClient.Post(urlPath, writer.FormDataContentType(), bodyBuf)
if err != nil {
log.Println("http.PostForm error", err)
return "", err
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Println("ioutil.ReadAll", err)
return "", err
}
return string(body), nil
}
func (client *TopClient) Execute(method string, data map[string]interface{}, fileData map[string]interface{}) (string, error) {
return client.ExecuteWithSession(method, data, fileData, "")
}

20
util/FileItem.go Normal file
View File

@ -0,0 +1,20 @@
package util
type FileItem struct {
FileName string
Content []byte
}
func (s *FileItem) SetFileName(v string) *FileItem {
s.FileName = v
return s
}
func (s *FileItem) SetContent(v []byte) *FileItem {
s.Content = v
return s
}
func NewFileItem(fileName string, content []byte) *FileItem {
return &FileItem{FileName: fileName, Content: content}
}

View File

@ -0,0 +1,34 @@
package util
import "fmt"
type TopApiRequestError struct {
/*
System code
*/
TopCode int `json:"code,omitempty" `
/*
System error message
*/
Msg string `json:"msg,omitempty" `
/*
System sub code
*/
SubCode string `json:"sub_code,omitempty" `
/*
System sub message
*/
SubMsg string `json:"sub_msg,omitempty" `
/*
System request id
*/
RequestId string `json:"request_id,omitempty" `
}
func (e *TopApiRequestError) Error() string {
return fmt.Sprintf("code: %d, msg: %s, sub_code: %s, sub_msg: %s ,request_id: %s", e.TopCode, e.Msg, e.SubCode, e.SubMsg, e.RequestId)
}

114
util/util.go Normal file
View File

@ -0,0 +1,114 @@
package util
import (
"crypto/hmac"
"crypto/sha256"
"encoding/hex"
"encoding/json"
"fmt"
"sort"
"strings"
"time"
)
type LocalTime time.Time
const (
TimeFormat = "2006-01-02 15:04:05"
)
func (t *LocalTime) UnmarshalJSON(data []byte) (err error) {
// 空值不进行解析
if len(data) == 2 {
*t = LocalTime(time.Time{})
return
}
now, err := time.ParseInLocation(`"`+TimeFormat+`"`, string(data), time.Local)
*t = LocalTime(now)
return
}
func (t LocalTime) MarshalJSON() ([]byte, error) {
b := make([]byte, 0, len(TimeFormat)+2)
b = append(b, '"')
b = time.Time(t).AppendFormat(b, TimeFormat)
b = append(b, '"')
return b, nil
}
func (t LocalTime) String() string {
return time.Time(t).Format(TimeFormat)
}
func UnmarshalJSON(data []byte, v interface{}) (err error) {
return json.Unmarshal(data, v)
}
func ConvertStructList(data interface{}) string {
if data == nil {
return "[]"
}
jsonStr, _ := json.Marshal(data)
return string(jsonStr)
}
func ConvertStruct(data interface{}) string {
if data == nil {
return "{}"
}
jsonStr, _ := json.Marshal(data)
return string(jsonStr)
}
func ConvertBasicList(data interface{}) string {
if data == nil {
return "[]"
}
return strings.Replace(strings.Trim(fmt.Sprint(data), "[]"), " ", ",", -1)
}
func HandleJsonResponse(jsonStr string, v interface{}) (err error) {
if strings.Contains(jsonStr[0:20], "error_response") {
err := &TopApiRequestError{}
jsonStr = jsonStr[18 : len(jsonStr)-1]
err2 := json.Unmarshal([]byte(jsonStr), err)
if err2 != nil {
return err2
}
return err
}
return json.Unmarshal([]byte(jsonStr), v)
}
func GetSign(publicParam map[string]interface{}, data map[string]interface{}, secret string) string {
var allParamMap = make(map[string]interface{})
for k, v := range data {
allParamMap[k] = v
}
for k, v := range publicParam {
allParamMap[k] = v
}
var keyList []string
for k := range allParamMap {
keyList = append(keyList, k)
}
sort.Strings(keyList)
var signStr = ""
for _, key := range keyList {
value := allParamMap[key]
signStr = signStr + fmt.Sprintf("%v%v", key, value)
//if(value != ""){
// signStr = signStr + fmt.Sprintf("%v%v", key, value)
//}
}
fmt.Println(signStr)
sign := strings.ToUpper(HmacSha256(signStr, secret))
return sign
}
func HmacSha256(data string, secret string) string {
h := hmac.New(sha256.New, []byte(secret))
h.Write([]byte(data))
return hex.EncodeToString(h.Sum(nil))
}