平台代理签约核身

更新时间:2025.07.17

接口适用场景:账号托管类平台商户进件申请流程中,在申请单中声明“走平台代理签约和代理核身入驻模式”时,可使用该接口传入代理签约和代理核身的信息。

接口说明

支持商户:【平台商户】

请求方式:【POST】/v3/ecommerce/applyments/submit-sign-verify-info

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


body  包体参数

 out_request_no  选填   string(124)

【业务申请编号】 1、服务商自定义的唯一编号。
2、每个编号对应一个申请单。
3、若申请单被驳回,可填写相同的“业务申请编号”,即可覆盖修改原申请单信息 。
4、一个商户,同一时间只能存在一笔流程中的申请单,若申请单被驳回,请使用原单进行重试。
和申请单号二选一。


 applyment_id  选填   integer

【申请单号】 微信支付分配的申请单号。
和业务申请编号二选一。


 pre_sign_time  选填   string

【预签署微信支付协议时间】 1、当申请单的“是否走平台代理签约和代理核身入驻模式“为true时,该值必填
2、商户实际在电商平台预签署微信支付协议的时间,遵循rfc3339标准格式,格式为yyyy-MM-DDTHH:mm:ss+TIMEZONE,yyyy-MM-DD表示年月日,T出现在字符串中,表示time元素的开头,HH:mm:ss表示时分秒,TIMEZONE表示时区(+08:00表示东八区时间,领先UTC 8小时,即北京时间)。例如:2015-05-20T13:29:35+08:00表示,北京时间2015年5月20日 13点29分35秒。


 proxy_verify_identity_info  选填   object

【平台代理核身信息】 请填写商户在平台进行核身的信息,当申请单的“是否走平台代理签约和代理核身入驻模式“为true时,该信息必填。

属性

请求示例

Java
Go
curl

需配合微信支付工具库 WXPayUtility 使用,请参考 iwiki-document:inline_state 

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 SubmitSignVerifyInfo {
26  private static String HOST = "https://api.mch.weixin.qq.com";
27  private static String METHOD = "POST";
28  private static String PATH = "/v3/ecommerce/applyments/submit-sign-verify-info";
29
30  public static void main(String[] args) {
31    // TODO: 请准备商户开发必要参数,参考:https://pay.weixin.qq.com/doc/v3/partner/4013080340
32    SubmitSignVerifyInfo client = new SubmitSignVerifyInfo(
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    SubmitSignVerifyInfoRequest request = new SubmitSignVerifyInfoRequest();
41    request.outRequestNo = "1900013511_10000";
42    request.applymentId = 2000002124775691L;
43    request.preSignTime = "2018-06-08T10:34:56+08:00";
44    request.proxyVerifyIdentityInfo = new ProxyVerifyIdentityInfo();
45    request.proxyVerifyIdentityInfo.verifyIdentityType = VerifyIdentityType.VERIFY_IDENTITY_TYPE_FACE_TO_FACE;
46    request.proxyVerifyIdentityInfo.verifyIdentityResult = true;
47    try {
48      SubmitSignVerifyInfoResponse response = client.run(request);
49
50      // TODO: 请求成功,继续业务逻辑
51      System.out.println(response);
52    } catch (WXPayUtility.ApiException e) {
53      // TODO: 请求失败,根据状态码执行不同的逻辑
54      e.printStackTrace();
55    }
56  }
57
58  public SubmitSignVerifyInfoResponse run(SubmitSignVerifyInfoRequest request) {
59    String uri = PATH;
60    String reqBody = WXPayUtility.toJson(request);
61
62    Request.Builder reqBuilder = new Request.Builder().url(HOST + uri);
63    reqBuilder.addHeader("Accept", "application/json");
64    reqBuilder.addHeader("Wechatpay-Serial", wechatPayPublicKeyId);
65    reqBuilder.addHeader("Authorization", WXPayUtility.buildAuthorization(mchid, certificateSerialNo,privateKey, METHOD, uri, reqBody));
66    reqBuilder.addHeader("Content-Type", "application/json");
67    RequestBody requestBody = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), reqBody);
68    reqBuilder.method(METHOD, requestBody);
69    Request httpRequest = reqBuilder.build();
70
71    // 发送HTTP请求
72    OkHttpClient client = new OkHttpClient.Builder().build();
73    try (Response httpResponse = client.newCall(httpRequest).execute()) {
74      String respBody = WXPayUtility.extractBody(httpResponse);
75      if (httpResponse.code() >= 200 && httpResponse.code() < 300) {
76        // 2XX 成功,验证应答签名
77        WXPayUtility.validateResponse(this.wechatPayPublicKeyId, this.wechatPayPublicKey,
78            httpResponse.headers(), respBody);
79
80        // 从HTTP应答报文构建返回数据
81        return WXPayUtility.fromJson(respBody, SubmitSignVerifyInfoResponse.class);
82      } else {
83        throw new WXPayUtility.ApiException(httpResponse.code(), respBody, httpResponse.headers());
84      }
85    } catch (IOException e) {
86      throw new UncheckedIOException("Sending request to " + uri + " failed.", e);
87    }
88  }
89
90  private final String mchid;
91  private final String certificateSerialNo;
92  private final PrivateKey privateKey;
93  private final String wechatPayPublicKeyId;
94  private final PublicKey wechatPayPublicKey;
95
96  public SubmitSignVerifyInfo(String mchid, String certificateSerialNo, String privateKeyFilePath, String wechatPayPublicKeyId, String wechatPayPublicKeyFilePath) {
97    this.mchid = mchid;
98    this.certificateSerialNo = certificateSerialNo;
99    this.privateKey = WXPayUtility.loadPrivateKeyFromPath(privateKeyFilePath);
100    this.wechatPayPublicKeyId = wechatPayPublicKeyId;
101    this.wechatPayPublicKey = WXPayUtility.loadPublicKeyFromPath(wechatPayPublicKeyFilePath);
102  }
103
104  public static class SubmitSignVerifyInfoRequest {
105    @SerializedName("out_request_no")
106    public String outRequestNo;
107  
108    @SerializedName("applyment_id")
109    public Long applymentId;
110  
111    @SerializedName("pre_sign_time")
112    public String preSignTime;
113  
114    @SerializedName("proxy_verify_identity_info")
115    public ProxyVerifyIdentityInfo proxyVerifyIdentityInfo;
116  }
117  
118  public static class SubmitSignVerifyInfoResponse {
119    @SerializedName("applyment_id")
120    public Long applymentId;
121  }
122  
123  public static class ProxyVerifyIdentityInfo {
124    @SerializedName("verify_identity_type")
125    public VerifyIdentityType verifyIdentityType;
126  
127    @SerializedName("verify_identity_result")
128    public Boolean verifyIdentityResult;
129  }
130  
131  public enum VerifyIdentityType {
132    @SerializedName("VERIFY_IDENTITY_TYPE_FACE_TO_FACE")
133    VERIFY_IDENTITY_TYPE_FACE_TO_FACE,
134    @SerializedName("VERIFY_IDENTITY_TYPE_REMOTE")
135    VERIFY_IDENTITY_TYPE_REMOTE
136  }
137  
138}
139

应答参数

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

系统异常,请稍后重试

请稍后重试

 

更多技术问题
技术咨询
反馈
咨询
目录
置顶