
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 := &ListMembershipActivityRequest{
27 BrandId: wxpay_utility.String("1004"),
28 CardId: wxpay_utility.String("pbLatjvWOibDc5-TBnbUk1pD12o0"),
29 ActivityState: MEMBERSHIPGIFTACTIVITYSTATE_MEMBERSHIP_ACTIVITY_EFFECTIVE.Ptr(),
30 Offset: wxpay_utility.Int64(0),
31 Limit: wxpay_utility.Int64(20),
32 }
33
34 response, err := ListMembershipActivity(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 ListMembershipActivity(config *wxpay_utility.MchConfig, request *ListMembershipActivityRequest) (response *ListMembershipActivityResponse, err error) {
46 const (
47 host = "https://api.mch.weixin.qq.com"
48 method = "GET"
49 path = "/v3/brand/partner/card-member/membership-activities"
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.CardId != nil {
61 query.Add("card_id", *request.CardId)
62 }
63 if request.ActivityState != nil {
64 query.Add("activity_state", fmt.Sprintf("%v", *request.ActivityState))
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 := &ListMembershipActivityResponse{}
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 ListMembershipActivityRequest struct {
121 BrandId *string `json:"brand_id,omitempty"`
122 CardId *string `json:"card_id,omitempty"`
123 Offset *int64 `json:"offset,omitempty"`
124 Limit *int64 `json:"limit,omitempty"`
125 ActivityState *MembershipGiftActivityState `json:"activity_state,omitempty"`
126}
127
128func (o *ListMembershipActivityRequest) MarshalJSON() ([]byte, error) {
129 type Alias ListMembershipActivityRequest
130 a := &struct {
131 BrandId *string `json:"brand_id,omitempty"`
132 CardId *string `json:"card_id,omitempty"`
133 Offset *int64 `json:"offset,omitempty"`
134 Limit *int64 `json:"limit,omitempty"`
135 ActivityState *MembershipGiftActivityState `json:"activity_state,omitempty"`
136 *Alias
137 }{
138
139 BrandId: nil,
140 CardId: nil,
141 Offset: nil,
142 Limit: nil,
143 ActivityState: nil,
144 Alias: (*Alias)(o),
145 }
146 return json.Marshal(a)
147}
148
149type ListMembershipActivityResponse struct {
150 Data []MembershipActivity `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 MembershipGiftActivityState string
157
158func (e MembershipGiftActivityState) Ptr() *MembershipGiftActivityState {
159 return &e
160}
161
162const (
163 MEMBERSHIPGIFTACTIVITYSTATE_MEMBERSHIP_ACTIVITY_CREATED MembershipGiftActivityState = "MEMBERSHIP_ACTIVITY_CREATED"
164 MEMBERSHIPGIFTACTIVITYSTATE_MEMBERSHIP_ACTIVITY_EFFECTIVE MembershipGiftActivityState = "MEMBERSHIP_ACTIVITY_EFFECTIVE"
165 MEMBERSHIPGIFTACTIVITYSTATE_MEMBERSHIP_ACTIVITY_TERMINATED MembershipGiftActivityState = "MEMBERSHIP_ACTIVITY_TERMINATED"
166 MEMBERSHIPGIFTACTIVITYSTATE_MEMBERSHIP_ACTIVITY_EXPIRED MembershipGiftActivityState = "MEMBERSHIP_ACTIVITY_EXPIRED"
167)
168
169type MembershipActivity struct {
170 OutRequestNo *string `json:"out_request_no,omitempty"`
171 BrandId *string `json:"brand_id,omitempty"`
172 CardId *string `json:"card_id,omitempty"`
173 ActivityChannel *MembershipActivityChannel `json:"activity_channel,omitempty"`
174 Title *string `json:"title,omitempty"`
175 SubTitle *string `json:"sub_title,omitempty"`
176 BeginTime *time.Time `json:"begin_time,omitempty"`
177 EndTime *time.Time `json:"end_time,omitempty"`
178 ApplyTotal *int64 `json:"apply_total,omitempty"`
179 ApplyAvailable *int64 `json:"apply_available,omitempty"`
180 ProductCouponStockList []ProductCouponStock `json:"product_coupon_stock_list,omitempty"`
181 ActivityId *int64 `json:"activity_id,omitempty"`
182 ActivityState *MembershipGiftActivityState `json:"activity_state,omitempty"`
183 CreateTime *time.Time `json:"create_time,omitempty"`
184 ModifyTime *time.Time `json:"modify_time,omitempty"`
185}
186
187type MembershipActivityChannel string
188
189func (e MembershipActivityChannel) Ptr() *MembershipActivityChannel {
190 return &e
191}
192
193const (
194 MEMBERSHIPACTIVITYCHANNEL_MECHANT_APP_COMPONENT MembershipActivityChannel = "MECHANT_APP_COMPONENT"
195)
196
197type ProductCouponStock struct {
198 ProductCouponId *string `json:"product_coupon_id,omitempty"`
199 StockId *string `json:"stock_id,omitempty"`
200}
201