提交申请单
更新时间:2025.01.09渠道商可以通过该接口向微信支付提交商户的联系人、主体等信息,根据指引完成商户开户意愿确认。
功能接入可看产品流程指引。
接口频率: 5QPS(商户号维度)
是否支持幂等: 是
|
接口说明
支持商户:【渠道商】 【从业机构(银行)】 【从业机构(支付机构)】
请求方式:【POST】/v3/apply4subject/applyment/
请求域名:【主域名】https://api.mch.weixin.qq.com 使用该域名将访问就近的接入点
【备域名】https://api2.mch.weixin.qq.com 使用该域名将访问异地的接入点 ,指引点击查看
请求参数
Header HTTP头参数
Authorization 必填 string
请参考签名认证生成认证信息
Accept 必填 string
请设置为application/json
Content-Type 必填 string
请设置为application/json
Wechatpay-Serial 必填 string
【微信支付公钥ID】或【微信支付平台证书序列号】请求参数中的敏感字段,需要使用微信支付公钥加密(推荐),请参考获取微信支付公钥ID说明以及微信支付公钥加密敏感信息指引,也可以使用微信支付平台证书公钥加密,参考获取平台证书序列号、平台证书加密敏感信息指引
body 包体参数
channel_id 选填 string(9)
【渠道商户号】 1、微信支付分配的渠道商户唯一标识
2、当从业机构调用时,改字段必填,需填写从业机构下的渠道商户号
3、当渠道商户调用时,该字段无需填写
business_code 必填 string(128)
【业务申请编号】 1、只能由数字、字母或下划线组成
2、服务商自定义的唯一编号。每个编号对应一个申请单
3、建议前缀带上服务商商户号,参看示例值
contact_info 必填 object
【联系人信息】 联系人信息,联系人是商户的联系人,将接收开户信息及日常重要管理信息,请确定联系人为商户法定代表人或经营者再进行操作。如联系人非商户法定代表人或经营者,请提交经办人身份证件和业务办理授权函。
属性 | |
name 必填 string(1024) 【联系人姓名】 1、若联系人类型为“法定代表人”,则该姓名需与法定代表人姓名一致。 mobile 必填 string(1024) 【联系人手机号】 1、前后不能有空格、制表符、换行符
3、用于接收微信支付的重要管理信息及日常操作验证码 id_card_number 选填 string(1024) 【联系人证件号码】 1、若联系人类型为法定代表人,则该身份证号码需与法定代表人身份证号码一致。若联系人类型为经办人,则可填写实际经办人的身份证号码。 contact_type 必填 string 【联系人类型】 1、主体为“小微/个人卖家 ”,可选择: contact_id_doc_type 选填 string 【联系人证件类型】 当联系人类型是经办人时,请上传联系人证件类型。 可选取值
contact_id_doc_copy 选填 string(256) 【联系人证件正面照片】 1、当联系人类型是经办人时,请上传联系人证件的正面照片。 contact_id_doc_copy_back 选填 string(256) 【联系人证件反面照片】 1、当联系人类型是经办人时,请上传联系人证件的反面照片。 contact_period_begin 选填 string(128) 【联系人证件有效期开始时间】 1、当超级管理员类型是经办人时,请上传证件有效期开始时间。 contact_period_end 选填 string(128) 【联系人证件有效期结束时间】 1、当超级管理员类型是经办人时,请上传证件有效期结束时间。 |
subject_info 必填 object
【主体信息】 主体信息
属性 | |||||||||||||||||||||
subject_type 必填 string 【主体类型】 主体类型需与营业执照/登记证书上一致,可参考选择主体指引。 可选取值
is_finance_institution 选填 boolean 【是否金融机构】 选填,请根据申请主体的实际情况填写,可参考选择金融机构指引: 1、若商户主体是金融机构,则填写:true。 2、若商户主体不是金融机构,则填写:false。 若未传入将默认填写:false。 business_licence_info 选填 object 【营业执照信息】 主体类型为企业/个体户时,营业执照信息必填
certificate_info 选填 object 【登记证书信息】 主体为政府机关/事业单位/社会组织时,必填。
company_prove_copy 选填 string(255) 【单位证明函照片】 1、主体类型为政府机关/事业单位时,单位证明函照片必填。 assist_prove_info 选填 object 【辅助证明材料信息】 主体类型为小微商户时,辅助证明材料信息必填
special_operation_list 选填 array[object] 【经营许可证】 1、填写特殊行业的经营许可证信息 2、最多填写支持5个行业
finance_institution_info 选填 object 【金融机构许可证】 当主体是金融机构时,必填
|
identification_info 必填 object
【法定代表人身份信息】 法定代表人身份信息
属性 | |
id_holder_type 选填 string 【证件持有人类型】 1、主体类型为政府机关/事业单位时选传: 可选取值
identification_type 选填 string 【证件类型】 1、当证件持有人类型为法定代表人时,填写。其他情况,无需上传。 可选取值
identification_name 选填 string(1024) 【证件姓名】 1、当证件持有人类型为法定代表人时,请填写法定代表人证件上的姓名。其他情况,无需上传。 identification_number 选填 string(1024) 【证件号码】 1、当证件持有人类型为法定代表人时,请填写法定代表人证件上的证件号码。其他情况,无需上传。 identification_valid_date 选填 string(64) 【证件有效日期】 1、日期格式应满足合法的YYYY-MM-DD格式,参见示例值 identification_front_copy 选填 string(255) 【证件正面照片】 当证件持有人类型为法定代表人时,请上传法定代表人证件的正面照片。其他情况,无需上传。 identification_back_copy 选填 string(255) 【证件反面照片】 当证件持有人类型为法定代表人时,请上传法定代表人证件的反面照片。其他情况,无需上传。 authorize_letter_copy 选填 string(255) 【法定代表人说明函】 1、当证件持有人类型为经办人时,必须上传。其他情况,无需上传。 owner 选填 boolean 【经营者/法定代表人是否为受益人】该字段即将下线处理,无需传入 主体类型为企业时,需要填写: identification_address 选填 string(512) 【证件居住地址】 1、主体类型为企业时,需要填写。其他主体类型,无需上传。 |
addition_info 选填 object
【补充材料】 根据实际审核情况,额外要求商家提供指定的补充资料。
属性 | |
confirm_mchid_list 选填 array[string] 【待确认商户号列表】 1、若有填写,创建申请单后,商家可扫码打开申请单的二维码,提前完成授权商户号; 详细流程请看产品指引 |
ubo_info_list 选填 array[UBOInfoList]
【最终受益人信息列表(UBO)】 1、主体类型为小微/个人卖家/个体户/社会组织/政府机关/事业单位时,无需填写
2、主体类型为企业时,按照下述要求填写
1)若经营者/法定代表人不是最终受益所有人,则需提填写受益所有人信息,最多上传4个。
2)若经营者/法定代表人是最终受益所有人之一,可在此填写其他受益所有人信息,最多上传3个。
根据国家相关法律法规,需要提供公司受益所有人信息,受益所有人需符合至少以下条件之一:
▪️直接或者间接拥有超过25%公司股权或者表决权的自然人。
▪️通过人事、财务等其他方式对公司进行控制的自然人。
▪️公司的高级管理人员,包括公司的经理、副经理、财务负责人、上市公司董事会秘书和公司章程规定的其他人员。
属性 | |
ubo_id_doc_type 选填 string 【证件类型】 请填写受益人的证件类型。 可选取值
ubo_id_doc_copy 选填 string(256) 【证件正面照片】 1、请上传受益人证件的正面照片。 ubo_id_doc_copy_back 选填 string(256) 【证件反面照片】 1、请上传受益人证件的反面照片。 ubo_id_doc_name 选填 string(1024) 【证件姓名】 1、长度为2-100个字符 ubo_id_doc_number 选填 string(1024) 【证件号码】 1、可传身份证、来往内地通行证、来往大陆通行证、护照等证件号码,号码规范如下: ubo_id_doc_address 选填 string(1024) 【证件居住地址】 1、请按照身份证住址填写,如广东省深圳市南山区xx路xx号xx室 ubo_period_begin 选填 string(128) 【证件有效期开始时间】 1、日期格式应满足合法的YYYY-MM-DD格式 ubo_period_end 选填 string(128) 【证件有效期结束时间】 1、请按照示例值填写,若证件有效期为长期,请填写:长期。 |
请求示例
POST
1curl -X POST \ 2 https://api.mch.weixin.qq.com/v3/apply4subject/applyment \ 3 -H "Authorization: WECHATPAY2-SHA256-RSA2048 mchid=\"1900000001\",..." \ 4 -H "Accept: application/json" \ 5 -H "Wechatpay-Serial: 5157F09EFDC096DE15EBE81A47057A7232F1B8E1" \ 6 -H "Content-Type: application/json" \ 7 -d '{ 8 "channel_id" : "20001111", 9 "business_code" : "1900013511_10000", 10 "contact_info" : { 11 "name" : "pVd1HJ6zyvPedzGaV+X3IdGdbDnuC4Eelw/wDa4SzfeespQO/0kjiwfqdfg==", 12 "mobile" : "Oiw4DS+QVyZKC3eTd7CGvGQ1/sidmLm8mdsohkuR9jSiwXyHyVQD1OA1t+6Pb+Xn0q2HAJYLsNjh8O4S1iQgMrFohyaNms4IlDxJzujb9VA==", 13 "id_card_number" : "pVd1HJ6zmty7/mYNxLMpRSvMRtelw/wDa4SzfeespQO/0kjiwfqdfg==", 14 "contact_type" : "LEGAL", 15 "contact_id_doc_type" : "IDENTIFICATION_TYPE_IDCARD", 16 "contact_id_doc_copy" : "jTpGmxUXqRTvDujqhThn4ReFxikqJ5YW6zFQ", 17 "contact_id_doc_copy_back" : "jTpGmxUX3FBWVQ5NJTZvvDujqhThn4ReFxikqJ5YW6zFQ", 18 "contact_period_begin" : "2019-06-06", 19 "contact_period_end" : "2026-06-06" 20 }, 21 "subject_info" : { 22 "subject_type" : "SUBJECT_TYPE_ENTERPRISE", 23 "is_finance_institution" : false, 24 "business_licence_info" : { 25 "licence_number" : "914201123033363296", 26 "licence_copy" : "0P3ng6KTIW4-Q_l2FjKLZuhHjBWoMAjmVtCz7ScmhEIThCaV-4BBgVwtNkCHO_XXqK5dE5YdOmFJBZR9FwczhJehHhAZN6BKXQPcs-VvdSo", 27 "merchant_name" : "李四网络有限公司", 28 "legal_person" : "李四", 29 "company_address" : "广东省深圳市南山区xx路xx号", 30 "licence_valid_date" : "[\\\"2017-10-28\\\",\\\"2037-10-28\\\"]" 31 }, 32 "certificate_info" : { 33 "cert_type" : "CERTIFICATE_TYPE_2388", 34 "cert_number" : "111111111111", 35 "cert_copy" : "0P3ng6KTIW4-Q_l2FjKLZuhHjBWoMAjmVtCz7ScmhEIThCaV-4BBgVwtNkCHO_XXqK5dE5YdOmFJBZR9FwczhJehHhAZN6BKXQPcs-VvdSo", 36 "merchant_name" : "xx公益团体", 37 "legal_person" : "李四", 38 "company_address" : "广东省深圳市南山区xx路xx号", 39 "cert_valid_date" : "[\\\"2017-10-28\\\",\\\"2037-10-28\\\"]" 40 }, 41 "company_prove_copy" : "0P3ng6KTIW4-Q_l2FjKLZuhHjBWoMAjmVtCz7ScmhEIThCaV-4BBgVwtNkCHO_XXqK5dE5YdOmFJBZR9FwczhJehHhAZN6BKXQPcs-VvdSo", 42 "assist_prove_info" : { 43 "micro_biz_type" : "MICRO_TYPE_STORE", 44 "store_name" : "大郎烧饼", 45 "store_address_code" : "440305", 46 "store_address" : "广东省深圳市南山区xx大厦x层xxxx室", 47 "store_header_copy" : "0P3ng6KTIW4-Q_l2FjKLZuhHjBWoMAjmVtCz7ScmhEIThCaV-4BBgVwtNkCHO_XXqK5dE5YdOmFJBZR9FwczhJehHhAZN6BKXQPcs-VvdSo", 48 "store_indoor_copy" : "0P3ng6KTIW4-Q_l2FjKLZuhHjBWoMAjmVtCz7ScmhEIThCaV-4BBgVwtNkCHO_XXqK5dE5YdOmFJBZR9FwczhJehHhAZN6BKXQPcs-VvdSo" 49 }, 50 "special_operation_list" : [ 51 { 52 "category_id" : 100, 53 "operation_copy_list" : [ 54 "0P3ng6KTIW4-Q_l2FjKLZuhHjBWoMAjmVtCz7ScmhEIThCaV-4BBgVwtNkCHO_XXqK5dE5YdOmFJBZR9FwczhJehHhAZN6BKXQPcs-VvdSo" 55 ] 56 } 57 ], 58 "finance_institution_info" : { 59 "finance_type" : "BANK_AGENT", 60 "finance_license_pics" : [ 61 "0P3ng6KTIW4-Q_l2FjKLZuhHjBWoMAjmVtCz7ScmhEIThCaV-4BBgVwtNkCHO_XXqK5dE5YdOmFJBZR9FwczhJehHhAZN6BKXQPcs-VvdSo" 62 ] 63 } 64 }, 65 "identification_info" : { 66 "id_holder_type" : "LEGAL", 67 "identification_type" : "IDENTIFICATION_TYPE_IDCARD", 68 "identification_name" : "MZnwEx6zotwIz6ctW2/iQL5z94odwP9sKiF74RPCPztcJOScaXsaGs82HJNU3K+46ndk7pMrENiPDw==", 69 "identification_number" : "ZTnn5dKGCvP4csw4XTLug/+VLB+4R6nxSPQwqSpmPVZtXmye+/3s9O+y32w==", 70 "identification_valid_date" : "[\\\"2017-10-28\\\",\\\"2037-10-28\\\"]", 71 "identification_front_copy" : "0P3ng6KTIW4-Q_l2FjKLZuhHjBWoMAjmVtCz7ScmhEIThCaV-4BBgVwtNkCHO_XXqK5dE5YdOmFJBZR9FwczhJehHhAZN6BKXQPcs-VvdSo", 72 "identification_back_copy" : "0P3ng6KTIW4-Q_l2FjKLZuhHjBWoMAjmVtCz7ScmhEIThCaV-4BBgVwtNkCHO_XXqK5dE5YdOmFJBZR9FwczhJehHhAZN6BKXQPcs-VvdSo", 73 "authorize_letter_copy" : "0P3ng6KTIW4-Q_l2FjKLZuhHjBWoMAjmVtCz7ScmhEIThCaV-4BBgVwtNkCHO_XXqK5dE5YdOmFJBZR9FwczhJehHhAZN6BKXQPcs-VvdSo", 74 "owner" : false, 75 "identification_address" : "pVd1HJ6zyvPedzGaV+X3qtmrq9bb9tPROvwia4ibL+F6mfjbzQIzfb3HHLEjZ4YiR/cJiCrZxnAqi+pjeKIEdkwzXRAI7FUhrfPK3SNjaBTEu9GmsugMIA9r3x887Q+ODuC8HH2nzAn7NGpE/e3yiHgWhk0ps5k5DP/2qIdGdONoDzZelrxCl/NWWNUyB93K9F+jC1JX2IMttdY+aQ6zBlw0xnOiNW6Hzy7UtC+xriudjD5APomty7/mYNxLMpRSvWKIjOv/69bDnuC4EL5Kz4jBHLiCyOb+tI0m2qhZ9evAM+Jv1z0NVa8MRtelw/wDa4SzfeespQO/0kjiwfqdfg==" 76 }, 77 "ubo_info" : { 78 "ubo_id_type" : "IDENTIFICATION_TYPE_IDCARD", 79 "ubo_id_card_copy" : "jTpGmxUX3FBWVQ5NJTZvlKX_gdU4cRz7z5NxpnFuAxhBTEO_PvWkfSCJ3zVIn001D8daLC-ehEuo0BJqRTvDujqhThn4ReFxikqJ5YW6zFQ", 80 "ubo_id_card_national" : "jTpGmxUX3FBWVQ5NJTZvlKX_gdU4cRz7z5NxpnFuAxhBTEO_PvWkfSCJ3zVIn001D8daLC-ehEuo0BJqRTvDujqhThn4ReFxikqJ5YW6zFQ", 81 "ubo_id_doc_copy" : "jTpGmxUX3FBWVQ5NJTZvlKX_gdU4cRz7z5NxpnFuAxhBTEO_PvWkfSCJ3zVIn001D8daLC-ehEuo0BJqRTvDujqhThn4ReFxikqJ5YW6zFQ", 82 "ubo_name" : "AOZdYGISxo4y44/Ug4P4TG5xzchG/5IL9DBd+Z0zZXkw==", 83 "ubo_id_number" : "AOZdYGISxo4y44/Ug4P4TG5xzchG/5IL9DBd+Z0zZXkw==", 84 "ubo_id_card_valid_date" : "[\\\"2017-10-28\\\",\\\"2037-10-28\\\"]" 85 }, 86 "addition_info" : { 87 "confirm_mchid_list" : [ 88 "example_confirm_mchid_list" 89 ] 90 }, 91 "ubo_info_list" : [ 92 { 93 "ubo_id_doc_type" : "IDENTIFICATION_TYPE_IDCARD", 94 "ubo_id_doc_copy" : "jTpGmxUXqRTvDujqhThn4ReFxikqJ5YW6zFQ", 95 "ubo_id_doc_copy_back" : "jTpGmxUX3FBWVQ5NJTZvvDujqhThn4ReFxikqJ5YW6zFQ", 96 "ubo_id_doc_name" : "AOZdYGISxo4y44/Ug4P4TG5xzchG/5IL9DBd+Z0zZXkw==", 97 "ubo_id_doc_number" : "AOZdYGISxo4y44/Ug4P4TG5xzchG/5IL9DBd+Z0zZXkw==", 98 "ubo_id_doc_address" : "pVd1HJ6zyvPedzGaV+X3qtmrq9bb9tPROvwia4ibL+F6mfjbzQIzfb3HHLEjZ4YiR/cJiCrZxnAqi+pjeKIEdkwzXRAI7FUhrfPK3SNjaBTEu9GmsugMIA9r3x887Q+ODuC8HH2nzAn7NGpE/e3yiHgWhk0ps5k5DP/2qIdGdONoDzZelrxCl/NWWNUyB93K9F+jC1JX2IMttdY+aQ6zBlw0xnOiNW6Hzy7UtC+xriudjD5APomty7/mYNxLMpRSvWKIjOv/69bDnuC4EL5Kz4jBHLiCyOb+tI0m2qhZ9evAM+Jv1z0NVa8MRtelw/wDa4SzfeespQO/0kjiwfqdfg==", 99 "ubo_period_begin" : "2019-06-06", 100 "ubo_period_end" : "2026-06-06" 101 } 102 ] 103 }' 104
需配合微信支付工具库 WXPayUtility 使用,请参考Java
1package com.java.demo; 2 3import com.java.utils.WXPayUtility; // 引用微信支付工具库,参考:https://pay.weixin.qq.com/doc/v3/partner/4014985777 4 5import com.google.gson.annotations.SerializedName; 6import com.google.gson.annotations.Expose; 7import okhttp3.MediaType; 8import okhttp3.OkHttpClient; 9import okhttp3.Request; 10import okhttp3.RequestBody; 11import okhttp3.Response; 12 13import java.io.IOException; 14import java.io.UncheckedIOException; 15import java.security.PrivateKey; 16import java.security.PublicKey; 17import java.util.ArrayList; 18import java.util.HashMap; 19import java.util.List; 20import java.util.Map; 21 22/** 23 * 提交申请单 24 */ 25public class SubmitApplyment { 26 private static String HOST = "https://api.mch.weixin.qq.com"; 27 private static String METHOD = "POST"; 28 private static String PATH = "/v3/apply4subject/applyment"; 29 30 public static void main(String[] args) { 31 // TODO: 请准备商户开发必要参数,参考:https://pay.weixin.qq.com/doc/v3/partner/4013080340 32 SubmitApplyment client = new SubmitApplyment( 33 "19xxxxxxxx", // 商户号,是由微信支付系统生成并分配给每个商户的唯一标识符,商户号获取方式参考 https://pay.weixin.qq.com/doc/v3/partner/4013080340 34 "1DDE55AD98Exxxxxxxxxx", // 商户API证书序列号,如何获取请参考 https://pay.weixin.qq.com/doc/v3/partner/4013058924 35 "/path/to/apiclient_key.pem", // 商户API证书私钥文件路径,本地文件路径 36 "PUB_KEY_ID_xxxxxxxxxxxxx", // 微信支付公钥ID,如何获取请参考 https://pay.weixin.qq.com/doc/v3/partner/4013038589 37 "/path/to/wxp_pub.pem" // 微信支付公钥文件路径,本地文件路径 38 ); 39 40 SubmitApplymentRequest request = new SubmitApplymentRequest(); 41 request.channelId = "20001111"; 42 request.businessCode = "1900013511_10000"; 43 request.contactInfo = new ContactInfo(); 44 request.contactInfo.name = client.encrypt("name"); 45 request.contactInfo.mobile = client.encrypt("mobile"); 46 request.contactInfo.idCardNumber = client.encrypt("id_card_number"); 47 request.contactInfo.contactType = IdHolderType.LEGAL; 48 request.contactInfo.contactIdDocType = IdentificationType.IDENTIFICATION_TYPE_IDCARD; 49 request.contactInfo.contactIdDocCopy = "jTpGmxUXqRTvDujqhThn4ReFxikqJ5YW6zFQ"; 50 request.contactInfo.contactIdDocCopyBack = "jTpGmxUX3FBWVQ5NJTZvvDujqhThn4ReFxikqJ5YW6zFQ"; 51 request.contactInfo.contactPeriodBegin = "2019-06-06"; 52 request.contactInfo.contactPeriodEnd = "2026-06-06"; 53 request.subjectInfo = new SubjectInfo(); 54 request.subjectInfo.subjectType = SubjectType.SUBJECT_TYPE_ENTERPRISE; 55 request.subjectInfo.isFinanceInstitution = false; 56 request.subjectInfo.businessLicenceInfo = new BusinessLicenceInfo(); 57 request.subjectInfo.businessLicenceInfo.licenceNumber = "914201123033363296"; 58 request.subjectInfo.businessLicenceInfo.licenceCopy = "0P3ng6KTIW4-Q_l2FjKLZuhHjBWoMAjmVtCz7ScmhEIThCaV-4BBgVwtNkCHO_XXqK5dE5YdOmFJBZR9FwczhJehHhAZN6BKXQPcs-VvdSo"; 59 request.subjectInfo.businessLicenceInfo.merchantName = "李四网络有限公司"; 60 request.subjectInfo.businessLicenceInfo.legalPerson = "李四"; 61 request.subjectInfo.businessLicenceInfo.companyAddress = "广东省深圳市南山区xx路xx号"; 62 request.subjectInfo.businessLicenceInfo.licenceValidDate = "[\\\"2017-10-28\\\",\\\"2037-10-28\\\"]"; 63 request.subjectInfo.certificateInfo = new CertificateInfo(); 64 request.subjectInfo.certificateInfo.certType = CertificateType.CERTIFICATE_TYPE_2388; 65 request.subjectInfo.certificateInfo.certNumber = "111111111111"; 66 request.subjectInfo.certificateInfo.certCopy = "0P3ng6KTIW4-Q_l2FjKLZuhHjBWoMAjmVtCz7ScmhEIThCaV-4BBgVwtNkCHO_XXqK5dE5YdOmFJBZR9FwczhJehHhAZN6BKXQPcs-VvdSo"; 67 request.subjectInfo.certificateInfo.merchantName = "xx公益团体"; 68 request.subjectInfo.certificateInfo.legalPerson = "李四"; 69 request.subjectInfo.certificateInfo.companyAddress = "广东省深圳市南山区xx路xx号"; 70 request.subjectInfo.certificateInfo.certValidDate = "[\\\"2017-10-28\\\",\\\"2037-10-28\\\"]"; 71 request.subjectInfo.companyProveCopy = "0P3ng6KTIW4-Q_l2FjKLZuhHjBWoMAjmVtCz7ScmhEIThCaV-4BBgVwtNkCHO_XXqK5dE5YdOmFJBZR9FwczhJehHhAZN6BKXQPcs-VvdSo"; 72 request.subjectInfo.assistProveInfo = new AssitProveInfo(); 73 request.subjectInfo.assistProveInfo.microBizType = MicroBizType.MICRO_TYPE_STORE; 74 request.subjectInfo.assistProveInfo.storeName = "大郎烧饼"; 75 request.subjectInfo.assistProveInfo.storeAddressCode = "440305"; 76 request.subjectInfo.assistProveInfo.storeAddress = "广东省深圳市南山区xx大厦x层xxxx室"; 77 request.subjectInfo.assistProveInfo.storeHeaderCopy = "0P3ng6KTIW4-Q_l2FjKLZuhHjBWoMAjmVtCz7ScmhEIThCaV-4BBgVwtNkCHO_XXqK5dE5YdOmFJBZR9FwczhJehHhAZN6BKXQPcs-VvdSo"; 78 request.subjectInfo.assistProveInfo.storeIndoorCopy = "0P3ng6KTIW4-Q_l2FjKLZuhHjBWoMAjmVtCz7ScmhEIThCaV-4BBgVwtNkCHO_XXqK5dE5YdOmFJBZR9FwczhJehHhAZN6BKXQPcs-VvdSo"; 79 request.subjectInfo.specialOperationList = new ArrayList<>(); 80 { 81 SpecialOperation specialOperationListItem = new SpecialOperation(); 82 specialOperationListItem.categoryId = 100L; 83 specialOperationListItem.operationCopyList = new ArrayList<>(); 84 { 85 specialOperationListItem.operationCopyList.add("0P3ng6KTIW4-Q_l2FjKLZuhHjBWoMAjmVtCz7ScmhEIThCaV-4BBgVwtNkCHO_XXqK5dE5YdOmFJBZR9FwczhJehHhAZN6BKXQPcs-VvdSo"); 86 }; 87 request.subjectInfo.specialOperationList.add(specialOperationListItem); 88 }; 89 request.subjectInfo.financeInstitutionInfo = new FinanceInstitutionInfo(); 90 request.subjectInfo.financeInstitutionInfo.financeType = FinanceType.BANK_AGENT; 91 request.subjectInfo.financeInstitutionInfo.financeLicensePics = new ArrayList<>(); 92 { 93 request.subjectInfo.financeInstitutionInfo.financeLicensePics.add("0P3ng6KTIW4-Q_l2FjKLZuhHjBWoMAjmVtCz7ScmhEIThCaV-4BBgVwtNkCHO_XXqK5dE5YdOmFJBZR9FwczhJehHhAZN6BKXQPcs-VvdSo"); 94 }; 95 request.identificationInfo = new IdentificationInfo(); 96 request.identificationInfo.idHolderType = IdHolderType.LEGAL; 97 request.identificationInfo.identificationType = IdentificationType.IDENTIFICATION_TYPE_IDCARD; 98 request.identificationInfo.identificationName = client.encrypt("identification_name"); 99 request.identificationInfo.identificationNumber = client.encrypt("identification_number"); 100 request.identificationInfo.identificationValidDate = "[\\\"2017-10-28\\\",\\\"2037-10-28\\\"]"; 101 request.identificationInfo.identificationFrontCopy = "0P3ng6KTIW4-Q_l2FjKLZuhHjBWoMAjmVtCz7ScmhEIThCaV-4BBgVwtNkCHO_XXqK5dE5YdOmFJBZR9FwczhJehHhAZN6BKXQPcs-VvdSo"; 102 request.identificationInfo.identificationBackCopy = "0P3ng6KTIW4-Q_l2FjKLZuhHjBWoMAjmVtCz7ScmhEIThCaV-4BBgVwtNkCHO_XXqK5dE5YdOmFJBZR9FwczhJehHhAZN6BKXQPcs-VvdSo"; 103 request.identificationInfo.authorizeLetterCopy = "0P3ng6KTIW4-Q_l2FjKLZuhHjBWoMAjmVtCz7ScmhEIThCaV-4BBgVwtNkCHO_XXqK5dE5YdOmFJBZR9FwczhJehHhAZN6BKXQPcs-VvdSo"; 104 request.identificationInfo.owner = false; 105 request.identificationInfo.identificationAddress = client.encrypt("identification_address"); 106 request.uboInfo = new UBOInfo(); 107 request.uboInfo.uboIdType = IdentificationType.IDENTIFICATION_TYPE_IDCARD; 108 request.uboInfo.uboIdCardCopy = "jTpGmxUX3FBWVQ5NJTZvlKX_gdU4cRz7z5NxpnFuAxhBTEO_PvWkfSCJ3zVIn001D8daLC-ehEuo0BJqRTvDujqhThn4ReFxikqJ5YW6zFQ"; 109 request.uboInfo.uboIdCardNational = "jTpGmxUX3FBWVQ5NJTZvlKX_gdU4cRz7z5NxpnFuAxhBTEO_PvWkfSCJ3zVIn001D8daLC-ehEuo0BJqRTvDujqhThn4ReFxikqJ5YW6zFQ"; 110 request.uboInfo.uboIdDocCopy = "jTpGmxUX3FBWVQ5NJTZvlKX_gdU4cRz7z5NxpnFuAxhBTEO_PvWkfSCJ3zVIn001D8daLC-ehEuo0BJqRTvDujqhThn4ReFxikqJ5YW6zFQ"; 111 request.uboInfo.uboName = client.encrypt("ubo_name"); 112 request.uboInfo.uboIdNumber = client.encrypt("ubo_id_number"); 113 request.uboInfo.uboIdCardValidDate = "[\\\"2017-10-28\\\",\\\"2037-10-28\\\"]"; 114 request.additionInfo = new AdditionInfo(); 115 request.additionInfo.confirmMchidList = new ArrayList<>(); 116 { 117 request.additionInfo.confirmMchidList.add("example_confirmMchidList"); 118 }; 119 request.uboInfoList = new ArrayList<>(); 120 { 121 UBOInfoList uboInfoListItem = new UBOInfoList(); 122 uboInfoListItem.uboIdDocType = IdentificationType.IDENTIFICATION_TYPE_IDCARD; 123 uboInfoListItem.uboIdDocCopy = "jTpGmxUXqRTvDujqhThn4ReFxikqJ5YW6zFQ"; 124 uboInfoListItem.uboIdDocCopyBack = "jTpGmxUX3FBWVQ5NJTZvvDujqhThn4ReFxikqJ5YW6zFQ"; 125 uboInfoListItem.uboIdDocName = client.encrypt("ubo_id_doc_name"); 126 uboInfoListItem.uboIdDocNumber = client.encrypt("ubo_id_doc_number"); 127 uboInfoListItem.uboIdDocAddress = client.encrypt("ubo_id_doc_address"); 128 uboInfoListItem.uboPeriodBegin = "2019-06-06"; 129 uboInfoListItem.uboPeriodEnd = "2026-06-06"; 130 request.uboInfoList.add(uboInfoListItem); 131 }; 132 try { 133 SubmitApplymentResponse response = client.run(request); 134 // TODO: 请求成功,继续业务逻辑 135 System.out.println(response); 136 } catch (WXPayUtility.ApiException e) { 137 // TODO: 请求失败,根据状态码执行不同的逻辑 138 e.printStackTrace(); 139 } 140 } 141 142 public SubmitApplymentResponse run(SubmitApplymentRequest request) { 143 String uri = PATH; 144 String reqBody = WXPayUtility.toJson(request); 145 146 Request.Builder reqBuilder = new Request.Builder().url(HOST + uri); 147 reqBuilder.addHeader("Accept", "application/json"); 148 reqBuilder.addHeader("Wechatpay-Serial", wechatPayPublicKeyId); 149 reqBuilder.addHeader("Authorization", WXPayUtility.buildAuthorization(mchid, certificateSerialNo,privateKey, METHOD, uri, reqBody)); 150 reqBuilder.addHeader("Content-Type", "application/json"); 151 RequestBody requestBody = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), reqBody); 152 reqBuilder.method(METHOD, requestBody); 153 Request httpRequest = reqBuilder.build(); 154 155 // 发送HTTP请求 156 OkHttpClient client = new OkHttpClient.Builder().build(); 157 try (Response httpResponse = client.newCall(httpRequest).execute()) { 158 String respBody = WXPayUtility.extractBody(httpResponse); 159 if (httpResponse.code() >= 200 && httpResponse.code() < 300) { 160 // 2XX 成功,验证应答签名 161 WXPayUtility.validateResponse(this.wechatPayPublicKeyId, this.wechatPayPublicKey, 162 httpResponse.headers(), respBody); 163 164 // 从HTTP应答报文构建返回数据 165 return WXPayUtility.fromJson(respBody, SubmitApplymentResponse.class); 166 } else { 167 throw new WXPayUtility.ApiException(httpResponse.code(), respBody, httpResponse.headers()); 168 } 169 } catch (IOException e) { 170 throw new UncheckedIOException("Sending request to " + uri + " failed.", e); 171 } 172 } 173 174 private final String mchid; 175 private final String certificateSerialNo; 176 private final PrivateKey privateKey; 177 private final String wechatPayPublicKeyId; 178 private final PublicKey wechatPayPublicKey; 179 180 public SubmitApplyment(String mchid, String certificateSerialNo, String privateKeyFilePath, String wechatPayPublicKeyId, String wechatPayPublicKeyFilePath) { 181 this.mchid = mchid; 182 this.certificateSerialNo = certificateSerialNo; 183 this.privateKey = WXPayUtility.loadPrivateKeyFromPath(privateKeyFilePath); 184 this.wechatPayPublicKeyId = wechatPayPublicKeyId; 185 this.wechatPayPublicKey = WXPayUtility.loadPublicKeyFromPath(wechatPayPublicKeyFilePath); 186 } 187 188 public String encrypt(String plainText) { 189 return WXPayUtility.encrypt(this.wechatPayPublicKey, plainText); 190 } 191 192 public static class SubmitApplymentRequest { 193 @SerializedName("channel_id") 194 public String channelId; 195 196 @SerializedName("business_code") 197 public String businessCode; 198 199 @SerializedName("contact_info") 200 public ContactInfo contactInfo; 201 202 @SerializedName("subject_info") 203 public SubjectInfo subjectInfo; 204 205 @SerializedName("identification_info") 206 public IdentificationInfo identificationInfo; 207 208 @SerializedName("ubo_info") 209 public UBOInfo uboInfo; 210 211 @SerializedName("addition_info") 212 public AdditionInfo additionInfo; 213 214 @SerializedName("ubo_info_list") 215 public List<UBOInfoList> uboInfoList; 216 } 217 218 public static class SubmitApplymentResponse { 219 @SerializedName("applyment_id") 220 public Long applymentId; 221 } 222 223 public static class ContactInfo { 224 @SerializedName("name") 225 public String name; 226 227 @SerializedName("mobile") 228 public String mobile; 229 230 @SerializedName("id_card_number") 231 public String idCardNumber; 232 233 @SerializedName("contact_type") 234 public IdHolderType contactType; 235 236 @SerializedName("contact_id_doc_type") 237 public IdentificationType contactIdDocType; 238 239 @SerializedName("contact_id_doc_copy") 240 public String contactIdDocCopy; 241 242 @SerializedName("contact_id_doc_copy_back") 243 public String contactIdDocCopyBack; 244 245 @SerializedName("contact_period_begin") 246 public String contactPeriodBegin; 247 248 @SerializedName("contact_period_end") 249 public String contactPeriodEnd; 250 } 251 252 public static class SubjectInfo { 253 @SerializedName("subject_type") 254 public SubjectType subjectType; 255 256 @SerializedName("is_finance_institution") 257 public Boolean isFinanceInstitution; 258 259 @SerializedName("business_licence_info") 260 public BusinessLicenceInfo businessLicenceInfo; 261 262 @SerializedName("certificate_info") 263 public CertificateInfo certificateInfo; 264 265 @SerializedName("company_prove_copy") 266 public String companyProveCopy; 267 268 @SerializedName("assist_prove_info") 269 public AssitProveInfo assistProveInfo; 270 271 @SerializedName("special_operation_list") 272 public List<SpecialOperation> specialOperationList; 273 274 @SerializedName("finance_institution_info") 275 public FinanceInstitutionInfo financeInstitutionInfo; 276 } 277 278 public static class IdentificationInfo { 279 @SerializedName("id_holder_type") 280 public IdHolderType idHolderType; 281 282 @SerializedName("identification_type") 283 public IdentificationType identificationType; 284 285 @SerializedName("identification_name") 286 public String identificationName; 287 288 @SerializedName("identification_number") 289 public String identificationNumber; 290 291 @SerializedName("identification_valid_date") 292 public String identificationValidDate; 293 294 @SerializedName("identification_front_copy") 295 public String identificationFrontCopy; 296 297 @SerializedName("identification_back_copy") 298 public String identificationBackCopy; 299 300 @SerializedName("authorize_letter_copy") 301 public String authorizeLetterCopy; 302 303 @SerializedName("owner") 304 public Boolean owner; 305 306 @SerializedName("identification_address") 307 public String identificationAddress; 308 } 309 310 public static class UBOInfo { 311 @SerializedName("ubo_id_type") 312 public IdentificationType uboIdType; 313 314 @SerializedName("ubo_id_card_copy") 315 public String uboIdCardCopy; 316 317 @SerializedName("ubo_id_card_national") 318 public String uboIdCardNational; 319 320 @SerializedName("ubo_id_doc_copy") 321 public String uboIdDocCopy; 322 323 @SerializedName("ubo_name") 324 public String uboName; 325 326 @SerializedName("ubo_id_number") 327 public String uboIdNumber; 328 329 @SerializedName("ubo_id_card_valid_date") 330 public String uboIdCardValidDate; 331 } 332 333 public static class AdditionInfo { 334 @SerializedName("confirm_mchid_list") 335 public List<String> confirmMchidList; 336 } 337 338 public static class UBOInfoList { 339 @SerializedName("ubo_id_doc_type") 340 public IdentificationType uboIdDocType; 341 342 @SerializedName("ubo_id_doc_copy") 343 public String uboIdDocCopy; 344 345 @SerializedName("ubo_id_doc_copy_back") 346 public String uboIdDocCopyBack; 347 348 @SerializedName("ubo_id_doc_name") 349 public String uboIdDocName; 350 351 @SerializedName("ubo_id_doc_number") 352 public String uboIdDocNumber; 353 354 @SerializedName("ubo_id_doc_address") 355 public String uboIdDocAddress; 356 357 @SerializedName("ubo_period_begin") 358 public String uboPeriodBegin; 359 360 @SerializedName("ubo_period_end") 361 public String uboPeriodEnd; 362 } 363 364 public enum IdHolderType { 365 @SerializedName("LEGAL") 366 LEGAL, 367 @SerializedName("SUPER") 368 SUPER 369 } 370 371 public enum IdentificationType { 372 @SerializedName("IDENTIFICATION_TYPE_IDCARD") 373 IDENTIFICATION_TYPE_IDCARD, 374 @SerializedName("IDENTIFICATION_TYPE_OVERSEA_PASSPORT") 375 IDENTIFICATION_TYPE_OVERSEA_PASSPORT, 376 @SerializedName("IDENTIFICATION_TYPE_HONGKONG_PASSPORT") 377 IDENTIFICATION_TYPE_HONGKONG_PASSPORT, 378 @SerializedName("IDENTIFICATION_TYPE_MACAO_PASSPORT") 379 IDENTIFICATION_TYPE_MACAO_PASSPORT, 380 @SerializedName("IDENTIFICATION_TYPE_TAIWAN_PASSPORT") 381 IDENTIFICATION_TYPE_TAIWAN_PASSPORT, 382 @SerializedName("IDENTIFICATION_TYPE_FOREIGN_RESIDENT") 383 IDENTIFICATION_TYPE_FOREIGN_RESIDENT, 384 @SerializedName("IDENTIFICATION_TYPE_HONGKONG_MACAO_RESIDENT") 385 IDENTIFICATION_TYPE_HONGKONG_MACAO_RESIDENT, 386 @SerializedName("IDENTIFICATION_TYPE_TAIWAN_RESIDENT") 387 IDENTIFICATION_TYPE_TAIWAN_RESIDENT 388 } 389 390 public enum SubjectType { 391 @SerializedName("SUBJECT_TYPE_ENTERPRISE") 392 SUBJECT_TYPE_ENTERPRISE, 393 @SerializedName("SUBJECT_TYPE_INSTITUTIONS_CLONED") 394 SUBJECT_TYPE_INSTITUTIONS_CLONED, 395 @SerializedName("SUBJECT_TYPE_INDIVIDUAL") 396 SUBJECT_TYPE_INDIVIDUAL, 397 @SerializedName("SUBJECT_TYPE_OTHERS") 398 SUBJECT_TYPE_OTHERS, 399 @SerializedName("SUBJECT_TYPE_MICRO") 400 SUBJECT_TYPE_MICRO, 401 @SerializedName("SUBJECT_TYPE_GOVERNMENT") 402 SUBJECT_TYPE_GOVERNMENT 403 } 404 405 public static class BusinessLicenceInfo { 406 @SerializedName("licence_number") 407 public String licenceNumber; 408 409 @SerializedName("licence_copy") 410 public String licenceCopy; 411 412 @SerializedName("merchant_name") 413 public String merchantName; 414 415 @SerializedName("legal_person") 416 public String legalPerson; 417 418 @SerializedName("company_address") 419 public String companyAddress; 420 421 @SerializedName("licence_valid_date") 422 public String licenceValidDate; 423 } 424 425 public static class CertificateInfo { 426 @SerializedName("cert_type") 427 public CertificateType certType; 428 429 @SerializedName("cert_number") 430 public String certNumber; 431 432 @SerializedName("cert_copy") 433 public String certCopy; 434 435 @SerializedName("merchant_name") 436 public String merchantName; 437 438 @SerializedName("legal_person") 439 public String legalPerson; 440 441 @SerializedName("company_address") 442 public String companyAddress; 443 444 @SerializedName("cert_valid_date") 445 public String certValidDate; 446 } 447 448 public static class AssitProveInfo { 449 @SerializedName("micro_biz_type") 450 public MicroBizType microBizType; 451 452 @SerializedName("store_name") 453 public String storeName; 454 455 @SerializedName("store_address_code") 456 public String storeAddressCode; 457 458 @SerializedName("store_address") 459 public String storeAddress; 460 461 @SerializedName("store_header_copy") 462 public String storeHeaderCopy; 463 464 @SerializedName("store_indoor_copy") 465 public String storeIndoorCopy; 466 } 467 468 public static class SpecialOperation { 469 @SerializedName("category_id") 470 public Long categoryId; 471 472 @SerializedName("operation_copy_list") 473 public List<String> operationCopyList; 474 } 475 476 public static class FinanceInstitutionInfo { 477 @SerializedName("finance_type") 478 public FinanceType financeType; 479 480 @SerializedName("finance_license_pics") 481 public List<String> financeLicensePics = new ArrayList<String>(); 482 } 483 484 public enum CertificateType { 485 @SerializedName("CERTIFICATE_TYPE_2388") 486 CERTIFICATE_TYPE_2388, 487 @SerializedName("CERTIFICATE_TYPE_2389") 488 CERTIFICATE_TYPE_2389, 489 @SerializedName("CERTIFICATE_TYPE_2394") 490 CERTIFICATE_TYPE_2394, 491 @SerializedName("CERTIFICATE_TYPE_2395") 492 CERTIFICATE_TYPE_2395, 493 @SerializedName("CERTIFICATE_TYPE_2396") 494 CERTIFICATE_TYPE_2396, 495 @SerializedName("CERTIFICATE_TYPE_2397") 496 CERTIFICATE_TYPE_2397, 497 @SerializedName("CERTIFICATE_TYPE_2398") 498 CERTIFICATE_TYPE_2398, 499 @SerializedName("CERTIFICATE_TYPE_2399") 500 CERTIFICATE_TYPE_2399, 501 @SerializedName("CERTIFICATE_TYPE_2400") 502 CERTIFICATE_TYPE_2400, 503 @SerializedName("CERTIFICATE_TYPE_2390") 504 CERTIFICATE_TYPE_2390, 505 @SerializedName("CERTIFICATE_TYPE_2391") 506 CERTIFICATE_TYPE_2391, 507 @SerializedName("CERTIFICATE_TYPE_2392") 508 CERTIFICATE_TYPE_2392, 509 @SerializedName("CERTIFICATE_TYPE_2393") 510 CERTIFICATE_TYPE_2393, 511 @SerializedName("CERTIFICATE_TYPE_2520") 512 CERTIFICATE_TYPE_2520, 513 @SerializedName("CERTIFICATE_TYPE_2521") 514 CERTIFICATE_TYPE_2521, 515 @SerializedName("CERTIFICATE_TYPE_2522") 516 CERTIFICATE_TYPE_2522 517 } 518 519 public enum MicroBizType { 520 @SerializedName("MICRO_TYPE_STORE") 521 MICRO_TYPE_STORE, 522 @SerializedName("MICRO_TYPE_MOBILE") 523 MICRO_TYPE_MOBILE, 524 @SerializedName("MICRO_TYPE_ONLINE") 525 MICRO_TYPE_ONLINE 526 } 527 528 public enum FinanceType { 529 @SerializedName("BANK_AGENT") 530 BANK_AGENT, 531 @SerializedName("PAYMENT_AGENT") 532 PAYMENT_AGENT, 533 @SerializedName("INSURANCE") 534 INSURANCE, 535 @SerializedName("TRADE_AND_SETTLE") 536 TRADE_AND_SETTLE, 537 @SerializedName("OTHER") 538 OTHER 539 } 540 541} 542
需配合微信支付工具库 wxpay_utility 使用,请参考Go
1package main 2 3import ( 4 "bytes" 5 "demo/wxpay_utility" // 引用微信支付工具库,参考 https://pay.weixin.qq.com/doc/v3/partner/4015119446 6 "encoding/json" 7 "fmt" 8 "net/http" 9 "net/url" 10) 11 12func main() { 13 // TODO: 请准备商户开发必要参数,参考:https://pay.weixin.qq.com/doc/v3/partner/4013080340 14 config, err := wxpay_utility.CreateMchConfig( 15 "19xxxxxxxx", // 商户号,是由微信支付系统生成并分配给每个商户的唯一标识符,商户号获取方式参考 https://pay.weixin.qq.com/doc/v3/partner/4013080340 16 "1DDE55AD98Exxxxxxxxxx", // 商户API证书序列号,如何获取请参考 https://pay.weixin.qq.com/doc/v3/partner/4013058924 17 "/path/to/apiclient_key.pem", // 商户API证书私钥文件路径,本地文件路径 18 "PUB_KEY_ID_xxxxxxxxxxxxx", // 微信支付公钥ID,如何获取请参考 https://pay.weixin.qq.com/doc/v3/partner/4013038589 19 "/path/to/wxp_pub.pem", // 微信支付公钥文件路径,本地文件路径 20 ) 21 if err != nil { 22 fmt.Println(err) 23 return 24 } 25 26 request := &SubmitApplymentRequest{ 27 ChannelId: wxpay_utility.String("20001111"), 28 BusinessCode: wxpay_utility.String("1900013511_10000"), 29 ContactInfo: &ContactInfo{ 30 Name: wxpay_utility.String("pVd1HJ6zyvPedzGaV+X3IdGdbDnuC4Eelw/wDa4SzfeespQO/0kjiwfqdfg=="), /*请传入 wxpay_utility.EncryptOAEPWithPublicKey 加密结果*/ 31 Mobile: wxpay_utility.String("Oiw4DS+QVyZKC3eTd7CGvGQ1/sidmLm8mdsohkuR9jSiwXyHyVQD1OA1t+6Pb+Xn0q2HAJYLsNjh8O4S1iQgMrFohyaNms4IlDxJzujb9VA=="), /*请传入 wxpay_utility.EncryptOAEPWithPublicKey 加密结果*/ 32 IdCardNumber: wxpay_utility.String("pVd1HJ6zmty7/mYNxLMpRSvMRtelw/wDa4SzfeespQO/0kjiwfqdfg=="), /*请传入 wxpay_utility.EncryptOAEPWithPublicKey 加密结果*/ 33 ContactType: IDHOLDERTYPE_LEGAL.Ptr(), 34 ContactIdDocType: IDENTIFICATIONTYPE_IDENTIFICATION_TYPE_IDCARD.Ptr(), 35 ContactIdDocCopy: wxpay_utility.String("jTpGmxUXqRTvDujqhThn4ReFxikqJ5YW6zFQ"), 36 ContactIdDocCopyBack: wxpay_utility.String("jTpGmxUX3FBWVQ5NJTZvvDujqhThn4ReFxikqJ5YW6zFQ"), 37 ContactPeriodBegin: wxpay_utility.String("2019-06-06"), 38 ContactPeriodEnd: wxpay_utility.String("2026-06-06"), 39 }, 40 SubjectInfo: &SubjectInfo{ 41 SubjectType: SUBJECTTYPE_SUBJECT_TYPE_ENTERPRISE.Ptr(), 42 IsFinanceInstitution: wxpay_utility.Bool(false), 43 BusinessLicenceInfo: &BusinessLicenceInfo{ 44 LicenceNumber: wxpay_utility.String("914201123033363296"), 45 LicenceCopy: wxpay_utility.String("0P3ng6KTIW4-Q_l2FjKLZuhHjBWoMAjmVtCz7ScmhEIThCaV-4BBgVwtNkCHO_XXqK5dE5YdOmFJBZR9FwczhJehHhAZN6BKXQPcs-VvdSo"), 46 MerchantName: wxpay_utility.String("李四网络有限公司"), 47 LegalPerson: wxpay_utility.String("李四"), 48 CompanyAddress: wxpay_utility.String("广东省深圳市南山区xx路xx号"), 49 LicenceValidDate: wxpay_utility.String("[\"2017-10-28\",\"2037-10-28\"]"), 50 }, 51 CertificateInfo: &CertificateInfo{ 52 CertType: CERTIFICATETYPE_CERTIFICATE_TYPE_2388.Ptr(), 53 CertNumber: wxpay_utility.String("111111111111"), 54 CertCopy: wxpay_utility.String("0P3ng6KTIW4-Q_l2FjKLZuhHjBWoMAjmVtCz7ScmhEIThCaV-4BBgVwtNkCHO_XXqK5dE5YdOmFJBZR9FwczhJehHhAZN6BKXQPcs-VvdSo"), 55 MerchantName: wxpay_utility.String("xx公益团体"), 56 LegalPerson: wxpay_utility.String("李四"), 57 CompanyAddress: wxpay_utility.String("广东省深圳市南山区xx路xx号"), 58 CertValidDate: wxpay_utility.String("[\"2017-10-28\",\"2037-10-28\"]"), 59 }, 60 CompanyProveCopy: wxpay_utility.String("0P3ng6KTIW4-Q_l2FjKLZuhHjBWoMAjmVtCz7ScmhEIThCaV-4BBgVwtNkCHO_XXqK5dE5YdOmFJBZR9FwczhJehHhAZN6BKXQPcs-VvdSo"), 61 AssistProveInfo: &AssitProveInfo{ 62 MicroBizType: MICROBIZTYPE_MICRO_TYPE_STORE.Ptr(), 63 StoreName: wxpay_utility.String("大郎烧饼"), 64 StoreAddressCode: wxpay_utility.String("440305"), 65 StoreAddress: wxpay_utility.String("广东省深圳市南山区xx大厦x层xxxx室"), 66 StoreHeaderCopy: wxpay_utility.String("0P3ng6KTIW4-Q_l2FjKLZuhHjBWoMAjmVtCz7ScmhEIThCaV-4BBgVwtNkCHO_XXqK5dE5YdOmFJBZR9FwczhJehHhAZN6BKXQPcs-VvdSo"), 67 StoreIndoorCopy: wxpay_utility.String("0P3ng6KTIW4-Q_l2FjKLZuhHjBWoMAjmVtCz7ScmhEIThCaV-4BBgVwtNkCHO_XXqK5dE5YdOmFJBZR9FwczhJehHhAZN6BKXQPcs-VvdSo"), 68 }, 69 SpecialOperationList: []SpecialOperation{SpecialOperation{ 70 CategoryId: wxpay_utility.Int64(100), 71 OperationCopyList: []string{"0P3ng6KTIW4-Q_l2FjKLZuhHjBWoMAjmVtCz7ScmhEIThCaV-4BBgVwtNkCHO_XXqK5dE5YdOmFJBZR9FwczhJehHhAZN6BKXQPcs-VvdSo"}, 72 }}, 73 FinanceInstitutionInfo: &FinanceInstitutionInfo{ 74 FinanceType: FINANCETYPE_BANK_AGENT.Ptr(), 75 FinanceLicensePics: []string{"0P3ng6KTIW4-Q_l2FjKLZuhHjBWoMAjmVtCz7ScmhEIThCaV-4BBgVwtNkCHO_XXqK5dE5YdOmFJBZR9FwczhJehHhAZN6BKXQPcs-VvdSo"}, 76 }, 77 }, 78 IdentificationInfo: &IdentificationInfo{ 79 IdHolderType: IDHOLDERTYPE_LEGAL.Ptr(), 80 IdentificationType: IDENTIFICATIONTYPE_IDENTIFICATION_TYPE_IDCARD.Ptr(), 81 IdentificationName: wxpay_utility.String("MZnwEx6zotwIz6ctW2/iQL5z94odwP9sKiF74RPCPztcJOScaXsaGs82HJNU3K+46ndk7pMrENiPDw=="), /*请传入 wxpay_utility.EncryptOAEPWithPublicKey 加密结果*/ 82 IdentificationNumber: wxpay_utility.String("ZTnn5dKGCvP4csw4XTLug/+VLB+4R6nxSPQwqSpmPVZtXmye+/3s9O+y32w=="), /*请传入 wxpay_utility.EncryptOAEPWithPublicKey 加密结果*/ 83 IdentificationValidDate: wxpay_utility.String("[\"2017-10-28\",\"2037-10-28\"]"), 84 IdentificationFrontCopy: wxpay_utility.String("0P3ng6KTIW4-Q_l2FjKLZuhHjBWoMAjmVtCz7ScmhEIThCaV-4BBgVwtNkCHO_XXqK5dE5YdOmFJBZR9FwczhJehHhAZN6BKXQPcs-VvdSo"), 85 IdentificationBackCopy: wxpay_utility.String("0P3ng6KTIW4-Q_l2FjKLZuhHjBWoMAjmVtCz7ScmhEIThCaV-4BBgVwtNkCHO_XXqK5dE5YdOmFJBZR9FwczhJehHhAZN6BKXQPcs-VvdSo"), 86 AuthorizeLetterCopy: wxpay_utility.String("0P3ng6KTIW4-Q_l2FjKLZuhHjBWoMAjmVtCz7ScmhEIThCaV-4BBgVwtNkCHO_XXqK5dE5YdOmFJBZR9FwczhJehHhAZN6BKXQPcs-VvdSo"), 87 Owner: wxpay_utility.Bool(false), 88 IdentificationAddress: wxpay_utility.String("pVd1HJ6zyvPedzGaV+X3qtmrq9bb9tPROvwia4ibL+F6mfjbzQIzfb3HHLEjZ4YiR/cJiCrZxnAqi+pjeKIEdkwzXRAI7FUhrfPK3SNjaBTEu9GmsugMIA9r3x887Q+ODuC8HH2nzAn7NGpE/e3yiHgWhk0ps5k5DP/2qIdGdONoDzZelrxCl/NWWNUyB93K9F+jC1JX2IMttdY+aQ6zBlw0xnOiNW6Hzy7UtC+xriudjD5APomty7/mYNxLMpRSvWKIjOv/69bDnuC4EL5Kz4jBHLiCyOb+tI0m2qhZ9evAM+Jv1z0NVa8MRtelw/wDa4SzfeespQO/0kjiwfqdfg=="), /*请传入 wxpay_utility.EncryptOAEPWithPublicKey 加密结果*/ 89 }, 90 UboInfo: &UboInfo{ 91 UboIdType: IDENTIFICATIONTYPE_IDENTIFICATION_TYPE_IDCARD.Ptr(), 92 UboIdCardCopy: wxpay_utility.String("jTpGmxUX3FBWVQ5NJTZvlKX_gdU4cRz7z5NxpnFuAxhBTEO_PvWkfSCJ3zVIn001D8daLC-ehEuo0BJqRTvDujqhThn4ReFxikqJ5YW6zFQ"), 93 UboIdCardNational: wxpay_utility.String("jTpGmxUX3FBWVQ5NJTZvlKX_gdU4cRz7z5NxpnFuAxhBTEO_PvWkfSCJ3zVIn001D8daLC-ehEuo0BJqRTvDujqhThn4ReFxikqJ5YW6zFQ"), 94 UboIdDocCopy: wxpay_utility.String("jTpGmxUX3FBWVQ5NJTZvlKX_gdU4cRz7z5NxpnFuAxhBTEO_PvWkfSCJ3zVIn001D8daLC-ehEuo0BJqRTvDujqhThn4ReFxikqJ5YW6zFQ"), 95 UboName: wxpay_utility.String("AOZdYGISxo4y44/Ug4P4TG5xzchG/5IL9DBd+Z0zZXkw=="), /*请传入 wxpay_utility.EncryptOAEPWithPublicKey 加密结果*/ 96 UboIdNumber: wxpay_utility.String("AOZdYGISxo4y44/Ug4P4TG5xzchG/5IL9DBd+Z0zZXkw=="), /*请传入 wxpay_utility.EncryptOAEPWithPublicKey 加密结果*/ 97 UboIdCardValidDate: wxpay_utility.String("[\"2017-10-28\",\"2037-10-28\"]"), 98 }, 99 AdditionInfo: &AdditionInfo{ 100 ConfirmMchidList: []string{"example_ConfirmMchidList"}, 101 }, 102 UboInfoList: []UboInfoList{UboInfoList{ 103 UboIdDocType: IDENTIFICATIONTYPE_IDENTIFICATION_TYPE_IDCARD.Ptr(), 104 UboIdDocCopy: wxpay_utility.String("jTpGmxUXqRTvDujqhThn4ReFxikqJ5YW6zFQ"), 105 UboIdDocCopyBack: wxpay_utility.String("jTpGmxUX3FBWVQ5NJTZvvDujqhThn4ReFxikqJ5YW6zFQ"), 106 UboIdDocName: wxpay_utility.String("AOZdYGISxo4y44/Ug4P4TG5xzchG/5IL9DBd+Z0zZXkw=="), /*请传入 wxpay_utility.EncryptOAEPWithPublicKey 加密结果*/ 107 UboIdDocNumber: wxpay_utility.String("AOZdYGISxo4y44/Ug4P4TG5xzchG/5IL9DBd+Z0zZXkw=="), /*请传入 wxpay_utility.EncryptOAEPWithPublicKey 加密结果*/ 108 UboIdDocAddress: wxpay_utility.String("pVd1HJ6zyvPedzGaV+X3qtmrq9bb9tPROvwia4ibL+F6mfjbzQIzfb3HHLEjZ4YiR/cJiCrZxnAqi+pjeKIEdkwzXRAI7FUhrfPK3SNjaBTEu9GmsugMIA9r3x887Q+ODuC8HH2nzAn7NGpE/e3yiHgWhk0ps5k5DP/2qIdGdONoDzZelrxCl/NWWNUyB93K9F+jC1JX2IMttdY+aQ6zBlw0xnOiNW6Hzy7UtC+xriudjD5APomty7/mYNxLMpRSvWKIjOv/69bDnuC4EL5Kz4jBHLiCyOb+tI0m2qhZ9evAM+Jv1z0NVa8MRtelw/wDa4SzfeespQO/0kjiwfqdfg=="), /*请传入 wxpay_utility.EncryptOAEPWithPublicKey 加密结果*/ 109 UboPeriodBegin: wxpay_utility.String("2019-06-06"), 110 UboPeriodEnd: wxpay_utility.String("2026-06-06"), 111 }}, 112 } 113 114 response, err := SubmitApplyment(config, request) 115 if err != nil { 116 fmt.Printf("请求失败: %+v\n", err) 117 // TODO: 请求失败,根据状态码执行不同的处理 118 return 119 } 120 121 // TODO: 请求成功,继续业务逻辑 122 fmt.Printf("请求成功: %+v\n", response) 123} 124 125func SubmitApplyment(config *wxpay_utility.MchConfig, request *SubmitApplymentRequest) (response *SubmitApplymentResponse, err error) { 126 const ( 127 host = "https://api.mch.weixin.qq.com" 128 method = "POST" 129 path = "/v3/apply4subject/applyment" 130 ) 131 132 reqUrl, err := url.Parse(fmt.Sprintf("%s%s", host, path)) 133 if err != nil { 134 return nil, err 135 } 136 reqBody, err := json.Marshal(request) 137 if err != nil { 138 return nil, err 139 } 140 httpRequest, err := http.NewRequest(method, reqUrl.String(), bytes.NewReader(reqBody)) 141 if err != nil { 142 return nil, err 143 } 144 httpRequest.Header.Set("Accept", "application/json") 145 httpRequest.Header.Set("Wechatpay-Serial", config.WechatPayPublicKeyId()) 146 httpRequest.Header.Set("Content-Type", "application/json") 147 authorization, err := wxpay_utility.BuildAuthorization(config.MchId(), config.CertificateSerialNo(), config.PrivateKey(), method, reqUrl.RequestURI(), reqBody) 148 if err != nil { 149 return nil, err 150 } 151 httpRequest.Header.Set("Authorization", authorization) 152 153 client := &http.Client{} 154 httpResponse, err := client.Do(httpRequest) 155 if err != nil { 156 return nil, err 157 } 158 respBody, err := wxpay_utility.ExtractResponseBody(httpResponse) 159 if err != nil { 160 return nil, err 161 } 162 if httpResponse.StatusCode >= 200 && httpResponse.StatusCode < 300 { 163 // 2XX 成功,验证应答签名 164 err = wxpay_utility.ValidateResponse( 165 config.WechatPayPublicKeyId(), 166 config.WechatPayPublicKey(), 167 &httpResponse.Header, 168 respBody, 169 ) 170 if err != nil { 171 return nil, err 172 } 173 response := &SubmitApplymentResponse{} 174 if err := json.Unmarshal(respBody, response); err != nil { 175 return nil, err 176 } 177 178 return response, nil 179 } else { 180 return nil, wxpay_utility.NewApiException( 181 httpResponse.StatusCode, 182 httpResponse.Header, 183 respBody, 184 ) 185 } 186} 187 188type SubmitApplymentRequest struct { 189 ChannelId *string `json:"channel_id,omitempty"` 190 BusinessCode *string `json:"business_code,omitempty"` 191 ContactInfo *ContactInfo `json:"contact_info,omitempty"` 192 SubjectInfo *SubjectInfo `json:"subject_info,omitempty"` 193 IdentificationInfo *IdentificationInfo `json:"identification_info,omitempty"` 194 UboInfo *UboInfo `json:"ubo_info,omitempty"` 195 AdditionInfo *AdditionInfo `json:"addition_info,omitempty"` 196 UboInfoList []UboInfoList `json:"ubo_info_list,omitempty"` 197} 198 199type SubmitApplymentResponse struct { 200 ApplymentId *int64 `json:"applyment_id,omitempty"` 201} 202 203type ContactInfo struct { 204 Name *string `json:"name,omitempty"` 205 Mobile *string `json:"mobile,omitempty"` 206 IdCardNumber *string `json:"id_card_number,omitempty"` 207 ContactType *IdHolderType `json:"contact_type,omitempty"` 208 ContactIdDocType *IdentificationType `json:"contact_id_doc_type,omitempty"` 209 ContactIdDocCopy *string `json:"contact_id_doc_copy,omitempty"` 210 ContactIdDocCopyBack *string `json:"contact_id_doc_copy_back,omitempty"` 211 ContactPeriodBegin *string `json:"contact_period_begin,omitempty"` 212 ContactPeriodEnd *string `json:"contact_period_end,omitempty"` 213} 214 215type SubjectInfo struct { 216 SubjectType *SubjectType `json:"subject_type,omitempty"` 217 IsFinanceInstitution *bool `json:"is_finance_institution,omitempty"` 218 BusinessLicenceInfo *BusinessLicenceInfo `json:"business_licence_info,omitempty"` 219 CertificateInfo *CertificateInfo `json:"certificate_info,omitempty"` 220 CompanyProveCopy *string `json:"company_prove_copy,omitempty"` 221 AssistProveInfo *AssitProveInfo `json:"assist_prove_info,omitempty"` 222 SpecialOperationList []SpecialOperation `json:"special_operation_list,omitempty"` 223 FinanceInstitutionInfo *FinanceInstitutionInfo `json:"finance_institution_info,omitempty"` 224} 225 226type IdentificationInfo struct { 227 IdHolderType *IdHolderType `json:"id_holder_type,omitempty"` 228 IdentificationType *IdentificationType `json:"identification_type,omitempty"` 229 IdentificationName *string `json:"identification_name,omitempty"` 230 IdentificationNumber *string `json:"identification_number,omitempty"` 231 IdentificationValidDate *string `json:"identification_valid_date,omitempty"` 232 IdentificationFrontCopy *string `json:"identification_front_copy,omitempty"` 233 IdentificationBackCopy *string `json:"identification_back_copy,omitempty"` 234 AuthorizeLetterCopy *string `json:"authorize_letter_copy,omitempty"` 235 Owner *bool `json:"owner,omitempty"` 236 IdentificationAddress *string `json:"identification_address,omitempty"` 237} 238 239type UboInfo struct { 240 UboIdType *IdentificationType `json:"ubo_id_type,omitempty"` 241 UboIdCardCopy *string `json:"ubo_id_card_copy,omitempty"` 242 UboIdCardNational *string `json:"ubo_id_card_national,omitempty"` 243 UboIdDocCopy *string `json:"ubo_id_doc_copy,omitempty"` 244 UboName *string `json:"ubo_name,omitempty"` 245 UboIdNumber *string `json:"ubo_id_number,omitempty"` 246 UboIdCardValidDate *string `json:"ubo_id_card_valid_date,omitempty"` 247} 248 249type AdditionInfo struct { 250 ConfirmMchidList []string `json:"confirm_mchid_list,omitempty"` 251} 252 253type UboInfoList struct { 254 UboIdDocType *IdentificationType `json:"ubo_id_doc_type,omitempty"` 255 UboIdDocCopy *string `json:"ubo_id_doc_copy,omitempty"` 256 UboIdDocCopyBack *string `json:"ubo_id_doc_copy_back,omitempty"` 257 UboIdDocName *string `json:"ubo_id_doc_name,omitempty"` 258 UboIdDocNumber *string `json:"ubo_id_doc_number,omitempty"` 259 UboIdDocAddress *string `json:"ubo_id_doc_address,omitempty"` 260 UboPeriodBegin *string `json:"ubo_period_begin,omitempty"` 261 UboPeriodEnd *string `json:"ubo_period_end,omitempty"` 262} 263 264type IdHolderType string 265 266func (e IdHolderType) Ptr() *IdHolderType { 267 return &e 268} 269 270const ( 271 IDHOLDERTYPE_LEGAL IdHolderType = "LEGAL" 272 IDHOLDERTYPE_SUPER IdHolderType = "SUPER" 273) 274 275type IdentificationType string 276 277func (e IdentificationType) Ptr() *IdentificationType { 278 return &e 279} 280 281const ( 282 IDENTIFICATIONTYPE_IDENTIFICATION_TYPE_IDCARD IdentificationType = "IDENTIFICATION_TYPE_IDCARD" 283 IDENTIFICATIONTYPE_IDENTIFICATION_TYPE_OVERSEA_PASSPORT IdentificationType = "IDENTIFICATION_TYPE_OVERSEA_PASSPORT" 284 IDENTIFICATIONTYPE_IDENTIFICATION_TYPE_HONGKONG_PASSPORT IdentificationType = "IDENTIFICATION_TYPE_HONGKONG_PASSPORT" 285 IDENTIFICATIONTYPE_IDENTIFICATION_TYPE_MACAO_PASSPORT IdentificationType = "IDENTIFICATION_TYPE_MACAO_PASSPORT" 286 IDENTIFICATIONTYPE_IDENTIFICATION_TYPE_TAIWAN_PASSPORT IdentificationType = "IDENTIFICATION_TYPE_TAIWAN_PASSPORT" 287 IDENTIFICATIONTYPE_IDENTIFICATION_TYPE_FOREIGN_RESIDENT IdentificationType = "IDENTIFICATION_TYPE_FOREIGN_RESIDENT" 288 IDENTIFICATIONTYPE_IDENTIFICATION_TYPE_HONGKONG_MACAO_RESIDENT IdentificationType = "IDENTIFICATION_TYPE_HONGKONG_MACAO_RESIDENT" 289 IDENTIFICATIONTYPE_IDENTIFICATION_TYPE_TAIWAN_RESIDENT IdentificationType = "IDENTIFICATION_TYPE_TAIWAN_RESIDENT" 290) 291 292type SubjectType string 293 294func (e SubjectType) Ptr() *SubjectType { 295 return &e 296} 297 298const ( 299 SUBJECTTYPE_SUBJECT_TYPE_ENTERPRISE SubjectType = "SUBJECT_TYPE_ENTERPRISE" 300 SUBJECTTYPE_SUBJECT_TYPE_INSTITUTIONS_CLONED SubjectType = "SUBJECT_TYPE_INSTITUTIONS_CLONED" 301 SUBJECTTYPE_SUBJECT_TYPE_INDIVIDUAL SubjectType = "SUBJECT_TYPE_INDIVIDUAL" 302 SUBJECTTYPE_SUBJECT_TYPE_OTHERS SubjectType = "SUBJECT_TYPE_OTHERS" 303 SUBJECTTYPE_SUBJECT_TYPE_MICRO SubjectType = "SUBJECT_TYPE_MICRO" 304 SUBJECTTYPE_SUBJECT_TYPE_GOVERNMENT SubjectType = "SUBJECT_TYPE_GOVERNMENT" 305) 306 307type BusinessLicenceInfo struct { 308 LicenceNumber *string `json:"licence_number,omitempty"` 309 LicenceCopy *string `json:"licence_copy,omitempty"` 310 MerchantName *string `json:"merchant_name,omitempty"` 311 LegalPerson *string `json:"legal_person,omitempty"` 312 CompanyAddress *string `json:"company_address,omitempty"` 313 LicenceValidDate *string `json:"licence_valid_date,omitempty"` 314} 315 316type CertificateInfo struct { 317 CertType *CertificateType `json:"cert_type,omitempty"` 318 CertNumber *string `json:"cert_number,omitempty"` 319 CertCopy *string `json:"cert_copy,omitempty"` 320 MerchantName *string `json:"merchant_name,omitempty"` 321 LegalPerson *string `json:"legal_person,omitempty"` 322 CompanyAddress *string `json:"company_address,omitempty"` 323 CertValidDate *string `json:"cert_valid_date,omitempty"` 324} 325 326type AssitProveInfo struct { 327 MicroBizType *MicroBizType `json:"micro_biz_type,omitempty"` 328 StoreName *string `json:"store_name,omitempty"` 329 StoreAddressCode *string `json:"store_address_code,omitempty"` 330 StoreAddress *string `json:"store_address,omitempty"` 331 StoreHeaderCopy *string `json:"store_header_copy,omitempty"` 332 StoreIndoorCopy *string `json:"store_indoor_copy,omitempty"` 333} 334 335type SpecialOperation struct { 336 CategoryId *int64 `json:"category_id,omitempty"` 337 OperationCopyList []string `json:"operation_copy_list,omitempty"` 338} 339 340type FinanceInstitutionInfo struct { 341 FinanceType *FinanceType `json:"finance_type,omitempty"` 342 FinanceLicensePics []string `json:"finance_license_pics,omitempty"` 343} 344 345type CertificateType string 346 347func (e CertificateType) Ptr() *CertificateType { 348 return &e 349} 350 351const ( 352 CERTIFICATETYPE_CERTIFICATE_TYPE_2388 CertificateType = "CERTIFICATE_TYPE_2388" 353 CERTIFICATETYPE_CERTIFICATE_TYPE_2389 CertificateType = "CERTIFICATE_TYPE_2389" 354 CERTIFICATETYPE_CERTIFICATE_TYPE_2394 CertificateType = "CERTIFICATE_TYPE_2394" 355 CERTIFICATETYPE_CERTIFICATE_TYPE_2395 CertificateType = "CERTIFICATE_TYPE_2395" 356 CERTIFICATETYPE_CERTIFICATE_TYPE_2396 CertificateType = "CERTIFICATE_TYPE_2396" 357 CERTIFICATETYPE_CERTIFICATE_TYPE_2397 CertificateType = "CERTIFICATE_TYPE_2397" 358 CERTIFICATETYPE_CERTIFICATE_TYPE_2398 CertificateType = "CERTIFICATE_TYPE_2398" 359 CERTIFICATETYPE_CERTIFICATE_TYPE_2399 CertificateType = "CERTIFICATE_TYPE_2399" 360 CERTIFICATETYPE_CERTIFICATE_TYPE_2400 CertificateType = "CERTIFICATE_TYPE_2400" 361 CERTIFICATETYPE_CERTIFICATE_TYPE_2390 CertificateType = "CERTIFICATE_TYPE_2390" 362 CERTIFICATETYPE_CERTIFICATE_TYPE_2391 CertificateType = "CERTIFICATE_TYPE_2391" 363 CERTIFICATETYPE_CERTIFICATE_TYPE_2392 CertificateType = "CERTIFICATE_TYPE_2392" 364 CERTIFICATETYPE_CERTIFICATE_TYPE_2393 CertificateType = "CERTIFICATE_TYPE_2393" 365 CERTIFICATETYPE_CERTIFICATE_TYPE_2520 CertificateType = "CERTIFICATE_TYPE_2520" 366 CERTIFICATETYPE_CERTIFICATE_TYPE_2521 CertificateType = "CERTIFICATE_TYPE_2521" 367 CERTIFICATETYPE_CERTIFICATE_TYPE_2522 CertificateType = "CERTIFICATE_TYPE_2522" 368) 369 370type MicroBizType string 371 372func (e MicroBizType) Ptr() *MicroBizType { 373 return &e 374} 375 376const ( 377 MICROBIZTYPE_MICRO_TYPE_STORE MicroBizType = "MICRO_TYPE_STORE" 378 MICROBIZTYPE_MICRO_TYPE_MOBILE MicroBizType = "MICRO_TYPE_MOBILE" 379 MICROBIZTYPE_MICRO_TYPE_ONLINE MicroBizType = "MICRO_TYPE_ONLINE" 380) 381 382type FinanceType string 383 384func (e FinanceType) Ptr() *FinanceType { 385 return &e 386} 387 388const ( 389 FINANCETYPE_BANK_AGENT FinanceType = "BANK_AGENT" 390 FINANCETYPE_PAYMENT_AGENT FinanceType = "PAYMENT_AGENT" 391 FINANCETYPE_INSURANCE FinanceType = "INSURANCE" 392 FINANCETYPE_TRADE_AND_SETTLE FinanceType = "TRADE_AND_SETTLE" 393 FINANCETYPE_OTHER FinanceType = "OTHER" 394) 395
应答参数
200 OK
applyment_id 必填 integer
【申请单编号】 微信支付分配的申请单号
应答示例
200 OK
1{ 2 "applyment_id" : 20000000011111 3} 4
错误码
公共错误码
状态码 | 错误码 | 描述 | 解决方案 |
---|---|---|---|
400 | PARAM_ERROR | 参数错误 | 请根据错误提示正确传入参数 |
400 | INVALID_REQUEST | HTTP 请求不符合微信支付 APIv3 接口规则 | 请参阅 接口规则 |
401 | SIGN_ERROR | 验证不通过 | 请参阅 签名常见问题 |
500 | SYSTEM_ERROR | 系统异常,请稍后重试 | 请稍后重试 |
业务错误码
状态码 | 错误码 | 描述 | 解决方案 |
---|---|---|---|
400 | INVALID_REQUEST | 无效请求 | 请查看返回的错误信息,根据错误信息进行操作 |
403 | NO_AUTH | 商户权限异常 | 请确认是否已经开通相关权限 |