gwdt

package module
v0.1.6 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 16, 2024 License: MIT Imports: 10 Imported by: 0

README

Gwdt 旺店通旗舰版Go语言SDK

本SDK非官方SDK,为方便使用Go语言的开发者,按照旺店通官方文档,封装了签名及调用方法,使用本SDK可以根据业务需求直接调用相关方法。 请注意:调用旺店通API需要提前在旺店通开放平台申请API权限。

Gwdt 特点

  1. 支持旺店通直连和奇门自定义接口。
  2. 允许通过中间件获取上下文并完成日志、限流等辅助业务逻辑。

1.安装方法:

go get github.com/BernardSimon/gwdt@latest

2.旺店通直连参考示例代码

// 实例化一个客户端
wdtClient := gwdt.NewGwdtClient(gwdt.Config{
	Url:       "http://wdt.wangdian.cn/openapi",
	V:         "1.0",
	Sid:       "", //填入你的卖家账号
	AppKey:    "", //填入你的appkey,建议使用环境变量
	AppSecret: "", //填入你的appSecret,注意需要包含salt,建议使用环境变量
})
//实例化一个请求,如果不是分页请求,请将Pager置为nil
//如果你有中间件,请定义一个中间件方法,并使用Client.Use(func(*gwdt.Context))定义中间件,具体请参考下文关于中间件的文档
request := gwdt.Request{
	Method: "",
	Params: nil,
	Pager: &gwdt.Pager{
		PageSize: 100,
		PageNo:   0,
		CalcTotal:   true,
	},
}
//调用Call方法,得到一个Response实例
response := wdtClient.Call(&request)
//处理返回结果,判断错误在前
if response.Error != nil {
	panic(response.Error)
}
//Data是一个json的字符串,为旺店通返回的data字段内容
println(response.Data)
//为了方便记录和分析问题,我们在Response中增加了几个常用方法和变量
1.内置请求指针 Response.Request
2.计算的签名值 Response.Sign
3.请求的时间戳(按照旺店通计算方法) Response.Timestamp
4.请求的总条数 Response.TotalCount,请注意只有当分页请求且CalcTotal为true时,才返回该值
5.GetByte方法,将返回结果转换为[]byte
6.HasMore方法,判断是否还有更多数据
请参考WdtError分析请求错误,其中Message为接口返回错误,RequestError为调用错误

3.奇门自定义参考示例代码

// 实例化一个奇门客户端
qimenClient := gwdt.NewGwdtQimenClient(gwdt.QimenConfig{
	QimenUrl:       "", //填入奇门地址
	QimenAppKey:    "", //填入你的奇门appkey,建议使用环境变量
	QimenAppSecret: "", //填入你的奇门appSecret,注意需要包含salt,建议使用环境变量
	Sid:            "", //填入你的卖家账号
	WdtAppKey:      "", //填入你的旺店通appkey,建议使用环境变量
	WdtAppSecret:   "", //填入你的旺店通appSecret,注意需要包含salt,建议使用环境变量
	TargetAppkey:   "", //填入旺店通目标appkey,建议使用环境变量
})
//如果你有中间件,请定义一个中间件方法,并使用QimenClient.Use(func(*gwdt.QimenContext))定义中间件,具体请参考下文关于中间件的文档
qimenRequest := gwdt.QimenRequest{
	Method: "wdt.goods.apigoods.search",
	Pager: &gwdt.Pager{
		PageSize:  100,
		PageNo:    1, //请注意奇门接口的页码是从1开始
		CalcTotal: true,
	},
	Params: nil,
}
// 调用Call方法,得到一个Response实例
qimenResponse := qimenClient.Call(&qimenRequest)
if qimenResponse.Error != nil {
	panic(qimenResponse.Error)
}
//结果获取与直连方式相同
println(qimenResponse.Data)
请参考QimenError类型,分析请求错误

4.中间件使用说明

  1. 中间件使用方法:gwdt的Client和QimenClient都支持使用中间件,需要实例化一个Client/QimenClient,然后使用Use方法定义一个中间件,中间件方法需要接收一个Context参数。
  2. Context包含请求参数、返回结果、签名、时间戳等,方便开发者进行日志记录、限流等辅助业务逻辑,具体为Request和Response两个对象,调用Context.Next()方法后可以查看到Response的数据。
  3. 请注意奇门调用需要使用QimenContext,两者不通用。
  4. 请注意:当你使用中间件时,必须在中间件方法中调用Next()方法,否则后续的中间件和请求业务方法将不会被调用!非常重要!!
  5. 请参考以下代码:
// 定义一个中间件
func wdtLog(c *gwdt.Context) {
println("start")
c.Next()
println("end")
}

Client = gwdt.NewGwdtClient(gwdt.Config{
Url:       "https://wdt.wangdian.cn/openapi",
Sid:       "wdt_sid",
AppKey:    "wdt_key",
AppSecret: "wdt_secret",
V:         "1.0",
})
Client.Use(*wdtLog)
//本代码完成了一个简单的中间件使用示例,将在旺店通请求前打印start,请求结束后打印end
奇门接口官方文档地址:https://open.wangdian.cn/qjb/open/guide?path=qjb_guide_qm_customize
本代码问题可以联系: bernardziyi@gmail.com

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Client

type Client struct {
	Config Config
	// contains filtered or unexported fields
}

Client 旺店通直连客户端

func NewGwdtClient

func NewGwdtClient(config Config) *Client

NewGwdtClient 旺店通直连客户端构建函数

func (*Client) Call

func (c *Client) Call(request *Request) *Response

Call 执行请求方法,含中间件

