forked from chanxuehong/wechat
/
client_merchant_order.go
189 lines (163 loc) · 3.81 KB
/
client_merchant_order.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
// @description wechat 是腾讯微信公众平台 api 的 golang 语言封装
// @link https://github.com/chanxuehong/wechat for the canonical source repository
// @license https://github.com/chanxuehong/wechat/blob/master/LICENSE
// @authors chanxuehong(chanxuehong@gmail.com)
package client
import (
"github.com/chanxuehong/wechat/merchant/order"
)
// 根据订单id获取订单详情
func (c *Client) MerchantOrderGetById(orderId string) (_order *order.Order, err error) {
var request = struct {
OrderId string `json:"order_id"`
}{
OrderId: orderId,
}
var result struct {
Error
Order order.Order `json:"order"`
}
hasRetry := false
RETRY:
token, err := c.Token()
if err != nil {
return
}
_url := merchantOrderGetByIdURL(token)
if err = c.postJSON(_url, request, &result); err != nil {
return
}
switch result.ErrCode {
case errCodeOK:
_order = &result.Order
return
case errCodeTimeout:
if !hasRetry {
hasRetry = true
timeoutRetryWait()
goto RETRY
}
fallthrough
default:
err = &result.Error
return
}
}
// 根据订单状态/创建时间获取订单详情
// @status: 订单状态, 不带该字段(==0) -全部状态, 2-待发货, 3-已发货, 5-已完成, 8-维权中
// @beginTime: 订单创建时间起始时间, 不带该字段(==0) 则不按照时间做筛选
// @endTime: 订单创建时间终止时间, 不带该字段(==0) 则不按照时间做筛选
func (c *Client) MerchantOrderGetByFilter(status int, beginTime, endTime int64) (orders []order.Order, err error) {
var request = struct {
Status int `json:"status,omitempty"`
BeginTime int64 `json:"begintime,omitempty"`
EndTime int64 `json:"endtime,omitempty"`
}{
Status: status,
BeginTime: beginTime,
EndTime: endTime,
}
var result struct {
Error
OrderList []order.Order `json:"order_list"`
}
result.OrderList = make([]order.Order, 0, 64)
hasRetry := false
RETRY:
token, err := c.Token()
if err != nil {
return
}
_url := merchantOrderGetByFilterURL(token)
if err = c.postJSON(_url, &request, &result); err != nil {
return
}
switch result.ErrCode {
case errCodeOK:
orders = result.OrderList
return
case errCodeTimeout:
if !hasRetry {
hasRetry = true
timeoutRetryWait()
goto RETRY
}
fallthrough
default:
err = &result.Error
return
}
}
// 设置订单发货信息.
// @orderId: 订单ID;
// @deliveryCompany: 物流公司ID(参考《物流公司ID》)
// @deliveryTrackNo: 运单ID
func (c *Client) MerchantOrderSetDelivery(orderId, deliveryCompany, deliveryTrackNo string) (err error) {
var request = struct {
OrderId string `json:"order_id"`
DeliveryCompany string `json:"delivery_company"`
DeliveryTrackNo string `json:"delivery_track_no"`
}{
OrderId: orderId,
DeliveryCompany: deliveryCompany,
DeliveryTrackNo: deliveryTrackNo,
}
var result Error
hasRetry := false
RETRY:
token, err := c.Token()
if err != nil {
return
}
_url := merchantOrderSetDeliveryURL(token)
if err = c.postJSON(_url, &request, &result); err != nil {
return
}
switch result.ErrCode {
case errCodeOK:
return
case errCodeTimeout:
if !hasRetry {
hasRetry = true
timeoutRetryWait()
goto RETRY
}
fallthrough
default:
err = &result
return
}
}
// 关闭订单
func (c *Client) MerchantOrderClose(orderId string) (err error) {
var request = struct {
OrderId string `json:"order_id"`
}{
OrderId: orderId,
}
var result Error
hasRetry := false
RETRY:
token, err := c.Token()
if err != nil {
return
}
_url := merchantOrderCloseURL(token)
if err = c.postJSON(_url, request, &result); err != nil {
return
}
switch result.ErrCode {
case errCodeOK:
return
case errCodeTimeout:
if !hasRetry {
hasRetry = true
timeoutRetryWait()
goto RETRY
}
fallthrough
default:
err = &result
return
}
}