
1package main
2
3import (
4 "demo/wxpay_brand_utility"
5 "encoding/json"
6 "fmt"
7 "net/http"
8 "net/url"
9 "time"
10)
11
12func main() {
13
14 config, err := wxpay_brand_utility.CreateBrandConfig(
15 "xxxxxxxx",
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 := &ListUserCardRequest{
27 Openid: wxpay_brand_utility.String("obLatjnx9gnqzS4myYGmLZ7LgLBA"),
28 UserCardState: USERCARDSTATE_EFFECTIVE.Ptr(),
29 Offset: wxpay_brand_utility.Int64(0),
30 Limit: wxpay_brand_utility.Int64(20),
31 }
32
33 response, err := ListUserCard(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 ListUserCard(config *wxpay_brand_utility.BrandConfig, request *ListUserCardRequest) (response *ListUserCardResponse, err error) {
45 const (
46 host = "https://api.mch.weixin.qq.com"
47 method = "GET"
48 path = "/brand/card-member/user-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.Openid != nil {
57 query.Add("openid", *request.Openid)
58 }
59 if request.UserCardState != nil {
60 query.Add("user_card_state", fmt.Sprintf("%v", *request.UserCardState))
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_brand_utility.BuildAuthorization(config.BrandId(), 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_brand_utility.ExtractResponseBody(httpResponse)
87 if err != nil {
88 return nil, err
89 }
90 if httpResponse.StatusCode >= 200 && httpResponse.StatusCode < 300 {
91
92 err = wxpay_brand_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 := &ListUserCardResponse{}
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_brand_utility.NewApiException(
109 httpResponse.StatusCode,
110 httpResponse.Header,
111 respBody,
112 )
113 }
114}
115
116type ListUserCardRequest struct {
117 Openid *string `json:"openid,omitempty"`
118 Offset *int64 `json:"offset,omitempty"`
119 Limit *int64 `json:"limit,omitempty"`
120 UserCardState *UserCardState `json:"user_card_state,omitempty"`
121}
122
123func (o *ListUserCardRequest) MarshalJSON() ([]byte, error) {
124 type Alias ListUserCardRequest
125 a := &struct {
126 Openid *string `json:"openid,omitempty"`
127 Offset *int64 `json:"offset,omitempty"`
128 Limit *int64 `json:"limit,omitempty"`
129 UserCardState *UserCardState `json:"user_card_state,omitempty"`
130 *Alias
131 }{
132
133 Openid: nil,
134 Offset: nil,
135 Limit: nil,
136 UserCardState: nil,
137 Alias: (*Alias)(o),
138 }
139 return json.Marshal(a)
140}
141
142type ListUserCardResponse struct {
143 Data []UserCard `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 UserCardState string
150
151func (e UserCardState) Ptr() *UserCardState {
152 return &e
153}
154
155const (
156 USERCARDSTATE_UNACTIVATED UserCardState = "UNACTIVATED"
157 USERCARDSTATE_EFFECTIVE UserCardState = "EFFECTIVE"
158 USERCARDSTATE_EXPIRED UserCardState = "EXPIRED"
159 USERCARDSTATE_INVALID UserCardState = "INVALID"
160)
161
162type UserCard struct {
163 UserCardCode *string `json:"user_card_code,omitempty"`
164 CardId *string `json:"card_id,omitempty"`
165 Openid *string `json:"openid,omitempty"`
166 CardColor *string `json:"card_color,omitempty"`
167 CardPictureUrl *string `json:"card_picture_url,omitempty"`
168 BrandId *string `json:"brand_id,omitempty"`
169 CardType *CardType `json:"card_type,omitempty"`
170 PhoneNumber *string `json:"phone_number,omitempty"`
171 Level *string `json:"level,omitempty"`
172 ValidDateInformation *DateInfo `json:"valid_date_information,omitempty"`
173 PickupTime *string `json:"pickup_time,omitempty"`
174 UserInformation *UserInfo `json:"user_information,omitempty"`
175 Attach *string `json:"attach,omitempty"`
176 UserCardState *UserCardState `json:"user_card_state,omitempty"`
177 InvalidReason *string `json:"invalid_reason,omitempty"`
178 InvalidTime *string `json:"invalid_time,omitempty"`
179 CreateTime *time.Time `json:"create_time,omitempty"`
180 ModifyTime *time.Time `json:"modify_time,omitempty"`
181}
182
183type CardType string
184
185func (e CardType) Ptr() *CardType {
186 return &e
187}
188
189const (
190 CARDTYPE_PURCHASE CardType = "PURCHASE"
191 CARDTYPE_NORMAL CardType = "NORMAL"
192 CARDTYPE_BALANCE CardType = "BALANCE"
193)
194
195type DateInfo struct {
196 Type *DateType `json:"type,omitempty"`
197 AvailableBeginTime *time.Time `json:"available_begin_time,omitempty"`
198 AvailableEndTime *time.Time `json:"available_end_time,omitempty"`
199 AvailableDayAfterReceive *int64 `json:"available_day_after_receive,omitempty"`
200}
201
202type UserInfo struct {
203 CommonFieldList []UserInfoCommonField `json:"common_field_list,omitempty"`
204 CustomFieldList []UserInfoCustomField `json:"custom_field_list,omitempty"`
205}
206
207type DateType string
208
209func (e DateType) Ptr() *DateType {
210 return &e
211}
212
213const (
214 DATETYPE_FIX_TIME_RANGE DateType = "FIX_TIME_RANGE"
215 DATETYPE_FIX_TERM DateType = "FIX_TERM"
216 DATETYPE_PERMANENT DateType = "PERMANENT"
217)
218
219type UserInfoCommonField struct {
220 Name *CommonFieldFlag `json:"name,omitempty"`
221 Value *string `json:"value,omitempty"`
222}
223
224type UserInfoCustomField struct {
225 Name *string `json:"name,omitempty"`
226 UserChosenValues []string `json:"user_chosen_values,omitempty"`
227}
228
229type CommonFieldFlag string
230
231func (e CommonFieldFlag) Ptr() *CommonFieldFlag {
232 return &e
233}
234
235const (
236 COMMONFIELDFLAG_USER_FORM_FLAG_SEX CommonFieldFlag = "USER_FORM_FLAG_SEX"
237 COMMONFIELDFLAG_USER_FORM_FLAG_NAME CommonFieldFlag = "USER_FORM_FLAG_NAME"
238 COMMONFIELDFLAG_USER_FORM_FLAG_BIRTHDAY CommonFieldFlag = "USER_FORM_FLAG_BIRTHDAY"
239 COMMONFIELDFLAG_USER_FORM_FLAG_ADDRESS CommonFieldFlag = "USER_FORM_FLAG_ADDRESS"
240 COMMONFIELDFLAG_USER_FORM_FLAG_EMAIL CommonFieldFlag = "USER_FORM_FLAG_EMAIL"
241 COMMONFIELDFLAG_USER_FORM_FLAG_CITY CommonFieldFlag = "USER_FORM_FLAG_CITY"
242)
243