
1package main
2
3import (
4 "bytes"
5 "demo/wxpay_utility"
6 "encoding/json"
7 "fmt"
8 "net/http"
9 "net/url"
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 := &SubmitApplyRequest{
27 BusinessCode: wxpay_utility.String("1900013511_10000"),
28 AdminInfo: &AdminInfo{
29 AdminName: wxpay_utility.String("U2FsdGVkX1+3vZQv5+9JhTq3Xy6LdKjP0o9iYx5W7vRtNqY3sDfGhJkLmNbVcXz4Qw1UbP6oE8iC="),
30 IdDocType: IDENTIFICATIONTYPE_IDENTIFICATION_TYPE_MAINLAND_ID_CARD.Ptr(),
31 IdCardNumber: wxpay_utility.String("AOZdYGISxo4y44/UgZ69bdu9X+tfMUJ9dl+LetjM45/zMbrYu+wWZ8gn4CTdo+D/m9MrPg+V4sm73oxqdQu/hj7aWyDl4GQtPXVdaztB9jVbVZh3QFzV+BEmytMNQp9dt1uWJktlfdDdLR3AMWyMB377xd+m9bSr/ioDTzagEcGe+vLYiKrzcroQv3OR0p3ppFYoQ3IfYeU/04S4t9rNFL+kyblK2FCCqQ11NdbbHoCrJc7NV4oASq6ZFonjTtgjjgKsadIKHXtb3JZKGZjduGdtkRJJp0/0eow96uY1Pk7Rq79Jtt7+I8juwEc4P4TG5xzchG/5IL9DBd+Z0zZXkw=="),
32 },
33 SubjectInfo: &SubjectInfo{
34 SubjectType: SUBJECTTYPE_SUBJECT_TYPE_ENTERPRISE.Ptr(),
35 SubjectName: wxpay_utility.String("xx有限公司"),
36 UnifiedSocialCreditCode: wxpay_utility.String("91310101MA1FPX1234"),
37 },
38 BrandBasicInfo: &BrandBasicInfo{
39 BrandName: wxpay_utility.String("爱马哥"),
40 BrandLogo: wxpay_utility.String("U2FsdGVkX1+8n2qLk9jP4vRtY6Wx1Zc3DqF7sH0mNpBvY2Tq5X9gLkE4wRz1oU6IcJ8mVfA0sBd="),
41 },
42 Trademark: &Trademark{
43 TrademarkExists: TRADEMARKSTATE_TRADEMARK_EXISTS.Ptr(),
44 TrademarkRegistrationCertificate: &TrademarkRegCert{
45 Certificate: wxpay_utility.String("jTpGmxUX3FBWVQ5NJTZvvDujqhThn4ReFxikqJ5YW6zFQ"),
46 Name: wxpay_utility.String("爱马哥"),
47 Number: wxpay_utility.String("12345678"),
48 ValidBeginTime: wxpay_utility.String("2025-09-08"),
49 ValidEndTime: wxpay_utility.String("2035-09-08"),
50 InternationalClass: wxpay_utility.String("25"),
51 Holder: wxpay_utility.String("腾讯科技有限公司"),
52 License: wxpay_utility.String("jTpGmxUXqRTvDujqhThn4ReFxikqJ5YW6zFQ"),
53 AuthorizationBeginTime: wxpay_utility.String("2025-09-08"),
54 AuthorizationEndTime: wxpay_utility.String("2035-09-08"),
55 CertificateList: []string{"example_CertificateList"},
56 LicenseList: []string{"example_LicenseList"},
57 },
58 LogoTrademarkRegistrationCertificate: &LogoTrademarkRegCert{
59 Certificate: wxpay_utility.String("jTpGmxUXqRTvDujqhThn4ReFxikqJ5YW6zFQ"),
60 Name: wxpay_utility.String("爱马哥"),
61 Number: wxpay_utility.String("21312344"),
62 ValidBeginTime: wxpay_utility.String("2025-09-08"),
63 ValidEndTime: wxpay_utility.String("2035-09-08"),
64 InternationalClass: wxpay_utility.String("25"),
65 Holder: wxpay_utility.String("腾讯科技有限公司"),
66 License: wxpay_utility.String("jTpGmxUXqRTvDujqhThn4ReFxikqJ5YW6zFQ"),
67 AuthorizationBeginTime: wxpay_utility.String("2025-09-08"),
68 AuthorizationEndTime: wxpay_utility.String("2035-09-08"),
69 CertificateList: []string{"example_CertificateList"},
70 LicenseList: []string{"example_LicenseList"},
71 },
72 NoTrademarkAdditionProve: wxpay_utility.String("jTpGmxUX3FBWVQ5NJTZvvDujqhThn4ReFxikqJ5YW6zFQ"),
73 NoTrademarkAdditionProveList: []string{"example_NoTrademarkAdditionProveList"},
74 },
75 }
76
77 response, err := SubmitApplyment(config, request)
78 if err != nil {
79 fmt.Printf("请求失败: %+v\n", err)
80
81 return
82 }
83
84
85 fmt.Printf("请求成功: %+v\n", response)
86}
87
88func SubmitApplyment(config *wxpay_utility.MchConfig, request *SubmitApplyRequest) (response *SubmitApplyResponse, err error) {
89 const (
90 host = "https://api.mch.weixin.qq.com"
91 method = "POST"
92 path = "/v3/brand/applyments"
93 )
94
95 reqUrl, err := url.Parse(fmt.Sprintf("%s%s", host, path))
96 if err != nil {
97 return nil, err
98 }
99 reqBody, err := json.Marshal(request)
100 if err != nil {
101 return nil, err
102 }
103 httpRequest, err := http.NewRequest(method, reqUrl.String(), bytes.NewReader(reqBody))
104 if err != nil {
105 return nil, err
106 }
107 httpRequest.Header.Set("Accept", "application/json")
108 httpRequest.Header.Set("Wechatpay-Serial", config.WechatPayPublicKeyId())
109 httpRequest.Header.Set("Content-Type", "application/json")
110 authorization, err := wxpay_utility.BuildAuthorization(config.MchId(), config.CertificateSerialNo(), config.PrivateKey(), method, reqUrl.RequestURI(), reqBody)
111 if err != nil {
112 return nil, err
113 }
114 httpRequest.Header.Set("Authorization", authorization)
115
116 client := &http.Client{}
117 httpResponse, err := client.Do(httpRequest)
118 if err != nil {
119 return nil, err
120 }
121 respBody, err := wxpay_utility.ExtractResponseBody(httpResponse)
122 if err != nil {
123 return nil, err
124 }
125 if httpResponse.StatusCode >= 200 && httpResponse.StatusCode < 300 {
126
127 err = wxpay_utility.ValidateResponse(
128 config.WechatPayPublicKeyId(),
129 config.WechatPayPublicKey(),
130 &httpResponse.Header,
131 respBody,
132 )
133 if err != nil {
134 return nil, err
135 }
136 response := &SubmitApplyResponse{}
137 if err := json.Unmarshal(respBody, response); err != nil {
138 return nil, err
139 }
140
141 return response, nil
142 } else {
143 return nil, wxpay_utility.NewApiException(
144 httpResponse.StatusCode,
145 httpResponse.Header,
146 respBody,
147 )
148 }
149}
150
151type SubmitApplyRequest struct {
152 BusinessCode *string `json:"business_code,omitempty"`
153 AdminInfo *AdminInfo `json:"admin_info,omitempty"`
154 SubjectInfo *SubjectInfo `json:"subject_info,omitempty"`
155 BrandBasicInfo *BrandBasicInfo `json:"brand_basic_info,omitempty"`
156 Trademark *Trademark `json:"trademark,omitempty"`
157}
158
159type SubmitApplyResponse struct {
160 ApplymentId *string `json:"applyment_id,omitempty"`
161 BusinessCode *string `json:"business_code,omitempty"`
162}
163
164type AdminInfo struct {
165 AdminName *string `json:"admin_name,omitempty"`
166 IdDocType *IdentificationType `json:"id_doc_type,omitempty"`
167 IdCardNumber *string `json:"id_card_number,omitempty"`
168}
169
170type SubjectInfo struct {
171 SubjectType *SubjectType `json:"subject_type,omitempty"`
172 SubjectName *string `json:"subject_name,omitempty"`
173 UnifiedSocialCreditCode *string `json:"unified_social_credit_code,omitempty"`
174}
175
176type BrandBasicInfo struct {
177 BrandName *string `json:"brand_name,omitempty"`
178 BrandLogo *string `json:"brand_logo,omitempty"`
179}
180
181type Trademark struct {
182 TrademarkExists *TrademarkState `json:"trademark_exists,omitempty"`
183 TrademarkRegistrationCertificate *TrademarkRegCert `json:"trademark_registration_certificate,omitempty"`
184 LogoTrademarkRegistrationCertificate *LogoTrademarkRegCert `json:"logo_trademark_registration_certificate,omitempty"`
185 NoTrademarkAdditionProve *string `json:"no_trademark_addition_prove,omitempty"`
186 NoTrademarkAdditionProveList []string `json:"no_trademark_addition_prove_list,omitempty"`
187}
188
189type IdentificationType string
190
191func (e IdentificationType) Ptr() *IdentificationType {
192 return &e
193}
194
195const (
196 IDENTIFICATIONTYPE_IDENTIFICATION_TYPE_MAINLAND_ID_CARD IdentificationType = "IDENTIFICATION_TYPE_MAINLAND_ID_CARD"
197 IDENTIFICATIONTYPE_IDENTIFICATION_TYPE_HONGKONG IdentificationType = "IDENTIFICATION_TYPE_HONGKONG"
198 IDENTIFICATIONTYPE_IDENTIFICATION_TYPE_MACAO IdentificationType = "IDENTIFICATION_TYPE_MACAO"
199 IDENTIFICATIONTYPE_IDENTIFICATION_TYPE_TAIWAN IdentificationType = "IDENTIFICATION_TYPE_TAIWAN"
200 IDENTIFICATIONTYPE_IDENTIFICATION_TYPE_HONGKONG_MACAO_RESIDENT IdentificationType = "IDENTIFICATION_TYPE_HONGKONG_MACAO_RESIDENT"
201 IDENTIFICATIONTYPE_IDENTIFICATION_TYPE_TAIWAN_RESIDENT IdentificationType = "IDENTIFICATION_TYPE_TAIWAN_RESIDENT"
202)
203
204type SubjectType string
205
206func (e SubjectType) Ptr() *SubjectType {
207 return &e
208}
209
210const (
211 SUBJECTTYPE_SUBJECT_TYPE_ENTERPRISE SubjectType = "SUBJECT_TYPE_ENTERPRISE"
212 SUBJECTTYPE_SUBJECT_TYPE_INDIVIDUAL SubjectType = "SUBJECT_TYPE_INDIVIDUAL"
213)
214
215type TrademarkState string
216
217func (e TrademarkState) Ptr() *TrademarkState {
218 return &e
219}
220
221const (
222 TRADEMARKSTATE_TRADEMARK_EXISTS TrademarkState = "TRADEMARK_EXISTS"
223 TRADEMARKSTATE_TRADEMARK_NONE TrademarkState = "TRADEMARK_NONE"
224)
225
226type TrademarkRegCert struct {
227 Certificate *string `json:"certificate,omitempty"`
228 Name *string `json:"name,omitempty"`
229 Number *string `json:"number,omitempty"`
230 ValidBeginTime *string `json:"valid_begin_time,omitempty"`
231 ValidEndTime *string `json:"valid_end_time,omitempty"`
232 InternationalClass *string `json:"international_class,omitempty"`
233 Holder *string `json:"holder,omitempty"`
234 License *string `json:"license,omitempty"`
235 AuthorizationBeginTime *string `json:"authorization_begin_time,omitempty"`
236 AuthorizationEndTime *string `json:"authorization_end_time,omitempty"`
237 CertificateList []string `json:"certificate_list,omitempty"`
238 LicenseList []string `json:"license_list,omitempty"`
239}
240
241type LogoTrademarkRegCert struct {
242 Certificate *string `json:"certificate,omitempty"`
243 Name *string `json:"name,omitempty"`
244 Number *string `json:"number,omitempty"`
245 ValidBeginTime *string `json:"valid_begin_time,omitempty"`
246 ValidEndTime *string `json:"valid_end_time,omitempty"`
247 InternationalClass *string `json:"international_class,omitempty"`
248 Holder *string `json:"holder,omitempty"`
249 License *string `json:"license,omitempty"`
250 AuthorizationBeginTime *string `json:"authorization_begin_time,omitempty"`
251 AuthorizationEndTime *string `json:"authorization_end_time,omitempty"`
252 CertificateList []string `json:"certificate_list,omitempty"`
253 LicenseList []string `json:"license_list,omitempty"`
254}
255