根据商户号查用户的券
更新时间:2024.09.19可通过该接口查询用户在某商户号可用的全部券,可用于商户的小程序/H5中,用户"我的代金券"或"提交订单页"展示优惠信息。无法查询到微信支付立减金。本接口查不到用户的微信支付立减金(又称“全平台通用券”),即在所有商户都可以使用的券,例如:摇摇乐红包;当按可用商户号查询时,无法查询用户已经核销的券
接口频率:不区分来源 2000/s 单ip 500/s
接口耗时:平均100ms以内
幂等规则:接口支持幂等重入
接口说明
支持商户:【普通商户】
请求方式:【GET】/v3/marketing/favor/users/{openid}/coupons
请求域名:【主域名】https://api.mch.weixin.qq.com 使用该域名将访问就近的接入点
【备域名】https://api2.mch.weixin.qq.com 使用该域名将访问异地的接入点 ,指引点击查看
请求参数
Header HTTP头参数
Authorization 必填 string
请参考签名认证生成认证信息
Accept 必填 string
请设置为application/json
path 路径参数
openid 必填 string(128)
【用户标识】 用户在商户appid下的唯一标识。
校验规则:该openid需要与接口传入中的appid有对应关系。
query 查询参数
appid 必填 string(128)
【公众账号ID】 微信为发券方商户分配的公众账号ID,接口传入的所有appid应该为公众号的appid(在mp.weixin.qq.com申请的)或APP的appid(在open.weixin.qq.com申请的)。
校验规则:
1、该appid需要与接口传入中的openid有对应关系;
2、该appid需要与调用接口的商户号(即请求头中的商户号)有绑定关系,若未绑定,可参考该指引完成绑定(商家商户号与AppID账号关联管理)
stock_id 选填 string(20)
【批次号】 批次号,是否指定批次号查询,填写available_mchid,该字段不生效。
status 选填 string(6)
【券或消费金状态】 代金券或消费金状态:
选填creator_mchid时,
SENDED:返回可用
USED:返回可用+已实扣
选填available_mchid时,该字段不生效,仅返回 可用 状态的券或消费金。
business_type 选填 string
【业务类型】 若选择MULTIUSE,则仅返回查询用户拥有的消费金列表
枚举值:
MULTIUSE:消费金
可选取值
MULTIUSE
: 消费金类型
creator_mchid 选填 string(20)
【创建批次的商户号】 批次创建方商户号。请求参数传创建商户号返回除过期以外所有状态的用户券。creator_mchid与available_mchid二选一,如果同时存在,优先使用creator_mchid。
available_mchid 选填 string(20)
【可用商户号】 可用商户号请求参数传可用商户号只能返回可用的代金券,实扣的与过期的无法返回。creator_mchid与available_mchid二选一,如果同时存在,优先使用creator_mchid。
offset 选填 integer
【分页页码】 分页页码,默认0,填写available_mchid,该字段不生效
limit 选填 integer
【分页大小】 分页大小,默认20,填写available_mchid,该字段不生效
请求示例
GET
1curl -X GET \ 2 https://api.mch.weixin.qq.com/v3/marketing/favor/users/openid_example/coupons?appid=appid_example&stock_id=9865000&status=USED&business_type=MULTIUSE&creator_mchid=9865002&available_mchid=9865000&offset=0&limit=20 \ 3 -H "Authorization: WECHATPAY2-SHA256-RSA2048 mchid=\"1900000001\",..." \ 4 -H "Accept: application/json" 5
需配合微信支付工具库 WXPayUtility 使用,请参考Java
1package com.java.demo; 2 3import com.java.utils.WXPayUtility; // 引用微信支付工具库,参考:https://pay.weixin.qq.com/doc/v3/merchant/4014931831 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 ListCouponsByFilter { 26 private static String HOST = "https://api.mch.weixin.qq.com"; 27 private static String METHOD = "GET"; 28 private static String PATH = "/v3/marketing/favor/users/{openid}/coupons"; 29 30 public static void main(String[] args) { 31 // TODO: 请准备商户开发必要参数,参考:https://pay.weixin.qq.com/doc/v3/merchant/4013070756 32 ListCouponsByFilter client = new ListCouponsByFilter( 33 "19xxxxxxxx", // 商户号,是由微信支付系统生成并分配给每个商户的唯一标识符,商户号获取方式参考 https://pay.weixin.qq.com/doc/v3/merchant/4013070756 34 "1DDE55AD98Exxxxxxxxxx", // 商户API证书序列号,如何获取请参考 https://pay.weixin.qq.com/doc/v3/merchant/4013053053 35 "/path/to/apiclient_key.pem", // 商户API证书私钥文件路径,本地文件路径 36 "PUB_KEY_ID_xxxxxxxxxxxxx", // 微信支付公钥ID,如何获取请参考 https://pay.weixin.qq.com/doc/v3/merchant/4013038816 37 "/path/to/wxp_pub.pem" // 微信支付公钥文件路径,本地文件路径 38 ); 39 40 ListCouponsByFilterRequest request = new ListCouponsByFilterRequest(); 41 request.openid = "openid_example"; 42 request.appid = "appid_example"; 43 request.stockId = "9865000"; 44 request.status = "USED"; 45 request.businessType = BusinessType.MULTIUSE; 46 request.creatorMchid = "9865002"; 47 request.availableMchid = "9865000"; 48 request.offset = 0L; 49 request.limit = 20L; 50 try { 51 CouponCollection response = client.run(request); 52 // TODO: 请求成功,继续业务逻辑 53 System.out.println(response); 54 } catch (WXPayUtility.ApiException e) { 55 // TODO: 请求失败,根据状态码执行不同的逻辑 56 e.printStackTrace(); 57 } 58 } 59 60 public CouponCollection run(ListCouponsByFilterRequest request) { 61 String uri = PATH; 62 uri = uri.replace("{openid}", WXPayUtility.urlEncode(request.openid)); 63 Map<String, Object> args = new HashMap<>(); 64 args.put("appid", request.appid); 65 args.put("stock_id", request.stockId); 66 args.put("status", request.status); 67 args.put("business_type", request.businessType); 68 args.put("creator_mchid", request.creatorMchid); 69 args.put("available_mchid", request.availableMchid); 70 args.put("offset", request.offset); 71 args.put("limit", request.limit); 72 String queryString = WXPayUtility.urlEncode(args); 73 if (!queryString.isEmpty()) { 74 uri = uri + "?" + queryString; 75 } 76 77 Request.Builder reqBuilder = new Request.Builder().url(HOST + uri); 78 reqBuilder.addHeader("Accept", "application/json"); 79 reqBuilder.addHeader("Wechatpay-Serial", wechatPayPublicKeyId); 80 reqBuilder.addHeader("Authorization", WXPayUtility.buildAuthorization(mchid, certificateSerialNo, privateKey, METHOD, uri, null)); 81 reqBuilder.method(METHOD, null); 82 Request httpRequest = reqBuilder.build(); 83 84 // 发送HTTP请求 85 OkHttpClient client = new OkHttpClient.Builder().build(); 86 try (Response httpResponse = client.newCall(httpRequest).execute()) { 87 String respBody = WXPayUtility.extractBody(httpResponse); 88 if (httpResponse.code() >= 200 && httpResponse.code() < 300) { 89 // 2XX 成功,验证应答签名 90 WXPayUtility.validateResponse(this.wechatPayPublicKeyId, this.wechatPayPublicKey, 91 httpResponse.headers(), respBody); 92 93 // 从HTTP应答报文构建返回数据 94 return WXPayUtility.fromJson(respBody, CouponCollection.class); 95 } else { 96 throw new WXPayUtility.ApiException(httpResponse.code(), respBody, httpResponse.headers()); 97 } 98 } catch (IOException e) { 99 throw new UncheckedIOException("Sending request to " + uri + " failed.", e); 100 } 101 } 102 103 private final String mchid; 104 private final String certificateSerialNo; 105 private final PrivateKey privateKey; 106 private final String wechatPayPublicKeyId; 107 private final PublicKey wechatPayPublicKey; 108 109 public ListCouponsByFilter(String mchid, String certificateSerialNo, String privateKeyFilePath, String wechatPayPublicKeyId, String wechatPayPublicKeyFilePath) { 110 this.mchid = mchid; 111 this.certificateSerialNo = certificateSerialNo; 112 this.privateKey = WXPayUtility.loadPrivateKeyFromPath(privateKeyFilePath); 113 this.wechatPayPublicKeyId = wechatPayPublicKeyId; 114 this.wechatPayPublicKey = WXPayUtility.loadPublicKeyFromPath(wechatPayPublicKeyFilePath); 115 } 116 117 public static class ListCouponsByFilterRequest { 118 @SerializedName("openid") 119 @Expose(serialize = false) 120 public String openid; 121 122 @SerializedName("appid") 123 @Expose(serialize = false) 124 public String appid; 125 126 @SerializedName("stock_id") 127 @Expose(serialize = false) 128 public String stockId; 129 130 @SerializedName("status") 131 @Expose(serialize = false) 132 public String status; 133 134 @SerializedName("creator_mchid") 135 @Expose(serialize = false) 136 public String creatorMchid; 137 138 @SerializedName("available_mchid") 139 @Expose(serialize = false) 140 public String availableMchid; 141 142 @SerializedName("offset") 143 @Expose(serialize = false) 144 public Long offset; 145 146 @SerializedName("limit") 147 @Expose(serialize = false) 148 public Long limit; 149 150 @SerializedName("business_type") 151 @Expose(serialize = false) 152 public BusinessType businessType; 153 } 154 155 public static class CouponCollection { 156 @SerializedName("data") 157 public List<Coupon> data; 158 159 @SerializedName("total_count") 160 public Long totalCount; 161 162 @SerializedName("limit") 163 public Long limit; 164 165 @SerializedName("offset") 166 public Long offset; 167 } 168 169 public enum BusinessType { 170 @SerializedName("MULTIUSE") 171 MULTIUSE 172 } 173 174 public static class Coupon { 175 @SerializedName("stock_creator_mchid") 176 public String stockCreatorMchid; 177 178 @SerializedName("stock_id") 179 public String stockId; 180 181 @SerializedName("coupon_id") 182 public String couponId; 183 184 @SerializedName("cut_to_message") 185 public CutTypeMsg cutToMessage; 186 187 @SerializedName("coupon_name") 188 public String couponName; 189 190 @SerializedName("status") 191 public String status; 192 193 @SerializedName("description") 194 public String description; 195 196 @SerializedName("create_time") 197 public String createTime; 198 199 @SerializedName("coupon_type") 200 public String couponType; 201 202 @SerializedName("no_cash") 203 public Boolean noCash; 204 205 @SerializedName("available_begin_time") 206 public String availableBeginTime; 207 208 @SerializedName("available_end_time") 209 public String availableEndTime; 210 211 @SerializedName("singleitem") 212 public Boolean singleitem; 213 214 @SerializedName("normal_coupon_information") 215 public FixedValueStockMsg normalCouponInformation; 216 217 @SerializedName("out_request_no") 218 public String outRequestNo; 219 220 @SerializedName("available_balance") 221 public Long availableBalance; 222 223 @SerializedName("business_type") 224 public BusinessType businessType; 225 226 @SerializedName("discount_msg") 227 public DiscountMsg discountMsg; 228 } 229 230 public static class CutTypeMsg { 231 @SerializedName("single_price_max") 232 public Long singlePriceMax; 233 234 @SerializedName("cut_to_price") 235 public Long cutToPrice; 236 } 237 238 public static class FixedValueStockMsg { 239 @SerializedName("coupon_amount") 240 public Long couponAmount; 241 242 @SerializedName("transaction_minimum") 243 public Long transactionMinimum; 244 } 245 246 public static class DiscountMsg { 247 @SerializedName("discount_amount_max") 248 public Long discountAmountMax; 249 250 @SerializedName("discount_percent") 251 public Long discountPercent; 252 253 @SerializedName("transaction_minimum") 254 public Long transactionMinimum; 255 } 256 257} 258
需配合微信支付工具库 wxpay_utility 使用,请参考Go
1package main 2 3import ( 4 "demo/wxpay_utility" // 引用微信支付工具库,参考 https://pay.weixin.qq.com/doc/v3/merchant/4015119334 5 "encoding/json" 6 "fmt" 7 "net/http" 8 "net/url" 9 "strings" 10) 11 12func main() { 13 // TODO: 请准备商户开发必要参数,参考:https://pay.weixin.qq.com/doc/v3/merchant/4013070756 14 config, err := wxpay_utility.CreateMchConfig( 15 "19xxxxxxxx", // 商户号,是由微信支付系统生成并分配给每个商户的唯一标识符,商户号获取方式参考 https://pay.weixin.qq.com/doc/v3/merchant/4013070756 16 "1DDE55AD98Exxxxxxxxxx", // 商户API证书序列号,如何获取请参考 https://pay.weixin.qq.com/doc/v3/merchant/4013053053 17 "/path/to/apiclient_key.pem", // 商户API证书私钥文件路径,本地文件路径 18 "PUB_KEY_ID_xxxxxxxxxxxxx", // 微信支付公钥ID,如何获取请参考 https://pay.weixin.qq.com/doc/v3/merchant/4013038816 19 "/path/to/wxp_pub.pem", // 微信支付公钥文件路径,本地文件路径 20 ) 21 if err != nil { 22 fmt.Println(err) 23 return 24 } 25 26 request := &ListCouponsByFilterRequest{ 27 Openid: wxpay_utility.String("Openid_example"), 28 Appid: wxpay_utility.String("Appid_example"), 29 StockId: wxpay_utility.String("9865000"), 30 Status: wxpay_utility.String("USED"), 31 BusinessType: BUSINESSTYPE_MULTIUSE.Ptr(), 32 CreatorMchid: wxpay_utility.String("9865002"), 33 AvailableMchid: wxpay_utility.String("9865000"), 34 Offset: wxpay_utility.Int64(0), 35 Limit: wxpay_utility.Int64(20), 36 } 37 38 response, err := ListCouponsByFilter(config, request) 39 if err != nil { 40 fmt.Printf("请求失败: %+v\n", err) 41 // TODO: 请求失败,根据状态码执行不同的处理 42 return 43 } 44 45 // TODO: 请求成功,继续业务逻辑 46 fmt.Printf("请求成功: %+v\n", response) 47} 48 49func ListCouponsByFilter(config *wxpay_utility.MchConfig, request *ListCouponsByFilterRequest) (response *CouponCollection, err error) { 50 const ( 51 host = "https://api.mch.weixin.qq.com" 52 method = "GET" 53 path = "/v3/marketing/favor/users/{openid}/coupons" 54 ) 55 56 reqUrl, err := url.Parse(fmt.Sprintf("%s%s", host, path)) 57 if err != nil { 58 return nil, err 59 } 60 reqUrl.Path = strings.Replace(reqUrl.Path, "{openid}", url.PathEscape(*request.Openid), -1) 61 query := reqUrl.Query() 62 if request.Appid != nil { 63 query.Add("appid", *request.Appid) 64 } 65 if request.StockId != nil { 66 query.Add("stock_id", *request.StockId) 67 } 68 if request.Status != nil { 69 query.Add("status", *request.Status) 70 } 71 if request.BusinessType != nil { 72 query.Add("business_type", fmt.Sprintf("%v", *request.BusinessType)) 73 } 74 if request.CreatorMchid != nil { 75 query.Add("creator_mchid", *request.CreatorMchid) 76 } 77 if request.AvailableMchid != nil { 78 query.Add("available_mchid", *request.AvailableMchid) 79 } 80 if request.Offset != nil { 81 query.Add("offset", fmt.Sprintf("%v", *request.Offset)) 82 } 83 if request.Limit != nil { 84 query.Add("limit", fmt.Sprintf("%v", *request.Limit)) 85 } 86 reqUrl.RawQuery = query.Encode() 87 httpRequest, err := http.NewRequest(method, reqUrl.String(), nil) 88 if err != nil { 89 return nil, err 90 } 91 httpRequest.Header.Set("Accept", "application/json") 92 httpRequest.Header.Set("Wechatpay-Serial", config.WechatPayPublicKeyId()) 93 authorization, err := wxpay_utility.BuildAuthorization(config.MchId(), config.CertificateSerialNo(), config.PrivateKey(), method, reqUrl.RequestURI(), nil) 94 if err != nil { 95 return nil, err 96 } 97 httpRequest.Header.Set("Authorization", authorization) 98 99 client := &http.Client{} 100 httpResponse, err := client.Do(httpRequest) 101 if err != nil { 102 return nil, err 103 } 104 respBody, err := wxpay_utility.ExtractResponseBody(httpResponse) 105 if err != nil { 106 return nil, err 107 } 108 if httpResponse.StatusCode >= 200 && httpResponse.StatusCode < 300 { 109 // 2XX 成功,验证应答签名 110 err = wxpay_utility.ValidateResponse( 111 config.WechatPayPublicKeyId(), 112 config.WechatPayPublicKey(), 113 &httpResponse.Header, 114 respBody, 115 ) 116 if err != nil { 117 return nil, err 118 } 119 response := &CouponCollection{} 120 if err := json.Unmarshal(respBody, response); err != nil { 121 return nil, err 122 } 123 124 return response, nil 125 } else { 126 return nil, wxpay_utility.NewApiException( 127 httpResponse.StatusCode, 128 httpResponse.Header, 129 respBody, 130 ) 131 } 132} 133 134type ListCouponsByFilterRequest struct { 135 Openid *string `json:"openid,omitempty"` 136 Appid *string `json:"appid,omitempty"` 137 StockId *string `json:"stock_id,omitempty"` 138 Status *string `json:"status,omitempty"` 139 CreatorMchid *string `json:"creator_mchid,omitempty"` 140 AvailableMchid *string `json:"available_mchid,omitempty"` 141 Offset *int64 `json:"offset,omitempty"` 142 Limit *int64 `json:"limit,omitempty"` 143 BusinessType *BusinessType `json:"business_type,omitempty"` 144} 145 146func (o *ListCouponsByFilterRequest) MarshalJSON() ([]byte, error) { 147 type Alias ListCouponsByFilterRequest 148 a := &struct { 149 Openid *string `json:"openid,omitempty"` 150 Appid *string `json:"appid,omitempty"` 151 StockId *string `json:"stock_id,omitempty"` 152 Status *string `json:"status,omitempty"` 153 CreatorMchid *string `json:"creator_mchid,omitempty"` 154 AvailableMchid *string `json:"available_mchid,omitempty"` 155 Offset *int64 `json:"offset,omitempty"` 156 Limit *int64 `json:"limit,omitempty"` 157 BusinessType *BusinessType `json:"business_type,omitempty"` 158 *Alias 159 }{ 160 // 序列化时移除非 Body 字段 161 Openid: nil, 162 Appid: nil, 163 StockId: nil, 164 Status: nil, 165 CreatorMchid: nil, 166 AvailableMchid: nil, 167 Offset: nil, 168 Limit: nil, 169 BusinessType: nil, 170 Alias: (*Alias)(o), 171 } 172 return json.Marshal(a) 173} 174 175type CouponCollection struct { 176 Data []Coupon `json:"data,omitempty"` 177 TotalCount *int64 `json:"total_count,omitempty"` 178 Limit *int64 `json:"limit,omitempty"` 179 Offset *int64 `json:"offset,omitempty"` 180} 181 182type BusinessType string 183 184func (e BusinessType) Ptr() *BusinessType { 185 return &e 186} 187 188const ( 189 BUSINESSTYPE_MULTIUSE BusinessType = "MULTIUSE" 190) 191 192type Coupon struct { 193 StockCreatorMchid *string `json:"stock_creator_mchid,omitempty"` 194 StockId *string `json:"stock_id,omitempty"` 195 CouponId *string `json:"coupon_id,omitempty"` 196 CutToMessage *CutTypeMsg `json:"cut_to_message,omitempty"` 197 CouponName *string `json:"coupon_name,omitempty"` 198 Status *string `json:"status,omitempty"` 199 Description *string `json:"description,omitempty"` 200 CreateTime *string `json:"create_time,omitempty"` 201 CouponType *string `json:"coupon_type,omitempty"` 202 NoCash *bool `json:"no_cash,omitempty"` 203 AvailableBeginTime *string `json:"available_begin_time,omitempty"` 204 AvailableEndTime *string `json:"available_end_time,omitempty"` 205 Singleitem *bool `json:"singleitem,omitempty"` 206 NormalCouponInformation *FixedValueStockMsg `json:"normal_coupon_information,omitempty"` 207 OutRequestNo *string `json:"out_request_no,omitempty"` 208 AvailableBalance *int64 `json:"available_balance,omitempty"` 209 BusinessType *BusinessType `json:"business_type,omitempty"` 210 DiscountMsg *DiscountMsg `json:"discount_msg,omitempty"` 211} 212 213type CutTypeMsg struct { 214 SinglePriceMax *int64 `json:"single_price_max,omitempty"` 215 CutToPrice *int64 `json:"cut_to_price,omitempty"` 216} 217 218type FixedValueStockMsg struct { 219 CouponAmount *int64 `json:"coupon_amount,omitempty"` 220 TransactionMinimum *int64 `json:"transaction_minimum,omitempty"` 221} 222 223type DiscountMsg struct { 224 DiscountAmountMax *int64 `json:"discount_amount_max,omitempty"` 225 DiscountPercent *int64 `json:"discount_percent,omitempty"` 226 TransactionMinimum *int64 `json:"transaction_minimum,omitempty"` 227} 228
应答参数
200 OK
data 选填 array[object]
【结果集】 结果集
属性 | |||||||||||||
stock_creator_mchid 必填 string 【创建批次的商户号】 微信为创建方商户分配的商户号 stock_id 必填 string 【批次号】 微信为每个代金券批次分配的唯一id。 coupon_id 必填 string 【代金券或消费金id】 微信为代金券或消费金唯一分配的id cut_to_message 选填 object 【单品优惠特定信息】 单品优惠特定信息
coupon_name 必填 string 【券或消费金名称】 券或消费金名称 status 必填 string 【券或消费金状态】 券或消费金状态: description 必填 string 【使用说明】 券或消费金描述说明字段 create_time 必填 string 【领券时间】 领券时间,遵循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秒。 coupon_type 必填 string 【券或消费金类型】 券或消费金类型: no_cash 必填 boolean 【是否无资金流】 枚举值: available_begin_time 必填 string 【可用开始时间】 可用开始时间,遵循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秒。 available_end_time 必填 string 【可用结束时间】 可用结束时间,遵循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秒。 singleitem 必填 boolean 【是否单品优惠】 枚举值: normal_coupon_information 选填 object 【满减券或消费金信息】 普通满减券或消费金面额、门槛信息。
out_request_no 选填 string 【商户单据号】 商户此次发放凭据号 available_balance 选填 integer 【剩余金额】 可用余额,单位:分。 business_type 选填 string 【业务类型】 细分业务类型,仅当business_type=MULTIUSE时才返回,枚举值: 可选取值
discount_msg 选填 object 【折扣券信息】 折扣券金面额、门槛信息。
|
total_count 必填 integer
【查询结果总数】 查询结果总数
limit 选填 integer
【分页大小】 分页大小,该字段仅在按批次创建方商户号查询时返回
offset 选填 integer
【分页页码】 分页页码,该字段仅在按批次创建方商户号查询时返回
应答示例
200 OK
1{ 2 "data" : [ 3 { 4 "stock_creator_mchid" : "9800064", 5 "stock_id" : "9865888", 6 "coupon_id" : "98674556", 7 "cut_to_message" : { 8 "single_price_max" : 100, 9 "cut_to_price" : 80 10 }, 11 "coupon_name" : "微信支付代金券", 12 "status" : "EXPIRED", 13 "description" : "微信支付营销", 14 "create_time" : "2015-05-20T13:29:35.120+08:00", 15 "coupon_type" : "CUT_TO", 16 "no_cash" : false, 17 "available_begin_time" : "2015-05-20T13:29:35.120+08:00", 18 "available_end_time" : "2015-05-20T13:29:35.120+08:00", 19 "singleitem" : false, 20 "normal_coupon_information" : { 21 "coupon_amount" : 100, 22 "transaction_minimum" : 100 23 }, 24 "out_request_no" : "example_out_request_no", 25 "available_balance" : 10000, 26 "business_type" : "MULTIUSE", 27 "discount_msg" : { 28 "discount_amount_max" : 100, 29 "discount_percent" : 88, 30 "transaction_minimum" : 100 31 } 32 } 33 ], 34 "total_count" : 100, 35 "limit" : 10, 36 "offset" : 10 37} 38
错误码
公共错误码
状态码 | 错误码 | 描述 | 解决方案 |
---|---|---|---|
400 | PARAM_ERROR | 参数错误 | 请根据错误提示正确传入参数 |
400 | INVALID_REQUEST | HTTP 请求不符合微信支付 APIv3 接口规则 | 请参阅 接口规则 |
401 | SIGN_ERROR | 验证不通过 | 请参阅 签名常见问题 |
500 | SYSTEM_ERROR | 系统异常,请稍后重试 | 请稍后重试 |
业务错误码
状态码 | 错误码 | 描述 | 解决方案 |
---|---|---|---|
400 | APPID_MCHID_NOT_MATCH | 商户号与AppID不匹配 | 请绑定调用接口的商户号和AppID后重试 |
400 | INVALID_REQUEST | OpenID与AppID不匹配 | 请使用AppID下的OpenID |
400 | INVALID_REQUEST | 活动已结束或未激活 | 请检查批次状态 |
400 | INVALID_REQUEST | 非法的商户号 | 请检查商户号是否正确 |
400 | MCH_NOT_EXISTS | 商户号不合法 | 请输入正确的商户号 |
400 | PARAM_ERROR | 回调URL不能为空 | 请填写回调URL |
400 | PARAM_ERROR | 回调商户不能为空 | 请填写回调商户 |
400 | PARAM_ERROR | 券ID必填 | 请填写券ID |
400 | PARAM_ERROR | AppID必填 | 请输入AppID |
400 | PARAM_ERROR | OpenID必填 | 请输入OpenID |
400 | PARAM_ERROR | 页大小超过阈值 | 请不要超过最大的页大小 |
400 | PARAM_ERROR | 输入时间格式错误 | 请输入正确的时间格式 |
400 | PARAM_ERROR | 批次号必填 | 请输入批次号 |
400 | PARAM_ERROR | 商户号必填 | 请输入商户号 |
400 | PARAM_ERROR | 非法的批次状态 | 请检查批次状态 |
403 | NOT_ENOUGH | 批次预算不足 | 请补充预算 |
403 | REQUEST_BLOCKED | 调用商户无权限 | 请开通产品权限后再调用该接口 |
403 | REQUEST_BLOCKED | 商户无权发券 | 调用接口的商户号无权发券,请检查是否是自己的批次或是已授权的批次。 |
403 | REQUEST_BLOCKED | 批次不支持跨商户发券 | 该批次未做跨商户号的授权,请授权后再发放 |
403 | REQUEST_BLOCKED | 用户被限领拦截 | 用户领取已经达到上限,请调高上限或停止发放。 |
403 | USER_ACCOUNT_ABNORMAL | 用户非法 | 该用户账号异常,无法领券。商家可联系微信支付或让用户联系微信支付客服处理。 |
404 | RESOURCE_NOT_EXISTS | 批次不存在 | 请检查批次ID是否正确 |
429 | FREQUENCY_LIMITED | 请求过于频繁 | 稍后重试 |