查询子商户下指定商户管理记录

更新时间:2025.05.21

通过该接口可查询子商户下指定的商户管理记录

接口说明

支持商户:【普通服务商】

请求方式:【GET】/v3/mch-manage/mch-manage-records/{manage_record_id}

请求域名:【主域名】https://api.mch.weixin.qq.com 使用该域名将访问就近的接入点

     【备域名】https://api2.mch.weixin.qq.com 使用该域名将访问异地的接入点 ,指引点击查看

请求参数

Header  HTTP头参数

 Authorization  必填 string

请参考签名认证生成认证信息


 Accept  必填 string

请设置为application/json


path  路径参数

 manage_record_id  必填   string(128)

【商户管理记录ID】 商户管理记录的主键,唯一定义此资源的标识,可从“分页查询子商户名下的商户管理记录”接口的返回参数获取


query  查询参数

 sub_mchid  必填   string(32)

【子商户号】 由服务商为子商户进件后获取,具体请参考服务商模式开发必要参数说明

请求示例

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 QueryMchManageRecord {
26  private static String HOST = "https://api.mch.weixin.qq.com";
27  private static String METHOD = "GET";
28  private static String PATH = "/v3/mch-manage/mch-manage-records/{manage_record_id}";
29
30  public static void main(String[] args) {
31    // TODO: 请准备商户开发必要参数,参考:https://pay.weixin.qq.com/doc/v3/partner/4013080340
32    QueryMchManageRecord client = new QueryMchManageRecord(
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    QueryMchManageRecordRequest request = new QueryMchManageRecordRequest();
41    request.manageRecordId = "M1210999900435123451697535102441";
42    request.subMchid = "123000110";
43    try {
44      MchManageRecordsEntity response = client.run(request);
45
46      // TODO: 请求成功,继续业务逻辑
47      System.out.println(response);
48    } catch (WXPayUtility.ApiException e) {
49      // TODO: 请求失败,根据状态码执行不同的逻辑
50      e.printStackTrace();
51    }
52  }
53
54  public MchManageRecordsEntity run(QueryMchManageRecordRequest request) {
55    String uri = PATH;
56    uri = uri.replace("{manage_record_id}", WXPayUtility.urlEncode(request.manageRecordId));
57    Map<String, Object> args = new HashMap<>();
58    args.put("sub_mchid", request.subMchid);
59    uri = uri + "?" + WXPayUtility.urlEncode(args);
60
61    Request.Builder reqBuilder = new Request.Builder().url(HOST + uri);
62    reqBuilder.addHeader("Accept", "application/json");
63    reqBuilder.addHeader("Wechatpay-Serial", wechatPayPublicKeyId);
64    reqBuilder.addHeader("Authorization", WXPayUtility.buildAuthorization(mchid, certificateSerialNo, privateKey, METHOD, uri, null));
65    reqBuilder.method(METHOD, null);
66    Request httpRequest = reqBuilder.build();
67
68    // 发送HTTP请求
69    OkHttpClient client = new OkHttpClient.Builder().build();
70    try (Response httpResponse = client.newCall(httpRequest).execute()) {
71      String respBody = WXPayUtility.extractBody(httpResponse);
72      if (httpResponse.code() >= 200 && httpResponse.code() < 300) {
73        // 2XX 成功,验证应答签名
74        WXPayUtility.validateResponse(this.wechatPayPublicKeyId, this.wechatPayPublicKey,
75            httpResponse.headers(), respBody);
76
77        // 从HTTP应答报文构建返回数据
78        return WXPayUtility.fromJson(respBody, MchManageRecordsEntity.class);
79      } else {
80        throw new WXPayUtility.ApiException(httpResponse.code(), respBody, httpResponse.headers());
81      }
82    } catch (IOException e) {
83      throw new UncheckedIOException("Sending request to " + uri + " failed.", e);
84    }
85  }
86
87  private final String mchid;
88  private final String certificateSerialNo;
89  private final PrivateKey privateKey;
90  private final String wechatPayPublicKeyId;
91  private final PublicKey wechatPayPublicKey;
92
93  public QueryMchManageRecord(String mchid, String certificateSerialNo, String privateKeyFilePath, String wechatPayPublicKeyId, String wechatPayPublicKeyFilePath) {
94    this.mchid = mchid;
95    this.certificateSerialNo = certificateSerialNo;
96    this.privateKey = WXPayUtility.loadPrivateKeyFromPath(privateKeyFilePath);
97    this.wechatPayPublicKeyId = wechatPayPublicKeyId;
98    this.wechatPayPublicKey = WXPayUtility.loadPublicKeyFromPath(wechatPayPublicKeyFilePath);
99  }
100
101  public static class QueryMchManageRecordRequest {
102    @SerializedName("sub_mchid")
103    @Expose(serialize = false)
104    public String subMchid;
105  
106    @SerializedName("manage_record_id")
107    @Expose(serialize = false)
108    public String manageRecordId;
109  }
110  
111  public static class MchManageRecordsEntity {
112    @SerializedName("sub_mchid")
113    public String subMchid;
114  
115    @SerializedName("manage_record_id")
116    public String manageRecordId;
117  
118    @SerializedName("manage_record_type")
119    public EnumTypeMchManageRecordType manageRecordType;
120  
121    @SerializedName("manage_time")
122    public String manageTime;
123  
124    @SerializedName("manage_reason")
125    public String manageReason;
126  
127    @SerializedName("limit_ability")
128    public String limitAbility;
129  
130    @SerializedName("recover_way")
131    public EnumTypeManageRecoverWay recoverWay;
132  
133    @SerializedName("allow_submit")
134    public Boolean allowSubmit;
135  
136    @SerializedName("forbid_submit_reason")
137    public String forbidSubmitReason;
138  
139    @SerializedName("submit_start_time")
140    public String submitStartTime;
141  
142    @SerializedName("submit_end_time")
143    public String submitEndTime;
144  
145    @SerializedName("requested_item_info")
146    public String requestedItemInfo;
147  
148    @SerializedName("manage_record_state")
149    public EnumTypeMchManageRecordState manageRecordState;
150  
151    @SerializedName("recover_time")
152    public String recoverTime;
153  
154    @SerializedName("recover_reason")
155    public EnumTypeRecoverReason recoverReason;
156  
157    @SerializedName("reject_reason")
158    public String rejectReason;
159  
160    @SerializedName("approve_time")
161    public String approveTime;
162  }
163  
164  public enum EnumTypeMchManageRecordType {
165    @SerializedName("FUNCTIONAL_LIMIT_RECORD")
166    FUNCTIONAL_LIMIT_RECORD,
167    @SerializedName("INVESTIGATE_RECORD")
168    INVESTIGATE_RECORD
169  }
170  
171  public enum EnumTypeManageRecoverWay {
172    @SerializedName("SUBMIT_INFORMATION")
173    SUBMIT_INFORMATION,
174    @SerializedName("VERIFY_INACTIVE_MERCHANT_IDENTITY")
175    VERIFY_INACTIVE_MERCHANT_IDENTITY,
176    @SerializedName("MODIFY_ORGANIZATION_INFORMATION")
177    MODIFY_ORGANIZATION_INFORMATION,
178    @SerializedName("OTHER")
179    OTHER
180  }
181  
182  public enum EnumTypeMchManageRecordState {
183    @SerializedName("PENDING")
184    PENDING,
185    @SerializedName("SUBMITTED")
186    SUBMITTED,
187    @SerializedName("EXPIRED")
188    EXPIRED,
189    @SerializedName("UNDER_REVIEW")
190    UNDER_REVIEW,
191    @SerializedName("RECOVERED")
192    RECOVERED,
193    @SerializedName("REJECTED")
194    REJECTED
195  }
196  
197  public enum EnumTypeRecoverReason {
198    @SerializedName("MERCHANT_SUBMIT_RECOVER")
199    MERCHANT_SUBMIT_RECOVER,
200    @SerializedName("MERCHANT_OPERATE_RECOVER")
201    MERCHANT_OPERATE_RECOVER,
202    @SerializedName("PLATFORM_AUTO_RECOVER")
203    PLATFORM_AUTO_RECOVER
204  }
205  
206}
207

应答参数

200 OK

 sub_mchid  选填   string(32)

【子商户号】 查询成功时会返回,子商户的商户号


 manage_record_id  选填   string(64)

【商户管理记录ID】 查询成功时会返回,商户管理记录的主键,唯一定义此资源的标识


 manage_record_type  选填   string

【商户管理记录类型】 查询成功时会返回,商户管理记录的类型

可选取值

  • FUNCTIONAL_LIMIT_RECORD:  功能限制记录,表示商户已被处置,需整改或提交资料

  • INVESTIGATE_RECORD:  功能限制记录,表示商户未被处置,但需提交资料


 manage_time  选填   string(64)

【管控时间】 查询成功时会返回,遵循rfc3339标准格式:yyyy-MM-DDThh:mm:ss+TIMEZONE


 manage_reason  选填   string(1024)

【管控原因】 查询成功时会返回,描述商户被发起管控或者要求提交资料的原因


 limit_ability  选填   string(1024)

【限制功能】 查询成功时会返回,描述商户被限制了哪些功能


 recover_way  选填   string

【解除管控方式】 查询成功时会返回,解除管控的方式

可选取值

  • SUBMIT_INFORMATION:  按要求提交资料,审核通过后解脱

  • VERIFY_INACTIVE_MERCHANT_IDENTITY:  发起不活跃商户身份核实后解脱

  • MODIFY_ORGANIZATION_INFORMATION:  按要求修改主体资料后解脱

  • OTHER:  其他方式


 allow_submit  选填   boolean

【是否允许提交资料】 查询成功时会返回,本条商户管理记录是否允许子商户提交资料


 forbid_submit_reason  选填   string(1024)

【禁止提交资料原因】 查询成功时会返回,不允许商户提交资料的原因


 submit_start_time  选填   string(64)

【可提交资料开始时间】 查询成功时会返回,当不限制提交开始时间时,返回“不限制”,否则返回遵循rfc3339标准格式:yyyy-MM-DDThh:mm:ss+TIMEZONE


 submit_end_time  选填   string(64)

【可提交资料结束时间】 查询成功时会返回,当不限制提交结束时间时,返回“不限制”,否则返回遵循rfc3339标准格式:yyyy-MM-DDThh:mm:ss+TIMEZONE


 requested_item_info  选填   string(32000000)

【要求提交的资料】 查询成功时会返回,要求商户提交的资料及其规则,JSON序列化后的字符串,详见资料格式说明文档


 manage_record_state  选填   string

【商户管理记录状态】 查询成功时会返回,商户管理记录的状态

可选取值

  • PENDING:  待处理,需要商户按要求处理

  • SUBMITTED:  已提交要求的材料

  • EXPIRED:  超时未处理,已过期

  • UNDER_REVIEW:  资料已提交,审核中

  • RECOVERED:  管控已解脱

  • REJECTED:  审核驳回


 recover_time  选填   string(64)

【解除管控时间】 已解除管控的记录会返回,遵循rfc3339标准格式:yyyy-MM-DDThh:mm:ss+TIMEZONE


 recover_reason  选填   string

【解除管控原因】 查询成功时会返回,商户管理记录解除管控的原因

可选取值

  • MERCHANT_SUBMIT_RECOVER:  商户提交申诉资料后恢复权限

  • MERCHANT_OPERATE_RECOVER:  商户按要求执行操作(例如修改主体资料)后恢复

  • PLATFORM_AUTO_RECOVER:  平台自动发起恢复


 reject_reason  选填   string(1024)

【申诉驳回原因】 查询成功时会返回,申诉审核驳回的原因


 approve_time  选填   string(64)

【审核时间】 已完成申诉审核审核的记录会返回,遵循rfc3339标准格式:yyyy-MM-DDThh:mm:ss+TIMEZONE

应答示例

200 OK

1{
2  "sub_mchid" : "123000110",
3  "manage_record_id" : "M1210999900435123451697535102441",
4  "manage_record_type" : "FUNCTIONAL_LIMIT_RECORD",
5  "manage_time" : "2018-06-08T10:34:56+08:00",
6  "manage_reason" : "涉嫌信用卡套现",
7  "limit_ability" : "关闭支付权限,关闭体现权限",
8  "recover_way" : "SUBMIT_INFORMATION",
9  "allow_submit" : true,
10  "forbid_submit_reason" : "应平台管理要求,此单据不支持申诉",
11  "submit_start_time" : "2018-06-08T10:34:56+08:00",
12  "submit_end_time" : "2018-06-08T10:34:56+08:00",
13  "requested_item_info" : "{ \t\"record_fields\": [{ \t\t\t\"item_id\": \"100004\", \t\t\t\"field_name\": \"legal_person_card_id\", \t\t\t\"name\": \"企业法人身份证号\", \t\t\t\"type\": 1, \t\t\t\"tips\": \"\", \t\t\t\"placeholder\": \"请输入企业法人身份证号\", \t\t\t\"tooltip\": \"需要填写完整身份证号\", \t\t\t\"required\": 1, \t\t\t\"string_check_rule\": { \t\t\t\t\"min_string_length\": 1, \t\t\t\t\"max_string_length\": 50, \t\t\t\t\"validator\": \"idcard\" \t\t\t}, \t\t\t\"need_encrypt\": true \t\t}, \t\t{ \t\t\t\"item_id\": \"100005\", \t\t\t\"field_name\": \"legal_person_cert_type\", \t\t\t\"name\": \"企业法人证件类型\", \t\t\t\"type\": 4, \t\t\t\"tips\": \"\", \t\t\t\"placeholder\": \"请选择证件类型\", \t\t\t\"tooltip\": \"\", \t\t\t\"required\": 0, \t\t\t\"enum_check_rule\": { \t\t\t\t\"min_list_length\": 1, \t\t\t\t\"max_list_length\": 1, \t\t\t\t\"enum_values\": [\"大陆居民身份证\", \"港澳台通行证\"] \t\t\t}, \t\t\t\"need_encrypt\": false \t\t}, \t\t{ \t\t\t\"item_id\": \"100006\", \t\t\t\"field_name\": \"inland_cert_card_image\", \t\t\t\"name\": \"大陆居民身份证照片\", \t\t\t\"type\": 2, \t\t\t\"tips\": \"请上传图片\", \t\t\t\"placeholder\": \"\", \t\t\t\"tooltip\": \"需要正面和反面两张照片\", \t\t\t\"required\": 1, \t\t\t\"need_encrypt\": false, \t\t\t\"file_check_rule\": { \t\t\t\t\"min_list_length\": 2, \t\t\t\t\"max_list_length\": 2, \t\t\t\t\"enum_file_exts\": [\"png\", \"jpg\", \"jpeg\"], \t\t\t\t\"max_file_size\": 5 \t\t\t}, \t\t\t\"relations\": [{ \t\t\t\t\"source_key\": 100005, \t\t\t\t\"source_value\": \"大陆居民身份证\" \t\t\t}] \t\t} \t] }",
14  "manage_record_state" : "PENDING",
15  "recover_time" : "2018-06-08T10:34:56+08:00",
16  "recover_reason" : "MERCHANT_SUBMIT_RECOVER",
17  "reject_reason" : "身份证信息遮挡,请上传清晰的身份证图片",
18  "approve_time" : "2018-06-08T10:34:56+08:00"
19}
20

 

错误码

公共错误码

状态码

错误码

描述

解决方案

400

PARAM_ERROR

参数错误

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

400

INVALID_REQUEST

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

请参阅 接口规则

401

SIGN_ERROR

验证不通过

请参阅 签名常见问题

500

SYSTEM_ERROR

系统异常,请稍后重试

请稍后重试

业务错误码

状态码

错误码

描述

解决方案

400

INVALID_REQUEST

此接口仅对部分合作伙伴开放,当前商户号未开放

等待微信支付向当前商户号开放此能力

 

 

反馈
咨询
目录
置顶