提交尽调资料

更新时间:2025.07.18

提交尽调资料。

接口说明

支持商户:【平台商户】

请求方式:【POST】/v3/mch-operation-manage/enhanced-due-diligence/{due_diligence_id}/submit

请求域名:【主域名】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


path  路径参数

 due_diligence_id  必填   string(128)

【尽调单号】 尽调单的单号,从产品中心-支付拓展工具-合作伙伴订阅通知中得到。


body  包体参数

 sub_mchid  必填   string(32)

【子商户号】 子商户的商户号


 submit_data  必填   string(65536)

【提交资料内容】 各个资料项的内容集合,基于查询尽调单接口返回的资料项收集要求,提供对应的 JSON 结构的字符串。
对于资料的说明,可以参考:商户尽职调查开发指引

请求示例

Java
Go
curl

需配合微信支付工具库 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 SubmitEnhancedDueDiligence {
26  private static String HOST = "https://api.mch.weixin.qq.com";
27  private static String METHOD = "POST";
28  private static String PATH = "/v3/mch-operation-manage/enhanced-due-diligence/{due_diligence_id}/submit";
29
30  public static void main(String[] args) {
31    // TODO: 请准备商户开发必要参数,参考:https://pay.weixin.qq.com/doc/v3/partner/4013080340
32    SubmitEnhancedDueDiligence client = new SubmitEnhancedDueDiligence(
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    SubmitEnhancedDueDiligenceRequest request = new SubmitEnhancedDueDiligenceRequest();
41    request.dueDiligenceId = "123000110_2_2190381dakdajois1283i12jo";
42    request.subMchid = "123000110";
43    request.submitData = "{     \"record_fields\": [         {             \"item_id\": 130020,             \"field_name\": \"ubo1_certificate_type\",             \"name\": \"UBO1证件类型\",             \"type\": 11,             \"field_data\": \"68\"         },         {             \"item_id\": 130021,             \"field_name\": \"ubo1_front_photo\",             \"name\": \"UBO1证件正面照片\",             \"type\": 2,             \"field_data\": \"V1_ld15ofRa7wJl6tkue-mCkB5HW7lfD2HZebch3ZVVmHUbqXDOhEwxDCXmgwkXkOkDDGg2B1ManZ6jJSk8ryk4JSjhCQxEdQhnuK8twPnhL1w_Re8UAwiV4IWWozXCykTqo6Q\"         },         {             \"item_id\": 130022,             \"field_name\": \"ubo1_back_photo\",             \"name\": \"UBO1证件反面照片\",             \"type\": 2,             \"field_data\": \"V1_ld15ofRa7wJl6tkue-mCkB5HW7lfD2HZebch3ZVVmHUbqXDOhEwxDCXmgwkXkOkDDGg2B1ManZ6jJSk8ryk4JSjhCQxEdQhnuK8twPnhL1w_Re8UAwiV4IWWozXCykTqo6Q\"         },         {             \"item_id\": 130023,             \"field_name\": \"ubo1_name\",             \"name\": \"UBO1证件姓名\",             \"type\": 1,             \"field_data\": \"eZ4c21W/T269LTw6LegGPVw4lIJJ3nt7Z7vHBfsybs3q01JsbVNhl2o29xks/Gzszj3TtI3mbUMWD7E2xvV7E1JcGWbpTVAxLCrBn95CYhmhfnuON/aG9GpiWPTQBdbbYU6ehFmI8yOoupn6xIIJlTDjAsEAu+rS51nGWycMzu/Ule4RvLD2nIEHdACg8YMsecEExjxlxXx6Eucx20kC9n/P34uUOHmqRTAxtf32HwkXVvU2bUneNUreUJnE6j+1jmjX/XQBwptI9E6UGmeNH+om8rQS9OwFFFJ+BsDzRfTUbBxiW+vKo216cKa90qciKYeWEucFu1Mm1+8bDlfQQA==\"         },         {             \"item_id\": 130068,             \"field_name\": \"account_opening_purpose\",             \"name\": \"开户目的\",             \"type\": 11,             \"repeated_field_data\": [                 \"1\",                 \"2\"             ]         }     ] }";
44    try {
45      SubmitEnhancedDueDiligenceResponse response = client.run(request);
46
47      // TODO: 请求成功,继续业务逻辑
48      System.out.println(response);
49    } catch (WXPayUtility.ApiException e) {
50      // TODO: 请求失败,根据状态码执行不同的逻辑
51      e.printStackTrace();
52    }
53  }
54
55  public SubmitEnhancedDueDiligenceResponse run(SubmitEnhancedDueDiligenceRequest request) {
56    String uri = PATH;
57    uri = uri.replace("{due_diligence_id}", WXPayUtility.urlEncode(request.dueDiligenceId));
58    String reqBody = WXPayUtility.toJson(request);
59
60    Request.Builder reqBuilder = new Request.Builder().url(HOST + uri);
61    reqBuilder.addHeader("Accept", "application/json");
62    reqBuilder.addHeader("Wechatpay-Serial", wechatPayPublicKeyId);
63    reqBuilder.addHeader("Authorization", WXPayUtility.buildAuthorization(mchid, certificateSerialNo,privateKey, METHOD, uri, reqBody));
64    reqBuilder.addHeader("Content-Type", "application/json");
65    RequestBody requestBody = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), reqBody);
66    reqBuilder.method(METHOD, requestBody);
67    Request httpRequest = reqBuilder.build();
68
69    // 发送HTTP请求
70    OkHttpClient client = new OkHttpClient.Builder().build();
71    try (Response httpResponse = client.newCall(httpRequest).execute()) {
72      String respBody = WXPayUtility.extractBody(httpResponse);
73      if (httpResponse.code() >= 200 && httpResponse.code() < 300) {
74        // 2XX 成功,验证应答签名
75        WXPayUtility.validateResponse(this.wechatPayPublicKeyId, this.wechatPayPublicKey,
76            httpResponse.headers(), respBody);
77
78        // 从HTTP应答报文构建返回数据
79        return WXPayUtility.fromJson(respBody, SubmitEnhancedDueDiligenceResponse.class);
80      } else {
81        throw new WXPayUtility.ApiException(httpResponse.code(), respBody, httpResponse.headers());
82      }
83    } catch (IOException e) {
84      throw new UncheckedIOException("Sending request to " + uri + " failed.", e);
85    }
86  }
87
88  private final String mchid;
89  private final String certificateSerialNo;
90  private final PrivateKey privateKey;
91  private final String wechatPayPublicKeyId;
92  private final PublicKey wechatPayPublicKey;
93
94  public SubmitEnhancedDueDiligence(String mchid, String certificateSerialNo, String privateKeyFilePath, String wechatPayPublicKeyId, String wechatPayPublicKeyFilePath) {
95    this.mchid = mchid;
96    this.certificateSerialNo = certificateSerialNo;
97    this.privateKey = WXPayUtility.loadPrivateKeyFromPath(privateKeyFilePath);
98    this.wechatPayPublicKeyId = wechatPayPublicKeyId;
99    this.wechatPayPublicKey = WXPayUtility.loadPublicKeyFromPath(wechatPayPublicKeyFilePath);
100  }
101
102  public static class SubmitEnhancedDueDiligenceRequest {
103    @SerializedName("sub_mchid")
104    public String subMchid;
105  
106    @SerializedName("due_diligence_id")
107    @Expose(serialize = false)
108    public String dueDiligenceId;
109  
110    @SerializedName("submit_data")
111    public String submitData;
112  }
113  
114  public static class SubmitEnhancedDueDiligenceResponse {
115    @SerializedName("due_diligence_state")
116    public EnumTypeDueDiligenceState dueDiligenceState;
117  
118    @SerializedName("submit_time")
119    public String submitTime;
120  
121    @SerializedName("submission_template")
122    public String submissionTemplate;
123  
124    @SerializedName("submission_data")
125    public String submissionData;
126  }
127  
128  public enum EnumTypeDueDiligenceState {
129    @SerializedName("DUE_DILIGENCE_STATE_COLLECTING")
130    DUE_DILIGENCE_STATE_COLLECTING,
131    @SerializedName("DUE_DILIGENCE_STATE_AUDITING")
132    DUE_DILIGENCE_STATE_AUDITING,
133    @SerializedName("DUE_DILIGENCE_STATE_REJECTED")
134    DUE_DILIGENCE_STATE_REJECTED,
135    @SerializedName("DUE_DILIGENCE_STATE_EXPIRED")
136    DUE_DILIGENCE_STATE_EXPIRED,
137    @SerializedName("DUE_DILIGENCE_STATE_CANCELLED")
138    DUE_DILIGENCE_STATE_CANCELLED,
139    @SerializedName("DUE_DILIGENCE_STATE_FINISHED")
140    DUE_DILIGENCE_STATE_FINISHED
141  }
142  
143}
144

应答参数

200 OK

 due_diligence_state  必填   string

【尽调单状态】 当前尽调单据所处状态。
状态扭转可以参考:商户尽职调查开发指引

可选取值

  • DUE_DILIGENCE_STATE_COLLECTING:  待填写

  • DUE_DILIGENCE_STATE_AUDITING:  审核中

  • DUE_DILIGENCE_STATE_REJECTED:  已驳回

  • DUE_DILIGENCE_STATE_EXPIRED:  已过期

  • DUE_DILIGENCE_STATE_CANCELLED:  已终止

  • DUE_DILIGENCE_STATE_FINISHED:  已完成


 submit_time  选填   string

【提交时间】 尽调单提交后返回,遵循rfc3339标准格式:yyyy-MM-DDThh:mm:ss+TIMEZONE


 submission_template  必填   string(65536)

【尽调要求提交的资料】 要求商户提交的尽调资料,JSON 序列化后的字符串
对于资料的说明,可以参考:商户尽职调查开发指引


 submission_data  选填   string(65536)

【尽调已经提交的资料】 已经提交的资料,仅审核中、审核驳回时返回

应答示例

200 OK

1{
2  "due_diligence_state" : "DUE_DILIGENCE_STATE_COLLECTING",
3  "submit_time" : "2015-05-20T13:29:35.120-08:00",
4  "submission_template" : "{       \"item_id\": \"130001\",       \"field_name\": \"credential_type\",       \"name\": \"证书类型\",       \"type\": 11,       \"tips\": \"\",       \"placeholder\": \"\",       \"tooltip\": \"\",       \"required\": 1,       \"check_rule\": {         \"min_length\": 1,         \"max_length\": 1,         \"enum_keys\": [1, 2388, 2389],         \"enum_values\": [\"营业执照\", \"事业单位法人证书\", \"统一社会信用代码证书\"]       },       \"need_encrypt\":false }",
5  "submission_data" : "// 四类资料项类型均给出示例 {     \t\"record_fields\": [         { // 字符串类型             \"item_id\": 130004,             \"field_name\": \"credential_registration_address\",             \"name\": \"证书注册地址\",             \"type\": 1,             \"field_data\": \"ri8U5FUSmHh1peGNBUvG+VwGHl31ymiLms5V1yhTbBWUApJDInme1b+ndtrlAielJYpQE41sSxj46ePMto2mySBIJjgCIyChLCTQ580M5pNKglAkjTnXwzJXyPhpyzkpdeFfUDjWc+qd6G4UwrL70br/EEqfQbGNaUKX6jAGjB8wd8wndImMB3iB2vUuAOL+6giLWCBBaC50QRfCTDlGi0c41Gt92tCrRSI7pWzU1cxxJwng7M53/J5PhI+eikLqbhUYlRPHYl6j0ouRItWHCRORYKuz6enluXyFwUCaaR3IeINSM8CwjHp6spnTIo70UaRJWAcZ0jQp/lwX2JVxaw==\"// 加密后的地址         },         { // 日期类型             \"item_id\": 130005,             \"field_name\": \"credential_start_date\",             \"name\": \"经营证照有效期开始日期\",             \"type\": 15,             \"field_data\": \"2020-01-03\"         },         { // 日期类型——长期             \"item_id\": 130006,             \"field_name\": \"credential_end_date\",             \"name\": \"经营证照有效期结束日期\",             \"type\": 15,             \"field_data\": \"长期\"         },         { // 选择器类型——多选             \"item_id\": 130068,             \"field_name\": \"account_opening_purpose\",             \"name\": \"开户目的\",             \"type\": 11,             \"repeated_field_data\": [                 \"1\",                 \"2\"             ]         },         { // 选择器类型——单选             \"item_id\": 100077,             \"field_name\": \"certificate_type\",             \"name\": \"证件类型\",             \"type\": 11,             \"field_data\": \"68\"         },         { // 图片类型             \"item_id\": 130013,             \"field_name\": \"certificate_front_photo\",             \"name\": \"证件正面照片\",             \"type\": 2,             \"field_data\": \"V1_B1JjMhCA3714g4Gbs_hDBh4PbttbD2HZt3pLGMZ_mVUn-szjdkQSiyXMnEIUr-kDDHYM5lMVFuQ1D1sCPOC-pcbhCQxYfQ9hsKcnyfisSnBL\"         },         { // 图片类型             \"item_id\": 130014,             \"field_name\": \"certificate_back_photo\",             \"name\": \"证件反面照片\",             \"type\": 2,             \"field_data\": \"V1_aF69-5OeYw4LBJnCeed10x4PbttbD2HZc57Kb6fhhi7dHYuwpHDzASWilEIUr-kDDBKiBx2w_0268DLMgNQb1lbhCQxYfQ9hsKcnyfisSnBL\"         } \t] }"
6}
7

 

错误码

公共错误码

状态码

错误码

描述

解决方案

400

PARAM_ERROR

参数错误

请根据错误提示正确传入参数

400

INVALID_REQUEST

HTTP 请求不符合微信支付 APIv3 接口规则

请参阅 接口规则

401

SIGN_ERROR

验证不通过

请参阅 签名常见问题

500

SYSTEM_ERROR

系统异常,请稍后重试

请稍后重试

业务错误码

状态码

错误码

描述

解决方案

404

NOT_FOUND

强化尽调单号不存在

确认尽调单号

 

反馈
咨询
目录
置顶