企业商户查询企业支付额度卡

更新时间:2025.05.09

企业商户查询企业支付额度卡。该接口允许服务商查询指定员工的企业支付额度卡详情,包括卡片金额、可用金额、有效期、使用记录等信息。企业可通过此接口了解额度卡的使用情况,进行费用追踪和报销管理。

接口说明

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

请求方式:【GET】/v3/webizpay/employees/{employee_id}/quota-cards/{card_no}

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

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

请求参数

Header  HTTP头参数

 Authorization  必填 string

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


 Accept  必填 string

请设置为application/json


path  路径参数

 card_no  必填   string(64)

【企业支付额度卡卡号】 企业支付额度卡卡号,微信支付平台生成的唯一标识额度卡的编号。通过创建卡和查询卡返回。
示例:1068019671702503425


 employee_id  必填   string(64)

【微信授权关系 ID】 微信授权关系ID,微信支付平台生成的唯一标识授权关系的ID,用户注册时会回调商户获取微信授权关系ID或者商户通过企业下唯一的员工ID查询企业支付员工接口获得。
示例:WeBizPay_a968402a-73bb-43e2-9e1a-8371b0ca3d7c


query  查询参数

 sp_mchid  必填   string(32)

【服务商商户号】 是由微信支付系统生成并分配给每个服务商的唯一标识符,具体请参考服务商模式开发必要参数说明


 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 QueryQuotaCard {
26  private static String HOST = "https://api.mch.weixin.qq.com";
27  private static String METHOD = "GET";
28  private static String PATH = "/v3/webizpay/employees/{employee_id}/quota-cards/{card_no}";
29
30  public static void main(String[] args) {
31    // TODO: 请准备商户开发必要参数,参考:https://pay.weixin.qq.com/doc/v3/partner/4013080340
32    QueryQuotaCard client = new QueryQuotaCard(
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    QueryQuotaCardRequest request = new QueryQuotaCardRequest();
41    request.cardNo = "1068019671702503425";
42    request.employeeId = "WeBizPay_a968402a-73bb-43e2-9e1a-8371b0ca3d7c";
43    request.spMchid = "12341234";
44    request.subMchid = "43214321";
45    try {
46      CardsQueryQuotaCardResponse response = client.run(request);
47
48      // TODO: 请求成功,继续业务逻辑
49      System.out.println(response);
50    } catch (WXPayUtility.ApiException e) {
51      // TODO: 请求失败,根据状态码执行不同的逻辑
52      e.printStackTrace();
53    }
54  }
55
56  public CardsQueryQuotaCardResponse run(QueryQuotaCardRequest request) {
57    String uri = PATH;
58    uri = uri.replace("{card_no}", WXPayUtility.urlEncode(request.cardNo));
59    uri = uri.replace("{employee_id}", WXPayUtility.urlEncode(request.employeeId));
60    Map<String, Object> args = new HashMap<>();
61    args.put("sp_mchid", request.spMchid);
62    args.put("sub_mchid", request.subMchid);
63    uri = uri + "?" + WXPayUtility.urlEncode(args);
64
65    Request.Builder reqBuilder = new Request.Builder().url(HOST + uri);
66    reqBuilder.addHeader("Accept", "application/json");
67    reqBuilder.addHeader("Wechatpay-Serial", wechatPayPublicKeyId);
68    reqBuilder.addHeader("Authorization", WXPayUtility.buildAuthorization(mchid, certificateSerialNo, privateKey, METHOD, uri, null));
69    reqBuilder.method(METHOD, null);
70    Request httpRequest = reqBuilder.build();
71
72    // 发送HTTP请求
73    OkHttpClient client = new OkHttpClient.Builder().build();
74    try (Response httpResponse = client.newCall(httpRequest).execute()) {
75      String respBody = WXPayUtility.extractBody(httpResponse);
76      if (httpResponse.code() >= 200 && httpResponse.code() < 300) {
77        // 2XX 成功,验证应答签名
78        WXPayUtility.validateResponse(this.wechatPayPublicKeyId, this.wechatPayPublicKey,
79            httpResponse.headers(), respBody);
80
81        // 从HTTP应答报文构建返回数据
82        return WXPayUtility.fromJson(respBody, CardsQueryQuotaCardResponse.class);
83      } else {
84        throw new WXPayUtility.ApiException(httpResponse.code(), respBody, httpResponse.headers());
85      }
86    } catch (IOException e) {
87      throw new UncheckedIOException("Sending request to " + uri + " failed.", e);
88    }
89  }
90
91  private final String mchid;
92  private final String certificateSerialNo;
93  private final PrivateKey privateKey;
94  private final String wechatPayPublicKeyId;
95  private final PublicKey wechatPayPublicKey;
96
97  public QueryQuotaCard(String mchid, String certificateSerialNo, String privateKeyFilePath, String wechatPayPublicKeyId, String wechatPayPublicKeyFilePath) {
98    this.mchid = mchid;
99    this.certificateSerialNo = certificateSerialNo;
100    this.privateKey = WXPayUtility.loadPrivateKeyFromPath(privateKeyFilePath);
101    this.wechatPayPublicKeyId = wechatPayPublicKeyId;
102    this.wechatPayPublicKey = WXPayUtility.loadPublicKeyFromPath(wechatPayPublicKeyFilePath);
103  }
104
105  public static class QueryQuotaCardRequest {
106    @SerializedName("sp_mchid")
107    @Expose(serialize = false)
108    public String spMchid;
109  
110    @SerializedName("sub_mchid")
111    @Expose(serialize = false)
112    public String subMchid;
113  
114    @SerializedName("card_no")
115    @Expose(serialize = false)
116    public String cardNo;
117  
118    @SerializedName("employee_id")
119    @Expose(serialize = false)
120    public String employeeId;
121  }
122  
123  public static class CardsQueryQuotaCardResponse {
124    @SerializedName("sp_mchid")
125    public String spMchid;
126  
127    @SerializedName("sub_mchid")
128    public String subMchid;
129  
130    @SerializedName("card_no")
131    public String cardNo;
132  
133    @SerializedName("out_card_no")
134    public String outCardNo;
135  
136    @SerializedName("employee_id")
137    public String employeeId;
138  
139    @SerializedName("card_template_id")
140    public String cardTemplateId;
141  
142    @SerializedName("card_rule")
143    public CardRule cardRule;
144  
145    @SerializedName("refund_rule")
146    public RefundRule refundRule;
147  
148    @SerializedName("amount")
149    public Long amount;
150  
151    @SerializedName("remain_amount")
152    public Long remainAmount;
153  
154    @SerializedName("effective_end_time")
155    public String effectiveEndTime;
156  
157    @SerializedName("effective_begin_time")
158    public String effectiveBeginTime;
159  
160    @SerializedName("card_state")
161    public CardState cardState;
162  
163    @SerializedName("card_name")
164    public String cardName;
165  
166    @SerializedName("reason")
167    public String reason;
168  
169    @SerializedName("card_usage_time")
170    public String cardUsageTime;
171  
172    @SerializedName("transaction_id")
173    public String transactionId;
174  
175    @SerializedName("card_disabled_time")
176    public String cardDisabledTime;
177  
178    @SerializedName("card_remark")
179    public String cardRemark;
180  }
181  
182  public enum CardRule {
183    @SerializedName("SINGLE")
184    SINGLE,
185    @SerializedName("MULTIPLE")
186    MULTIPLE
187  }
188  
189  public enum RefundRule {
190    @SerializedName("RETURN")
191    RETURN,
192    @SerializedName("NOT_RETURN")
193    NOT_RETURN
194  }
195  
196  public enum CardState {
197    @SerializedName("ACTIVE")
198    ACTIVE,
199    @SerializedName("DISABLED")
200    DISABLED
201  }
202  
203}
204

应答参数

200 OK

 sp_mchid  必填   string(32)

【服务商商户号】 服务商商户号,具有企业支付服务商资质的微信支付商户号


 sub_mchid  必填   string(32)

【出资子商户号】 出资子商户号,企业支付的出资方商户号


 card_no  必填   string(64)

【企业支付额度卡卡号】 企业支付额度卡卡号,微信支付平台生成的唯一标识额度卡的编号
示例:1068019671702503425


 out_card_no  必填   string

【商户卡号】 商户卡号,由商户系统生成的唯一标识额度卡的编号


 employee_id  必填   string(64)

【微信授权关系 ID】 微信授权关系ID,微信支付平台生成的唯一标识授权关系的ID
示例:WeBizPay_a968402a-73bb-43e2-9e1a-8371b0ca3d7c


 card_template_id  必填   string(64)

【企业支付卡模板ID】 企业支付卡模板ID,额度卡使用的模板ID,决定卡片的使用规则、退款规则等。可以咨询微信支付了解卡模板ID对应规则


 card_rule  必填   string

【使用规则】 单次使用/多次使用,卡模板中配置项

可选取值

  • SINGLE:  单次使用

  • MULTIPLE:  多次使用


 refund_rule  必填   string

【退款规则】 退款规则,描述额度卡的退款策略 退回:'RETURN'不退回:'NOT_RETURN'

可选取值

  • RETURN:  退款后返回卡

  • NOT_RETURN:  退款后不返回卡


 amount  必填   integer

【卡片总金额】 卡片总金额,单位为分,整型。示例:1元应填写 100


 remain_amount  必填   integer

【卡片可用金额】 卡片可用金额,单位为分,整型。示例:1元应填写 100


 effective_end_time  必填   string

【卡片有效期】 卡片有效期,额度卡失效的时间,超过此日期的卡无法被使用,无法获得卡片的微信支付跳转链接。

遵循rfc3339标准格式:yyyy-MM-DDTHH:mm:ss+TIMEZONEyyyy-MM-DD 表示年月日;T 字符用于分隔日期和时间部分;HH:mm:ss 表示具体的时分秒;TIMEZONE 表示时区(例如,+08:00 对应东八区时间,即北京时间)。

示例:2015-05-20T13:29:35+08:00 表示北京时间2015年5月20日13点29分35秒。


 effective_begin_time  必填   string

【卡片生效时间】 卡片生效时间,额度卡开始生效的时间。

遵循rfc3339标准格式:yyyy-MM-DDTHH:mm:ss+TIMEZONEyyyy-MM-DD 表示年月日;T 字符用于分隔日期和时间部分;HH:mm:ss 表示具体的时分秒;TIMEZONE 表示时区(例如,+08:00 对应东八区时间,即北京时间)。

示例:2015-05-20T13:29:35+08:00 表示北京时间2015年5月20日13点29分35秒。


 card_state  必填   string

【卡片状态】 卡片状态,表示额度卡当前的状态,包括生效(ACTIVE)和失效(DISABLED)两种状态

可选取值

  • ACTIVE:  生效

  • DISABLED:  失效


 card_name  必填   string(20)

【卡片名称】 卡片名称,企业自定义的额度卡名称,用于标识额度卡用途。由商户下发额度卡是传入。


 reason  选填   string(32)

【失效原因】 失效原因,说明额度卡失效的原因,如'有效期结束'、'管理员作废'等


 card_usage_time  选填   string

【卡片使用时间】 卡片使用时间,最近一次使用额度卡进行支付的时间。

对单次卡来说,为第一次支付的时间,此后卡片过期。
对多次卡来说,为最后一次支付的时间。
若卡片没被使用,则没有这个字段返回

遵循rfc3339标准格式:yyyy-MM-DDTHH:mm:ss+TIMEZONEyyyy-MM-DD 表示年月日;T 字符用于分隔日期和时间部分;HH:mm:ss 表示具体的时分秒;TIMEZONE 表示时区(例如,+08:00 对应东八区时间,即北京时间)。

示例:2015-05-20T13:29:35+08:00 表示北京时间2015年5月20日13点29分35秒。


 transaction_id  选填   string

【卡片关联微信支付订单号】 卡片关联微信支付订单号,最近一次使用该额度卡支付产生的微信支付交易单号。
若卡片没被使用,则没有这个字段返回


 card_disabled_time  选填   string

【卡片失效时间】 卡片失效时间,额度卡变为失效状态的时间。
若卡片仍在生效,则没有这个字段返回。

例如:单次卡被使用、单次卡到期、多次卡被使用、多次卡到期、单次卡被作废、多次卡被作废。 卡片失效时间表示上述的某一个最先到达的状态的时间。

遵循rfc3339标准格式:yyyy-MM-DDTHH:mm:ss+TIMEZONEyyyy-MM-DD 表示年月日;T 字符用于分隔日期和时间部分;HH:mm:ss 表示具体的时分秒;TIMEZONE 表示时区(例如,+08:00 对应东八区时间,即北京时间)。

示例:2015-05-20T13:29:35+08:00 表示北京时间2015年5月20日13点29分35秒。


 card_remark  选填   string(50)

【卡片备注】 卡片备注,额度卡的补充说明信息。由商户下发额度卡时传入。

应答示例

200 OK

1{
2  "sp_mchid" : "12341234",
3  "sub_mchid" : "43214321",
4  "card_no" : "1068019671702503425",
5  "out_card_no" : "mch_card_123456",
6  "employee_id" : "WeBizPay_a968402a-73bb-43e2-9e1a-8371b0ca3d7c",
7  "card_template_id" : "template_123",
8  "card_rule" : "SINGLE",
9  "refund_rule" : "RETURN",
10  "amount" : 10000,
11  "remain_amount" : 8000,
12  "effective_end_time" : "2023-12-31T23:59:59+08:00",
13  "effective_begin_time" : "2023-01-01T00:00:00+08:00",
14  "card_state" : "ACTIVE",
15  "card_name" : "报销额度卡",
16  "reason" : "有效期结束",
17  "card_usage_time" : "2023-06-08T10:34:56+08:00",
18  "transaction_id" : "4200000123202306081234567890",
19  "card_disabled_time" : "2023-12-31T23:59:59+08:00",
20  "card_remark" : "2023年1月差旅报销"
21}
22

 

错误码

公共错误码

状态码

错误码

描述

解决方案

400

PARAM_ERROR

参数错误

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

400

INVALID_REQUEST

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

请参阅 接口规则

401

SIGN_ERROR

验证不通过

请参阅 签名常见问题

500

SYSTEM_ERROR

系统异常,请稍后重试

请稍后重试

 

 

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