func (*Client) CallWithoutMiddleware added in v0.1.4

func (c *Client) CallWithoutMiddleware(request *Request) *Response

CallWithoutMiddleware 执行请求方法,不包含中间件

func (*Client) Use added in v0.1.4

func (c *Client) Use(middleware func(ctx *Context))

Use 使用旺店通中间件

type Config

type Config struct {
	Url       string `json:"url"` // 接口请求地址
	V         string `json:"v"`
	Sid       string `json:"sid"`       // 卖家账号
	AppKey    string `json:"appkey"`    // 旺店通旗舰版appkey
	AppSecret string `json:"appsecret"` // 旺店通旗舰版appsecret
}

Config 旺店通直连配置

type Context added in v0.1.4

type Context struct {
	Request  *Request
	Response *Response
	Client   *Client
	// contains filtered or unexported fields
}

Context 旺店通直连上下文管理器

func (*Context) Next added in v0.1.4

func (c *Context) Next()

Next 上下文跳转

type Pager

type Pager struct {
	PageSize  int  // 每页数量
	PageNo    int  // 页码
	CalcTotal bool // 是否计算总条数
}

Pager 分页器

type QimenClient added in v0.0.7

type QimenClient struct {
	Config QimenConfig
	// contains filtered or unexported fields
}

QimenClient 奇门客户端

func NewGwdtQimenClient added in v0.0.7

func NewGwdtQimenClient(qimenConfig QimenConfig) *QimenClient

NewGwdtQimenClient 奇门客户端构建函数

func (*QimenClient) Call added in v0.0.7

func (c *QimenClient) Call(request *QimenRequest) *QimenResponse

Call 执行奇门接口请求

func (*QimenClient) CallWithoutMiddleware added in v0.1.4

func (c *QimenClient) CallWithoutMiddleware(request *QimenRequest) *QimenResponse

CallWithoutMiddleware 执行奇门接口请求,不执行中间件

func (*QimenClient) Use added in v0.1.4

func (c *QimenClient) Use(middleware func(ctx *QimenContext))

Use 添加奇门中间件

type QimenConfig added in v0.0.7

type QimenConfig struct {
	QimenUrl       string `json:"qimen_url"`       // 奇门地址
	QimenAppKey    string `json:"qimen_appkey"`    // 奇门appkey
	QimenAppSecret string `json:"qimen_appsecret"` // 奇门appsecret
	Sid            string `json:"sid"`             // 卖家账号
	WdtAppKey      string `json:"wdt_appkey"`      // 旺店通旗舰版appkey
	WdtAppSecret   string `json:"wdt_appsecret"`   // 旺店通旗舰版appsecret
	TargetAppkey   string `json:"target_appkey"`   // 目标appkey
}

QimenConfig 奇门配置

type QimenContext added in v0.1.4

type QimenContext struct {
	Request  *QimenRequest
	Response *QimenResponse
	Client   *QimenClient
	// contains filtered or unexported fields
}

QimenContext 奇门上下文管理器

type QimenError added in v0.0.7

type QimenError struct {
	Flag         string // 奇门返回的错误标识
	RequestId    string // 奇门返回的请求id
	Code         string // 奇门返回的错误码
	Message      string // 奇门返回的错误信息
	SubCode      string // 旺店通错误码
	SubMsg       string // 旺店通错误信息
	RequestError error  // 原始请求错误
}

type QimenRequest added in v0.0.7

type QimenRequest = Request

QimenRequest 奇门请求

type QimenResponse added in v0.0.7

type QimenResponse struct {
	Request    *QimenRequest // 原始请求
	Status     int64         // 状态码,-1为请求失败,0为请求成功,1为返回错误
	Error      *QimenError   // 返回错误
	DateTime   string        // 按照旺店通规则的请求时间戳
	Sign       string        // 奇门签名
	WdtSign    string        // 按照旺店通规则的签名
	Data       string        // 返回数据json字符串
	TotalCount int64         // 分页查询返回的总记录数,仅当分页获取总数时返回
}

QimenResponse 奇门响应

func (*QimenResponse) Get added in v0.1.3

func (c *QimenResponse) Get(key string) string

Get 按键获取奇门返回数据

func (*QimenResponse) GetByte added in v0.1.3

func (c *QimenResponse) GetByte() []byte

GetByte 获取奇门返回数据

func (*QimenResponse) HasMore added in v0.1.3

func (c *QimenResponse) HasMore() bool

HasMore 是否还有更多数据,仅分页且获取总数时返回

type Request

type Request struct {
	Method string
	Params map[string]interface{}
	Pager  *Pager
}

Request 请求参数

type Response

type Response struct {
	Request    *Request  // 原始请求
	Status     int64     // 返回状态码,-1为请求失败,其他为接口返回状态码
	Error      *WdtError // 错误信息
	Timestamp  int64     // 按照旺店通规则的请求时间戳
	Sign       string    // 按照旺店通规则的签名
	Data       string    // 原始返回数据json字符串
	TotalCount int64     // 总条数,仅计算分页时使用
}

Response 旺店通直连响应

func (*Response) Get

func (c *Response) Get(key string) string

Get 按键名获取原始返回数据

func (*Response) GetByte

func (c *Response) GetByte() []byte

GetByte 获取原始返回数据

func (*Response) HasMore

func (c *Response) HasMore() bool

HasMore 判断是否还有更多数据,仅计算分页时使用

type WdtError added in v0.0.7

type WdtError struct {
	Message      string `json:"Message"`       // 接口错误信息
	RequestError error  `json:"request_error"` // 请求错误
}

WdtError 旺店通错误

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL