提交申请单
更新时间:2025.02.28电商平台,可使用该接口,帮助其二级商户进件成为微信支付商户。
流程指引请看二级商户进件流程
|
接口说明
支持商户:【平台商户】
请求方式:【POST】/v3/ecommerce/applyments/
请求域名:【主域名】https://api.mch.weixin.qq.com 使用该域名将访问就近的接入点
【备域名】https://api2.mch.weixin.qq.com 使用该域名将访问异地的接入点 ,指引点击查看
接口频率: 15QPS(商户号维度)
是否支持幂等: 是
请求参数
Header HTTP头参数
Authorization 必填 string
请参考签名认证生成认证信息
Accept 必填 string
请设置为application/json
Content-Type 必填 string
请设置为application/json
Wechatpay-Serial 必填 string
【微信支付公钥ID】或【微信支付平台证书序列号】请求参数中的敏感字段,需要使用微信支付公钥加密(推荐),请参考获取微信支付公钥ID说明以及微信支付公钥加密敏感信息指引,也可以使用微信支付平台证书公钥加密,参考获取平台证书序列号、平台证书加密敏感信息指引
body 包体参数
out_request_no 必填 string(124)
【业务申请编号 】 1、服务商自定义的商户唯一编号。
2、每个编号对应一个申请单,每个申请单审核通过后会生成一个微信支付商户号。
3、若申请单被驳回,可填写相同的“业务申请编号”,即可覆盖修改原申请单信息 。
organization_type 必填 string(4)
【主体类型】
非小微的主体类型需与营业执照/登记证书上一致,可参考选择主体指引,枚举值如下。2401
:小微商户,指无营业执照的个人商家。2500
:个人卖家,指无营业执照,已持续从事电子商务经营活动满6个月,且期间经营收入累计超过20万元的个人商家。(若选择该主体,请在“补充说明”填写相关描述)。4
:个体工商户,营业执照上的主体类型一般为个体户、个体工商户、个体经营。2
:企业,营业执照上的主体类型一般为有限公司、有限责任公司。3
:事业单位,包括国内各类事业单位,如:医疗、教育、学校等单位。2502
:政府机关,包括各级、各类政府机关,如机关党委、税务、民政、人社、工商、商务、市监等。1708
:社会组织,包括社会团体、民办非企业、基金会、基层群众性自治组织、农村集体经济组织等组织。
finance_institution 选填 boolean
【是否金融机构】 选填,请根据申请主体的实际情况填写,可参考选择金融机构指引:
1、若商户主体是金融机构,则填写:true。
2、若商户主体不是金融机构,则填写:false。
若未传入将默认填写:false。
business_license_info 选填 object
【营业执照信息】
1、主体为“小微/个人卖家”时,不填。
2、主体为“个体工商户/企业”时,请上传营业执照。
3、主体为“政府机关/事业单位/社会组织”时,请上传登记证书。
属性 | |
cert_type 选填 string 【证书类型】 1、主体为“政府机关/事业单位/社会组织”时,请上传登记证书类型。 可选取值 当主体为事业单位时,选择此枚举值: business_license_copy 必填 string 【营业执照扫描件】 1、主体为“个体工商户/企业”时,请上传营业执照的证件图片。 business_license_number 必填 string 【营业执照注册号】 1、主体为“个体工商户”时,请填写营业执照上的注册号/统一社会信用代码,格式需满足以下任一条件: merchant_name 必填 string(128) 【商户名称】 请填写登记证书上的商户名称 legal_person 必填 string(100) 【经营者/法定代表人姓名】 请填写证件的经营者/法定代表人姓名 company_address 选填 string(128) 【注册地址】 1、 主体为“政府机关/事业单位/社会组织”时必填,请填写登记证书的注册地址。 business_time 选填 string 【营业期限】 1、主体为“政府机关/事业单位/社会组织”时必填,请填写证件有效期。 |
finance_institution_info 选填 object
【金融机构许可证信息】 当主体是金融机构时,必填
属性 | |
finance_type 必填 string 【金融机构类型】 金融机构类型需与营业执照/登记证书上一致,可参考选择金融机构指引。 finance_license_pics 必填 array 【金融机构许可证图片】 1、根据所属金融机构类型的许可证要求提供,详情查看金融机构指引。 |
id_holder_type 选填 string
【证件持有人类型】1、主体类型为政府机关/事业单位时选传:
(1)若上传的是法定代表人证件,则不需要上传该字段。
(2)若因政策保密等原因,无法提供法定代表人证件时,可上传经办人。 (经办人:经商户授权办理微信支付业务的人员,授权范围包括但不限于签约,入驻过程需完成账户验证)。
2、主体类型为小微/个人卖家/企业/个体户/社会组织时,默认为经营者/法定代表人,不需要上传该字段。
可选取值
LEGAL
: 经营者/法定代表人SUPER
: 经办人
id_doc_type 选填 string
【经营者/法定代表人证件类型】
1、当证件持有人类型为经营者/法定代表人时,需要填写。其他情况,无需上传。
2、主体为“小微/个人卖家”,可选择:身份证。
3、主体为“个体户/企业/事业单位/社会组织”:可选择任一证件类型,主体为“政府机关”仅支持中国大陆居民-身份证类型。
4、若没有填写,系统默认选择:身份证。
可选取值
IDENTIFICATION_TYPE_MAINLAND_IDCARD
: 中国大陆居民-身份证IDENTIFICATION_TYPE_OVERSEA_PASSPORT
: 其他国家或地区居民-护照IDENTIFICATION_TYPE_HONGKONG
: 中国香港居民--来往内地通行证IDENTIFICATION_TYPE_MACAO
: 中国澳门居民--来往内地通行证IDENTIFICATION_TYPE_TAIWAN
: 中国台湾居民--来往大陆通行证IDENTIFICATION_TYPE_FOREIGN_RESIDENT
: 外国人居留证IDENTIFICATION_TYPE_HONGKONG_MACAO_RESIDENT
: 港澳居民证IDENTIFICATION_TYPE_TAIWAN_RESIDENT
: 台湾居民证
authorize_letter_copy 选填 string
【法定代表人说明函】
1、当证件持有人类型为经办人时,必须上传。其他情况,无需上传。
2、因政策保密等原因,无法提供法定代表人证件时,请参照示例图打印法定代表人说明函,全部信息需打印,不支持手写商户信息,并加盖公章。
3、可上传1张图片,请填写通过图片上传API预先上传图片生成好的MediaID。
id_card_info 选填 object
【经营者/法定代表人身份证信息】 当证件持有人类型为经营者/法定代表人且证件类型为“身份证”时填写。
属性 | |
id_card_copy 必填 string(256) 【身份证人像面照片】 1、请上传个体户经营者/法定代表人的身份证人像面照片 id_card_national 必填 string(256) 【身份证国徽面照片】 1、请上传个体户经营者/法定代表人的身份证国徽面照片 id_card_name 必填 string(100) 【身份证姓名】 1、请填写个体户经营者/法定代表人对应身份证的姓名 id_card_number 必填 string 【身份证号码】 1、请填写经营者/法定代表人对应身份证的号码。 id_card_valid_time_begin 必填 string 【身份证开始时间】 1、日期格式应满足合法的YYYY-MM-DD格式 id_card_valid_time 必填 string 【身份证结束时间】 1、日期格式应满足合法的YYYY-MM-DD格式或长期 |
id_doc_info 选填 object
【经营者/法定代表人其他类型证件信息】
当证件持有人类型为经营者/法定代表人且证件类型不为“身份证”时填写。
属性 | |
id_doc_name 必填 string 【证件姓名】 1、请填写经营者/法定姓名 id_doc_number 必填 string 【证件号码】 1、请填写经营者/法定代表人的证件号码。 id_doc_copy 必填 string(256) 【证件正面照片】 1、证件类型不为“身份证”时,上传证件正面照片。 id_doc_copy_back 选填 string(256) 【证件反面照片】 1、若证件类型为来往通行证、外国人居留证、港澳居住证、台湾居住证时,上传证件反面照片。 doc_period_begin 必填 string 【证件开始日期】 1、日期格式应满足合法的YYYY-MM-DD格式 doc_period_end 必填 string 【证件结束日期】 1、日期格式应满足合法的YYYY-MM-DD格式或长期 |
owner 选填 boolean
【经营者/法定代表人是否为受益人】 该字段即将下线处理,无需传入
主体类型为企业时,需要填写:
1、若经营者/法定代表人是最终受益人,则填写:true。
2、若经营者/法定代表人不是最终受益人,则填写:false。
ubo_info_list 选填 array
【最终受益人信息列表】
1、主体类型为小微/个人卖家/个体户/社会组织/政府机关/事业单位时,无需填写
2、主体类型为企业时,按照下述要求填写
1)若经营者/法定代表人不是最终受益所有人,则需提填写受益所有人信息,最多上传4个。
2)若经营者/法定代表人是最终受益所有人之一,可在此填写其他受益所有人信息,最多上传3个。
根据国家相关法律法规,需要提供公司受益所有人信息,受益所有人需符合至少以下条件之一:
▪️直接或者间接拥有超过25%公司股权或者表决权的自然人。
▪️通过人事、财务等其他方式对公司进行控制的自然人。
▪️公司的高级管理人员,包括公司的经理、副经理、财务负责人、上市公司董事会秘书和公司章程规定的其他人员。
属性 | |
ubo_id_doc_type 选填 string 【证件类型】 请填写受益人的证件类型。 可选取值
ubo_id_doc_copy 选填 string 【证件正面照片】 1、请上传受益人证件的正面照片。 ubo_id_doc_copy_back 选填 string 【证件反面照片】 1、请上传受益人证件的反面照片。 ubo_id_doc_name 选填 string(100) 【证件姓名】 1、长度为2-100个字符 ubo_id_doc_number 选填 string 【证件号码】 1、可传身份证、来往内地通行证、来往大陆通行证、护照等证件号码,号码规范如下: ubo_id_doc_address 选填 string(128) 【证件居住地址】 1、请按照身份证住址填写,如广东省深圳市南山区xx路xx号xx室 ubo_id_doc_period_begin 选填 string 【证件有效期开始时间】 1、日期格式应满足合法的YYYY-MM-DD格式 ubo_id_doc_period_end 选填 string 【证件有效期结束时间】 1、日期格式应满足合法的YYYY-MM-DD格式或长期 |
account_info 必填 object
【结算账户信息】 请填写商家提现收款的银行账户信息。
属性 | |
bank_account_type 必填 string(2) 【账户类型】 1、若主体为企业/政府机关/事业单位/社会组织,可填写:74-对公账户。 account_bank 必填 string(10) 【开户银行】 对私银行调用:查询支持个人业务的银行列表API account_name 必填 string(128) 【开户名称】 1、选择经营者个人银行卡时,开户名称必须与身份证姓名一致。 bank_address_code 选填 string(12) 【开户银行省市编码】 该字段即将下线处理,无需传入 至少精确到市,详细参见省市区编号对照表。 注:仅当省市区编号对照表中无对应的省市区编号时,可向上取该银行对应市级编号或省级编号。 bank_branch_id 选填 string(64) 【开户银行联行号】 1、根据开户银行查询接口中的“是否需要填写支行”判断是否需要填写。如为其他银行,开户银行全称(含支行)和开户银行联行号二选一。 bank_name 选填 string(128) 【开户银行全称 (含支行)】 1、根据开户银行查询接口中的“是否需要填写支行”判断是否需要填写。如为其他银行,开户银行全称(含支行)和开户银行联行号二选一。 account_number 必填 string(128) 【银行账号】 1、数字,长度遵循系统支持的对公/对私卡号长度要求表。 |
contact_info 必填 object
【超级管理员信息】 请填写店铺的超级管理员信息。
超级管理员需在开户后进行签约,并可接收日常重要管理信息和进行资金操作,请确定其为商户法定代表人或负责人。
属性 | |
contact_type 必填 string(2) 【超级管理员类型】 1、主体为“小微/个人卖家 ”,可选择:65-经营者/法定代表人。 contact_name 必填 string(10) 【超级管理员姓名】 1、若管理员类型为“法定代表人”,则该姓名需与法定代表人身份证姓名一致。 contact_id_doc_type 选填 string 【超级管理员证件类型】 当超级管理员类型是经办人时,请上传超级管理员证件类型。 可选取值
contact_id_card_number 选填 string 【超级管理员证件号码】 1、若超级管理员类型为法定代表人,则该身份证号码需与法定代表人身份证号码一致。若超级管理员类型为经办人,则可填写实际经办人的身份证号码。 contact_id_doc_copy 选填 string 【超级管理员证件正面照片】 1、当超级管理员类型是经办人时,请上传超级管理员证件的正面照片。 contact_id_doc_copy_back 选填 string 【超级管理员证件反面照片】 1、当超级管理员类型是经办人时,请上传超级管理员证件的反面照片。 contact_id_doc_period_begin 选填 string 【超级管理员证件有效期开始时间】 1、当超级管理员类型是经办人时,请上传证件有效期开始时间。 4、开始时间不能大于等于当前日期。 contact_id_doc_period_end 选填 string 【超级管理员证件有效期结束时间】 1、当超级管理员类型是经办人时,请上传证件有效期结束时间。 business_authorization_letter 选填 string 【业务办理授权函】 1、当超级管理员类型是经办人时,请上传业务办理授权函。 mobile_phone 必填 string 【超级管理员手机】 1、前后不能有空格、制表符、换行符 |
sales_scene_info 必填 object
【经营场景信息】 请填写经营场景信息
属性 | |
store_name 必填 string(256) 【店铺名称】 请填写店铺全称。 store_url 选填 string(1024) 【店铺链接】 1、店铺二维码or店铺链接二选一必填。 store_qr_code 选填 string(256) 【店铺二维码】 1、店铺二维码 or 店铺链接二选一必填。 mini_program_sub_appid 选填 string(256) 【商家小程序APPID】 1、商户自定义字段,可填写已认证的小程序AppID,认证主体需与二级商户主体一致; |
settlement_info 选填 object
【结算规则】
请填写商家的结算费率规则、所属行业等信息。若电商平台未传入,系统将填写默认值
属性 | |
settlement_id 选填 integer 【结算规则ID】 1、选填,请选择二级商户的结算规则ID,需匹配电商平台开通工具箱选择的费率档位,详细参见电商二级商户结算规则对照表; qualification_type 选填 string(200) 【所属行业】 1、选填,请填写二级商户所属的行业名称,映射特殊资质要求,详细参见电商二级商户结算规则对照表; |
merchant_shortname 必填 string(64)
【商户简称】
UTF-8格式,中文占3个字节,即最多21个汉字长度。将在支付完成页向买家展示,需与商家的实际售卖商品相符 。
qualifications 选填 string(1024)
【特殊资质】 1、仅当商户选择了必需提交特殊资质的行业时,需要提供该项资料;若商户选择了无需特殊资质的行业,或未选择行业时,无需提交该项资料,详情查看《行业对应特殊资质》
2、请提供为“申请商家主体”所属的特殊资质,可授权使用总公司/分公司的特殊资质;
3、最多可上传5张照片,请填写通过图片上传API预先上传图片生成好的MediaID 。
business_addition_pics 选填 string(1024)
【补充材料】
根据实际审核情况,额外要求提供。最多可上传15张照片,请填写通过图片上传API预先上传图片生成好的MediaID 。
business_addition_desc 选填 string(512)
【补充说明】
若主体为“个人卖家”,该字段必传,则需填写描述“ 该商户已持续从事电子商务经营活动满6个月,且期间经营收入累计超过20万元。
请求示例
POST
1curl -X POST \ 2 https://api.mch.weixin.qq.com/v3/ecommerce/applyments/ \ 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 "out_request_no" : "APPLYMENT_00000000001", 9 "organization_type" : "2", 10 "finance_institution" : true, 11 "business_license_info" : { 12 "cert_type" : "CERTIFICATE_TYPE_2388", 13 "business_license_copy" : "47ZC6GC-vnrbEny__Ie_An5-tCpqxucuxi-vByf3Gjm7KE53JXvGy9tqZm2XAUf-4KGprrKhpVBDIUv0OF4wFNIO4kqg05InE4d2I6_H7I4", 14 "business_license_number" : "123456789012345678", 15 "merchant_name" : "腾讯科技有限公司", 16 "legal_person" : "张三", 17 "company_address" : "深圳南山区科苑路", 18 "business_time" : "[\\\"2014-01-01\\\",\\\"长期\\\"]" 19 }, 20 "finance_institution_info" : { 21 "finance_type" : "BANK_AGENT", 22 "finance_license_pics" : [ 23 "example_finance_license_pics" 24 ] 25 }, 26 "id_holder_type" : "LEGAL", 27 "id_doc_type" : "IDENTIFICATION_TYPE_MACAO", 28 "authorize_letter_copy" : "47ZC6GC-vnrbEny_Ie_An5-tCpqxucuxi-vByf3Gjm7KEIUv0OF4wFNIO4kqg05InE4d2I6_H7I4", 29 "id_card_info" : { 30 "id_card_copy" : "jTpGmxUX3FBWVQ5NJTZvlKX_gdU4cRz7z5NxpnFuAxhBTEO_PvWkfSCJ3zVIn001D8daLC-ehEuo0BJqRTvDujqhThn4ReFxikqJ5YW6zFQ", 31 "id_card_national" : "47ZC6GC-vnrbEny__Ie_An5-tCpqxucuxi-vByf3Gjm7KE53JXvGy9tqZm2XAUf-4KGprrKhpVBDIUv0OF4wFNIO4kqg05InE4d2I6_H7I4", 32 "id_card_name" : "pVd1HJ6zyvPedzGaV+X3qtmrq9bb9tPROvwia4ibL+F6mfjbzQIzfb3HHLEjZ4YiR/cJiCrZxnAqi+pjeKIEdkwzXRAI7FUhrfPK3SNjaBTEu9GmsugMIA9r3x887Q+ODuC8HH2nzAn7NGpE/e3yiHgWhk0ps5k5DP/2qIdGdONoDzZelrxCl/NWWNUyB93K9F+jC1JX2IMttdY+aQ6zBlw0xnOiNW6Hzy7UtC+xriudjD5APomty7/mYNxLMpRSvWKIjOv/69bDnuC4EL5Kz4jBHLiCyOb+tI0m2qhZ9evAM+Jv1z0NVa8MRtelw/wDa4SzfeespQO/0kjiwfqdfg==", 33 "id_card_number" : "AOZdYGISxo4y44/UgZ69bdu9X+tfMUJ9dl+LetjM45/zMbrYu+wWZ8gn4CTdo+D/m9MrPg+V4sm73oxqdQu/hj7aWyDl4GQtPXVdaztB9jVbVZh3QFzV+BEmytMNQp9dt1uWJktlfdDdLR3AMWyMB377xd+m9bSr/ioDTzagEcGe+vLYiKrzcroQv3OR0p3ppFYoQ3IfYeU/04S4t9rNFL+kyblK2FCCqQ11NdbbHoCrJc7NV4oASq6ZFonjTtgjjgKsadIKHXtb3JZKGZjduGdtkRJJp0/0eow96uY1Pk7Rq79Jtt7+I8juwEc4P4TG5xzchG/5IL9DBd+Z0zZXkw==", 34 "id_card_valid_time_begin" : "2019-06-06", 35 "id_card_valid_time" : "2026-06-06" 36 }, 37 "id_doc_info" : { 38 "id_doc_name" : "jTpGmxUX3FBWVQ5NJTZvlKX_gdU4cRz7z5NxpnFuAxhBTEO_PvWkfSCJ3zVIn001D8daLC-ehEuo0BJqRTvDujqhThn4ReFxikqJ5YW6zFQ", 39 "id_doc_number" : "jTpGmxUX3FBWVQ5NJTZvlKX_gdU4cRz7z5NxpnFuAxhBTEO_PvWkfSCJ3zVIn001D8daLC-ehEuo0BJqRTvDujqhThn4ReFxikqJ5YW6zFQ", 40 "id_doc_copy" : "47ZC6GC-vnrbEny__Ie_An5-tCpqxucuxi-vByf3Gjm7KE53JXvGy9tqZm2XAUf-4KGprrKhpVBDIUv0OF4wFNIO4kqg05InE4d2I6_H7I4", 41 "id_doc_copy_back" : "47ZC6GC-vnrbEny__Ie_An5-tCpqxucuxi-vByf3Gjm7KE53JXvGy9tqZm2XAUf-4KGprrKhpVBDIUv0OF4wFNIO4kqg05InE4d2I6_H7I4", 42 "doc_period_begin" : "2019-06-06", 43 "doc_period_end" : "2020-01-02" 44 }, 45 "owner" : true, 46 "account_info" : { 47 "bank_account_type" : "75", 48 "account_bank" : "工商银行", 49 "account_name" : "AOZdYGISxo4y44/UgZ69bdu9X+tfMUJ9dl+LetjM45/zMbrYu+wWZ8gn4CTdo+D/m9MrPg+V4sm73oxqdQu/hj7aWyDl4GQtPXVdaztB9jVbVZh3QFzV+BEmytMNQp9dt1uWJktlfdDdLR3AMWyMB377xd+m9bSr/ioDTzagEcGe+vLYiKrzcroQv3OR0p3ppFYoQ3IfYeU/04S4t9rNFL+kyblK2FCCqQ11NdbbHoCrJc7NV4oASq6ZFonjTtgjjgKsadIKHXtb3JZKGZjduGdtkRJJp0/0eow96uY1Pk7Rq79Jtt7+I8juwEc4P4TG5xzchG/5IL9DBd+Z0zZXkw==", 50 "bank_address_code" : "110000", 51 "bank_branch_id" : "402713354941", 52 "bank_name" : "施秉县农村信用合作联社城关信用社", 53 "account_number" : "d+xT+MQCvrLHUVDWv/8MR/dB7TkXM2YYZlokmXzFsWs35NXUot7C0NcxIrUF5FnxqCJHkNgKtxa6RxEYyba1+VBRLnqKG2fSy/Y5qDN08Ej9zHCwJjq52Wg1VG8MRugli9YMI1fI83KGBxhuXyemgS/hqFKsfYGiOkJqjTUpgY5VqjtL2N4l4z11T0ECB/aSyVXUysOFGLVfSrUxMPZy6jWWYGvT1+4P633f+R+ki1gT4WF/2KxZOYmli385ZgVhcR30mr4/G3HBcxi13zp7FnEeOsLlvBmI1PHN4C7Rsu3WL8sPndjXTd75kPkyjqnoMRrEEaYQE8ZRGYoeorwC+w==" 54 }, 55 "contact_info" : { 56 "contact_type" : "65", 57 "contact_name" : "pVd1HJ6zyvPedzGaV+X3qtmrq9bb9tPROvwia4ibL+F6mfjbzQIzfb3HHLEjZ4YiR/cJiCrZxnAqi+pjeKIEdkwzXRAI7FUhrfPK3SNjaBTEu9GmsugMIA9r3x887Q+ODuC8HH2nzAn7NGpE/e3yiHgWhk0ps5k5DP/2qIdGdONoDzZelrxCl/NWWNUyB93K9F+jC1JX2IMttdY+aQ6zBlw0xnOiNW6Hzy7UtC+xriudjD5APomty7/mYNxLMpRSvWKIjOv/69bDnuC4EL5Kz4jBHLiCyOb+tI0m2qhZ9evAM+Jv1z0NVa8MRtelw/wDa4SzfeespQO/0kjiwfqdfg==", 58 "contact_id_doc_type" : "IDENTIFICATION_TYPE_MACAO", 59 "contact_id_card_number" : "pVd1HJ6zyvPedzGaV+X3qtmrq9bb9tPROvwia4ibL+F6mfjbzQIzfb3HHLEjZ4YiR/cJiCrZxnAqi+pjeKIEdkwzXRAI7FUhrfPK3SNjaBTEu9GmsugMIA9r3x887Q+ODuC8HH2nzAn7NGpE/e3yiHgWhk0ps5k5DP/2qIdGdONoDzZelrxCl/NWWNUyB93K9F+jC1JX2IMttdY+aQ6zBlw0xnOiNW6Hzy7UtC+xriudjD5APomty7/mYNxLMpRSvWKIjOv/69bDnuC4EL5Kz4jBHLiCyOb+tI0m2qhZ9evAM+Jv1z0NVa8MRtelw/wDa4SzfeespQO/0kjiwfqdfg==", 60 "contact_id_doc_copy" : "jTpGmxUX3FBWVQ5NJTZvvDujqhThn4ReFxikqJ5YW6zFQ", 61 "contact_id_doc_copy_back" : "jTpGmxUX3FBWVQ5NJTZvvDujqhThn4ReFxikqJ5YW6zFQ", 62 "contact_id_doc_period_begin" : "2019-06-06", 63 "contact_id_doc_period_end" : "2026-06-06", 64 "business_authorization_letter" : "47ZC6GC-vnrbEny_Ie_An5-tCpqxucuxi-vByf3Gjm7KEIUv0OF4wFNIO4kqg05InE4d2I6_H7I4", 65 "mobile_phone" : "pVd1HJ6zyvPedzGaV+X3qtmrq9bb9tPROvwia4ibL+F6mfjbzQIzfb3HHLEjZ4YiR/cJiCrZxnAqi+pjeKIEdkwzXRAI7FUhrfPK3SNjaBTEu9GmsugMIA9r3x887Q+ODuC8HH2nzAn7NGpE/e3yiHgWhk0ps5k5DP/2qIdGdONoDzZelrxCl/NWWNUyB93K9F+jC1JX2IMttdY+aQ6zBlw0xnOiNW6Hzy7UtC+xriudjD5APomty7/mYNxLMpRSvWKIjOv/69bDnuC4EL5Kz4jBHLiCyOb+tI0m2qhZ9evAM+Jv1z0NVa8MRtelw/wDa4SzfeespQO/0kjiwfqdfg==" 66 }, 67 "sales_scene_info" : { 68 "store_name" : "爱烧烤", 69 "store_url" : "http://www.qq.com", 70 "store_qr_code" : "jTpGmxUX3FBWVQ5NJTZvlKX_gdU4cRz7z5NxpnFuAxhBTEO_PvWkfSCJ3zVIn001D8daLC-ehEuo0BJqRTvDujqhThn4ReFxikqJ5YW6zFQ", 71 "mini_program_sub_appid" : "wxa123344545577" 72 }, 73 "settlement_info" : { 74 "settlement_id" : 719, 75 "qualification_type" : "零售批发/生活娱乐/其他" 76 }, 77 "merchant_shortname" : "腾讯", 78 "qualifications" : "[\\\"jTpGmxUX3FBWVQ5NJTZvlKX_gdU4cRz7z5NxpnFuAxhBTEO_PvWkfSCJ3zVIn001D8daLC-ehEuo0BJqRTvDujqhThn4ReFxikqJ5YW6zFQ\\\",\\\"47ZC6GC-vnrbEny__Ie_An5-tCpqxucuxi-vByf3Gjm7KE53JXvGy9tqZm2XAUf-4KGprrKhpVBDIUv0OF4wFNIO4kqg05InE4d2I6_H7I4\\\"]", 79 "business_addition_pics" : "[\\\"jTpGmxUX3FBWVQ5NJTZvlKX_gdU4cRz7z5NxpnFuAxhBTEO_PvWkfSCJ3zVIn001D8daLC-ehEuo0BJqRTvDujqhThn4ReFxikqJ5YW6zFQ\\\",\\\"47ZC6GC-vnrbEny__Ie_An5-tCpqxucuxi-vByf3Gjm7KE53JXvGy9tqZm2XAUf-4KGprrKhpVBDIUv0OF4wFNIO4kqg05InE4d2I6_H7I4\\\"]", 80 "business_addition_desc" : "特殊情况,说明原因", 81 "ubo_info_list" : [ 82 { 83 "ubo_id_doc_type" : "IDENTIFICATION_TYPE_MAINLAND_IDCARD", 84 "ubo_id_doc_copy" : "jTpGmxUXqRTvDujqhThn4ReFxikqJ5YW6zFQ", 85 "ubo_id_doc_copy_back" : "jTpGmxUX3FBWVQ5NJTZvvDujqhThn4ReFxikqJ5YW6zFQ", 86 "ubo_id_doc_name" : "AOZdYGISxo4y44/Ug4P4TG5xzchG/5IL9DBd+Z0zZXkw==", 87 "ubo_id_doc_number" : "AOZdYGISxo4y44/Ug4P4TG5xzchG/5IL9DBd+Z0zZXkw==", 88 "ubo_id_doc_address" : "pVd1HJ6zyvPedzGaV+X3qtmrq9bb9tPROvwia4ibL+F6mfjbzQIzfb3HHLEjZ4YiR/cJiCrZxnAqi+pjeKIEdkwzXRAI7FUhrfPK3SNjaBTEu9GmsugMIA9r3x887Q+ODuC8HH2nzAn7NGpE/e3yiHgWhk0ps5k5DP/2qIdGdONoDzZelrxCl/NWWNUyB93K9F+jC1JX2IMttdY+aQ6zBlw0xnOiNW6Hzy7UtC+xriudjD5APomty7/mYNxLMpRSvWKIjOv/69bDnuC4EL5Kz4jBHLiCyOb+tI0m2qhZ9evAM+Jv1z0NVa8MRtelw/wDa4SzfeespQO/0kjiwfqdfg==", 89 "ubo_id_doc_period_begin" : "2019-06-06", 90 "ubo_id_doc_period_end" : "2026-06-06" 91 } 92 ] 93 }' 94
需配合微信支付工具库 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/ecommerce/applyments/"; 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 SubmitReq request = new SubmitReq(); 41 request.outRequestNo = "APPLYMENT_00000000001"; 42 request.organizationType = "2"; 43 request.financeInstitution = true; 44 request.businessLicenseInfo = new BusinessLicense(); 45 request.businessLicenseInfo.certType = CertificateType.CERTIFICATE_TYPE_2388; 46 request.businessLicenseInfo.businessLicenseCopy = "47ZC6GC-vnrbEny__Ie_An5-tCpqxucuxi-vByf3Gjm7KE53JXvGy9tqZm2XAUf-4KGprrKhpVBDIUv0OF4wFNIO4kqg05InE4d2I6_H7I4"; 47 request.businessLicenseInfo.businessLicenseNumber = "123456789012345678"; 48 request.businessLicenseInfo.merchantName = "腾讯科技有限公司"; 49 request.businessLicenseInfo.legalPerson = "张三"; 50 request.businessLicenseInfo.companyAddress = "深圳南山区科苑路"; 51 request.businessLicenseInfo.businessTime = "[\\\"2014-01-01\\\",\\\"长期\\\"]"; 52 request.financeInstitutionInfo = new FinanceInstitutionInfo(); 53 request.financeInstitutionInfo.financeType = FinanceType.BANK_AGENT; 54 request.financeInstitutionInfo.financeLicensePics = new ArrayList<>(); 55 { 56 request.financeInstitutionInfo.financeLicensePics.add("example_financeLicensePics"); 57 }; 58 request.idHolderType = IdHolderType.LEGAL; 59 request.idDocType = IdentificationType.IDENTIFICATION_TYPE_MACAO; 60 request.authorizeLetterCopy = "47ZC6GC-vnrbEny_Ie_An5-tCpqxucuxi-vByf3Gjm7KEIUv0OF4wFNIO4kqg05InE4d2I6_H7I4"; 61 request.idCardInfo = new IdCardInfo(); 62 request.idCardInfo.idCardCopy = "jTpGmxUX3FBWVQ5NJTZvlKX_gdU4cRz7z5NxpnFuAxhBTEO_PvWkfSCJ3zVIn001D8daLC-ehEuo0BJqRTvDujqhThn4ReFxikqJ5YW6zFQ"; 63 request.idCardInfo.idCardNational = "47ZC6GC-vnrbEny__Ie_An5-tCpqxucuxi-vByf3Gjm7KE53JXvGy9tqZm2XAUf-4KGprrKhpVBDIUv0OF4wFNIO4kqg05InE4d2I6_H7I4"; 64 request.idCardInfo.idCardName = client.encrypt("id_card_name"); 65 request.idCardInfo.idCardNumber = client.encrypt("id_card_number"); 66 request.idCardInfo.idCardValidTimeBegin = "2019-06-06"; 67 request.idCardInfo.idCardValidTime = "2026-06-06"; 68 request.idDocInfo = new IdDocInfo(); 69 request.idDocInfo.idDocName = client.encrypt("id_doc_name"); 70 request.idDocInfo.idDocNumber = client.encrypt("id_doc_number"); 71 request.idDocInfo.idDocCopy = "47ZC6GC-vnrbEny__Ie_An5-tCpqxucuxi-vByf3Gjm7KE53JXvGy9tqZm2XAUf-4KGprrKhpVBDIUv0OF4wFNIO4kqg05InE4d2I6_H7I4"; 72 request.idDocInfo.idDocCopyBack = "47ZC6GC-vnrbEny__Ie_An5-tCpqxucuxi-vByf3Gjm7KE53JXvGy9tqZm2XAUf-4KGprrKhpVBDIUv0OF4wFNIO4kqg05InE4d2I6_H7I4"; 73 request.idDocInfo.docPeriodBegin = "2019-06-06"; 74 request.idDocInfo.docPeriodEnd = "2020-01-02"; 75 request.owner = true; 76 request.accountInfo = new AccountInfo(); 77 request.accountInfo.bankAccountType = "75"; 78 request.accountInfo.accountBank = "工商银行"; 79 request.accountInfo.accountName = client.encrypt("account_name"); 80 request.accountInfo.bankAddressCode = "110000"; 81 request.accountInfo.bankBranchId = "402713354941"; 82 request.accountInfo.bankName = "施秉县农村信用合作联社城关信用社"; 83 request.accountInfo.accountNumber = client.encrypt("account_number"); 84 request.contactInfo = new ContactInfo(); 85 request.contactInfo.contactType = "65"; 86 request.contactInfo.contactName = client.encrypt("contact_name"); 87 request.contactInfo.contactIdDocType = IdentificationType.IDENTIFICATION_TYPE_MACAO; 88 request.contactInfo.contactIdCardNumber = client.encrypt("contact_id_card_number"); 89 request.contactInfo.contactIdDocCopy = "jTpGmxUX3FBWVQ5NJTZvvDujqhThn4ReFxikqJ5YW6zFQ"; 90 request.contactInfo.contactIdDocCopyBack = "jTpGmxUX3FBWVQ5NJTZvvDujqhThn4ReFxikqJ5YW6zFQ"; 91 request.contactInfo.contactIdDocPeriodBegin = "2019-06-06"; 92 request.contactInfo.contactIdDocPeriodEnd = "2026-06-06"; 93 request.contactInfo.businessAuthorizationLetter = "47ZC6GC-vnrbEny_Ie_An5-tCpqxucuxi-vByf3Gjm7KEIUv0OF4wFNIO4kqg05InE4d2I6_H7I4"; 94 request.contactInfo.mobilePhone = client.encrypt("mobile_phone"); 95 request.salesSceneInfo = new SalesSceneInfo(); 96 request.salesSceneInfo.storeName = "爱烧烤"; 97 request.salesSceneInfo.storeUrl = "http://www.qq.com"; 98 request.salesSceneInfo.storeQrCode = "jTpGmxUX3FBWVQ5NJTZvlKX_gdU4cRz7z5NxpnFuAxhBTEO_PvWkfSCJ3zVIn001D8daLC-ehEuo0BJqRTvDujqhThn4ReFxikqJ5YW6zFQ"; 99 request.salesSceneInfo.miniProgramSubAppid = "wxa123344545577"; 100 request.settlementInfo = new SettlementInfo(); 101 request.settlementInfo.settlementId = 719L; 102 request.settlementInfo.qualificationType = "零售批发/生活娱乐/其他"; 103 request.merchantShortname = "腾讯"; 104 request.qualifications = "[\\\"jTpGmxUX3FBWVQ5NJTZvlKX_gdU4cRz7z5NxpnFuAxhBTEO_PvWkfSCJ3zVIn001D8daLC-ehEuo0BJqRTvDujqhThn4ReFxikqJ5YW6zFQ\\\",\\\"47ZC6GC-vnrbEny__Ie_An5-tCpqxucuxi-vByf3Gjm7KE53JXvGy9tqZm2XAUf-4KGprrKhpVBDIUv0OF4wFNIO4kqg05InE4d2I6_H7I4\\\"]"; 105 request.businessAdditionPics = "[\\\"jTpGmxUX3FBWVQ5NJTZvlKX_gdU4cRz7z5NxpnFuAxhBTEO_PvWkfSCJ3zVIn001D8daLC-ehEuo0BJqRTvDujqhThn4ReFxikqJ5YW6zFQ\\\",\\\"47ZC6GC-vnrbEny__Ie_An5-tCpqxucuxi-vByf3Gjm7KE53JXvGy9tqZm2XAUf-4KGprrKhpVBDIUv0OF4wFNIO4kqg05InE4d2I6_H7I4\\\"]"; 106 request.businessAdditionDesc = "特殊情况,说明原因"; 107 request.uboInfoList = new ArrayList<>(); 108 { 109 UBOInfo uboInfoListItem = new UBOInfo(); 110 uboInfoListItem.uboIdDocType = IdentificationType.IDENTIFICATION_TYPE_MAINLAND_IDCARD; 111 uboInfoListItem.uboIdDocCopy = "jTpGmxUXqRTvDujqhThn4ReFxikqJ5YW6zFQ"; 112 uboInfoListItem.uboIdDocCopyBack = "jTpGmxUX3FBWVQ5NJTZvvDujqhThn4ReFxikqJ5YW6zFQ"; 113 uboInfoListItem.uboIdDocName = client.encrypt("ubo_id_doc_name"); 114 uboInfoListItem.uboIdDocNumber = client.encrypt("ubo_id_doc_number"); 115 uboInfoListItem.uboIdDocAddress = client.encrypt("ubo_id_doc_address"); 116 uboInfoListItem.uboIdDocPeriodBegin = "2019-06-06"; 117 uboInfoListItem.uboIdDocPeriodEnd = "2026-06-06"; 118 request.uboInfoList.add(uboInfoListItem); 119 }; 120 try { 121 SubmitResp response = client.run(request); 122 // TODO: 请求成功,继续业务逻辑 123 System.out.println(response); 124 } catch (WXPayUtility.ApiException e) { 125 // TODO: 请求失败,根据状态码执行不同的逻辑 126 e.printStackTrace(); 127 } 128 } 129 130 public SubmitResp run(SubmitReq request) { 131 String uri = PATH; 132 String reqBody = WXPayUtility.toJson(request); 133 134 Request.Builder reqBuilder = new Request.Builder().url(HOST + uri); 135 reqBuilder.addHeader("Accept", "application/json"); 136 reqBuilder.addHeader("Wechatpay-Serial", wechatPayPublicKeyId); 137 reqBuilder.addHeader("Authorization", WXPayUtility.buildAuthorization(mchid, certificateSerialNo,privateKey, METHOD, uri, reqBody)); 138 reqBuilder.addHeader("Content-Type", "application/json"); 139 RequestBody requestBody = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), reqBody); 140 reqBuilder.method(METHOD, requestBody); 141 Request httpRequest = reqBuilder.build(); 142 143 // 发送HTTP请求 144 OkHttpClient client = new OkHttpClient.Builder().build(); 145 try (Response httpResponse = client.newCall(httpRequest).execute()) { 146 String respBody = WXPayUtility.extractBody(httpResponse); 147 if (httpResponse.code() >= 200 && httpResponse.code() < 300) { 148 // 2XX 成功,验证应答签名 149 WXPayUtility.validateResponse(this.wechatPayPublicKeyId, this.wechatPayPublicKey, 150 httpResponse.headers(), respBody); 151 152 // 从HTTP应答报文构建返回数据 153 return WXPayUtility.fromJson(respBody, SubmitResp.class); 154 } else { 155 throw new WXPayUtility.ApiException(httpResponse.code(), respBody, httpResponse.headers()); 156 } 157 } catch (IOException e) { 158 throw new UncheckedIOException("Sending request to " + uri + " failed.", e); 159 } 160 } 161 162 private final String mchid; 163 private final String certificateSerialNo; 164 private final PrivateKey privateKey; 165 private final String wechatPayPublicKeyId; 166 private final PublicKey wechatPayPublicKey; 167 168 public SubmitApplyment(String mchid, String certificateSerialNo, String privateKeyFilePath, String wechatPayPublicKeyId, String wechatPayPublicKeyFilePath) { 169 this.mchid = mchid; 170 this.certificateSerialNo = certificateSerialNo; 171 this.privateKey = WXPayUtility.loadPrivateKeyFromPath(privateKeyFilePath); 172 this.wechatPayPublicKeyId = wechatPayPublicKeyId; 173 this.wechatPayPublicKey = WXPayUtility.loadPublicKeyFromPath(wechatPayPublicKeyFilePath); 174 } 175 176 public String encrypt(String plainText) { 177 return WXPayUtility.encrypt(this.wechatPayPublicKey, plainText); 178 } 179 180 public static class SubmitReq { 181 @SerializedName("out_request_no") 182 public String outRequestNo; 183 184 @SerializedName("organization_type") 185 public String organizationType; 186 187 @SerializedName("finance_institution") 188 public Boolean financeInstitution; 189 190 @SerializedName("business_license_info") 191 public BusinessLicense businessLicenseInfo; 192 193 @SerializedName("finance_institution_info") 194 public FinanceInstitutionInfo financeInstitutionInfo; 195 196 @SerializedName("id_holder_type") 197 public IdHolderType idHolderType; 198 199 @SerializedName("id_doc_type") 200 public IdentificationType idDocType; 201 202 @SerializedName("authorize_letter_copy") 203 public String authorizeLetterCopy; 204 205 @SerializedName("id_card_info") 206 public IdCardInfo idCardInfo; 207 208 @SerializedName("id_doc_info") 209 public IdDocInfo idDocInfo; 210 211 @SerializedName("owner") 212 public Boolean owner; 213 214 @SerializedName("account_info") 215 public AccountInfo accountInfo; 216 217 @SerializedName("contact_info") 218 public ContactInfo contactInfo; 219 220 @SerializedName("sales_scene_info") 221 public SalesSceneInfo salesSceneInfo; 222 223 @SerializedName("settlement_info") 224 public SettlementInfo settlementInfo; 225 226 @SerializedName("merchant_shortname") 227 public String merchantShortname; 228 229 @SerializedName("qualifications") 230 public String qualifications; 231 232 @SerializedName("business_addition_pics") 233 public String businessAdditionPics; 234 235 @SerializedName("business_addition_desc") 236 public String businessAdditionDesc; 237 238 @SerializedName("ubo_info_list") 239 public List<UBOInfo> uboInfoList; 240 } 241 242 public static class SubmitResp { 243 @SerializedName("applyment_id") 244 public Long applymentId; 245 246 @SerializedName("out_request_no") 247 public String outRequestNo; 248 } 249 250 public static class BusinessLicense { 251 @SerializedName("cert_type") 252 public CertificateType certType; 253 254 @SerializedName("business_license_copy") 255 public String businessLicenseCopy; 256 257 @SerializedName("business_license_number") 258 public String businessLicenseNumber; 259 260 @SerializedName("merchant_name") 261 public String merchantName; 262 263 @SerializedName("legal_person") 264 public String legalPerson; 265 266 @SerializedName("company_address") 267 public String companyAddress; 268 269 @SerializedName("business_time") 270 public String businessTime; 271 } 272 273 public static class FinanceInstitutionInfo { 274 @SerializedName("finance_type") 275 public FinanceType financeType; 276 277 @SerializedName("finance_license_pics") 278 public List<String> financeLicensePics = new ArrayList<String>(); 279 } 280 281 public enum IdHolderType { 282 @SerializedName("LEGAL") 283 LEGAL, 284 @SerializedName("SUPER") 285 SUPER 286 } 287 288 public enum IdentificationType { 289 @SerializedName("IDENTIFICATION_TYPE_MAINLAND_IDCARD") 290 IDENTIFICATION_TYPE_MAINLAND_IDCARD, 291 @SerializedName("IDENTIFICATION_TYPE_OVERSEA_PASSPORT") 292 IDENTIFICATION_TYPE_OVERSEA_PASSPORT, 293 @SerializedName("IDENTIFICATION_TYPE_HONGKONG") 294 IDENTIFICATION_TYPE_HONGKONG, 295 @SerializedName("IDENTIFICATION_TYPE_MACAO") 296 IDENTIFICATION_TYPE_MACAO, 297 @SerializedName("IDENTIFICATION_TYPE_TAIWAN") 298 IDENTIFICATION_TYPE_TAIWAN, 299 @SerializedName("IDENTIFICATION_TYPE_FOREIGN_RESIDENT") 300 IDENTIFICATION_TYPE_FOREIGN_RESIDENT, 301 @SerializedName("IDENTIFICATION_TYPE_HONGKONG_MACAO_RESIDENT") 302 IDENTIFICATION_TYPE_HONGKONG_MACAO_RESIDENT, 303 @SerializedName("IDENTIFICATION_TYPE_TAIWAN_RESIDENT") 304 IDENTIFICATION_TYPE_TAIWAN_RESIDENT 305 } 306 307 public static class IdCardInfo { 308 @SerializedName("id_card_copy") 309 public String idCardCopy; 310 311 @SerializedName("id_card_national") 312 public String idCardNational; 313 314 @SerializedName("id_card_name") 315 public String idCardName; 316 317 @SerializedName("id_card_number") 318 public String idCardNumber; 319 320 @SerializedName("id_card_valid_time_begin") 321 public String idCardValidTimeBegin; 322 323 @SerializedName("id_card_valid_time") 324 public String idCardValidTime; 325 } 326 327 public static class IdDocInfo { 328 @SerializedName("id_doc_name") 329 public String idDocName; 330 331 @SerializedName("id_doc_number") 332 public String idDocNumber; 333 334 @SerializedName("id_doc_copy") 335 public String idDocCopy; 336 337 @SerializedName("id_doc_copy_back") 338 public String idDocCopyBack; 339 340 @SerializedName("doc_period_begin") 341 public String docPeriodBegin; 342 343 @SerializedName("doc_period_end") 344 public String docPeriodEnd; 345 } 346 347 public static class AccountInfo { 348 @SerializedName("bank_account_type") 349 public String bankAccountType; 350 351 @SerializedName("account_bank") 352 public String accountBank; 353 354 @SerializedName("account_name") 355 public String accountName; 356 357 @SerializedName("bank_address_code") 358 public String bankAddressCode; 359 360 @SerializedName("bank_branch_id") 361 public String bankBranchId; 362 363 @SerializedName("bank_name") 364 public String bankName; 365 366 @SerializedName("account_number") 367 public String accountNumber; 368 } 369 370 public static class ContactInfo { 371 @SerializedName("contact_type") 372 public String contactType; 373 374 @SerializedName("contact_name") 375 public String contactName; 376 377 @SerializedName("contact_id_doc_type") 378 public IdentificationType contactIdDocType; 379 380 @SerializedName("contact_id_card_number") 381 public String contactIdCardNumber; 382 383 @SerializedName("contact_id_doc_copy") 384 public String contactIdDocCopy; 385 386 @SerializedName("contact_id_doc_copy_back") 387 public String contactIdDocCopyBack; 388 389 @SerializedName("contact_id_doc_period_begin") 390 public String contactIdDocPeriodBegin; 391 392 @SerializedName("contact_id_doc_period_end") 393 public String contactIdDocPeriodEnd; 394 395 @SerializedName("business_authorization_letter") 396 public String businessAuthorizationLetter; 397 398 @SerializedName("mobile_phone") 399 public String mobilePhone; 400 } 401 402 public static class SalesSceneInfo { 403 @SerializedName("store_name") 404 public String storeName; 405 406 @SerializedName("store_url") 407 public String storeUrl; 408 409 @SerializedName("store_qr_code") 410 public String storeQrCode; 411 412 @SerializedName("mini_program_sub_appid") 413 public String miniProgramSubAppid; 414 } 415 416 public static class SettlementInfo { 417 @SerializedName("settlement_id") 418 public Long settlementId; 419 420 @SerializedName("qualification_type") 421 public String qualificationType; 422 } 423 424 public static class UBOInfo { 425 @SerializedName("ubo_id_doc_type") 426 public IdentificationType uboIdDocType; 427 428 @SerializedName("ubo_id_doc_copy") 429 public String uboIdDocCopy; 430 431 @SerializedName("ubo_id_doc_copy_back") 432 public String uboIdDocCopyBack; 433 434 @SerializedName("ubo_id_doc_name") 435 public String uboIdDocName; 436 437 @SerializedName("ubo_id_doc_number") 438 public String uboIdDocNumber; 439 440 @SerializedName("ubo_id_doc_address") 441 public String uboIdDocAddress; 442 443 @SerializedName("ubo_id_doc_period_begin") 444 public String uboIdDocPeriodBegin; 445 446 @SerializedName("ubo_id_doc_period_end") 447 public String uboIdDocPeriodEnd; 448 } 449 450 public enum CertificateType { 451 @SerializedName("CERTIFICATE_TYPE_2388") 452 CERTIFICATE_TYPE_2388, 453 @SerializedName("CERTIFICATE_TYPE_2389") 454 CERTIFICATE_TYPE_2389, 455 @SerializedName("CERTIFICATE_TYPE_2394") 456 CERTIFICATE_TYPE_2394, 457 @SerializedName("CERTIFICATE_TYPE_2395") 458 CERTIFICATE_TYPE_2395, 459 @SerializedName("CERTIFICATE_TYPE_2396") 460 CERTIFICATE_TYPE_2396, 461 @SerializedName("CERTIFICATE_TYPE_2399") 462 CERTIFICATE_TYPE_2399, 463 @SerializedName("CERTIFICATE_TYPE_2400") 464 CERTIFICATE_TYPE_2400, 465 @SerializedName("CERTIFICATE_TYPE_2520") 466 CERTIFICATE_TYPE_2520, 467 @SerializedName("CERTIFICATE_TYPE_2521") 468 CERTIFICATE_TYPE_2521, 469 @SerializedName("CERTIFICATE_TYPE_2522") 470 CERTIFICATE_TYPE_2522 471 } 472 473 public enum FinanceType { 474 @SerializedName("BANK_AGENT") 475 BANK_AGENT, 476 @SerializedName("PAYMENT_AGENT") 477 PAYMENT_AGENT, 478 @SerializedName("INSURANCE") 479 INSURANCE, 480 @SerializedName("TRADE_AND_SETTLE") 481 TRADE_AND_SETTLE, 482 @SerializedName("OTHER") 483 OTHER 484 } 485 486} 487
需配合微信支付工具库 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 := &SubmitReq{ 27 OutRequestNo: wxpay_utility.String("APPLYMENT_00000000001"), 28 OrganizationType: wxpay_utility.String("2"), 29 FinanceInstitution: wxpay_utility.Bool(true), 30 BusinessLicenseInfo: &BusinessLicense{ 31 CertType: CERTIFICATETYPE_CERTIFICATE_TYPE_2388.Ptr(), 32 BusinessLicenseCopy: wxpay_utility.String("47ZC6GC-vnrbEny__Ie_An5-tCpqxucuxi-vByf3Gjm7KE53JXvGy9tqZm2XAUf-4KGprrKhpVBDIUv0OF4wFNIO4kqg05InE4d2I6_H7I4"), 33 BusinessLicenseNumber: wxpay_utility.String("123456789012345678"), 34 MerchantName: wxpay_utility.String("腾讯科技有限公司"), 35 LegalPerson: wxpay_utility.String("张三"), 36 CompanyAddress: wxpay_utility.String("深圳南山区科苑路"), 37 BusinessTime: wxpay_utility.String("[\"2014-01-01\",\"长期\"]"), 38 }, 39 FinanceInstitutionInfo: &FinanceInstitutionInfo{ 40 FinanceType: FINANCETYPE_BANK_AGENT.Ptr(), 41 FinanceLicensePics: []string{"example_FinanceLicensePics"}, 42 }, 43 IdHolderType: IDHOLDERTYPE_LEGAL.Ptr(), 44 IdDocType: IDENTIFICATIONTYPE_IDENTIFICATION_TYPE_MACAO.Ptr(), 45 AuthorizeLetterCopy: wxpay_utility.String("47ZC6GC-vnrbEny_Ie_An5-tCpqxucuxi-vByf3Gjm7KEIUv0OF4wFNIO4kqg05InE4d2I6_H7I4"), 46 IdCardInfo: &IdCardInfo{ 47 IdCardCopy: wxpay_utility.String("jTpGmxUX3FBWVQ5NJTZvlKX_gdU4cRz7z5NxpnFuAxhBTEO_PvWkfSCJ3zVIn001D8daLC-ehEuo0BJqRTvDujqhThn4ReFxikqJ5YW6zFQ"), 48 IdCardNational: wxpay_utility.String("47ZC6GC-vnrbEny__Ie_An5-tCpqxucuxi-vByf3Gjm7KE53JXvGy9tqZm2XAUf-4KGprrKhpVBDIUv0OF4wFNIO4kqg05InE4d2I6_H7I4"), 49 IdCardName: wxpay_utility.String("pVd1HJ6zyvPedzGaV+X3qtmrq9bb9tPROvwia4ibL+F6mfjbzQIzfb3HHLEjZ4YiR/cJiCrZxnAqi+pjeKIEdkwzXRAI7FUhrfPK3SNjaBTEu9GmsugMIA9r3x887Q+ODuC8HH2nzAn7NGpE/e3yiHgWhk0ps5k5DP/2qIdGdONoDzZelrxCl/NWWNUyB93K9F+jC1JX2IMttdY+aQ6zBlw0xnOiNW6Hzy7UtC+xriudjD5APomty7/mYNxLMpRSvWKIjOv/69bDnuC4EL5Kz4jBHLiCyOb+tI0m2qhZ9evAM+Jv1z0NVa8MRtelw/wDa4SzfeespQO/0kjiwfqdfg=="), /*请传入 wxpay_utility.EncryptOAEPWithPublicKey 加密结果*/ 50 IdCardNumber: wxpay_utility.String("AOZdYGISxo4y44/UgZ69bdu9X+tfMUJ9dl+LetjM45/zMbrYu+wWZ8gn4CTdo+D/m9MrPg+V4sm73oxqdQu/hj7aWyDl4GQtPXVdaztB9jVbVZh3QFzV+BEmytMNQp9dt1uWJktlfdDdLR3AMWyMB377xd+m9bSr/ioDTzagEcGe+vLYiKrzcroQv3OR0p3ppFYoQ3IfYeU/04S4t9rNFL+kyblK2FCCqQ11NdbbHoCrJc7NV4oASq6ZFonjTtgjjgKsadIKHXtb3JZKGZjduGdtkRJJp0/0eow96uY1Pk7Rq79Jtt7+I8juwEc4P4TG5xzchG/5IL9DBd+Z0zZXkw=="), /*请传入 wxpay_utility.EncryptOAEPWithPublicKey 加密结果*/ 51 IdCardValidTimeBegin: wxpay_utility.String("2019-06-06"), 52 IdCardValidTime: wxpay_utility.String("2026-06-06"), 53 }, 54 IdDocInfo: &IdDocInfo{ 55 IdDocName: wxpay_utility.String("jTpGmxUX3FBWVQ5NJTZvlKX_gdU4cRz7z5NxpnFuAxhBTEO_PvWkfSCJ3zVIn001D8daLC-ehEuo0BJqRTvDujqhThn4ReFxikqJ5YW6zFQ"), /*请传入 wxpay_utility.EncryptOAEPWithPublicKey 加密结果*/ 56 IdDocNumber: wxpay_utility.String("jTpGmxUX3FBWVQ5NJTZvlKX_gdU4cRz7z5NxpnFuAxhBTEO_PvWkfSCJ3zVIn001D8daLC-ehEuo0BJqRTvDujqhThn4ReFxikqJ5YW6zFQ"), /*请传入 wxpay_utility.EncryptOAEPWithPublicKey 加密结果*/ 57 IdDocCopy: wxpay_utility.String("47ZC6GC-vnrbEny__Ie_An5-tCpqxucuxi-vByf3Gjm7KE53JXvGy9tqZm2XAUf-4KGprrKhpVBDIUv0OF4wFNIO4kqg05InE4d2I6_H7I4"), 58 IdDocCopyBack: wxpay_utility.String("47ZC6GC-vnrbEny__Ie_An5-tCpqxucuxi-vByf3Gjm7KE53JXvGy9tqZm2XAUf-4KGprrKhpVBDIUv0OF4wFNIO4kqg05InE4d2I6_H7I4"), 59 DocPeriodBegin: wxpay_utility.String("2019-06-06"), 60 DocPeriodEnd: wxpay_utility.String("2020-01-02"), 61 }, 62 Owner: wxpay_utility.Bool(true), 63 AccountInfo: &AccountInfo{ 64 BankAccountType: wxpay_utility.String("75"), 65 AccountBank: wxpay_utility.String("工商银行"), 66 AccountName: wxpay_utility.String("AOZdYGISxo4y44/UgZ69bdu9X+tfMUJ9dl+LetjM45/zMbrYu+wWZ8gn4CTdo+D/m9MrPg+V4sm73oxqdQu/hj7aWyDl4GQtPXVdaztB9jVbVZh3QFzV+BEmytMNQp9dt1uWJktlfdDdLR3AMWyMB377xd+m9bSr/ioDTzagEcGe+vLYiKrzcroQv3OR0p3ppFYoQ3IfYeU/04S4t9rNFL+kyblK2FCCqQ11NdbbHoCrJc7NV4oASq6ZFonjTtgjjgKsadIKHXtb3JZKGZjduGdtkRJJp0/0eow96uY1Pk7Rq79Jtt7+I8juwEc4P4TG5xzchG/5IL9DBd+Z0zZXkw=="), /*请传入 wxpay_utility.EncryptOAEPWithPublicKey 加密结果*/ 67 BankAddressCode: wxpay_utility.String("110000"), 68 BankBranchId: wxpay_utility.String("402713354941"), 69 BankName: wxpay_utility.String("施秉县农村信用合作联社城关信用社"), 70 AccountNumber: wxpay_utility.String("d+xT+MQCvrLHUVDWv/8MR/dB7TkXM2YYZlokmXzFsWs35NXUot7C0NcxIrUF5FnxqCJHkNgKtxa6RxEYyba1+VBRLnqKG2fSy/Y5qDN08Ej9zHCwJjq52Wg1VG8MRugli9YMI1fI83KGBxhuXyemgS/hqFKsfYGiOkJqjTUpgY5VqjtL2N4l4z11T0ECB/aSyVXUysOFGLVfSrUxMPZy6jWWYGvT1+4P633f+R+ki1gT4WF/2KxZOYmli385ZgVhcR30mr4/G3HBcxi13zp7FnEeOsLlvBmI1PHN4C7Rsu3WL8sPndjXTd75kPkyjqnoMRrEEaYQE8ZRGYoeorwC+w=="), /*请传入 wxpay_utility.EncryptOAEPWithPublicKey 加密结果*/ 71 }, 72 ContactInfo: &ContactInfo{ 73 ContactType: wxpay_utility.String("65"), 74 ContactName: wxpay_utility.String("pVd1HJ6zyvPedzGaV+X3qtmrq9bb9tPROvwia4ibL+F6mfjbzQIzfb3HHLEjZ4YiR/cJiCrZxnAqi+pjeKIEdkwzXRAI7FUhrfPK3SNjaBTEu9GmsugMIA9r3x887Q+ODuC8HH2nzAn7NGpE/e3yiHgWhk0ps5k5DP/2qIdGdONoDzZelrxCl/NWWNUyB93K9F+jC1JX2IMttdY+aQ6zBlw0xnOiNW6Hzy7UtC+xriudjD5APomty7/mYNxLMpRSvWKIjOv/69bDnuC4EL5Kz4jBHLiCyOb+tI0m2qhZ9evAM+Jv1z0NVa8MRtelw/wDa4SzfeespQO/0kjiwfqdfg=="), /*请传入 wxpay_utility.EncryptOAEPWithPublicKey 加密结果*/ 75 ContactIdDocType: IDENTIFICATIONTYPE_IDENTIFICATION_TYPE_MACAO.Ptr(), 76 ContactIdCardNumber: wxpay_utility.String("pVd1HJ6zyvPedzGaV+X3qtmrq9bb9tPROvwia4ibL+F6mfjbzQIzfb3HHLEjZ4YiR/cJiCrZxnAqi+pjeKIEdkwzXRAI7FUhrfPK3SNjaBTEu9GmsugMIA9r3x887Q+ODuC8HH2nzAn7NGpE/e3yiHgWhk0ps5k5DP/2qIdGdONoDzZelrxCl/NWWNUyB93K9F+jC1JX2IMttdY+aQ6zBlw0xnOiNW6Hzy7UtC+xriudjD5APomty7/mYNxLMpRSvWKIjOv/69bDnuC4EL5Kz4jBHLiCyOb+tI0m2qhZ9evAM+Jv1z0NVa8MRtelw/wDa4SzfeespQO/0kjiwfqdfg=="), /*请传入 wxpay_utility.EncryptOAEPWithPublicKey 加密结果*/ 77 ContactIdDocCopy: wxpay_utility.String("jTpGmxUX3FBWVQ5NJTZvvDujqhThn4ReFxikqJ5YW6zFQ"), 78 ContactIdDocCopyBack: wxpay_utility.String("jTpGmxUX3FBWVQ5NJTZvvDujqhThn4ReFxikqJ5YW6zFQ"), 79 ContactIdDocPeriodBegin: wxpay_utility.String("2019-06-06"), 80 ContactIdDocPeriodEnd: wxpay_utility.String("2026-06-06"), 81 BusinessAuthorizationLetter: wxpay_utility.String("47ZC6GC-vnrbEny_Ie_An5-tCpqxucuxi-vByf3Gjm7KEIUv0OF4wFNIO4kqg05InE4d2I6_H7I4"), 82 MobilePhone: wxpay_utility.String("pVd1HJ6zyvPedzGaV+X3qtmrq9bb9tPROvwia4ibL+F6mfjbzQIzfb3HHLEjZ4YiR/cJiCrZxnAqi+pjeKIEdkwzXRAI7FUhrfPK3SNjaBTEu9GmsugMIA9r3x887Q+ODuC8HH2nzAn7NGpE/e3yiHgWhk0ps5k5DP/2qIdGdONoDzZelrxCl/NWWNUyB93K9F+jC1JX2IMttdY+aQ6zBlw0xnOiNW6Hzy7UtC+xriudjD5APomty7/mYNxLMpRSvWKIjOv/69bDnuC4EL5Kz4jBHLiCyOb+tI0m2qhZ9evAM+Jv1z0NVa8MRtelw/wDa4SzfeespQO/0kjiwfqdfg=="), /*请传入 wxpay_utility.EncryptOAEPWithPublicKey 加密结果*/ 83 }, 84 SalesSceneInfo: &SalesSceneInfo{ 85 StoreName: wxpay_utility.String("爱烧烤"), 86 StoreUrl: wxpay_utility.String("http://www.qq.com"), 87 StoreQrCode: wxpay_utility.String("jTpGmxUX3FBWVQ5NJTZvlKX_gdU4cRz7z5NxpnFuAxhBTEO_PvWkfSCJ3zVIn001D8daLC-ehEuo0BJqRTvDujqhThn4ReFxikqJ5YW6zFQ"), 88 MiniProgramSubAppid: wxpay_utility.String("wxa123344545577"), 89 }, 90 SettlementInfo: &SettlementInfo{ 91 SettlementId: wxpay_utility.Int64(719), 92 QualificationType: wxpay_utility.String("零售批发/生活娱乐/其他"), 93 }, 94 MerchantShortname: wxpay_utility.String("腾讯"), 95 Qualifications: wxpay_utility.String("[\"jTpGmxUX3FBWVQ5NJTZvlKX_gdU4cRz7z5NxpnFuAxhBTEO_PvWkfSCJ3zVIn001D8daLC-ehEuo0BJqRTvDujqhThn4ReFxikqJ5YW6zFQ\",\"47ZC6GC-vnrbEny__Ie_An5-tCpqxucuxi-vByf3Gjm7KE53JXvGy9tqZm2XAUf-4KGprrKhpVBDIUv0OF4wFNIO4kqg05InE4d2I6_H7I4\"]"), 96 BusinessAdditionPics: wxpay_utility.String("[\"jTpGmxUX3FBWVQ5NJTZvlKX_gdU4cRz7z5NxpnFuAxhBTEO_PvWkfSCJ3zVIn001D8daLC-ehEuo0BJqRTvDujqhThn4ReFxikqJ5YW6zFQ\",\"47ZC6GC-vnrbEny__Ie_An5-tCpqxucuxi-vByf3Gjm7KE53JXvGy9tqZm2XAUf-4KGprrKhpVBDIUv0OF4wFNIO4kqg05InE4d2I6_H7I4\"]"), 97 BusinessAdditionDesc: wxpay_utility.String("特殊情况,说明原因"), 98 UboInfoList: []UboInfo{UboInfo{ 99 UboIdDocType: IDENTIFICATIONTYPE_IDENTIFICATION_TYPE_MAINLAND_IDCARD.Ptr(), 100 UboIdDocCopy: wxpay_utility.String("jTpGmxUXqRTvDujqhThn4ReFxikqJ5YW6zFQ"), 101 UboIdDocCopyBack: wxpay_utility.String("jTpGmxUX3FBWVQ5NJTZvvDujqhThn4ReFxikqJ5YW6zFQ"), 102 UboIdDocName: wxpay_utility.String("AOZdYGISxo4y44/Ug4P4TG5xzchG/5IL9DBd+Z0zZXkw=="), /*请传入 wxpay_utility.EncryptOAEPWithPublicKey 加密结果*/ 103 UboIdDocNumber: wxpay_utility.String("AOZdYGISxo4y44/Ug4P4TG5xzchG/5IL9DBd+Z0zZXkw=="), /*请传入 wxpay_utility.EncryptOAEPWithPublicKey 加密结果*/ 104 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 加密结果*/ 105 UboIdDocPeriodBegin: wxpay_utility.String("2019-06-06"), 106 UboIdDocPeriodEnd: wxpay_utility.String("2026-06-06"), 107 }}, 108 } 109 110 response, err := SubmitApplyment(config, request) 111 if err != nil { 112 fmt.Printf("请求失败: %+v\n", err) 113 // TODO: 请求失败,根据状态码执行不同的处理 114 return 115 } 116 117 // TODO: 请求成功,继续业务逻辑 118 fmt.Printf("请求成功: %+v\n", response) 119} 120 121func SubmitApplyment(config *wxpay_utility.MchConfig, request *SubmitReq) (response *SubmitResp, err error) { 122 const ( 123 host = "https://api.mch.weixin.qq.com" 124 method = "POST" 125 path = "/v3/ecommerce/applyments/" 126 ) 127 128 reqUrl, err := url.Parse(fmt.Sprintf("%s%s", host, path)) 129 if err != nil { 130 return nil, err 131 } 132 reqBody, err := json.Marshal(request) 133 if err != nil { 134 return nil, err 135 } 136 httpRequest, err := http.NewRequest(method, reqUrl.String(), bytes.NewReader(reqBody)) 137 if err != nil { 138 return nil, err 139 } 140 httpRequest.Header.Set("Accept", "application/json") 141 httpRequest.Header.Set("Wechatpay-Serial", config.WechatPayPublicKeyId()) 142 httpRequest.Header.Set("Content-Type", "application/json") 143 authorization, err := wxpay_utility.BuildAuthorization(config.MchId(), config.CertificateSerialNo(), config.PrivateKey(), method, reqUrl.RequestURI(), reqBody) 144 if err != nil { 145 return nil, err 146 } 147 httpRequest.Header.Set("Authorization", authorization) 148 149 client := &http.Client{} 150 httpResponse, err := client.Do(httpRequest) 151 if err != nil { 152 return nil, err 153 } 154 respBody, err := wxpay_utility.ExtractResponseBody(httpResponse) 155 if err != nil { 156 return nil, err 157 } 158 if httpResponse.StatusCode >= 200 && httpResponse.StatusCode < 300 { 159 // 2XX 成功,验证应答签名 160 err = wxpay_utility.ValidateResponse( 161 config.WechatPayPublicKeyId(), 162 config.WechatPayPublicKey(), 163 &httpResponse.Header, 164 respBody, 165 ) 166 if err != nil { 167 return nil, err 168 } 169 response := &SubmitResp{} 170 if err := json.Unmarshal(respBody, response); err != nil { 171 return nil, err 172 } 173 174 return response, nil 175 } else { 176 return nil, wxpay_utility.NewApiException( 177 httpResponse.StatusCode, 178 httpResponse.Header, 179 respBody, 180 ) 181 } 182} 183 184type SubmitReq struct { 185 OutRequestNo *string `json:"out_request_no,omitempty"` 186 OrganizationType *string `json:"organization_type,omitempty"` 187 FinanceInstitution *bool `json:"finance_institution,omitempty"` 188 BusinessLicenseInfo *BusinessLicense `json:"business_license_info,omitempty"` 189 FinanceInstitutionInfo *FinanceInstitutionInfo `json:"finance_institution_info,omitempty"` 190 IdHolderType *IdHolderType `json:"id_holder_type,omitempty"` 191 IdDocType *IdentificationType `json:"id_doc_type,omitempty"` 192 AuthorizeLetterCopy *string `json:"authorize_letter_copy,omitempty"` 193 IdCardInfo *IdCardInfo `json:"id_card_info,omitempty"` 194 IdDocInfo *IdDocInfo `json:"id_doc_info,omitempty"` 195 Owner *bool `json:"owner,omitempty"` 196 AccountInfo *AccountInfo `json:"account_info,omitempty"` 197 ContactInfo *ContactInfo `json:"contact_info,omitempty"` 198 SalesSceneInfo *SalesSceneInfo `json:"sales_scene_info,omitempty"` 199 SettlementInfo *SettlementInfo `json:"settlement_info,omitempty"` 200 MerchantShortname *string `json:"merchant_shortname,omitempty"` 201 Qualifications *string `json:"qualifications,omitempty"` 202 BusinessAdditionPics *string `json:"business_addition_pics,omitempty"` 203 BusinessAdditionDesc *string `json:"business_addition_desc,omitempty"` 204 UboInfoList []UboInfo `json:"ubo_info_list,omitempty"` 205} 206 207type SubmitResp struct { 208 ApplymentId *int64 `json:"applyment_id,omitempty"` 209 OutRequestNo *string `json:"out_request_no,omitempty"` 210} 211 212type BusinessLicense struct { 213 CertType *CertificateType `json:"cert_type,omitempty"` 214 BusinessLicenseCopy *string `json:"business_license_copy,omitempty"` 215 BusinessLicenseNumber *string `json:"business_license_number,omitempty"` 216 MerchantName *string `json:"merchant_name,omitempty"` 217 LegalPerson *string `json:"legal_person,omitempty"` 218 CompanyAddress *string `json:"company_address,omitempty"` 219 BusinessTime *string `json:"business_time,omitempty"` 220} 221 222type FinanceInstitutionInfo struct { 223 FinanceType *FinanceType `json:"finance_type,omitempty"` 224 FinanceLicensePics []string `json:"finance_license_pics,omitempty"` 225} 226 227type IdHolderType string 228 229func (e IdHolderType) Ptr() *IdHolderType { 230 return &e 231} 232 233const ( 234 IDHOLDERTYPE_LEGAL IdHolderType = "LEGAL" 235 IDHOLDERTYPE_SUPER IdHolderType = "SUPER" 236) 237 238type IdentificationType string 239 240func (e IdentificationType) Ptr() *IdentificationType { 241 return &e 242} 243 244const ( 245 IDENTIFICATIONTYPE_IDENTIFICATION_TYPE_MAINLAND_IDCARD IdentificationType = "IDENTIFICATION_TYPE_MAINLAND_IDCARD" 246 IDENTIFICATIONTYPE_IDENTIFICATION_TYPE_OVERSEA_PASSPORT IdentificationType = "IDENTIFICATION_TYPE_OVERSEA_PASSPORT" 247 IDENTIFICATIONTYPE_IDENTIFICATION_TYPE_HONGKONG IdentificationType = "IDENTIFICATION_TYPE_HONGKONG" 248 IDENTIFICATIONTYPE_IDENTIFICATION_TYPE_MACAO IdentificationType = "IDENTIFICATION_TYPE_MACAO" 249 IDENTIFICATIONTYPE_IDENTIFICATION_TYPE_TAIWAN IdentificationType = "IDENTIFICATION_TYPE_TAIWAN" 250 IDENTIFICATIONTYPE_IDENTIFICATION_TYPE_FOREIGN_RESIDENT IdentificationType = "IDENTIFICATION_TYPE_FOREIGN_RESIDENT" 251 IDENTIFICATIONTYPE_IDENTIFICATION_TYPE_HONGKONG_MACAO_RESIDENT IdentificationType = "IDENTIFICATION_TYPE_HONGKONG_MACAO_RESIDENT" 252 IDENTIFICATIONTYPE_IDENTIFICATION_TYPE_TAIWAN_RESIDENT IdentificationType = "IDENTIFICATION_TYPE_TAIWAN_RESIDENT" 253) 254 255type IdCardInfo struct { 256 IdCardCopy *string `json:"id_card_copy,omitempty"` 257 IdCardNational *string `json:"id_card_national,omitempty"` 258 IdCardName *string `json:"id_card_name,omitempty"` 259 IdCardNumber *string `json:"id_card_number,omitempty"` 260 IdCardValidTimeBegin *string `json:"id_card_valid_time_begin,omitempty"` 261 IdCardValidTime *string `json:"id_card_valid_time,omitempty"` 262} 263 264type IdDocInfo struct { 265 IdDocName *string `json:"id_doc_name,omitempty"` 266 IdDocNumber *string `json:"id_doc_number,omitempty"` 267 IdDocCopy *string `json:"id_doc_copy,omitempty"` 268 IdDocCopyBack *string `json:"id_doc_copy_back,omitempty"` 269 DocPeriodBegin *string `json:"doc_period_begin,omitempty"` 270 DocPeriodEnd *string `json:"doc_period_end,omitempty"` 271} 272 273type AccountInfo struct { 274 BankAccountType *string `json:"bank_account_type,omitempty"` 275 AccountBank *string `json:"account_bank,omitempty"` 276 AccountName *string `json:"account_name,omitempty"` 277 BankAddressCode *string `json:"bank_address_code,omitempty"` 278 BankBranchId *string `json:"bank_branch_id,omitempty"` 279 BankName *string `json:"bank_name,omitempty"` 280 AccountNumber *string `json:"account_number,omitempty"` 281} 282 283type ContactInfo struct { 284 ContactType *string `json:"contact_type,omitempty"` 285 ContactName *string `json:"contact_name,omitempty"` 286 ContactIdDocType *IdentificationType `json:"contact_id_doc_type,omitempty"` 287 ContactIdCardNumber *string `json:"contact_id_card_number,omitempty"` 288 ContactIdDocCopy *string `json:"contact_id_doc_copy,omitempty"` 289 ContactIdDocCopyBack *string `json:"contact_id_doc_copy_back,omitempty"` 290 ContactIdDocPeriodBegin *string `json:"contact_id_doc_period_begin,omitempty"` 291 ContactIdDocPeriodEnd *string `json:"contact_id_doc_period_end,omitempty"` 292 BusinessAuthorizationLetter *string `json:"business_authorization_letter,omitempty"` 293 MobilePhone *string `json:"mobile_phone,omitempty"` 294} 295 296type SalesSceneInfo struct { 297 StoreName *string `json:"store_name,omitempty"` 298 StoreUrl *string `json:"store_url,omitempty"` 299 StoreQrCode *string `json:"store_qr_code,omitempty"` 300 MiniProgramSubAppid *string `json:"mini_program_sub_appid,omitempty"` 301} 302 303type SettlementInfo struct { 304 SettlementId *int64 `json:"settlement_id,omitempty"` 305 QualificationType *string `json:"qualification_type,omitempty"` 306} 307 308type UboInfo struct { 309 UboIdDocType *IdentificationType `json:"ubo_id_doc_type,omitempty"` 310 UboIdDocCopy *string `json:"ubo_id_doc_copy,omitempty"` 311 UboIdDocCopyBack *string `json:"ubo_id_doc_copy_back,omitempty"` 312 UboIdDocName *string `json:"ubo_id_doc_name,omitempty"` 313 UboIdDocNumber *string `json:"ubo_id_doc_number,omitempty"` 314 UboIdDocAddress *string `json:"ubo_id_doc_address,omitempty"` 315 UboIdDocPeriodBegin *string `json:"ubo_id_doc_period_begin,omitempty"` 316 UboIdDocPeriodEnd *string `json:"ubo_id_doc_period_end,omitempty"` 317} 318 319type CertificateType string 320 321func (e CertificateType) Ptr() *CertificateType { 322 return &e 323} 324 325const ( 326 CERTIFICATETYPE_CERTIFICATE_TYPE_2388 CertificateType = "CERTIFICATE_TYPE_2388" 327 CERTIFICATETYPE_CERTIFICATE_TYPE_2389 CertificateType = "CERTIFICATE_TYPE_2389" 328 CERTIFICATETYPE_CERTIFICATE_TYPE_2394 CertificateType = "CERTIFICATE_TYPE_2394" 329 CERTIFICATETYPE_CERTIFICATE_TYPE_2395 CertificateType = "CERTIFICATE_TYPE_2395" 330 CERTIFICATETYPE_CERTIFICATE_TYPE_2396 CertificateType = "CERTIFICATE_TYPE_2396" 331 CERTIFICATETYPE_CERTIFICATE_TYPE_2399 CertificateType = "CERTIFICATE_TYPE_2399" 332 CERTIFICATETYPE_CERTIFICATE_TYPE_2400 CertificateType = "CERTIFICATE_TYPE_2400" 333 CERTIFICATETYPE_CERTIFICATE_TYPE_2520 CertificateType = "CERTIFICATE_TYPE_2520" 334 CERTIFICATETYPE_CERTIFICATE_TYPE_2521 CertificateType = "CERTIFICATE_TYPE_2521" 335 CERTIFICATETYPE_CERTIFICATE_TYPE_2522 CertificateType = "CERTIFICATE_TYPE_2522" 336) 337 338type FinanceType string 339 340func (e FinanceType) Ptr() *FinanceType { 341 return &e 342} 343 344const ( 345 FINANCETYPE_BANK_AGENT FinanceType = "BANK_AGENT" 346 FINANCETYPE_PAYMENT_AGENT FinanceType = "PAYMENT_AGENT" 347 FINANCETYPE_INSURANCE FinanceType = "INSURANCE" 348 FINANCETYPE_TRADE_AND_SETTLE FinanceType = "TRADE_AND_SETTLE" 349 FINANCETYPE_OTHER FinanceType = "OTHER" 350) 351
应答参数
200 OK
applyment_id 必填 integer
【微信支付申请单号】
微信支付分配的申请单号 。
out_request_no 必填 string
【业务申请编号】
服务商自定义的商户唯一编号。每个编号对应一个申请单,每个申请单审核通过后会生成一个微信支付商户号。
应答示例
200 OK
1{ 2 "applyment_id" : 2000002124775691, 3 "out_request_no" : "APPLYMENT_00000000001" 4} 5
错误码
公共错误码
状态码 | 错误码 | 描述 | 解决方案 |
---|---|---|---|
400 | PARAM_ERROR | 参数错误 | 请根据错误提示正确传入参数 |
400 | INVALID_REQUEST | HTTP 请求不符合微信支付 APIv3 接口规则 | 请参阅 接口规则 |
401 | SIGN_ERROR | 验证不通过 | 请参阅 签名常见问题 |
500 | SYSTEM_ERROR | 系统异常,请稍后重试 | 请稍后重试 |
业务错误码
状态码 | 错误码 | 描述 | 解决方案 |
---|---|---|---|
400 | RESOURCE_ALREADY_EXISTS | 存在流程进行中的申请单,请检查是否重入 | 可通过查询申请状态查看此申请单的申请状态,或更换out_request_no提交新的申请单 |
403 | NO_AUTH | 商户权限异常 | 请确认是否已经开通相关权限 |
404 | RESOURCE_NOT_EXISTS | 申请单不存在 | 确认入参,传入正确的申请单编号 |