
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 := &ListUserCardRequest{
27 BrandId: wxpay_utility.String("1004"),
28 Openid: wxpay_utility.String("obLatjnx9gnqzS4myYGmLZ7LgLBA"),
29 UserCardState: USERCARDSTATE_EFFECTIVE.Ptr(),
30 Offset: wxpay_utility.Int64(0),
31 Limit: wxpay_utility.Int64(20),
32 }
33
34 response, err := ListUserCard(config, request)
35 if err != nil {
36 fmt.Printf("请求失败: %+v\n", err)
37
38 return
39 }
40
41
42 fmt.Printf("请求成功: %+v\n", response)
43}
44
45func ListUserCard(config *wxpay_utility.MchConfig, request *ListUserCardRequest) (response *ListUserCardResponse, err error) {
46 const (
47 host = "https://api.mch.weixin.qq.com"
48 method = "GET"
49 path = "/v3/brand/partner/card-member/user-cards"
50 )
51
52 reqUrl, err := url.Parse(fmt.Sprintf("%s%s", host, path))
53 if err != nil {
54 return nil, err
55 }
56 query := reqUrl.Query()
57 if request.BrandId != nil {
58 query.Add("brand_id", *request.BrandId)
59 }
60 if request.Openid != nil {
61 query.Add("openid", *request.Openid)
62 }
63 if request.UserCardState != nil {
64 query.Add("user_card_state", fmt.Sprintf("%v", *request.UserCardState))
65 }
66 if request.Offset != nil {
67 query.Add("offset", fmt.Sprintf("%v", *request.Offset))
68 }
69 if request.Limit != nil {
70 query.Add("limit", fmt.Sprintf("%v", *request.Limit))
71 }
72 reqUrl.RawQuery = query.Encode()
73 httpRequest, err := http.NewRequest(method, reqUrl.String(), nil)
74 if err != nil {
75 return nil, err
76 }
77 httpRequest.Header.Set("Accept", "application/json")
78 httpRequest.Header.Set("Wechatpay-Serial", config.WechatPayPublicKeyId())
79 authorization, err := wxpay_utility.BuildAuthorization(config.MchId(), config.CertificateSerialNo(), config.PrivateKey(), method, reqUrl.RequestURI(), nil)
80 if err != nil {
81 return nil, err
82 }
83 httpRequest.Header.Set("Authorization", authorization)
84
85 client := &http.Client{}
86 httpResponse, err := client.Do(httpRequest)
87 if err != nil {
88 return nil, err
89 }
90 respBody, err := wxpay_utility.ExtractResponseBody(httpResponse)
91 if err != nil {
92 return nil, err
93 }
94 if httpResponse.StatusCode >= 200 && httpResponse.StatusCode < 300 {
95
96 err = wxpay_utility.ValidateResponse(
97 config.WechatPayPublicKeyId(),
98 config.WechatPayPublicKey(),
99 &httpResponse.Header,
100 respBody,
101 )
102 if err != nil {
103 return nil, err
104 }
105 response := &ListUserCardResponse{}
106 if err := json.Unmarshal(respBody, response); err != nil {
107 return nil, err
108 }
109
110 return response, nil
111 } else {
112 return nil, wxpay_utility.NewApiException(
113 httpResponse.StatusCode,
114 httpResponse.Header,
115 respBody,
116 )
117 }
118}
119
120type ListUserCardRequest struct {
121 BrandId *string `json:"brand_id,omitempty"`
122 Openid *string `json:"openid,omitempty"`
123 Offset *int64 `json:"offset,omitempty"`
124 Limit *int64 `json:"limit,omitempty"`
125 UserCardState *UserCardState `json:"user_card_state,omitempty"`
126}
127
128func (o *ListUserCardRequest) MarshalJSON() ([]byte, error) {
129 type Alias ListUserCardRequest
130 a := &struct {
131 BrandId *string `json:"brand_id,omitempty"`
132 Openid *string `json:"openid,omitempty"`
133 Offset *int64 `json:"offset,omitempty"`
134 Limit *int64 `json:"limit,omitempty"`
135 UserCardState *UserCardState `json:"user_card_state,omitempty"`
136 *Alias
137 }{
138
139 BrandId: nil,
140 Openid: nil,
141 Offset: nil,
142 Limit: nil,
143 UserCardState: nil,
144 Alias: (*Alias)(o),
145 }
146 return json.Marshal(a)
147}
148
149type ListUserCardResponse struct {
150 Data []UserCard `json:"data,omitempty"`
151 TotalCount *int64 `json:"total_count,omitempty"`
152 Offset *int64 `json:"offset,omitempty"`
153 Limit *int64 `json:"limit,omitempty"`
154}
155
156type UserCardState string
157
158func (e UserCardState) Ptr() *UserCardState {
159 return &e
160}
161
162const (
163 USERCARDSTATE_UNACTIVATED UserCardState = "UNACTIVATED"
164 USERCARDSTATE_EFFECTIVE UserCardState = "EFFECTIVE"
165 USERCARDSTATE_EXPIRED UserCardState = "EXPIRED"
166 USERCARDSTATE_INVALID UserCardState = "INVALID"
167)
168
169type UserCard struct {
170 UserCardCode *string `json:"user_card_code,omitempty"`
171 CardId *string `json:"card_id,omitempty"`
172 Openid *string `json:"openid,omitempty"`
173 CardColor *string `json:"card_color,omitempty"`
174 CardPictureUrl *string `json:"card_picture_url,omitempty"`
175 BrandId *string `json:"brand_id,omitempty"`
176 CardType *CardType `json:"card_type,omitempty"`
177 PhoneNumber *string `json:"phone_number,omitempty"`
178 Level *string `json:"level,omitempty"`
179 ValidDateInformation *DateInfo `json:"valid_date_information,omitempty"`
180 PickupTime *string `json:"pickup_time,omitempty"`
181 UserInformation *UserInfo `json:"user_information,omitempty"`
182 Attach *string `json:"attach,omitempty"`
183 UserCardState *UserCardState `json:"user_card_state,omitempty"`
184 InvalidReason *string `json:"invalid_reason,omitempty"`
185 InvalidTime *string `json:"invalid_time,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 DateInfo struct {
203 Type *DateType `json:"type,omitempty"`
204 AvailableBeginTime *time.Time `json:"available_begin_time,omitempty"`
205 AvailableEndTime *time.Time `json:"available_end_time,omitempty"`
206 AvailableDayAfterReceive *int64 `json:"available_day_after_receive,omitempty"`
207}
208
209type UserInfo struct {
210 CommonFieldList []UserInfoCommonField `json:"common_field_list,omitempty"`
211 CustomFieldList []UserInfoCustomField `json:"custom_field_list,omitempty"`
212}
213
214type DateType string
215
216func (e DateType) Ptr() *DateType {
217 return &e
218}
219
220const (
221 DATETYPE_FIX_TIME_RANGE DateType = "FIX_TIME_RANGE"
222 DATETYPE_FIX_TERM DateType = "FIX_TERM"
223 DATETYPE_PERMANENT DateType = "PERMANENT"
224)
225
226type UserInfoCommonField struct {
227 Name *CommonFieldFlag `json:"name,omitempty"`
228 Value *string `json:"value,omitempty"`
229}
230
231type UserInfoCustomField struct {
232 Name *string `json:"name,omitempty"`
233 UserChosenValues []string `json:"user_chosen_values,omitempty"`
234}
235
236type CommonFieldFlag string
237
238func (e CommonFieldFlag) Ptr() *CommonFieldFlag {
239 return &e
240}
241
242const (
243 COMMONFIELDFLAG_USER_FORM_FLAG_SEX CommonFieldFlag = "USER_FORM_FLAG_SEX"
244 COMMONFIELDFLAG_USER_FORM_FLAG_NAME CommonFieldFlag = "USER_FORM_FLAG_NAME"
245 COMMONFIELDFLAG_USER_FORM_FLAG_BIRTHDAY CommonFieldFlag = "USER_FORM_FLAG_BIRTHDAY"
246 COMMONFIELDFLAG_USER_FORM_FLAG_ADDRESS CommonFieldFlag = "USER_FORM_FLAG_ADDRESS"
247 COMMONFIELDFLAG_USER_FORM_FLAG_EMAIL CommonFieldFlag = "USER_FORM_FLAG_EMAIL"
248 COMMONFIELDFLAG_USER_FORM_FLAG_CITY CommonFieldFlag = "USER_FORM_FLAG_CITY"
249)
250