提交申请单
更新时间:2025.03.26服务商(银行、支付机构、电商平台不可用)使用该接口提交商家资料,帮助商家入驻成为微信支付的特约商户。
流程指引请看:特约商户进件流程
|
接口说明
支持商户:【普通服务商】
请求方式:【POST】/v3/applyment4sub/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 包体参数
business_code 必填 string(124)
【业务申请编号 】
1、只能由数字、字母或下划线组成,建议前缀为服务商商户号;
2、服务商自定义的唯一编号;
3、每个编号对应一个申请单,每个申请单审核通过后会生成一个微信支付商户号。
contact_info 必填 object
【超级管理员信息】 超级管理员需在开户后进行签约,并可接收日常重要管理信息和进行资金操作,请确定其为商户法定代表人或负责人。
属性 | |
contact_type 必填 string 【超级管理员类型】 主体为“个体工商户/企业/政府机关/事业单位/社会组织”,可选择:LEGAL:经营者/法定代表人,SUPER:经办人 。(经办人:经商户授权办理微信支付业务的人员)。 可选取值
contact_name 必填 string(2048) 【超级管理员姓名】 1、长度为2-100个字符; 该字段需要使用微信支付公钥加密(推荐),请参考获取微信支付公钥ID说明以及微信支付公钥加密敏感信息指引,也可以使用微信支付平台证书公钥加密,参考获取平台证书序列号、平台证书加密敏感信息指引。 contact_id_doc_type 选填 string 【超级管理员证件类型】 当超级管理员类型是经办人时,请上传超级管理员证件类型。 可选取值
contact_id_number 选填 string(2048) 【超级管理员身份证件号码】 1、当超级管理员类型是经办人时,请上传超级管理员证件号码; contact_id_doc_copy 选填 string 【超级管理员证件正面照片】 1、当超级管理员类型是经办人时,请上传超级管理员证件的正面照片; contact_id_doc_copy_back 选填 string 【超级管理员证件反面照片】 1、当超级管理员类型是经办人时,请上传超级管理员证件的反面照片; contact_period_begin 选填 string 【超级管理员证件有效期开始时间】 1、当超级管理员类型是经办人时,请上传证件有效期开始时间; contact_period_end 选填 string 【超级管理员证件有效期结束时间】 1、当超级管理员类型是经办人时,请上传证件有效期结束时间; business_authorization_letter 选填 string 【业务办理授权函】 1、当超级管理员类型是经办人时,请上传业务办理授权函; openid 选填 string 【超级管理员微信OpenID】 该字段选填,若上传为超级管理员签约时,会校验微信号是否与该微信OpenID一致 mobile_phone 必填 string(2048) 【联系手机】 1、前后不能有空格、制表符、换行符;
3、用于接收微信支付的重要管理信息及日常操作验证码; contact_email 必填 string(2048) 【联系邮箱】 1、用于接收微信支付的开户邮件及日常业务通知; |
subject_info 必填 object
【主体资料】 请填写商家的营业执照/登记证书、经营者/法定代表人的证件等信息
属性 | |||||||||||||||||||||||||||||
subject_type 必填 string 【主体类型】 主体类型需与营业执照/登记证书上一致,可参考选择主体指引。 可选取值
finance_institution 选填 boolean 【是否是金融机构】 选填,请根据申请主体的实际情况填写,可参考选择金融机构指引: 若未传入将默认填写:false。 business_license_info 选填 object 【营业执照】 1、主体为个体户/企业,必填;
certificate_info 选填 object 【登记证书】 主体为政府机关/事业单位/其他组织时,必填。
certificate_letter_copy 选填 string 【单位证明函照片】 1、主体类型为政府机关、事业单位选传: finance_institution_info 选填 object 【金融机构许可证信息】 当主体是金融机构时,必填。
identity_info 必填 object 【经营者/法定代表人身份证件】 1、个体户:请上传经营者的身份证件;
ubo_info_list 选填 array[object] 【最终受益人信息列表(UBO)】 1、主体类型个体户/社会组织/政府机关/事业单位时,无需填写
|
business_info 必填 object
【经营资料】 请填写商家的经营业务信息、售卖商品/提供服务场景信息
属性 | |||||||||||||||||||||||||||||
merchant_shortname 必填 string(64) 【商户简称】 在支付完成页向买家展示,需与微信经营类目相关 service_phone 必填 string(32) 【客服电话】 将在交易记录中向买家展示,请确保电话畅通以便平台回拨确认
sales_info 必填 object 【经营场景】 请根据实际经营情况,填写经营场景
|
settlement_info 必填 object
【结算规则】 请填写商家的结算费率规则、特殊资质等信息
属性 | |
settlement_id 必填 string 【入驻结算规则ID】 请选择结算规则ID,详细参见费率结算规则对照表 qualification_type 必填 string 【所属行业】 填写指定行业名称,详细参见费率结算规则对照表 qualifications 选填 array[string] 【特殊资质图片】 1、仅当商户选择了必需提交特殊资质的行业时,需要提供该项资料;若商户选择了无需特殊资质的行业,或未选择行业时,无需提交该项资料,详情查看《费率结算规则对照表》; 2、最多可上传5张照片,请填写通过图片上传API预先上传图片生成好的MediaID。 activities_id 选填 string(32) 【优惠费率活动ID】 选择指定活动ID,如果商户有意向报名优惠费率活动,该字段必填。详细参见《优惠费率活动对照表》 activities_rate 选填 string 【优惠费率活动值】 根据优惠费率活动规则,由合作伙伴自定义填写,支持两个小数点,需在优惠费率活动ID指定费率范围内 activities_additions 选填 array[string] 【优惠费率活动补充材料】 1、根据所选优惠费率活动,提供相关材料,详细参见《优惠费率活动对照表》; 2、最多可上传5张照片,请填写通过图片上传API预先上传图片生成好的MediaID。 debit_activities_rate 选填 string 【非信用卡活动费率值】 用户支付方式为借记卡时收取的手续费费率: 1、若填写了优惠费率活动ID,则该字段必填; credit_activities_rate 选填 string 【信用卡活动费率值】 用户支付方式为信用卡时收取的手续费费率: 1、若填写了优惠费率活动ID,则该字段必填; |
bank_account_info 必填 object
【结算银行账户】 请填写商家提现收款的银行账户信息
属性 | |
bank_account_type 必填 string 【账户类型】 1、若主体为企业/政府机关/事业单位/社会组织,可填写:对公银行账户; 可选取值
account_name 必填 string(2048) 【开户名称】 1、选择“经营者个人银行卡”时,开户名称必须与“经营者证件姓名”一致; account_bank 必填 string(128) 【开户银行】 对私银行调用:查询支持个人业务的银行列表API bank_address_code 选填 string(128) 【开户银行省市编码】 该字段即将下线处理,无需传入 至少精确到市,详细参见省市区编号对照表 注:仅当省市区编号对照表中无对应的省市区编号时,可向上取该银行对应市级编号或省级编号。 bank_branch_id 选填 string(128) 【开户银行银行号】 1、根据开户银行查询接口中的“是否需要填写支行”判断是否需要填写。如为其他银行,开户银行全称(含支行)和开户银行联行号二选一; bank_name 选填 string(128) 【开户银行全称(含支行)】 1、根据开户银行查询接口中的“是否需要填写支行”判断是否需要填写。如为其他银行,开户银行全称(含支行)和开户银行联行号二选一; account_number 必填 string(2048) 【银行账号】 1、数字,长度遵循系统支持的卡号长度要求表; 2、该字段需要使用微信支付公钥加密(推荐),请参考获取微信支付公钥ID说明以及微信支付公钥加密敏感信息指引,也可以使用微信支付平台证书公钥加密,参考获取平台证书序列号、平台证书加密敏感信息指引。 |
addition_info 选填 object
【补充材料】 根据实际审核情况,会额外要求商家提供指定的补充资料
属性 | |
legal_person_commitment 选填 string(1024) 【法定代表人开户承诺函】 1、请上传法定代表人或负责人亲笔签署的开户承诺函扫描件(下载模板)。亲笔签名承诺函内容清晰可见,不得有涂污,破损,字迹不清晰现象; legal_person_video 选填 string(1024) 【法定代表人开户意愿视频】 1、建议法定代表人按如下话术录制“法定代表人开户意愿视频”: 我是#公司全称#的法定代表人(或负责人),特此证明本公司申请的商户号为我司真实意愿开立且用于XX业务(或XX服务)。我司现有业务符合法律法规及腾讯的相关规定。 2、支持上传20M内的视频,格式可为avi、wmv、mpeg、mp4、mov、mkv、flv、f4v、m4v、rmvb; business_addition_pics 选填 array[string] 【补充材料】 1、最多可上传5张照片; business_addition_msg 选填 string(512) 【补充说明】 512字以内 |
请求示例
POST
1curl -X POST \ 2 https://api.mch.weixin.qq.com/v3/applyment4sub/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 "business_code" : "1900013511_10000", 9 "contact_info" : { 10 "contact_type" : "LEGAL", 11 "contact_name" : "pVd1HJ6zyvPedzGaV+X3qtmrq9bb9tPROvwia4ibL+F6mfjbzQIzfb3HHLEjZ4YiR/cJiCrZxnAqi+pjeKIEdkwzXRAI7FUhrfPK3SNjaBTEu9GmsugMIA9r3x887Q+ODuC8HH2nzAn7NGpE/e3yiHgWhk0ps5k5DP/2qIdGdONoDzZelrxCl/NWWNUyB93K9F+jC1JX2IMttdY+aQ6zBlw0xnOiNW6Hzy7UtC+xriudjD5APomty7/mYNxLMpRSvWKIjOv/69bDnuC4EL5Kz4jBHLiCyOb+tI0m2qhZ9evAM+Jv1z0NVa8MRtelw/wDa4SzfeespQO/0kjiwfqdfg==", 12 "contact_id_doc_type" : "IDENTIFICATION_TYPE_IDCARD", 13 "contact_id_number" : "pVd1HJ6zyvPedzGaV+X3qtmrq9bb9tPROvwia4ibL+F6mfjbzQIzfb3HHLEjZ4YiR/cJiCrZxnAqi+pjeKIEdkwzXRAI7FUhrfPK3SNjaBTEu9GmsugMIA9r3x887Q+ODuC8HH2nzAn7NGpE/e3yiHgWhk0ps5k5DP/2qIdGdONoDzZelrxCl/NWWNUyB93K9F+jC1JX2IMttdY+aQ6zBlw0xnOiNW6Hzy7UtC+xriudjD5APomty7/mYNxLMpRSvWKIjOv/69bDnuC4EL5Kz4jBHLiCyOb+tI0m2qhZ9evAM+Jv1z0NVa8MRtelw/wDa4SzfeespQO/0kjiwfqdfg==", 14 "contact_id_doc_copy" : "jTpGmxUXqRTvDujqhThn4ReFxikqJ5YW6zFQ", 15 "contact_id_doc_copy_back" : "jTpGmxUX3FBWVQ5NJTZvvDujqhThn4ReFxikqJ5YW6zFQ", 16 "contact_period_begin" : "2019-06-06", 17 "contact_period_end" : "2026-06-06", 18 "business_authorization_letter" : "47ZC6GC-vnrbEny_Ie_An5-tCpqxucuxi-vByf3Gjm7KEIUv0OF4wFNIO4kqg05InE4d2I6_H7I4", 19 "openid" : "pVd1HJ6zyvPedzGaV+X3qtmrq9bb9tPROvwia4ibL+F6mfjbzQIzfb3HHLEjZ4YiR/cJiCrZxnAqi+pjeKIEdkwzXRAI7FUhrfPK3SNjaBTEu9GmsugMIA9r3x887Q+ODuC8HH2nzAn7NGpE/e3yiHgWhk0ps5k5DP/2qIdGdONoDzZelrxCl/NWWNUyB93K9F+jC1JX2IMttdY+aQ6zBlw0xnOiNW6Hzy7UtC+xriudjD5APomty7/mYNxLMpRSvWKIjOv/69bDnuC4EL5Kz4jBHLiCyOb+tI0m2qhZ9evAM+Jv1z0NVa8MRtelw/wDa4SzfeespQO/0kjiwfqdfg== 字段加密: 使用APIv3定义的方式加密", 20 "mobile_phone" : "pVd1HJ6zyvPedzGaV+X3qtmrq9bb9tPROvwia4ibL+F6mfjbzQIzfb3HHLEjZ4YiR/cJiCrZxnAqi+pjeKIEdkwzXRAI7FUhrfPK3SNjaBTEu9GmsugMIA9r3x887Q+ODuC8HH2nzAn7NGpE/e3yiHgWhk0ps5k5DP/2qIdGdONoDzZelrxCl/NWWNUyB93K9F+jC1JX2IMttdY+aQ6zBlw0xnOiNW6Hzy7UtC+xriudjD5APomty7/mYNxLMpRSvWKIjOv/69bDnuC4EL5Kz4jBHLiCyOb+tI0m2qhZ9evAM+Jv1z0NVa8MRtelw/wDa4SzfeespQO/0kjiwfqdfg==", 21 "contact_email" : "pVd1HJ6zyvPedzGaV+X3qtmrq9bb9tPROvwia4ibL+F6mfjbzQIzfb3HHLEjZ4YiR/cJiCrZxnAqi+pjeKIEdkwzXRAI7FUhrfPK3SNjaBTEu9GmsugMIA9r3x887Q+ODuC8HH2nzAn7NGpE/e3yiHgWhk0ps5k5DP/2qIdGdONoDzZelrxCl/NWWNUyB93K9F+jC1JX2IMttdY+aQ6zBlw0xnOiNW6Hzy7UtC+xriudjD5APomty7/mYNxLMpRSvWKIjOv/69bDnuC4EL5Kz4jBHLiCyOb+tI0m2qhZ9evAM+Jv1z0NVa8MRtelw/wDa4SzfeespQO/0kjiwfqdfg==" 22 }, 23 "subject_info" : { 24 "subject_type" : "SUBJECT_TYPE_ENTERPRISE", 25 "finance_institution" : true, 26 "business_license_info" : { 27 "license_copy" : "47ZC6GC-vnrbEny__Ie_An5-tCpqxucuxi-vByf3Gjm7KE53JXvGy9tqZm2XAUf-4KGprrKhpVBDIUv0OF4wFNIO4kqg05InE4d2I6_H7I4", 28 "license_number" : "123456789012345678", 29 "merchant_name" : "腾讯科技有限公司", 30 "legal_person" : "张三", 31 "license_address" : "广东省深圳市南山区xx路xx号", 32 "period_begin" : "2019-08-01", 33 "period_end" : "2029-08-01" 34 }, 35 "certificate_info" : { 36 "cert_copy" : "0P3ng6KTIW4-Q_l2FjKLZuhHjBWoMAjmVtCz7ScmhEIThCaV-4BBgVwtNkCHO_XXqK5dE5YdOmFJBZR9FwczhJehHhAZN6BKXQPcs-VvdSo", 37 "cert_type" : "CERTIFICATE_TYPE_2388", 38 "cert_number" : "111111111111", 39 "merchant_name" : "xx公益团体", 40 "company_address" : "广东省深圳市南山区xx路xx号", 41 "legal_person" : "李四", 42 "period_begin" : "2019-08-01", 43 "period_end" : "2019-08-01" 44 }, 45 "certificate_letter_copy" : "47ZC6GC-vnrbEny__Ie_An5-tCpqxucuxi-vByf3Gjm7KE53JXvGy9tqZm2XAUf-4KGprrKhpVBDIUv0OF4wFNIO4kqg05InE4d2I6_H7I4", 46 "finance_institution_info" : { 47 "finance_type" : "BANK_AGENT", 48 "finance_license_pics" : [ 49 "0P3ng6KTIW4-Q_l2FjmFJBZR9FwczhJehHhAZN6BKXQPcs-VvdSo" 50 ] 51 }, 52 "identity_info" : { 53 "id_holder_type" : "LEGAL", 54 "id_doc_type" : "IDENTIFICATION_TYPE_IDCARD", 55 "authorize_letter_copy" : "47ZC6GC-vnrbEny_Ie_An5-tCpqxucuxi-vByf3Gjm7KEIUv0OF4wFNIO4kqg05InE4d2I6_H7I4", 56 "id_card_info" : { 57 "id_card_copy" : "jTpGmxUX3FBWVQ5NJTZvlKX_gdU4cRz7z5NxpnFuAxhBTEO_PvWkfSCJ3zVIn001D8daLC-ehEuo0BJqRTvDujqhThn4ReFxikqJ5YW6zFQ", 58 "id_card_national" : "47ZC6GC-vnrbEny__Ie_An5-tCpqxucuxi-vByf3Gjm7KE53JXvGy9tqZm2XAUf-4KGprrKhpVBDIUv0OF4wFNIO4kqg05InE4d2I6_H7I4", 59 "id_card_name" : "pVd1HJ6zyvPedzGaV+X3qtmrq9bb9tPROvwia4ibL+F6mfjbzQIzfb3HHLEjZ4YiR/cJiCrZxnAqi+pjeKIEdkwzXRAI7FUhrfPK3SNjaBTEu9GmsugMIA9r3x887Q+ODuC8HH2nzAn7NGpE/e3yiHgWhk0ps5k5DP/2qIdGdONoDzZelrxCl/NWWNUyB93K9F+jC1JX2IMttdY+aQ6zBlw0xnOiNW6Hzy7UtC+xriudjD5APomty7/mYNxLMpRSvWKIjOv/69bDnuC4EL5Kz4jBHLiCyOb+tI0m2qhZ9evAM+Jv1z0NVa8MRtelw/wDa4SzfeespQO/0kjiwfqdfg==", 60 "id_card_number" : "AOZdYGISxo4y44/UgZ69bdu9X+tfMUJ9dl+LetjM45/zMbrYu+wWZ8gn4CTdo+D/m9MrPg+V4sm73oxqdQu/hj7aWyDl4GQtPXVdaztB9jVbVZh3QFzV+BEmytMNQp9dt1uWJktlfdDdLR3AMWyMB377xd+m9bSr/ioDTzagEcGe+vLYiKrzcroQv3OR0p3ppFYoQ3IfYeU/04S4t9rNFL+kyblK2FCCqQ11NdbbHoCrJc7NV4oASq6ZFonjTtgjjgKsadIKHXtb3JZKGZjduGdtkRJJp0/0eow96uY1Pk7Rq79Jtt7+I8juwEc4P4TG5xzchG/5IL9DBd+Z0zZXkw==", 61 "id_card_address" : "pVd1HJ6zyvPedzGaV+X3qtmrq9bb9tPROvwia4ibL+F6mfjbzQIzfb3HHLEjZ4YiR/cJiCrZxnAqi+pjeKIEdkwzXRAI7FUhrfPK3SNjaBTEu9GmsugMIA9r3x887Q+ODuC8HH2nzAn7NGpE/e3yiHgWhk0ps5k5DP/2qIdGdONoDzZelrxCl/NWWNUyB93K9F+jC1JX2IMttdY+aQ6zBlw0xnOiNW6Hzy7UtC+xriudjD5APomty7/mYNxLMpRSvWKIjOv/69bDnuC4EL5Kz4jBHLiCyOb+tI0m2qhZ9evAM+Jv1z0NVa8MRtelw/wDa4SzfeespQO/0kjiwfqdfg==", 62 "card_period_begin" : "2026-06-06", 63 "card_period_end" : "2026-06-06" 64 }, 65 "id_doc_info" : { 66 "id_doc_copy" : "jTpGmxUX3FBWVQ5NJTZvlKX_gdU4cRz7z5NxpnFuAxhBTEO_PvWkfSCJ3zVIn001D8daLC-ehEuo0BJqRTvDujqhThn4ReFxikqJ5YW6zFQ", 67 "id_doc_copy_back" : "jTpGmxUX3FBWVQ5NJTZvvDujqhThn4ReFxikqJ5YW6zFQ", 68 "id_doc_name" : "pVd1HJ6zyvPedzGaV+X3qtmrq9bb9tPROvwia4ibL+F6mfjbzQIzfb3HHLEjZ4YiR/cJiCrZxnAqi+pjeKIEdkwzXRAI7FUhrfPK3SNjaBTEu9GmsugMIA9r3x887Q+ODuC8HH2nzAn7NGpE/e3yiHgWhk0ps5k5DP/2qIdGdONoDzZelrxCl/NWWNUyB93K9F+jC1JX2IMttdY+aQ6zBlw0xnOiNW6Hzy7UtC+xriudjD5APomty7/mYNxLMpRSvWKIjOv/69bDnuC4EL5Kz4jBHLiCyOb+tI0m2qhZ9evAM+Jv1z0NVa8MRtelw/wDa4SzfeespQO/0kjiwfqdfg==", 69 "id_doc_number" : "AOZdYGISxo4y44/UgZ69bdu9X+tfMUJ9dl+LetjM45/zMbrYu+wWZ8gn4CTdo+D/m9MrPg+V4sm73oxqdQu/hj7aWyDl4GQtPXVdaztB9jVbVZh3QFzV+BEmytMNQp9dt1uWJktlfdDdLR3AMWyMB377xd+m9bSr/ioDTzagEcGe+vLYiKrzcroQv3OR0p3ppFYoQ3IfYeU/04S4t9rNFL+kyblK2FCCqQ11NdbbHoCrJc7NV4oASq6ZFonjTtgjjgKsadIKHXtb3JZKGZjduGdtkRJJp0/0eow96uY1Pk7Rq79Jtt7+I8juwEc4P4TG5xzchG/5IL9DBd+Z0zZXkw==", 70 "id_doc_address" : "pVd1HJ6zyvPedzGaV+X3qtmrq9bb9tPROvwia4ibL+F6mfjbzQIzfb3HHLEjZ4YiR/cJiCrZxnAqi+pjeKIEdkwzXRAI7FUhrfPK3SNjaBTEu9GmsugMIA9r3x887Q+ODuC8HH2nzAn7NGpE/e3yiHgWhk0ps5k5DP/2qIdGdONoDzZelrxCl/NWWNUyB93K9F+jC1JX2IMttdY+aQ6zBlw0xnOiNW6Hzy7UtC+xriudjD5APomty7/mYNxLMpRSvWKIjOv/69bDnuC4EL5Kz4jBHLiCyOb+tI0m2qhZ9evAM+Jv1z0NVa8MRtelw/wDa4SzfeespQO/0kjiwfqdfg==", 71 "doc_period_begin" : "2019-06-06", 72 "doc_period_end" : "2026-06-06" 73 }, 74 "owner" : true 75 }, 76 "ubo_info_list" : [ 77 { 78 "ubo_id_doc_type" : "IDENTIFICATION_TYPE_IDCARD", 79 "ubo_id_doc_copy" : "jTpGmxUXqRTvDujqhThn4ReFxikqJ5YW6zFQ", 80 "ubo_id_doc_copy_back" : "jTpGmxUX3FBWVQ5NJTZvvDujqhThn4ReFxikqJ5YW6zFQ", 81 "ubo_id_doc_name" : "AOZdYGISxo4y44/Ug4P4TG5xzchG/5IL9DBd+Z0zZXkw==", 82 "ubo_id_doc_number" : "AOZdYGISxo4y44/Ug4P4TG5xzchG/5IL9DBd+Z0zZXkw==", 83 "ubo_id_doc_address" : "pVd1HJ6zyvPedzGaV+X3qtmrq9bb9tPROvwia4ibL+F6mfjbzQIzfb3HHLEjZ4YiR/cJiCrZxnAqi+pjeKIEdkwzXRAI7FUhrfPK3SNjaBTEu9GmsugMIA9r3x887Q+ODuC8HH2nzAn7NGpE/e3yiHgWhk0ps5k5DP/2qIdGdONoDzZelrxCl/NWWNUyB93K9F+jC1JX2IMttdY+aQ6zBlw0xnOiNW6Hzy7UtC+xriudjD5APomty7/mYNxLMpRSvWKIjOv/69bDnuC4EL5Kz4jBHLiCyOb+tI0m2qhZ9evAM+Jv1z0NVa8MRtelw/wDa4SzfeespQO/0kjiwfqdfg==", 84 "ubo_period_begin" : "2019-06-06", 85 "ubo_period_end" : "2026-06-06" 86 } 87 ] 88 }, 89 "business_info" : { 90 "merchant_shortname" : "张三餐饮店", 91 "service_phone" : "0758XXXXX", 92 "sales_info" : { 93 "sales_scenes_type" : [ 94 "SALES_SCENES_STORE" 95 ], 96 "biz_store_info" : { 97 "biz_store_name" : "大郎烧饼", 98 "biz_address_code" : "440305", 99 "biz_store_address" : "南山区xx大厦x层xxxx室", 100 "store_entrance_pic" : [ 101 "0P3ng6KTIW4-Q_l2FjKLZuhHjBWoMAjmVtCz7ScmhEIThCaV-4BBgVwtNkCHO_XXqK5dE5YdOmFJBZR9FwczhJehHhAZN6BKXQPcs-VvdSo" 102 ], 103 "indoor_pic" : [ 104 "0P3ng6KTIW4-Q_l2FjKLZuhHjBWoMAjmVtCz7ScmhEIThCaV-4BBgVwtNkCHO_XXqK5dE5YdOmFJBZR9FwczhJehHhAZN6BKXQPcs-VvdSo" 105 ], 106 "biz_sub_appid" : "wx1234567890123456" 107 }, 108 "mp_info" : { 109 "mp_appid" : "wx1234567890123456", 110 "mp_sub_appid" : "wx1234567890123456", 111 "mp_pics" : [ 112 "example_mp_pics" 113 ] 114 }, 115 "mini_program_info" : { 116 "mini_program_appid" : "wx1234567890123456", 117 "mini_program_sub_appid" : "wx1234567890123456", 118 "mini_program_pics" : [ 119 "example_mini_program_pics" 120 ] 121 }, 122 "app_info" : { 123 "app_appid" : "wx1234567890123456", 124 "app_sub_appid" : "wx1234567890123456", 125 "app_pics" : [ 126 "example_app_pics" 127 ] 128 }, 129 "web_info" : { 130 "domain" : "http://www.qq.com", 131 "web_authorisation" : "47ZC6GC-vnrbEny__Ie_An5-tCpqxucuxi-vByf3Gjm7KE53JXvGy9tqZm2XAUf-4KGprrKhpVBDIUv0OF4wFNIO4kqg05InE4d2I6_H7I4", 132 "web_appid" : "wx1234567890123456" 133 }, 134 "wework_info" : { 135 "sub_corp_id" : "wx1234567890123456", 136 "wework_pics" : [ 137 "example_wework_pics" 138 ] 139 } 140 } 141 }, 142 "settlement_info" : { 143 "settlement_id" : "719", 144 "qualification_type" : "餐饮", 145 "qualifications" : [ 146 "example_qualifications" 147 ], 148 "activities_id" : "716", 149 "activities_rate" : "0.6", 150 "activities_additions" : [ 151 "example_activities_additions" 152 ], 153 "debit_activities_rate" : "0.54", 154 "credit_activities_rate" : "0.54" 155 }, 156 "bank_account_info" : { 157 "bank_account_type" : "BANK_ACCOUNT_TYPE_CORPORATE", 158 "account_name" : "AOZdYGISxo4y44/UgZ69bdu9X+tfMUJ9dl+LetjM45/zMbrYu+wWZ8gn4CTdo+D/m9MrPg+V4sm73oxqdQu/hj7aWyDl4GQtPXVdaztB9jVbVZh3QFzV+BEmytMNQp9dt1uWJktlfdDdLR3AMWyMB377xd+m9bSr/ioDTzagEcGe+vLYiKrzcroQv3OR0p3ppFYoQ3IfYeU/04S4t9rNFL+kyblK2FCCqQ11NdbbHoCrJc7NV4oASq6ZFonjTtgjjgKsadIKHXtb3JZKGZjduGdtkRJJp0/0eow96uY1Pk7Rq79Jtt7+I8juwEc4P4TG5xzchG/5IL9DBd+Z0zZXkw==", 159 "account_bank" : "工商银行", 160 "bank_address_code" : "110000", 161 "bank_branch_id" : "402713354941", 162 "bank_name" : "施秉县农村信用合作联社城关信用社", 163 "account_number" : "d+xT+MQCvrLHUVDWv/8MR/dB7TkXM2YYZlokmXzFsWs35NXUot7C0NcxIrUF5FnxqCJHkNgKtxa6RxEYyba1+VBRLnqKG2fSy/Y5qDN08Ej9zHCwJjq52Wg1VG8MRugli9YMI1fI83KGBxhuXyemgS/hqFKsfYGiOkJqjTUpgY5VqjtL2N4l4z11T0ECB/aSyVXUysOFGLVfSrUxMPZy6jWWYGvT1+4P633f+R+ki1gT4WF/2KxZOYmli385ZgVhcR30mr4/G3HBcxi13zp7FnEeOsLlvBmI1PHN4C7Rsu3WL8sPndjXTd75kPkyjqnoMRrEEaYQE8ZRGYoeorwC+w==" 164 }, 165 "addition_info" : { 166 "legal_person_commitment" : "47ZC6GC-vnrbEny__Ie_An5-tCpqxucuxi-vByf3Gjm7KE53JXvGy9tqZm2XAUf-4KGprrKhpVBDIUv0OF4wFNIO4kqg05InE4d2I6_H7I4", 167 "legal_person_video" : "47ZC6GC-vnrbEny__Ie_An5-tCpqxucuxi-vByf3Gjm7KE53JXvGy9tqZm2XAUf-4KGprrKhpVBDIUv0OF4wFNIO4kqg05InE4d2I6_H7I4", 168 "business_addition_pics" : [ 169 "example_business_addition_pics" 170 ], 171 "business_addition_msg" : "特殊情况,说明原因" 172 } 173 }' 174
需配合微信支付工具库 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 Submit { 26 private static String HOST = "https://api.mch.weixin.qq.com"; 27 private static String METHOD = "POST"; 28 private static String PATH = "/v3/applyment4sub/applyment/"; 29 30 public static void main(String[] args) { 31 // TODO: 请准备商户开发必要参数,参考:https://pay.weixin.qq.com/doc/v3/partner/4013080340 32 Submit client = new Submit( 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.businessCode = "1900013511_10000"; 42 request.contactInfo = new ContactInfo(); 43 request.contactInfo.contactType = IdHolderType.LEGAL; 44 request.contactInfo.contactName = client.encrypt("contact_name"); 45 request.contactInfo.contactIdDocType = IdentificationType.IDENTIFICATION_TYPE_IDCARD; 46 request.contactInfo.contactIdNumber = client.encrypt("contact_id_number"); 47 request.contactInfo.contactIdDocCopy = "jTpGmxUXqRTvDujqhThn4ReFxikqJ5YW6zFQ"; 48 request.contactInfo.contactIdDocCopyBack = "jTpGmxUX3FBWVQ5NJTZvvDujqhThn4ReFxikqJ5YW6zFQ"; 49 request.contactInfo.contactPeriodBegin = "2019-06-06"; 50 request.contactInfo.contactPeriodEnd = "2026-06-06"; 51 request.contactInfo.businessAuthorizationLetter = "47ZC6GC-vnrbEny_Ie_An5-tCpqxucuxi-vByf3Gjm7KEIUv0OF4wFNIO4kqg05InE4d2I6_H7I4"; 52 request.contactInfo.openid = "pVd1HJ6zyvPedzGaV+X3qtmrq9bb9tPROvwia4ibL+F6mfjbzQIzfb3HHLEjZ4YiR/cJiCrZxnAqi+pjeKIEdkwzXRAI7FUhrfPK3SNjaBTEu9GmsugMIA9r3x887Q+ODuC8HH2nzAn7NGpE/e3yiHgWhk0ps5k5DP/2qIdGdONoDzZelrxCl/NWWNUyB93K9F+jC1JX2IMttdY+aQ6zBlw0xnOiNW6Hzy7UtC+xriudjD5APomty7/mYNxLMpRSvWKIjOv/69bDnuC4EL5Kz4jBHLiCyOb+tI0m2qhZ9evAM+Jv1z0NVa8MRtelw/wDa4SzfeespQO/0kjiwfqdfg== 字段加密: 使用APIv3定义的方式加密"; 53 request.contactInfo.mobilePhone = client.encrypt("mobile_phone"); 54 request.contactInfo.contactEmail = client.encrypt("contact_email"); 55 request.subjectInfo = new SubjectInfo(); 56 request.subjectInfo.subjectType = SubjectType.SUBJECT_TYPE_ENTERPRISE; 57 request.subjectInfo.financeInstitution = true; 58 request.subjectInfo.businessLicenseInfo = new BusinessLicense(); 59 request.subjectInfo.businessLicenseInfo.licenseCopy = "47ZC6GC-vnrbEny__Ie_An5-tCpqxucuxi-vByf3Gjm7KE53JXvGy9tqZm2XAUf-4KGprrKhpVBDIUv0OF4wFNIO4kqg05InE4d2I6_H7I4"; 60 request.subjectInfo.businessLicenseInfo.licenseNumber = "123456789012345678"; 61 request.subjectInfo.businessLicenseInfo.merchantName = "腾讯科技有限公司"; 62 request.subjectInfo.businessLicenseInfo.legalPerson = "张三"; 63 request.subjectInfo.businessLicenseInfo.licenseAddress = "广东省深圳市南山区xx路xx号"; 64 request.subjectInfo.businessLicenseInfo.periodBegin = "2019-08-01"; 65 request.subjectInfo.businessLicenseInfo.periodEnd = "2029-08-01"; 66 request.subjectInfo.certificateInfo = new CertificateInfo(); 67 request.subjectInfo.certificateInfo.certCopy = "0P3ng6KTIW4-Q_l2FjKLZuhHjBWoMAjmVtCz7ScmhEIThCaV-4BBgVwtNkCHO_XXqK5dE5YdOmFJBZR9FwczhJehHhAZN6BKXQPcs-VvdSo"; 68 request.subjectInfo.certificateInfo.certType = CertificateType.CERTIFICATE_TYPE_2388; 69 request.subjectInfo.certificateInfo.certNumber = "111111111111"; 70 request.subjectInfo.certificateInfo.merchantName = "xx公益团体"; 71 request.subjectInfo.certificateInfo.companyAddress = "广东省深圳市南山区xx路xx号"; 72 request.subjectInfo.certificateInfo.legalPerson = "李四"; 73 request.subjectInfo.certificateInfo.periodBegin = "2019-08-01"; 74 request.subjectInfo.certificateInfo.periodEnd = "2019-08-01"; 75 request.subjectInfo.certificateLetterCopy = "47ZC6GC-vnrbEny__Ie_An5-tCpqxucuxi-vByf3Gjm7KE53JXvGy9tqZm2XAUf-4KGprrKhpVBDIUv0OF4wFNIO4kqg05InE4d2I6_H7I4"; 76 request.subjectInfo.financeInstitutionInfo = new FinanceInstitutionInfo(); 77 request.subjectInfo.financeInstitutionInfo.financeType = FinanceType.BANK_AGENT; 78 request.subjectInfo.financeInstitutionInfo.financeLicensePics = new ArrayList<>(); 79 { 80 request.subjectInfo.financeInstitutionInfo.financeLicensePics.add("0P3ng6KTIW4-Q_l2FjmFJBZR9FwczhJehHhAZN6BKXQPcs-VvdSo"); 81 }; 82 request.subjectInfo.identityInfo = new IdentityInfo(); 83 request.subjectInfo.identityInfo.idHolderType = IdHolderType.LEGAL; 84 request.subjectInfo.identityInfo.idDocType = IdentificationType.IDENTIFICATION_TYPE_IDCARD; 85 request.subjectInfo.identityInfo.authorizeLetterCopy = "47ZC6GC-vnrbEny_Ie_An5-tCpqxucuxi-vByf3Gjm7KEIUv0OF4wFNIO4kqg05InE4d2I6_H7I4"; 86 request.subjectInfo.identityInfo.idCardInfo = new IdCardInfo(); 87 request.subjectInfo.identityInfo.idCardInfo.idCardCopy = "jTpGmxUX3FBWVQ5NJTZvlKX_gdU4cRz7z5NxpnFuAxhBTEO_PvWkfSCJ3zVIn001D8daLC-ehEuo0BJqRTvDujqhThn4ReFxikqJ5YW6zFQ"; 88 request.subjectInfo.identityInfo.idCardInfo.idCardNational = "47ZC6GC-vnrbEny__Ie_An5-tCpqxucuxi-vByf3Gjm7KE53JXvGy9tqZm2XAUf-4KGprrKhpVBDIUv0OF4wFNIO4kqg05InE4d2I6_H7I4"; 89 request.subjectInfo.identityInfo.idCardInfo.idCardName = client.encrypt("id_card_name"); 90 request.subjectInfo.identityInfo.idCardInfo.idCardNumber = client.encrypt("id_card_number"); 91 request.subjectInfo.identityInfo.idCardInfo.idCardAddress = client.encrypt("id_card_address"); 92 request.subjectInfo.identityInfo.idCardInfo.cardPeriodBegin = "2026-06-06"; 93 request.subjectInfo.identityInfo.idCardInfo.cardPeriodEnd = "2026-06-06"; 94 request.subjectInfo.identityInfo.idDocInfo = new IdDocInfo(); 95 request.subjectInfo.identityInfo.idDocInfo.idDocCopy = "jTpGmxUX3FBWVQ5NJTZvlKX_gdU4cRz7z5NxpnFuAxhBTEO_PvWkfSCJ3zVIn001D8daLC-ehEuo0BJqRTvDujqhThn4ReFxikqJ5YW6zFQ"; 96 request.subjectInfo.identityInfo.idDocInfo.idDocCopyBack = "jTpGmxUX3FBWVQ5NJTZvvDujqhThn4ReFxikqJ5YW6zFQ"; 97 request.subjectInfo.identityInfo.idDocInfo.idDocName = client.encrypt("id_doc_name"); 98 request.subjectInfo.identityInfo.idDocInfo.idDocNumber = client.encrypt("id_doc_number"); 99 request.subjectInfo.identityInfo.idDocInfo.idDocAddress = client.encrypt("id_doc_address"); 100 request.subjectInfo.identityInfo.idDocInfo.docPeriodBegin = "2019-06-06"; 101 request.subjectInfo.identityInfo.idDocInfo.docPeriodEnd = "2026-06-06"; 102 request.subjectInfo.identityInfo.owner = true; 103 request.subjectInfo.uboInfoList = new ArrayList<>(); 104 { 105 UBOInfoList uboInfoListItem = new UBOInfoList(); 106 uboInfoListItem.uboIdDocType = IdentificationType.IDENTIFICATION_TYPE_IDCARD; 107 uboInfoListItem.uboIdDocCopy = "jTpGmxUXqRTvDujqhThn4ReFxikqJ5YW6zFQ"; 108 uboInfoListItem.uboIdDocCopyBack = "jTpGmxUX3FBWVQ5NJTZvvDujqhThn4ReFxikqJ5YW6zFQ"; 109 uboInfoListItem.uboIdDocName = client.encrypt("ubo_id_doc_name"); 110 uboInfoListItem.uboIdDocNumber = client.encrypt("ubo_id_doc_number"); 111 uboInfoListItem.uboIdDocAddress = client.encrypt("ubo_id_doc_address"); 112 uboInfoListItem.uboPeriodBegin = "2019-06-06"; 113 uboInfoListItem.uboPeriodEnd = "2026-06-06"; 114 request.subjectInfo.uboInfoList.add(uboInfoListItem); 115 }; 116 request.businessInfo = new BusinessInfo(); 117 request.businessInfo.merchantShortname = "张三餐饮店"; 118 request.businessInfo.servicePhone = "0758XXXXX"; 119 request.businessInfo.salesInfo = new SalesInfo(); 120 request.businessInfo.salesInfo.salesScenesType = new ArrayList<>(); 121 { 122 request.businessInfo.salesInfo.salesScenesType.add(SalesScenesType.SALES_SCENES_STORE); 123 }; 124 request.businessInfo.salesInfo.bizStoreInfo = new StoreInfo(); 125 request.businessInfo.salesInfo.bizStoreInfo.bizStoreName = "大郎烧饼"; 126 request.businessInfo.salesInfo.bizStoreInfo.bizAddressCode = "440305"; 127 request.businessInfo.salesInfo.bizStoreInfo.bizStoreAddress = "南山区xx大厦x层xxxx室"; 128 request.businessInfo.salesInfo.bizStoreInfo.storeEntrancePic = new ArrayList<>(); 129 { 130 request.businessInfo.salesInfo.bizStoreInfo.storeEntrancePic.add("0P3ng6KTIW4-Q_l2FjKLZuhHjBWoMAjmVtCz7ScmhEIThCaV-4BBgVwtNkCHO_XXqK5dE5YdOmFJBZR9FwczhJehHhAZN6BKXQPcs-VvdSo"); 131 }; 132 request.businessInfo.salesInfo.bizStoreInfo.indoorPic = new ArrayList<>(); 133 { 134 request.businessInfo.salesInfo.bizStoreInfo.indoorPic.add("0P3ng6KTIW4-Q_l2FjKLZuhHjBWoMAjmVtCz7ScmhEIThCaV-4BBgVwtNkCHO_XXqK5dE5YdOmFJBZR9FwczhJehHhAZN6BKXQPcs-VvdSo"); 135 }; 136 request.businessInfo.salesInfo.bizStoreInfo.bizSubAppid = "wx1234567890123456"; 137 request.businessInfo.salesInfo.mpInfo = new MpInfo(); 138 request.businessInfo.salesInfo.mpInfo.mpAppid = "wx1234567890123456"; 139 request.businessInfo.salesInfo.mpInfo.mpSubAppid = "wx1234567890123456"; 140 request.businessInfo.salesInfo.mpInfo.mpPics = new ArrayList<>(); 141 { 142 request.businessInfo.salesInfo.mpInfo.mpPics.add("example_mpPics"); 143 }; 144 request.businessInfo.salesInfo.miniProgramInfo = new MiniProgramInfo(); 145 request.businessInfo.salesInfo.miniProgramInfo.miniProgramAppid = "wx1234567890123456"; 146 request.businessInfo.salesInfo.miniProgramInfo.miniProgramSubAppid = "wx1234567890123456"; 147 request.businessInfo.salesInfo.miniProgramInfo.miniProgramPics = new ArrayList<>(); 148 { 149 request.businessInfo.salesInfo.miniProgramInfo.miniProgramPics.add("example_miniProgramPics"); 150 }; 151 request.businessInfo.salesInfo.appInfo = new AppInfo(); 152 request.businessInfo.salesInfo.appInfo.appAppid = "wx1234567890123456"; 153 request.businessInfo.salesInfo.appInfo.appSubAppid = "wx1234567890123456"; 154 request.businessInfo.salesInfo.appInfo.appPics = new ArrayList<>(); 155 { 156 request.businessInfo.salesInfo.appInfo.appPics.add("example_appPics"); 157 }; 158 request.businessInfo.salesInfo.webInfo = new WebInfo(); 159 request.businessInfo.salesInfo.webInfo.domain = "http://www.qq.com"; 160 request.businessInfo.salesInfo.webInfo.webAuthorisation = "47ZC6GC-vnrbEny__Ie_An5-tCpqxucuxi-vByf3Gjm7KE53JXvGy9tqZm2XAUf-4KGprrKhpVBDIUv0OF4wFNIO4kqg05InE4d2I6_H7I4"; 161 request.businessInfo.salesInfo.webInfo.webAppid = "wx1234567890123456"; 162 request.businessInfo.salesInfo.weworkInfo = new WeworkInfo(); 163 request.businessInfo.salesInfo.weworkInfo.subCorpId = "wx1234567890123456"; 164 request.businessInfo.salesInfo.weworkInfo.weworkPics = new ArrayList<>(); 165 { 166 request.businessInfo.salesInfo.weworkInfo.weworkPics.add("example_weworkPics"); 167 }; 168 request.settlementInfo = new SettlementInfo(); 169 request.settlementInfo.settlementId = "719"; 170 request.settlementInfo.qualificationType = "餐饮"; 171 request.settlementInfo.qualifications = new ArrayList<>(); 172 { 173 request.settlementInfo.qualifications.add("example_qualifications"); 174 }; 175 request.settlementInfo.activitiesId = "716"; 176 request.settlementInfo.activitiesRate = "0.6"; 177 request.settlementInfo.activitiesAdditions = new ArrayList<>(); 178 { 179 request.settlementInfo.activitiesAdditions.add("example_activitiesAdditions"); 180 }; 181 request.settlementInfo.debitActivitiesRate = "0.54"; 182 request.settlementInfo.creditActivitiesRate = "0.54"; 183 request.bankAccountInfo = new BankAccountInfo(); 184 request.bankAccountInfo.bankAccountType = BankAccountType.BANK_ACCOUNT_TYPE_CORPORATE; 185 request.bankAccountInfo.accountName = client.encrypt("account_name"); 186 request.bankAccountInfo.accountBank = "工商银行"; 187 request.bankAccountInfo.bankAddressCode = "110000"; 188 request.bankAccountInfo.bankBranchId = "402713354941"; 189 request.bankAccountInfo.bankName = "施秉县农村信用合作联社城关信用社"; 190 request.bankAccountInfo.accountNumber = client.encrypt("account_number"); 191 request.additionInfo = new AdditionInfo(); 192 request.additionInfo.legalPersonCommitment = "47ZC6GC-vnrbEny__Ie_An5-tCpqxucuxi-vByf3Gjm7KE53JXvGy9tqZm2XAUf-4KGprrKhpVBDIUv0OF4wFNIO4kqg05InE4d2I6_H7I4"; 193 request.additionInfo.legalPersonVideo = "47ZC6GC-vnrbEny__Ie_An5-tCpqxucuxi-vByf3Gjm7KE53JXvGy9tqZm2XAUf-4KGprrKhpVBDIUv0OF4wFNIO4kqg05InE4d2I6_H7I4"; 194 request.additionInfo.businessAdditionPics = new ArrayList<>(); 195 { 196 request.additionInfo.businessAdditionPics.add("example_businessAdditionPics"); 197 }; 198 request.additionInfo.businessAdditionMsg = "特殊情况,说明原因"; 199 try { 200 SubmitResp response = client.run(request); 201 // TODO: 请求成功,继续业务逻辑 202 System.out.println(response); 203 } catch (WXPayUtility.ApiException e) { 204 // TODO: 请求失败,根据状态码执行不同的逻辑 205 e.printStackTrace(); 206 } 207 } 208 209 public SubmitResp run(SubmitReq request) { 210 String uri = PATH; 211 String reqBody = WXPayUtility.toJson(request); 212 213 Request.Builder reqBuilder = new Request.Builder().url(HOST + uri); 214 reqBuilder.addHeader("Accept", "application/json"); 215 reqBuilder.addHeader("Wechatpay-Serial", wechatPayPublicKeyId); 216 reqBuilder.addHeader("Authorization", WXPayUtility.buildAuthorization(mchid, certificateSerialNo,privateKey, METHOD, uri, reqBody)); 217 reqBuilder.addHeader("Content-Type", "application/json"); 218 RequestBody requestBody = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), reqBody); 219 reqBuilder.method(METHOD, requestBody); 220 Request httpRequest = reqBuilder.build(); 221 222 // 发送HTTP请求 223 OkHttpClient client = new OkHttpClient.Builder().build(); 224 try (Response httpResponse = client.newCall(httpRequest).execute()) { 225 String respBody = WXPayUtility.extractBody(httpResponse); 226 if (httpResponse.code() >= 200 && httpResponse.code() < 300) { 227 // 2XX 成功,验证应答签名 228 WXPayUtility.validateResponse(this.wechatPayPublicKeyId, this.wechatPayPublicKey, 229 httpResponse.headers(), respBody); 230 231 // 从HTTP应答报文构建返回数据 232 return WXPayUtility.fromJson(respBody, SubmitResp.class); 233 } else { 234 throw new WXPayUtility.ApiException(httpResponse.code(), respBody, httpResponse.headers()); 235 } 236 } catch (IOException e) { 237 throw new UncheckedIOException("Sending request to " + uri + " failed.", e); 238 } 239 } 240 241 private final String mchid; 242 private final String certificateSerialNo; 243 private final PrivateKey privateKey; 244 private final String wechatPayPublicKeyId; 245 private final PublicKey wechatPayPublicKey; 246 247 public Submit(String mchid, String certificateSerialNo, String privateKeyFilePath, String wechatPayPublicKeyId, String wechatPayPublicKeyFilePath) { 248 this.mchid = mchid; 249 this.certificateSerialNo = certificateSerialNo; 250 this.privateKey = WXPayUtility.loadPrivateKeyFromPath(privateKeyFilePath); 251 this.wechatPayPublicKeyId = wechatPayPublicKeyId; 252 this.wechatPayPublicKey = WXPayUtility.loadPublicKeyFromPath(wechatPayPublicKeyFilePath); 253 } 254 255 public String encrypt(String plainText) { 256 return WXPayUtility.encrypt(this.wechatPayPublicKey, plainText); 257 } 258 259 public static class SubmitReq { 260 @SerializedName("business_code") 261 public String businessCode; 262 263 @SerializedName("contact_info") 264 public ContactInfo contactInfo; 265 266 @SerializedName("subject_info") 267 public SubjectInfo subjectInfo; 268 269 @SerializedName("business_info") 270 public BusinessInfo businessInfo; 271 272 @SerializedName("settlement_info") 273 public SettlementInfo settlementInfo; 274 275 @SerializedName("bank_account_info") 276 public BankAccountInfo bankAccountInfo; 277 278 @SerializedName("addition_info") 279 public AdditionInfo additionInfo; 280 } 281 282 public static class SubmitResp { 283 @SerializedName("applyment_id") 284 public Long applymentId; 285 } 286 287 public static class ContactInfo { 288 @SerializedName("contact_type") 289 public IdHolderType contactType; 290 291 @SerializedName("contact_name") 292 public String contactName; 293 294 @SerializedName("contact_id_doc_type") 295 public IdentificationType contactIdDocType; 296 297 @SerializedName("contact_id_number") 298 public String contactIdNumber; 299 300 @SerializedName("contact_id_doc_copy") 301 public String contactIdDocCopy; 302 303 @SerializedName("contact_id_doc_copy_back") 304 public String contactIdDocCopyBack; 305 306 @SerializedName("contact_period_begin") 307 public String contactPeriodBegin; 308 309 @SerializedName("contact_period_end") 310 public String contactPeriodEnd; 311 312 @SerializedName("business_authorization_letter") 313 public String businessAuthorizationLetter; 314 315 @SerializedName("openid") 316 public String openid; 317 318 @SerializedName("mobile_phone") 319 public String mobilePhone; 320 321 @SerializedName("contact_email") 322 public String contactEmail; 323 } 324 325 public static class SubjectInfo { 326 @SerializedName("subject_type") 327 public SubjectType subjectType; 328 329 @SerializedName("finance_institution") 330 public Boolean financeInstitution; 331 332 @SerializedName("business_license_info") 333 public BusinessLicense businessLicenseInfo; 334 335 @SerializedName("certificate_info") 336 public CertificateInfo certificateInfo; 337 338 @SerializedName("certificate_letter_copy") 339 public String certificateLetterCopy; 340 341 @SerializedName("finance_institution_info") 342 public FinanceInstitutionInfo financeInstitutionInfo; 343 344 @SerializedName("identity_info") 345 public IdentityInfo identityInfo; 346 347 @SerializedName("ubo_info_list") 348 public List<UBOInfoList> uboInfoList; 349 } 350 351 public static class BusinessInfo { 352 @SerializedName("merchant_shortname") 353 public String merchantShortname; 354 355 @SerializedName("service_phone") 356 public String servicePhone; 357 358 @SerializedName("sales_info") 359 public SalesInfo salesInfo; 360 } 361 362 public static class SettlementInfo { 363 @SerializedName("settlement_id") 364 public String settlementId; 365 366 @SerializedName("qualification_type") 367 public String qualificationType; 368 369 @SerializedName("qualifications") 370 public List<String> qualifications; 371 372 @SerializedName("activities_id") 373 public String activitiesId; 374 375 @SerializedName("activities_rate") 376 public String activitiesRate; 377 378 @SerializedName("activities_additions") 379 public List<String> activitiesAdditions; 380 381 @SerializedName("debit_activities_rate") 382 public String debitActivitiesRate; 383 384 @SerializedName("credit_activities_rate") 385 public String creditActivitiesRate; 386 } 387 388 public static class BankAccountInfo { 389 @SerializedName("bank_account_type") 390 public BankAccountType bankAccountType; 391 392 @SerializedName("account_name") 393 public String accountName; 394 395 @SerializedName("account_bank") 396 public String accountBank; 397 398 @SerializedName("bank_address_code") 399 public String bankAddressCode; 400 401 @SerializedName("bank_branch_id") 402 public String bankBranchId; 403 404 @SerializedName("bank_name") 405 public String bankName; 406 407 @SerializedName("account_number") 408 public String accountNumber; 409 } 410 411 public static class AdditionInfo { 412 @SerializedName("legal_person_commitment") 413 public String legalPersonCommitment; 414 415 @SerializedName("legal_person_video") 416 public String legalPersonVideo; 417 418 @SerializedName("business_addition_pics") 419 public List<String> businessAdditionPics; 420 421 @SerializedName("business_addition_msg") 422 public String businessAdditionMsg; 423 } 424 425 public enum IdHolderType { 426 @SerializedName("LEGAL") 427 LEGAL, 428 @SerializedName("SUPER") 429 SUPER 430 } 431 432 public enum IdentificationType { 433 @SerializedName("IDENTIFICATION_TYPE_IDCARD") 434 IDENTIFICATION_TYPE_IDCARD, 435 @SerializedName("IDENTIFICATION_TYPE_OVERSEA_PASSPORT") 436 IDENTIFICATION_TYPE_OVERSEA_PASSPORT, 437 @SerializedName("IDENTIFICATION_TYPE_HONGKONG_PASSPORT") 438 IDENTIFICATION_TYPE_HONGKONG_PASSPORT, 439 @SerializedName("IDENTIFICATION_TYPE_MACAO_PASSPORT") 440 IDENTIFICATION_TYPE_MACAO_PASSPORT, 441 @SerializedName("IDENTIFICATION_TYPE_TAIWAN_PASSPORT") 442 IDENTIFICATION_TYPE_TAIWAN_PASSPORT, 443 @SerializedName("IDENTIFICATION_TYPE_FOREIGN_RESIDENT") 444 IDENTIFICATION_TYPE_FOREIGN_RESIDENT, 445 @SerializedName("IDENTIFICATION_TYPE_HONGKONG_MACAO_RESIDENT") 446 IDENTIFICATION_TYPE_HONGKONG_MACAO_RESIDENT, 447 @SerializedName("IDENTIFICATION_TYPE_TAIWAN_RESIDENT") 448 IDENTIFICATION_TYPE_TAIWAN_RESIDENT 449 } 450 451 public enum SubjectType { 452 @SerializedName("SUBJECT_TYPE_ENTERPRISE") 453 SUBJECT_TYPE_ENTERPRISE, 454 @SerializedName("SUBJECT_TYPE_INSTITUTIONS") 455 SUBJECT_TYPE_INSTITUTIONS, 456 @SerializedName("SUBJECT_TYPE_INDIVIDUAL") 457 SUBJECT_TYPE_INDIVIDUAL, 458 @SerializedName("SUBJECT_TYPE_OTHERS") 459 SUBJECT_TYPE_OTHERS, 460 @SerializedName("SUBJECT_TYPE_GOVERNMENT") 461 SUBJECT_TYPE_GOVERNMENT 462 } 463 464 public static class BusinessLicense { 465 @SerializedName("license_copy") 466 public String licenseCopy; 467 468 @SerializedName("license_number") 469 public String licenseNumber; 470 471 @SerializedName("merchant_name") 472 public String merchantName; 473 474 @SerializedName("legal_person") 475 public String legalPerson; 476 477 @SerializedName("license_address") 478 public String licenseAddress; 479 480 @SerializedName("period_begin") 481 public String periodBegin; 482 483 @SerializedName("period_end") 484 public String periodEnd; 485 } 486 487 public static class CertificateInfo { 488 @SerializedName("cert_copy") 489 public String certCopy; 490 491 @SerializedName("cert_type") 492 public CertificateType certType; 493 494 @SerializedName("cert_number") 495 public String certNumber; 496 497 @SerializedName("merchant_name") 498 public String merchantName; 499 500 @SerializedName("company_address") 501 public String companyAddress; 502 503 @SerializedName("legal_person") 504 public String legalPerson; 505 506 @SerializedName("period_begin") 507 public String periodBegin; 508 509 @SerializedName("period_end") 510 public String periodEnd; 511 } 512 513 public static class FinanceInstitutionInfo { 514 @SerializedName("finance_type") 515 public FinanceType financeType; 516 517 @SerializedName("finance_license_pics") 518 public List<String> financeLicensePics; 519 } 520 521 public static class IdentityInfo { 522 @SerializedName("id_holder_type") 523 public IdHolderType idHolderType; 524 525 @SerializedName("id_doc_type") 526 public IdentificationType idDocType; 527 528 @SerializedName("authorize_letter_copy") 529 public String authorizeLetterCopy; 530 531 @SerializedName("id_card_info") 532 public IdCardInfo idCardInfo; 533 534 @SerializedName("id_doc_info") 535 public IdDocInfo idDocInfo; 536 537 @SerializedName("owner") 538 public Boolean owner; 539 } 540 541 public static class UBOInfoList { 542 @SerializedName("ubo_id_doc_type") 543 public IdentificationType uboIdDocType; 544 545 @SerializedName("ubo_id_doc_copy") 546 public String uboIdDocCopy; 547 548 @SerializedName("ubo_id_doc_copy_back") 549 public String uboIdDocCopyBack; 550 551 @SerializedName("ubo_id_doc_name") 552 public String uboIdDocName; 553 554 @SerializedName("ubo_id_doc_number") 555 public String uboIdDocNumber; 556 557 @SerializedName("ubo_id_doc_address") 558 public String uboIdDocAddress; 559 560 @SerializedName("ubo_period_begin") 561 public String uboPeriodBegin; 562 563 @SerializedName("ubo_period_end") 564 public String uboPeriodEnd; 565 } 566 567 public static class SalesInfo { 568 @SerializedName("sales_scenes_type") 569 public List<SalesScenesType> salesScenesType = new ArrayList<SalesScenesType>(); 570 571 @SerializedName("biz_store_info") 572 public StoreInfo bizStoreInfo; 573 574 @SerializedName("mp_info") 575 public MpInfo mpInfo; 576 577 @SerializedName("mini_program_info") 578 public MiniProgramInfo miniProgramInfo; 579 580 @SerializedName("app_info") 581 public AppInfo appInfo; 582 583 @SerializedName("web_info") 584 public WebInfo webInfo; 585 586 @SerializedName("wework_info") 587 public WeworkInfo weworkInfo; 588 } 589 590 public enum BankAccountType { 591 @SerializedName("BANK_ACCOUNT_TYPE_CORPORATE") 592 BANK_ACCOUNT_TYPE_CORPORATE, 593 @SerializedName("BANK_ACCOUNT_TYPE_PERSONAL") 594 BANK_ACCOUNT_TYPE_PERSONAL 595 } 596 597 public enum CertificateType { 598 @SerializedName("CERTIFICATE_TYPE_2388") 599 CERTIFICATE_TYPE_2388, 600 @SerializedName("CERTIFICATE_TYPE_2389") 601 CERTIFICATE_TYPE_2389, 602 @SerializedName("CERTIFICATE_TYPE_2394") 603 CERTIFICATE_TYPE_2394, 604 @SerializedName("CERTIFICATE_TYPE_2395") 605 CERTIFICATE_TYPE_2395, 606 @SerializedName("CERTIFICATE_TYPE_2396") 607 CERTIFICATE_TYPE_2396, 608 @SerializedName("CERTIFICATE_TYPE_2399") 609 CERTIFICATE_TYPE_2399, 610 @SerializedName("CERTIFICATE_TYPE_2400") 611 CERTIFICATE_TYPE_2400, 612 @SerializedName("CERTIFICATE_TYPE_2391") 613 CERTIFICATE_TYPE_2391, 614 @SerializedName("CERTIFICATE_TYPE_2520") 615 CERTIFICATE_TYPE_2520, 616 @SerializedName("CERTIFICATE_TYPE_2521") 617 CERTIFICATE_TYPE_2521, 618 @SerializedName("CERTIFICATE_TYPE_2522") 619 CERTIFICATE_TYPE_2522 620 } 621 622 public enum FinanceType { 623 @SerializedName("BANK_AGENT") 624 BANK_AGENT, 625 @SerializedName("PAYMENT_AGENT") 626 PAYMENT_AGENT, 627 @SerializedName("INSURANCE") 628 INSURANCE, 629 @SerializedName("TRADE_AND_SETTLE") 630 TRADE_AND_SETTLE, 631 @SerializedName("OTHER") 632 OTHER 633 } 634 635 public static class IdCardInfo { 636 @SerializedName("id_card_copy") 637 public String idCardCopy; 638 639 @SerializedName("id_card_national") 640 public String idCardNational; 641 642 @SerializedName("id_card_name") 643 public String idCardName; 644 645 @SerializedName("id_card_number") 646 public String idCardNumber; 647 648 @SerializedName("id_card_address") 649 public String idCardAddress; 650 651 @SerializedName("card_period_begin") 652 public String cardPeriodBegin; 653 654 @SerializedName("card_period_end") 655 public String cardPeriodEnd; 656 } 657 658 public static class IdDocInfo { 659 @SerializedName("id_doc_copy") 660 public String idDocCopy; 661 662 @SerializedName("id_doc_copy_back") 663 public String idDocCopyBack; 664 665 @SerializedName("id_doc_name") 666 public String idDocName; 667 668 @SerializedName("id_doc_number") 669 public String idDocNumber; 670 671 @SerializedName("id_doc_address") 672 public String idDocAddress; 673 674 @SerializedName("doc_period_begin") 675 public String docPeriodBegin; 676 677 @SerializedName("doc_period_end") 678 public String docPeriodEnd; 679 } 680 681 public enum SalesScenesType { 682 @SerializedName("SALES_SCENES_STORE") 683 SALES_SCENES_STORE, 684 @SerializedName("SALES_SCENES_MP") 685 SALES_SCENES_MP, 686 @SerializedName("SALES_SCENES_MINI_PROGRAM") 687 SALES_SCENES_MINI_PROGRAM, 688 @SerializedName("SALES_SCENES_WEB") 689 SALES_SCENES_WEB, 690 @SerializedName("SALES_SCENES_APP") 691 SALES_SCENES_APP, 692 @SerializedName("SALES_SCENES_WEWORK") 693 SALES_SCENES_WEWORK 694 } 695 696 public static class StoreInfo { 697 @SerializedName("biz_store_name") 698 public String bizStoreName; 699 700 @SerializedName("biz_address_code") 701 public String bizAddressCode; 702 703 @SerializedName("biz_store_address") 704 public String bizStoreAddress; 705 706 @SerializedName("store_entrance_pic") 707 public List<String> storeEntrancePic; 708 709 @SerializedName("indoor_pic") 710 public List<String> indoorPic; 711 712 @SerializedName("biz_sub_appid") 713 public String bizSubAppid; 714 } 715 716 public static class MpInfo { 717 @SerializedName("mp_appid") 718 public String mpAppid; 719 720 @SerializedName("mp_sub_appid") 721 public String mpSubAppid; 722 723 @SerializedName("mp_pics") 724 public List<String> mpPics; 725 } 726 727 public static class MiniProgramInfo { 728 @SerializedName("mini_program_appid") 729 public String miniProgramAppid; 730 731 @SerializedName("mini_program_sub_appid") 732 public String miniProgramSubAppid; 733 734 @SerializedName("mini_program_pics") 735 public List<String> miniProgramPics; 736 } 737 738 public static class AppInfo { 739 @SerializedName("app_appid") 740 public String appAppid; 741 742 @SerializedName("app_sub_appid") 743 public String appSubAppid; 744 745 @SerializedName("app_pics") 746 public List<String> appPics; 747 } 748 749 public static class WebInfo { 750 @SerializedName("domain") 751 public String domain; 752 753 @SerializedName("web_authorisation") 754 public String webAuthorisation; 755 756 @SerializedName("web_appid") 757 public String webAppid; 758 } 759 760 public static class WeworkInfo { 761 @SerializedName("sub_corp_id") 762 public String subCorpId; 763 764 @SerializedName("wework_pics") 765 public List<String> weworkPics; 766 } 767 768} 769
需配合微信支付工具库 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 BusinessCode: wxpay_utility.String("1900013511_10000"), 28 ContactInfo: &ContactInfo{ 29 ContactType: IDHOLDERTYPE_LEGAL.Ptr(), 30 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 加密结果*/ 31 ContactIdDocType: IDENTIFICATIONTYPE_IDENTIFICATION_TYPE_IDCARD.Ptr(), 32 ContactIdNumber: wxpay_utility.String("pVd1HJ6zyvPedzGaV+X3qtmrq9bb9tPROvwia4ibL+F6mfjbzQIzfb3HHLEjZ4YiR/cJiCrZxnAqi+pjeKIEdkwzXRAI7FUhrfPK3SNjaBTEu9GmsugMIA9r3x887Q+ODuC8HH2nzAn7NGpE/e3yiHgWhk0ps5k5DP/2qIdGdONoDzZelrxCl/NWWNUyB93K9F+jC1JX2IMttdY+aQ6zBlw0xnOiNW6Hzy7UtC+xriudjD5APomty7/mYNxLMpRSvWKIjOv/69bDnuC4EL5Kz4jBHLiCyOb+tI0m2qhZ9evAM+Jv1z0NVa8MRtelw/wDa4SzfeespQO/0kjiwfqdfg=="), /*请传入 wxpay_utility.EncryptOAEPWithPublicKey 加密结果*/ 33 ContactIdDocCopy: wxpay_utility.String("jTpGmxUXqRTvDujqhThn4ReFxikqJ5YW6zFQ"), 34 ContactIdDocCopyBack: wxpay_utility.String("jTpGmxUX3FBWVQ5NJTZvvDujqhThn4ReFxikqJ5YW6zFQ"), 35 ContactPeriodBegin: wxpay_utility.String("2019-06-06"), 36 ContactPeriodEnd: wxpay_utility.String("2026-06-06"), 37 BusinessAuthorizationLetter: wxpay_utility.String("47ZC6GC-vnrbEny_Ie_An5-tCpqxucuxi-vByf3Gjm7KEIUv0OF4wFNIO4kqg05InE4d2I6_H7I4"), 38 Openid: wxpay_utility.String("pVd1HJ6zyvPedzGaV+X3qtmrq9bb9tPROvwia4ibL+F6mfjbzQIzfb3HHLEjZ4YiR/cJiCrZxnAqi+pjeKIEdkwzXRAI7FUhrfPK3SNjaBTEu9GmsugMIA9r3x887Q+ODuC8HH2nzAn7NGpE/e3yiHgWhk0ps5k5DP/2qIdGdONoDzZelrxCl/NWWNUyB93K9F+jC1JX2IMttdY+aQ6zBlw0xnOiNW6Hzy7UtC+xriudjD5APomty7/mYNxLMpRSvWKIjOv/69bDnuC4EL5Kz4jBHLiCyOb+tI0m2qhZ9evAM+Jv1z0NVa8MRtelw/wDa4SzfeespQO/0kjiwfqdfg== 字段加密: 使用APIv3定义的方式加密"), 39 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 加密结果*/ 40 ContactEmail: wxpay_utility.String("pVd1HJ6zyvPedzGaV+X3qtmrq9bb9tPROvwia4ibL+F6mfjbzQIzfb3HHLEjZ4YiR/cJiCrZxnAqi+pjeKIEdkwzXRAI7FUhrfPK3SNjaBTEu9GmsugMIA9r3x887Q+ODuC8HH2nzAn7NGpE/e3yiHgWhk0ps5k5DP/2qIdGdONoDzZelrxCl/NWWNUyB93K9F+jC1JX2IMttdY+aQ6zBlw0xnOiNW6Hzy7UtC+xriudjD5APomty7/mYNxLMpRSvWKIjOv/69bDnuC4EL5Kz4jBHLiCyOb+tI0m2qhZ9evAM+Jv1z0NVa8MRtelw/wDa4SzfeespQO/0kjiwfqdfg=="), /*请传入 wxpay_utility.EncryptOAEPWithPublicKey 加密结果*/ 41 }, 42 SubjectInfo: &SubjectInfo{ 43 SubjectType: SUBJECTTYPE_SUBJECT_TYPE_ENTERPRISE.Ptr(), 44 FinanceInstitution: wxpay_utility.Bool(true), 45 BusinessLicenseInfo: &BusinessLicense{ 46 LicenseCopy: wxpay_utility.String("47ZC6GC-vnrbEny__Ie_An5-tCpqxucuxi-vByf3Gjm7KE53JXvGy9tqZm2XAUf-4KGprrKhpVBDIUv0OF4wFNIO4kqg05InE4d2I6_H7I4"), 47 LicenseNumber: wxpay_utility.String("123456789012345678"), 48 MerchantName: wxpay_utility.String("腾讯科技有限公司"), 49 LegalPerson: wxpay_utility.String("张三"), 50 LicenseAddress: wxpay_utility.String("广东省深圳市南山区xx路xx号"), 51 PeriodBegin: wxpay_utility.String("2019-08-01"), 52 PeriodEnd: wxpay_utility.String("2029-08-01"), 53 }, 54 CertificateInfo: &CertificateInfo{ 55 CertCopy: wxpay_utility.String("0P3ng6KTIW4-Q_l2FjKLZuhHjBWoMAjmVtCz7ScmhEIThCaV-4BBgVwtNkCHO_XXqK5dE5YdOmFJBZR9FwczhJehHhAZN6BKXQPcs-VvdSo"), 56 CertType: CERTIFICATETYPE_CERTIFICATE_TYPE_2388.Ptr(), 57 CertNumber: wxpay_utility.String("111111111111"), 58 MerchantName: wxpay_utility.String("xx公益团体"), 59 CompanyAddress: wxpay_utility.String("广东省深圳市南山区xx路xx号"), 60 LegalPerson: wxpay_utility.String("李四"), 61 PeriodBegin: wxpay_utility.String("2019-08-01"), 62 PeriodEnd: wxpay_utility.String("2019-08-01"), 63 }, 64 CertificateLetterCopy: wxpay_utility.String("47ZC6GC-vnrbEny__Ie_An5-tCpqxucuxi-vByf3Gjm7KE53JXvGy9tqZm2XAUf-4KGprrKhpVBDIUv0OF4wFNIO4kqg05InE4d2I6_H7I4"), 65 FinanceInstitutionInfo: &FinanceInstitutionInfo{ 66 FinanceType: FINANCETYPE_BANK_AGENT.Ptr(), 67 FinanceLicensePics: []string{"0P3ng6KTIW4-Q_l2FjmFJBZR9FwczhJehHhAZN6BKXQPcs-VvdSo"}, 68 }, 69 IdentityInfo: &IdentityInfo{ 70 IdHolderType: IDHOLDERTYPE_LEGAL.Ptr(), 71 IdDocType: IDENTIFICATIONTYPE_IDENTIFICATION_TYPE_IDCARD.Ptr(), 72 AuthorizeLetterCopy: wxpay_utility.String("47ZC6GC-vnrbEny_Ie_An5-tCpqxucuxi-vByf3Gjm7KEIUv0OF4wFNIO4kqg05InE4d2I6_H7I4"), 73 IdCardInfo: &IdCardInfo{ 74 IdCardCopy: wxpay_utility.String("jTpGmxUX3FBWVQ5NJTZvlKX_gdU4cRz7z5NxpnFuAxhBTEO_PvWkfSCJ3zVIn001D8daLC-ehEuo0BJqRTvDujqhThn4ReFxikqJ5YW6zFQ"), 75 IdCardNational: wxpay_utility.String("47ZC6GC-vnrbEny__Ie_An5-tCpqxucuxi-vByf3Gjm7KE53JXvGy9tqZm2XAUf-4KGprrKhpVBDIUv0OF4wFNIO4kqg05InE4d2I6_H7I4"), 76 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 加密结果*/ 77 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 加密结果*/ 78 IdCardAddress: wxpay_utility.String("pVd1HJ6zyvPedzGaV+X3qtmrq9bb9tPROvwia4ibL+F6mfjbzQIzfb3HHLEjZ4YiR/cJiCrZxnAqi+pjeKIEdkwzXRAI7FUhrfPK3SNjaBTEu9GmsugMIA9r3x887Q+ODuC8HH2nzAn7NGpE/e3yiHgWhk0ps5k5DP/2qIdGdONoDzZelrxCl/NWWNUyB93K9F+jC1JX2IMttdY+aQ6zBlw0xnOiNW6Hzy7UtC+xriudjD5APomty7/mYNxLMpRSvWKIjOv/69bDnuC4EL5Kz4jBHLiCyOb+tI0m2qhZ9evAM+Jv1z0NVa8MRtelw/wDa4SzfeespQO/0kjiwfqdfg=="), /*请传入 wxpay_utility.EncryptOAEPWithPublicKey 加密结果*/ 79 CardPeriodBegin: wxpay_utility.String("2026-06-06"), 80 CardPeriodEnd: wxpay_utility.String("2026-06-06"), 81 }, 82 IdDocInfo: &IdDocInfo{ 83 IdDocCopy: wxpay_utility.String("jTpGmxUX3FBWVQ5NJTZvlKX_gdU4cRz7z5NxpnFuAxhBTEO_PvWkfSCJ3zVIn001D8daLC-ehEuo0BJqRTvDujqhThn4ReFxikqJ5YW6zFQ"), 84 IdDocCopyBack: wxpay_utility.String("jTpGmxUX3FBWVQ5NJTZvvDujqhThn4ReFxikqJ5YW6zFQ"), 85 IdDocName: wxpay_utility.String("pVd1HJ6zyvPedzGaV+X3qtmrq9bb9tPROvwia4ibL+F6mfjbzQIzfb3HHLEjZ4YiR/cJiCrZxnAqi+pjeKIEdkwzXRAI7FUhrfPK3SNjaBTEu9GmsugMIA9r3x887Q+ODuC8HH2nzAn7NGpE/e3yiHgWhk0ps5k5DP/2qIdGdONoDzZelrxCl/NWWNUyB93K9F+jC1JX2IMttdY+aQ6zBlw0xnOiNW6Hzy7UtC+xriudjD5APomty7/mYNxLMpRSvWKIjOv/69bDnuC4EL5Kz4jBHLiCyOb+tI0m2qhZ9evAM+Jv1z0NVa8MRtelw/wDa4SzfeespQO/0kjiwfqdfg=="), /*请传入 wxpay_utility.EncryptOAEPWithPublicKey 加密结果*/ 86 IdDocNumber: 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 加密结果*/ 87 IdDocAddress: wxpay_utility.String("pVd1HJ6zyvPedzGaV+X3qtmrq9bb9tPROvwia4ibL+F6mfjbzQIzfb3HHLEjZ4YiR/cJiCrZxnAqi+pjeKIEdkwzXRAI7FUhrfPK3SNjaBTEu9GmsugMIA9r3x887Q+ODuC8HH2nzAn7NGpE/e3yiHgWhk0ps5k5DP/2qIdGdONoDzZelrxCl/NWWNUyB93K9F+jC1JX2IMttdY+aQ6zBlw0xnOiNW6Hzy7UtC+xriudjD5APomty7/mYNxLMpRSvWKIjOv/69bDnuC4EL5Kz4jBHLiCyOb+tI0m2qhZ9evAM+Jv1z0NVa8MRtelw/wDa4SzfeespQO/0kjiwfqdfg=="), /*请传入 wxpay_utility.EncryptOAEPWithPublicKey 加密结果*/ 88 DocPeriodBegin: wxpay_utility.String("2019-06-06"), 89 DocPeriodEnd: wxpay_utility.String("2026-06-06"), 90 }, 91 Owner: wxpay_utility.Bool(true), 92 }, 93 UboInfoList: []UboInfoList{UboInfoList{ 94 UboIdDocType: IDENTIFICATIONTYPE_IDENTIFICATION_TYPE_IDCARD.Ptr(), 95 UboIdDocCopy: wxpay_utility.String("jTpGmxUXqRTvDujqhThn4ReFxikqJ5YW6zFQ"), 96 UboIdDocCopyBack: wxpay_utility.String("jTpGmxUX3FBWVQ5NJTZvvDujqhThn4ReFxikqJ5YW6zFQ"), 97 UboIdDocName: wxpay_utility.String("AOZdYGISxo4y44/Ug4P4TG5xzchG/5IL9DBd+Z0zZXkw=="), /*请传入 wxpay_utility.EncryptOAEPWithPublicKey 加密结果*/ 98 UboIdDocNumber: wxpay_utility.String("AOZdYGISxo4y44/Ug4P4TG5xzchG/5IL9DBd+Z0zZXkw=="), /*请传入 wxpay_utility.EncryptOAEPWithPublicKey 加密结果*/ 99 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 加密结果*/ 100 UboPeriodBegin: wxpay_utility.String("2019-06-06"), 101 UboPeriodEnd: wxpay_utility.String("2026-06-06"), 102 }}, 103 }, 104 BusinessInfo: &BusinessInfo{ 105 MerchantShortname: wxpay_utility.String("张三餐饮店"), 106 ServicePhone: wxpay_utility.String("0758XXXXX"), 107 SalesInfo: &SalesInfo{ 108 SalesScenesType: []SalesScenesType{SALESSCENESTYPE_SALES_SCENES_STORE}, 109 BizStoreInfo: &StoreInfo{ 110 BizStoreName: wxpay_utility.String("大郎烧饼"), 111 BizAddressCode: wxpay_utility.String("440305"), 112 BizStoreAddress: wxpay_utility.String("南山区xx大厦x层xxxx室"), 113 StoreEntrancePic: []string{"0P3ng6KTIW4-Q_l2FjKLZuhHjBWoMAjmVtCz7ScmhEIThCaV-4BBgVwtNkCHO_XXqK5dE5YdOmFJBZR9FwczhJehHhAZN6BKXQPcs-VvdSo"}, 114 IndoorPic: []string{"0P3ng6KTIW4-Q_l2FjKLZuhHjBWoMAjmVtCz7ScmhEIThCaV-4BBgVwtNkCHO_XXqK5dE5YdOmFJBZR9FwczhJehHhAZN6BKXQPcs-VvdSo"}, 115 BizSubAppid: wxpay_utility.String("wx1234567890123456"), 116 }, 117 MpInfo: &MpInfo{ 118 MpAppid: wxpay_utility.String("wx1234567890123456"), 119 MpSubAppid: wxpay_utility.String("wx1234567890123456"), 120 MpPics: []string{"example_MpPics"}, 121 }, 122 MiniProgramInfo: &MiniProgramInfo{ 123 MiniProgramAppid: wxpay_utility.String("wx1234567890123456"), 124 MiniProgramSubAppid: wxpay_utility.String("wx1234567890123456"), 125 MiniProgramPics: []string{"example_MiniProgramPics"}, 126 }, 127 AppInfo: &AppInfo{ 128 AppAppid: wxpay_utility.String("wx1234567890123456"), 129 AppSubAppid: wxpay_utility.String("wx1234567890123456"), 130 AppPics: []string{"example_AppPics"}, 131 }, 132 WebInfo: &WebInfo{ 133 Domain: wxpay_utility.String("http://www.qq.com"), 134 WebAuthorisation: wxpay_utility.String("47ZC6GC-vnrbEny__Ie_An5-tCpqxucuxi-vByf3Gjm7KE53JXvGy9tqZm2XAUf-4KGprrKhpVBDIUv0OF4wFNIO4kqg05InE4d2I6_H7I4"), 135 WebAppid: wxpay_utility.String("wx1234567890123456"), 136 }, 137 WeworkInfo: &WeworkInfo{ 138 SubCorpId: wxpay_utility.String("wx1234567890123456"), 139 WeworkPics: []string{"example_WeworkPics"}, 140 }, 141 }, 142 }, 143 SettlementInfo: &SettlementInfo{ 144 SettlementId: wxpay_utility.String("719"), 145 QualificationType: wxpay_utility.String("餐饮"), 146 Qualifications: []string{"example_Qualifications"}, 147 ActivitiesId: wxpay_utility.String("716"), 148 ActivitiesRate: wxpay_utility.String("0.6"), 149 ActivitiesAdditions: []string{"example_ActivitiesAdditions"}, 150 DebitActivitiesRate: wxpay_utility.String("0.54"), 151 CreditActivitiesRate: wxpay_utility.String("0.54"), 152 }, 153 BankAccountInfo: &BankAccountInfo{ 154 BankAccountType: BANKACCOUNTTYPE_BANK_ACCOUNT_TYPE_CORPORATE.Ptr(), 155 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 加密结果*/ 156 AccountBank: wxpay_utility.String("工商银行"), 157 BankAddressCode: wxpay_utility.String("110000"), 158 BankBranchId: wxpay_utility.String("402713354941"), 159 BankName: wxpay_utility.String("施秉县农村信用合作联社城关信用社"), 160 AccountNumber: wxpay_utility.String("d+xT+MQCvrLHUVDWv/8MR/dB7TkXM2YYZlokmXzFsWs35NXUot7C0NcxIrUF5FnxqCJHkNgKtxa6RxEYyba1+VBRLnqKG2fSy/Y5qDN08Ej9zHCwJjq52Wg1VG8MRugli9YMI1fI83KGBxhuXyemgS/hqFKsfYGiOkJqjTUpgY5VqjtL2N4l4z11T0ECB/aSyVXUysOFGLVfSrUxMPZy6jWWYGvT1+4P633f+R+ki1gT4WF/2KxZOYmli385ZgVhcR30mr4/G3HBcxi13zp7FnEeOsLlvBmI1PHN4C7Rsu3WL8sPndjXTd75kPkyjqnoMRrEEaYQE8ZRGYoeorwC+w=="), /*请传入 wxpay_utility.EncryptOAEPWithPublicKey 加密结果*/ 161 }, 162 AdditionInfo: &AdditionInfo{ 163 LegalPersonCommitment: wxpay_utility.String("47ZC6GC-vnrbEny__Ie_An5-tCpqxucuxi-vByf3Gjm7KE53JXvGy9tqZm2XAUf-4KGprrKhpVBDIUv0OF4wFNIO4kqg05InE4d2I6_H7I4"), 164 LegalPersonVideo: wxpay_utility.String("47ZC6GC-vnrbEny__Ie_An5-tCpqxucuxi-vByf3Gjm7KE53JXvGy9tqZm2XAUf-4KGprrKhpVBDIUv0OF4wFNIO4kqg05InE4d2I6_H7I4"), 165 BusinessAdditionPics: []string{"example_BusinessAdditionPics"}, 166 BusinessAdditionMsg: wxpay_utility.String("特殊情况,说明原因"), 167 }, 168 } 169 170 response, err := Submit(config, request) 171 if err != nil { 172 fmt.Printf("请求失败: %+v\n", err) 173 // TODO: 请求失败,根据状态码执行不同的处理 174 return 175 } 176 177 // TODO: 请求成功,继续业务逻辑 178 fmt.Printf("请求成功: %+v\n", response) 179} 180 181func Submit(config *wxpay_utility.MchConfig, request *SubmitReq) (response *SubmitResp, err error) { 182 const ( 183 host = "https://api.mch.weixin.qq.com" 184 method = "POST" 185 path = "/v3/applyment4sub/applyment/" 186 ) 187 188 reqUrl, err := url.Parse(fmt.Sprintf("%s%s", host, path)) 189 if err != nil { 190 return nil, err 191 } 192 reqBody, err := json.Marshal(request) 193 if err != nil { 194 return nil, err 195 } 196 httpRequest, err := http.NewRequest(method, reqUrl.String(), bytes.NewReader(reqBody)) 197 if err != nil { 198 return nil, err 199 } 200 httpRequest.Header.Set("Accept", "application/json") 201 httpRequest.Header.Set("Wechatpay-Serial", config.WechatPayPublicKeyId()) 202 httpRequest.Header.Set("Content-Type", "application/json") 203 authorization, err := wxpay_utility.BuildAuthorization(config.MchId(), config.CertificateSerialNo(), config.PrivateKey(), method, reqUrl.RequestURI(), reqBody) 204 if err != nil { 205 return nil, err 206 } 207 httpRequest.Header.Set("Authorization", authorization) 208 209 client := &http.Client{} 210 httpResponse, err := client.Do(httpRequest) 211 if err != nil { 212 return nil, err 213 } 214 respBody, err := wxpay_utility.ExtractResponseBody(httpResponse) 215 if err != nil { 216 return nil, err 217 } 218 if httpResponse.StatusCode >= 200 && httpResponse.StatusCode < 300 { 219 // 2XX 成功,验证应答签名 220 err = wxpay_utility.ValidateResponse( 221 config.WechatPayPublicKeyId(), 222 config.WechatPayPublicKey(), 223 &httpResponse.Header, 224 respBody, 225 ) 226 if err != nil { 227 return nil, err 228 } 229 response := &SubmitResp{} 230 if err := json.Unmarshal(respBody, response); err != nil { 231 return nil, err 232 } 233 234 return response, nil 235 } else { 236 return nil, wxpay_utility.NewApiException( 237 httpResponse.StatusCode, 238 httpResponse.Header, 239 respBody, 240 ) 241 } 242} 243 244type SubmitReq struct { 245 BusinessCode *string `json:"business_code,omitempty"` 246 ContactInfo *ContactInfo `json:"contact_info,omitempty"` 247 SubjectInfo *SubjectInfo `json:"subject_info,omitempty"` 248 BusinessInfo *BusinessInfo `json:"business_info,omitempty"` 249 SettlementInfo *SettlementInfo `json:"settlement_info,omitempty"` 250 BankAccountInfo *BankAccountInfo `json:"bank_account_info,omitempty"` 251 AdditionInfo *AdditionInfo `json:"addition_info,omitempty"` 252} 253 254type SubmitResp struct { 255 ApplymentId *int64 `json:"applyment_id,omitempty"` 256} 257 258type ContactInfo struct { 259 ContactType *IdHolderType `json:"contact_type,omitempty"` 260 ContactName *string `json:"contact_name,omitempty"` 261 ContactIdDocType *IdentificationType `json:"contact_id_doc_type,omitempty"` 262 ContactIdNumber *string `json:"contact_id_number,omitempty"` 263 ContactIdDocCopy *string `json:"contact_id_doc_copy,omitempty"` 264 ContactIdDocCopyBack *string `json:"contact_id_doc_copy_back,omitempty"` 265 ContactPeriodBegin *string `json:"contact_period_begin,omitempty"` 266 ContactPeriodEnd *string `json:"contact_period_end,omitempty"` 267 BusinessAuthorizationLetter *string `json:"business_authorization_letter,omitempty"` 268 Openid *string `json:"openid,omitempty"` 269 MobilePhone *string `json:"mobile_phone,omitempty"` 270 ContactEmail *string `json:"contact_email,omitempty"` 271} 272 273type SubjectInfo struct { 274 SubjectType *SubjectType `json:"subject_type,omitempty"` 275 FinanceInstitution *bool `json:"finance_institution,omitempty"` 276 BusinessLicenseInfo *BusinessLicense `json:"business_license_info,omitempty"` 277 CertificateInfo *CertificateInfo `json:"certificate_info,omitempty"` 278 CertificateLetterCopy *string `json:"certificate_letter_copy,omitempty"` 279 FinanceInstitutionInfo *FinanceInstitutionInfo `json:"finance_institution_info,omitempty"` 280 IdentityInfo *IdentityInfo `json:"identity_info,omitempty"` 281 UboInfoList []UboInfoList `json:"ubo_info_list,omitempty"` 282} 283 284type BusinessInfo struct { 285 MerchantShortname *string `json:"merchant_shortname,omitempty"` 286 ServicePhone *string `json:"service_phone,omitempty"` 287 SalesInfo *SalesInfo `json:"sales_info,omitempty"` 288} 289 290type SettlementInfo struct { 291 SettlementId *string `json:"settlement_id,omitempty"` 292 QualificationType *string `json:"qualification_type,omitempty"` 293 Qualifications []string `json:"qualifications,omitempty"` 294 ActivitiesId *string `json:"activities_id,omitempty"` 295 ActivitiesRate *string `json:"activities_rate,omitempty"` 296 ActivitiesAdditions []string `json:"activities_additions,omitempty"` 297 DebitActivitiesRate *string `json:"debit_activities_rate,omitempty"` 298 CreditActivitiesRate *string `json:"credit_activities_rate,omitempty"` 299} 300 301type BankAccountInfo struct { 302 BankAccountType *BankAccountType `json:"bank_account_type,omitempty"` 303 AccountName *string `json:"account_name,omitempty"` 304 AccountBank *string `json:"account_bank,omitempty"` 305 BankAddressCode *string `json:"bank_address_code,omitempty"` 306 BankBranchId *string `json:"bank_branch_id,omitempty"` 307 BankName *string `json:"bank_name,omitempty"` 308 AccountNumber *string `json:"account_number,omitempty"` 309} 310 311type AdditionInfo struct { 312 LegalPersonCommitment *string `json:"legal_person_commitment,omitempty"` 313 LegalPersonVideo *string `json:"legal_person_video,omitempty"` 314 BusinessAdditionPics []string `json:"business_addition_pics,omitempty"` 315 BusinessAdditionMsg *string `json:"business_addition_msg,omitempty"` 316} 317 318type IdHolderType string 319 320func (e IdHolderType) Ptr() *IdHolderType { 321 return &e 322} 323 324const ( 325 IDHOLDERTYPE_LEGAL IdHolderType = "LEGAL" 326 IDHOLDERTYPE_SUPER IdHolderType = "SUPER" 327) 328 329type IdentificationType string 330 331func (e IdentificationType) Ptr() *IdentificationType { 332 return &e 333} 334 335const ( 336 IDENTIFICATIONTYPE_IDENTIFICATION_TYPE_IDCARD IdentificationType = "IDENTIFICATION_TYPE_IDCARD" 337 IDENTIFICATIONTYPE_IDENTIFICATION_TYPE_OVERSEA_PASSPORT IdentificationType = "IDENTIFICATION_TYPE_OVERSEA_PASSPORT" 338 IDENTIFICATIONTYPE_IDENTIFICATION_TYPE_HONGKONG_PASSPORT IdentificationType = "IDENTIFICATION_TYPE_HONGKONG_PASSPORT" 339 IDENTIFICATIONTYPE_IDENTIFICATION_TYPE_MACAO_PASSPORT IdentificationType = "IDENTIFICATION_TYPE_MACAO_PASSPORT" 340 IDENTIFICATIONTYPE_IDENTIFICATION_TYPE_TAIWAN_PASSPORT IdentificationType = "IDENTIFICATION_TYPE_TAIWAN_PASSPORT" 341 IDENTIFICATIONTYPE_IDENTIFICATION_TYPE_FOREIGN_RESIDENT IdentificationType = "IDENTIFICATION_TYPE_FOREIGN_RESIDENT" 342 IDENTIFICATIONTYPE_IDENTIFICATION_TYPE_HONGKONG_MACAO_RESIDENT IdentificationType = "IDENTIFICATION_TYPE_HONGKONG_MACAO_RESIDENT" 343 IDENTIFICATIONTYPE_IDENTIFICATION_TYPE_TAIWAN_RESIDENT IdentificationType = "IDENTIFICATION_TYPE_TAIWAN_RESIDENT" 344) 345 346type SubjectType string 347 348func (e SubjectType) Ptr() *SubjectType { 349 return &e 350} 351 352const ( 353 SUBJECTTYPE_SUBJECT_TYPE_ENTERPRISE SubjectType = "SUBJECT_TYPE_ENTERPRISE" 354 SUBJECTTYPE_SUBJECT_TYPE_INSTITUTIONS SubjectType = "SUBJECT_TYPE_INSTITUTIONS" 355 SUBJECTTYPE_SUBJECT_TYPE_INDIVIDUAL SubjectType = "SUBJECT_TYPE_INDIVIDUAL" 356 SUBJECTTYPE_SUBJECT_TYPE_OTHERS SubjectType = "SUBJECT_TYPE_OTHERS" 357 SUBJECTTYPE_SUBJECT_TYPE_GOVERNMENT SubjectType = "SUBJECT_TYPE_GOVERNMENT" 358) 359 360type BusinessLicense struct { 361 LicenseCopy *string `json:"license_copy,omitempty"` 362 LicenseNumber *string `json:"license_number,omitempty"` 363 MerchantName *string `json:"merchant_name,omitempty"` 364 LegalPerson *string `json:"legal_person,omitempty"` 365 LicenseAddress *string `json:"license_address,omitempty"` 366 PeriodBegin *string `json:"period_begin,omitempty"` 367 PeriodEnd *string `json:"period_end,omitempty"` 368} 369 370type CertificateInfo struct { 371 CertCopy *string `json:"cert_copy,omitempty"` 372 CertType *CertificateType `json:"cert_type,omitempty"` 373 CertNumber *string `json:"cert_number,omitempty"` 374 MerchantName *string `json:"merchant_name,omitempty"` 375 CompanyAddress *string `json:"company_address,omitempty"` 376 LegalPerson *string `json:"legal_person,omitempty"` 377 PeriodBegin *string `json:"period_begin,omitempty"` 378 PeriodEnd *string `json:"period_end,omitempty"` 379} 380 381type FinanceInstitutionInfo struct { 382 FinanceType *FinanceType `json:"finance_type,omitempty"` 383 FinanceLicensePics []string `json:"finance_license_pics,omitempty"` 384} 385 386type IdentityInfo struct { 387 IdHolderType *IdHolderType `json:"id_holder_type,omitempty"` 388 IdDocType *IdentificationType `json:"id_doc_type,omitempty"` 389 AuthorizeLetterCopy *string `json:"authorize_letter_copy,omitempty"` 390 IdCardInfo *IdCardInfo `json:"id_card_info,omitempty"` 391 IdDocInfo *IdDocInfo `json:"id_doc_info,omitempty"` 392 Owner *bool `json:"owner,omitempty"` 393} 394 395type UboInfoList struct { 396 UboIdDocType *IdentificationType `json:"ubo_id_doc_type,omitempty"` 397 UboIdDocCopy *string `json:"ubo_id_doc_copy,omitempty"` 398 UboIdDocCopyBack *string `json:"ubo_id_doc_copy_back,omitempty"` 399 UboIdDocName *string `json:"ubo_id_doc_name,omitempty"` 400 UboIdDocNumber *string `json:"ubo_id_doc_number,omitempty"` 401 UboIdDocAddress *string `json:"ubo_id_doc_address,omitempty"` 402 UboPeriodBegin *string `json:"ubo_period_begin,omitempty"` 403 UboPeriodEnd *string `json:"ubo_period_end,omitempty"` 404} 405 406type SalesInfo struct { 407 SalesScenesType []SalesScenesType `json:"sales_scenes_type,omitempty"` 408 BizStoreInfo *StoreInfo `json:"biz_store_info,omitempty"` 409 MpInfo *MpInfo `json:"mp_info,omitempty"` 410 MiniProgramInfo *MiniProgramInfo `json:"mini_program_info,omitempty"` 411 AppInfo *AppInfo `json:"app_info,omitempty"` 412 WebInfo *WebInfo `json:"web_info,omitempty"` 413 WeworkInfo *WeworkInfo `json:"wework_info,omitempty"` 414} 415 416type BankAccountType string 417 418func (e BankAccountType) Ptr() *BankAccountType { 419 return &e 420} 421 422const ( 423 BANKACCOUNTTYPE_BANK_ACCOUNT_TYPE_CORPORATE BankAccountType = "BANK_ACCOUNT_TYPE_CORPORATE" 424 BANKACCOUNTTYPE_BANK_ACCOUNT_TYPE_PERSONAL BankAccountType = "BANK_ACCOUNT_TYPE_PERSONAL" 425) 426 427type CertificateType string 428 429func (e CertificateType) Ptr() *CertificateType { 430 return &e 431} 432 433const ( 434 CERTIFICATETYPE_CERTIFICATE_TYPE_2388 CertificateType = "CERTIFICATE_TYPE_2388" 435 CERTIFICATETYPE_CERTIFICATE_TYPE_2389 CertificateType = "CERTIFICATE_TYPE_2389" 436 CERTIFICATETYPE_CERTIFICATE_TYPE_2394 CertificateType = "CERTIFICATE_TYPE_2394" 437 CERTIFICATETYPE_CERTIFICATE_TYPE_2395 CertificateType = "CERTIFICATE_TYPE_2395" 438 CERTIFICATETYPE_CERTIFICATE_TYPE_2396 CertificateType = "CERTIFICATE_TYPE_2396" 439 CERTIFICATETYPE_CERTIFICATE_TYPE_2399 CertificateType = "CERTIFICATE_TYPE_2399" 440 CERTIFICATETYPE_CERTIFICATE_TYPE_2400 CertificateType = "CERTIFICATE_TYPE_2400" 441 CERTIFICATETYPE_CERTIFICATE_TYPE_2391 CertificateType = "CERTIFICATE_TYPE_2391" 442 CERTIFICATETYPE_CERTIFICATE_TYPE_2520 CertificateType = "CERTIFICATE_TYPE_2520" 443 CERTIFICATETYPE_CERTIFICATE_TYPE_2521 CertificateType = "CERTIFICATE_TYPE_2521" 444 CERTIFICATETYPE_CERTIFICATE_TYPE_2522 CertificateType = "CERTIFICATE_TYPE_2522" 445) 446 447type FinanceType string 448 449func (e FinanceType) Ptr() *FinanceType { 450 return &e 451} 452 453const ( 454 FINANCETYPE_BANK_AGENT FinanceType = "BANK_AGENT" 455 FINANCETYPE_PAYMENT_AGENT FinanceType = "PAYMENT_AGENT" 456 FINANCETYPE_INSURANCE FinanceType = "INSURANCE" 457 FINANCETYPE_TRADE_AND_SETTLE FinanceType = "TRADE_AND_SETTLE" 458 FINANCETYPE_OTHER FinanceType = "OTHER" 459) 460 461type IdCardInfo struct { 462 IdCardCopy *string `json:"id_card_copy,omitempty"` 463 IdCardNational *string `json:"id_card_national,omitempty"` 464 IdCardName *string `json:"id_card_name,omitempty"` 465 IdCardNumber *string `json:"id_card_number,omitempty"` 466 IdCardAddress *string `json:"id_card_address,omitempty"` 467 CardPeriodBegin *string `json:"card_period_begin,omitempty"` 468 CardPeriodEnd *string `json:"card_period_end,omitempty"` 469} 470 471type IdDocInfo struct { 472 IdDocCopy *string `json:"id_doc_copy,omitempty"` 473 IdDocCopyBack *string `json:"id_doc_copy_back,omitempty"` 474 IdDocName *string `json:"id_doc_name,omitempty"` 475 IdDocNumber *string `json:"id_doc_number,omitempty"` 476 IdDocAddress *string `json:"id_doc_address,omitempty"` 477 DocPeriodBegin *string `json:"doc_period_begin,omitempty"` 478 DocPeriodEnd *string `json:"doc_period_end,omitempty"` 479} 480 481type SalesScenesType string 482 483func (e SalesScenesType) Ptr() *SalesScenesType { 484 return &e 485} 486 487const ( 488 SALESSCENESTYPE_SALES_SCENES_STORE SalesScenesType = "SALES_SCENES_STORE" 489 SALESSCENESTYPE_SALES_SCENES_MP SalesScenesType = "SALES_SCENES_MP" 490 SALESSCENESTYPE_SALES_SCENES_MINI_PROGRAM SalesScenesType = "SALES_SCENES_MINI_PROGRAM" 491 SALESSCENESTYPE_SALES_SCENES_WEB SalesScenesType = "SALES_SCENES_WEB" 492 SALESSCENESTYPE_SALES_SCENES_APP SalesScenesType = "SALES_SCENES_APP" 493 SALESSCENESTYPE_SALES_SCENES_WEWORK SalesScenesType = "SALES_SCENES_WEWORK" 494) 495 496type StoreInfo struct { 497 BizStoreName *string `json:"biz_store_name,omitempty"` 498 BizAddressCode *string `json:"biz_address_code,omitempty"` 499 BizStoreAddress *string `json:"biz_store_address,omitempty"` 500 StoreEntrancePic []string `json:"store_entrance_pic,omitempty"` 501 IndoorPic []string `json:"indoor_pic,omitempty"` 502 BizSubAppid *string `json:"biz_sub_appid,omitempty"` 503} 504 505type MpInfo struct { 506 MpAppid *string `json:"mp_appid,omitempty"` 507 MpSubAppid *string `json:"mp_sub_appid,omitempty"` 508 MpPics []string `json:"mp_pics,omitempty"` 509} 510 511type MiniProgramInfo struct { 512 MiniProgramAppid *string `json:"mini_program_appid,omitempty"` 513 MiniProgramSubAppid *string `json:"mini_program_sub_appid,omitempty"` 514 MiniProgramPics []string `json:"mini_program_pics,omitempty"` 515} 516 517type AppInfo struct { 518 AppAppid *string `json:"app_appid,omitempty"` 519 AppSubAppid *string `json:"app_sub_appid,omitempty"` 520 AppPics []string `json:"app_pics,omitempty"` 521} 522 523type WebInfo struct { 524 Domain *string `json:"domain,omitempty"` 525 WebAuthorisation *string `json:"web_authorisation,omitempty"` 526 WebAppid *string `json:"web_appid,omitempty"` 527} 528 529type WeworkInfo struct { 530 SubCorpId *string `json:"sub_corp_id,omitempty"` 531 WeworkPics []string `json:"wework_pics,omitempty"` 532} 533
应答参数
200 OK
applyment_id 必填 integer
【微信支付申请单号】 微信支付分配的申请单号
应答示例
200 OK
1{ 2 "applyment_id" : 2000002124775691 3} 4
错误码
公共错误码
状态码 | 错误码 | 描述 | 解决方案 |
---|---|---|---|
400 | PARAM_ERROR | 参数错误 | 请根据错误提示正确传入参数 |
400 | INVALID_REQUEST | HTTP 请求不符合微信支付 APIv3 接口规则 | 请参阅 接口规则 |
401 | SIGN_ERROR | 验证不通过 | 请参阅 签名常见问题 |
500 | SYSTEM_ERROR | 系统异常,请稍后重试 | 请稍后重试 |
业务错误码
状态码 | 错误码 | 描述 | 解决方案 |
---|---|---|---|
400 | APPLYMENT_NOTEXIST | 申请单不存在 | 确认入参,传入正确的申请单编号 |
400 | PARAM_ERROR | 图片文件为空 | 商户更换文件后,重新调用 |
400 | PROCESSING | 存在流程进行中的申请单,请检查是否重入 | 可通过查询申请单状态查看此申请单的申请状态,或更换business_code提交新的申请单 |
403 | NO_AUTH | 商户权限异常 | 请确认是否已经开通相关权限 |
403 | REQUEST_BLOCKED | 未知图片类型 | 图片类型必须为JPG、BMP、PNG |
403 | REQUEST_BLOCKED | 图片meta信息不一致 | 请检查meta信息是否正确 |
403 | REQUEST_BLOCKED | 签名信息不匹配 | 请检查签名信息 |
429 | RATE_LIMITED | 频率限制 | 请降低调用频率 |