
1package main
2
3import (
4 "demo/wxpay_utility"
5 "encoding/json"
6 "fmt"
7 "net/http"
8 "net/url"
9 "time"
10)
11
12func main() {
13
14 config, err := wxpay_utility.CreateMchConfig(
15 "19xxxxxxxx",
16 "1DDE55AD98Exxxxxxxxxx",
17 "/path/to/apiclient_key.pem",
18 "PUB_KEY_ID_xxxxxxxxxxxxx",
19 "/path/to/wxp_pub.pem",
20 )
21 if err != nil {
22 fmt.Println(err)
23 return
24 }
25
26 request := &ListCardRequest{
27 BrandId: wxpay_utility.String("1004"),
28 State: CARDSTATE_CARD_EFFECTIVE.Ptr(),
29 Offset: wxpay_utility.Int64(0),
30 Limit: wxpay_utility.Int64(20),
31 }
32
33 response, err := ListCard(config, request)
34 if err != nil {
35 fmt.Printf("请求失败: %+v\n", err)
36
37 return
38 }
39
40
41 fmt.Printf("请求成功: %+v\n", response)
42}
43
44func ListCard(config *wxpay_utility.MchConfig, request *ListCardRequest) (response *ListCardResponse, err error) {
45 const (
46 host = "https://api.mch.weixin.qq.com"
47 method = "GET"
48 path = "/v3/brand/partner/card-member/cards"
49 )
50
51 reqUrl, err := url.Parse(fmt.Sprintf("%s%s", host, path))
52 if err != nil {
53 return nil, err
54 }
55 query := reqUrl.Query()
56 if request.BrandId != nil {
57 query.Add("brand_id", *request.BrandId)
58 }
59 if request.State != nil {
60 query.Add("state", fmt.Sprintf("%v", *request.State))
61 }
62 if request.Offset != nil {
63 query.Add("offset", fmt.Sprintf("%v", *request.Offset))
64 }
65 if request.Limit != nil {
66 query.Add("limit", fmt.Sprintf("%v", *request.Limit))
67 }
68 reqUrl.RawQuery = query.Encode()
69 httpRequest, err := http.NewRequest(method, reqUrl.String(), nil)
70 if err != nil {
71 return nil, err
72 }
73 httpRequest.Header.Set("Accept", "application/json")
74 httpRequest.Header.Set("Wechatpay-Serial", config.WechatPayPublicKeyId())
75 authorization, err := wxpay_utility.BuildAuthorization(config.MchId(), config.CertificateSerialNo(), config.PrivateKey(), method, reqUrl.RequestURI(), nil)
76 if err != nil {
77 return nil, err
78 }
79 httpRequest.Header.Set("Authorization", authorization)
80
81 client := &http.Client{}
82 httpResponse, err := client.Do(httpRequest)
83 if err != nil {
84 return nil, err
85 }
86 respBody, err := wxpay_utility.ExtractResponseBody(httpResponse)
87 if err != nil {
88 return nil, err
89 }
90 if httpResponse.StatusCode >= 200 && httpResponse.StatusCode < 300 {
91
92 err = wxpay_utility.ValidateResponse(
93 config.WechatPayPublicKeyId(),
94 config.WechatPayPublicKey(),
95 &httpResponse.Header,
96 respBody,
97 )
98 if err != nil {
99 return nil, err
100 }
101 response := &ListCardResponse{}
102 if err := json.Unmarshal(respBody, response); err != nil {
103 return nil, err
104 }
105
106 return response, nil
107 } else {
108 return nil, wxpay_utility.NewApiException(
109 httpResponse.StatusCode,
110 httpResponse.Header,
111 respBody,
112 )
113 }
114}
115
116type ListCardRequest struct {
117 BrandId *string `json:"brand_id,omitempty"`
118 Offset *int64 `json:"offset,omitempty"`
119 Limit *int64 `json:"limit,omitempty"`
120 State *CardState `json:"state,omitempty"`
121}
122
123func (o *ListCardRequest) MarshalJSON() ([]byte, error) {
124 type Alias ListCardRequest
125 a := &struct {
126 BrandId *string `json:"brand_id,omitempty"`
127 Offset *int64 `json:"offset,omitempty"`
128 Limit *int64 `json:"limit,omitempty"`
129 State *CardState `json:"state,omitempty"`
130 *Alias
131 }{
132
133 BrandId: nil,
134 Offset: nil,
135 Limit: nil,
136 State: nil,
137 Alias: (*Alias)(o),
138 }
139 return json.Marshal(a)
140}
141
142type ListCardResponse struct {
143 Data []Card `json:"data,omitempty"`
144 TotalCount *int64 `json:"total_count,omitempty"`
145 Offset *int64 `json:"offset,omitempty"`
146 Limit *int64 `json:"limit,omitempty"`
147}
148
149type CardState string
150
151func (e CardState) Ptr() *CardState {
152 return &e
153}
154
155const (
156 CARDSTATE_CARD_EFFECTIVE CardState = "CARD_EFFECTIVE"
157 CARDSTATE_CARD_INVALID CardState = "CARD_INVALID"
158)
159
160type Card struct {
161 OutRequestNo *string `json:"out_request_no,omitempty"`
162 CardId *string `json:"card_id,omitempty"`
163 BrandId *string `json:"brand_id,omitempty"`
164 Appid *string `json:"appid,omitempty"`
165 CardType *CardType `json:"card_type,omitempty"`
166 CardTitle *string `json:"card_title,omitempty"`
167 CardColor *string `json:"card_color,omitempty"`
168 CardPictureUrl *string `json:"card_picture_url,omitempty"`
169 CodeMode *CodeMode `json:"code_mode,omitempty"`
170 CodeType *CodeType `json:"code_type,omitempty"`
171 CodeJumpInformation *CodeJumpInfo `json:"code_jump_information,omitempty"`
172 Benefits *string `json:"benefits,omitempty"`
173 NotifyUrl *string `json:"notify_url,omitempty"`
174 NeedPinned *bool `json:"need_pinned,omitempty"`
175 NeedDisplayLevel *bool `json:"need_display_level,omitempty"`
176 InitLevel *string `json:"init_level,omitempty"`
177 ServicePhone *string `json:"service_phone,omitempty"`
178 LegalAgreement *string `json:"legal_agreement,omitempty"`
179 ValidDateInformation *DateInfo `json:"valid_date_information,omitempty"`
180 MemberInformation *MemberInfo `json:"member_information,omitempty"`
181 PointsInformation *PointsInfo `json:"points_information,omitempty"`
182 BalanceInformation *BalanceInfo `json:"balance_information,omitempty"`
183 PurchaseInformation *PurchaseInfo `json:"purchase_information,omitempty"`
184 UserInformation *UserInfoForm `json:"user_information,omitempty"`
185 State *CardState `json:"state,omitempty"`
186 CreateTime *time.Time `json:"create_time,omitempty"`
187 ModifyTime *time.Time `json:"modify_time,omitempty"`
188}
189
190type CardType string
191
192func (e CardType) Ptr() *CardType {
193 return &e
194}
195
196const (
197 CARDTYPE_PURCHASE CardType = "PURCHASE"
198 CARDTYPE_NORMAL CardType = "NORMAL"
199 CARDTYPE_BALANCE CardType = "BALANCE"
200)
201
202type CodeMode string
203
204func (e CodeMode) Ptr() *CodeMode {
205 return &e
206}
207
208const (
209 CODEMODE_SYSTEM_ALLOCATE CodeMode = "SYSTEM_ALLOCATE"
210 CODEMODE_MERCHANT_ALLOCATE CodeMode = "MERCHANT_ALLOCATE"
211)
212
213type CodeType string
214
215func (e CodeType) Ptr() *CodeType {
216 return &e
217}
218
219const (
220 CODETYPE_NONE_CODE CodeType = "NONE_CODE"
221 CODETYPE_BAR_CODE CodeType = "BAR_CODE"
222 CODETYPE_QR_CODE CodeType = "QR_CODE"
223 CODETYPE_BAR_CODE_AND_QR_CODE CodeType = "BAR_CODE_AND_QR_CODE"
224 CODETYPE_JUMP_MINI_PROGRAM CodeType = "JUMP_MINI_PROGRAM"
225)
226
227type CodeJumpInfo struct {
228 JumpAppid *string `json:"jump_appid,omitempty"`
229 JumpPath *string `json:"jump_path,omitempty"`
230}
231
232type DateInfo struct {
233 Type *DateType `json:"type,omitempty"`
234 AvailableBeginTime *time.Time `json:"available_begin_time,omitempty"`
235 AvailableEndTime *time.Time `json:"available_end_time,omitempty"`
236 AvailableDayAfterReceive *int64 `json:"available_day_after_receive,omitempty"`
237}
238
239type MemberInfo struct {
240 JumpAppid *string `json:"jump_appid,omitempty"`
241 JumpPath *string `json:"jump_path,omitempty"`
242}
243
244type PointsInfo struct {
245 JumpAppid *string `json:"jump_appid,omitempty"`
246 JumpPath *string `json:"jump_path,omitempty"`
247}
248
249type BalanceInfo struct {
250 JumpAppid *string `json:"jump_appid,omitempty"`
251 JumpPath *string `json:"jump_path,omitempty"`
252}
253
254type PurchaseInfo struct {
255 Price *int64 `json:"price,omitempty"`
256 JumpAppid *string `json:"jump_appid,omitempty"`
257 JumpPath *string `json:"jump_path,omitempty"`
258}
259
260type UserInfoForm struct {
261 CommonFieldList []CommonFieldFlag `json:"common_field_list,omitempty"`
262 CustomFieldList []UserCustomFieldForm `json:"custom_field_list,omitempty"`
263}
264
265type DateType string
266
267func (e DateType) Ptr() *DateType {
268 return &e
269}
270
271const (
272 DATETYPE_FIX_TIME_RANGE DateType = "FIX_TIME_RANGE"
273 DATETYPE_FIX_TERM DateType = "FIX_TERM"
274 DATETYPE_PERMANENT DateType = "PERMANENT"
275)
276
277type CommonFieldFlag string
278
279func (e CommonFieldFlag) Ptr() *CommonFieldFlag {
280 return &e
281}
282
283const (
284 COMMONFIELDFLAG_USER_FORM_FLAG_SEX CommonFieldFlag = "USER_FORM_FLAG_SEX"
285 COMMONFIELDFLAG_USER_FORM_FLAG_NAME CommonFieldFlag = "USER_FORM_FLAG_NAME"
286 COMMONFIELDFLAG_USER_FORM_FLAG_BIRTHDAY CommonFieldFlag = "USER_FORM_FLAG_BIRTHDAY"
287 COMMONFIELDFLAG_USER_FORM_FLAG_ADDRESS CommonFieldFlag = "USER_FORM_FLAG_ADDRESS"
288 COMMONFIELDFLAG_USER_FORM_FLAG_EMAIL CommonFieldFlag = "USER_FORM_FLAG_EMAIL"
289 COMMONFIELDFLAG_USER_FORM_FLAG_CITY CommonFieldFlag = "USER_FORM_FLAG_CITY"
290)
291
292type UserCustomFieldForm struct {
293 Type *CustomFieldType `json:"type,omitempty"`
294 Name *string `json:"name,omitempty"`
295 Values []string `json:"values,omitempty"`
296}
297
298type CustomFieldType string
299
300func (e CustomFieldType) Ptr() *CustomFieldType {
301 return &e
302}
303
304const (
305 CUSTOMFIELDTYPE_CHECK_BOX CustomFieldType = "CHECK_BOX"
306 CUSTOMFIELDTYPE_RADIO CustomFieldType = "RADIO"
307)
308