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