查询用户在品牌下所有会员卡
更新时间:2025.06.22查询用户在当前品牌下领取的会员卡列表
接口限频:按服务商商户号维度 5次/秒
接口说明
支持商户:【普通服务商】
请求方式:【GET】/v3/brand/partner/card-member/user-cards
请求域名:【主域名】https://api.mch.weixin.qq.com 使用该域名将访问就近的接入点
【备域名】https://api2.mch.weixin.qq.com 使用该域名将访问异地的接入点 ,指引点击查看
请求参数
Header HTTP头参数
Authorization 必填 string
请参考签名认证生成认证信息
Accept 必填 string
请设置为application/json
query 查询参数
brand_id 必填 string(32)
【品牌ID】 商家进驻微信支付品牌商家后获得的品牌ID(灰度期间联系微信支付运营获取),用于标记该会员卡的归属方
openid 必填 string(128)
【用户标识】 用户在品牌商家会员卡模板AppID下的唯一标识,获取方式详见参数说明。
user_card_state 选填 string
【用户会员卡状态】 用户当前的卡状态
可选取值
UNACTIVATED: 用户已领卡,但还未激活EFFECTIVE: 用户的会员卡可正常使用EXPIRED: 用户的会员卡已过期INVALID: 用户的会员卡已失效
offset 必填 integer
【分页开始位置】 该次请求的分页开始位置,从0开始计数,例如offset=10,表示从第11条记录开始返回。
limit 必填 integer
【分页大小】 分页大小,范围为1~20
请求示例
GET
1curl -X GET \ 2 https://api.mch.weixin.qq.com/v3/brand/partner/card-member/user-cards?brand_id=1004&openid=obLatjnx9gnqzS4myYGmLZ7LgLBA&user_card_state=EFFECTIVE&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/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 ListUserCard { 26 private static String HOST = "https://api.mch.weixin.qq.com"; 27 private static String METHOD = "GET"; 28 private static String PATH = "/v3/brand/partner/card-member/user-cards"; 29 30 public static void main(String[] args) { 31 // TODO: 请准备商户开发必要参数,参考:https://pay.weixin.qq.com/doc/v3/partner/4013080340 32 ListUserCard client = new ListUserCard( 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 ListUserCardRequest request = new ListUserCardRequest(); 41 request.brandId = "1004"; 42 request.openid = "obLatjnx9gnqzS4myYGmLZ7LgLBA"; 43 request.userCardState = UserCardState.EFFECTIVE; 44 request.offset = 0L; 45 request.limit = 20L; 46 try { 47 ListUserCardResponse response = client.run(request); 48 // TODO: 请求成功,继续业务逻辑 49 System.out.println(response); 50 } catch (WXPayUtility.ApiException e) { 51 // TODO: 请求失败,根据状态码执行不同的逻辑 52 e.printStackTrace(); 53 } 54 } 55 56 public ListUserCardResponse run(ListUserCardRequest request) { 57 String uri = PATH; 58 Map<String, Object> args = new HashMap<>(); 59 args.put("brand_id", request.brandId); 60 args.put("openid", request.openid); 61 args.put("user_card_state", request.userCardState); 62 args.put("offset", request.offset); 63 args.put("limit", request.limit); 64 String queryString = WXPayUtility.urlEncode(args); 65 if (!queryString.isEmpty()) { 66 uri = uri + "?" + queryString; 67 } 68 69 Request.Builder reqBuilder = new Request.Builder().url(HOST + uri); 70 reqBuilder.addHeader("Accept", "application/json"); 71 reqBuilder.addHeader("Wechatpay-Serial", wechatPayPublicKeyId); 72 reqBuilder.addHeader("Authorization", WXPayUtility.buildAuthorization(mchid, certificateSerialNo, privateKey, METHOD, uri, null)); 73 reqBuilder.method(METHOD, null); 74 Request httpRequest = reqBuilder.build(); 75 76 // 发送HTTP请求 77 OkHttpClient client = new OkHttpClient.Builder().build(); 78 try (Response httpResponse = client.newCall(httpRequest).execute()) { 79 String respBody = WXPayUtility.extractBody(httpResponse); 80 if (httpResponse.code() >= 200 && httpResponse.code() < 300) { 81 // 2XX 成功,验证应答签名 82 WXPayUtility.validateResponse(this.wechatPayPublicKeyId, this.wechatPayPublicKey, 83 httpResponse.headers(), respBody); 84 85 // 从HTTP应答报文构建返回数据 86 return WXPayUtility.fromJson(respBody, ListUserCardResponse.class); 87 } else { 88 throw new WXPayUtility.ApiException(httpResponse.code(), respBody, httpResponse.headers()); 89 } 90 } catch (IOException e) { 91 throw new UncheckedIOException("Sending request to " + uri + " failed.", e); 92 } 93 } 94 95 private final String mchid; 96 private final String certificateSerialNo; 97 private final PrivateKey privateKey; 98 private final String wechatPayPublicKeyId; 99 private final PublicKey wechatPayPublicKey; 100 101 public ListUserCard(String mchid, String certificateSerialNo, String privateKeyFilePath, String wechatPayPublicKeyId, String wechatPayPublicKeyFilePath) { 102 this.mchid = mchid; 103 this.certificateSerialNo = certificateSerialNo; 104 this.privateKey = WXPayUtility.loadPrivateKeyFromPath(privateKeyFilePath); 105 this.wechatPayPublicKeyId = wechatPayPublicKeyId; 106 this.wechatPayPublicKey = WXPayUtility.loadPublicKeyFromPath(wechatPayPublicKeyFilePath); 107 } 108 109 public static class ListUserCardRequest { 110 @SerializedName("brand_id") 111 @Expose(serialize = false) 112 public String brandId; 113 114 @SerializedName("openid") 115 @Expose(serialize = false) 116 public String openid; 117 118 @SerializedName("offset") 119 @Expose(serialize = false) 120 public Long offset; 121 122 @SerializedName("limit") 123 @Expose(serialize = false) 124 public Long limit; 125 126 @SerializedName("user_card_state") 127 @Expose(serialize = false) 128 public UserCardState userCardState; 129 } 130 131 public static class ListUserCardResponse { 132 @SerializedName("data") 133 public List<UserCard> data; 134 135 @SerializedName("total_count") 136 public Long totalCount; 137 138 @SerializedName("offset") 139 public Long offset; 140 141 @SerializedName("limit") 142 public Long limit; 143 } 144 145 public enum UserCardState { 146 @SerializedName("UNACTIVATED") 147 UNACTIVATED, 148 @SerializedName("EFFECTIVE") 149 EFFECTIVE, 150 @SerializedName("EXPIRED") 151 EXPIRED, 152 @SerializedName("INVALID") 153 INVALID 154 } 155 156 public static class UserCard { 157 @SerializedName("user_card_code") 158 public String userCardCode; 159 160 @SerializedName("card_id") 161 public String cardId; 162 163 @SerializedName("openid") 164 public String openid; 165 166 @SerializedName("card_color") 167 public String cardColor; 168 169 @SerializedName("card_picture_url") 170 public String cardPictureUrl; 171 172 @SerializedName("brand_id") 173 public String brandId; 174 175 @SerializedName("card_type") 176 public CardType cardType; 177 178 @SerializedName("phone_number") 179 public String phoneNumber; 180 181 @SerializedName("level") 182 public String level; 183 184 @SerializedName("valid_date_information") 185 public DateInfo validDateInformation; 186 187 @SerializedName("pickup_time") 188 public String pickupTime; 189 190 @SerializedName("user_information") 191 public UserInfo userInformation; 192 193 @SerializedName("attach") 194 public String attach; 195 196 @SerializedName("user_card_state") 197 public UserCardState userCardState; 198 199 @SerializedName("invalid_reason") 200 public String invalidReason; 201 202 @SerializedName("invalid_time") 203 public String invalidTime; 204 205 @SerializedName("create_time") 206 public String createTime; 207 208 @SerializedName("modify_time") 209 public String modifyTime; 210 } 211 212 public enum CardType { 213 @SerializedName("PURCHASE") 214 PURCHASE, 215 @SerializedName("NORMAL") 216 NORMAL, 217 @SerializedName("BALANCE") 218 BALANCE 219 } 220 221 public static class DateInfo { 222 @SerializedName("type") 223 public DateType type; 224 225 @SerializedName("available_begin_time") 226 public String availableBeginTime; 227 228 @SerializedName("available_end_time") 229 public String availableEndTime; 230 231 @SerializedName("available_day_after_receive") 232 public Long availableDayAfterReceive; 233 } 234 235 public static class UserInfo { 236 @SerializedName("common_field_list") 237 public List<UserInfoCommonField> commonFieldList; 238 239 @SerializedName("custom_field_list") 240 public List<UserInfoCustomField> customFieldList; 241 } 242 243 public enum DateType { 244 @SerializedName("FIX_TIME_RANGE") 245 FIX_TIME_RANGE, 246 @SerializedName("FIX_TERM") 247 FIX_TERM, 248 @SerializedName("PERMANENT") 249 PERMANENT 250 } 251 252 public static class UserInfoCommonField { 253 @SerializedName("name") 254 public CommonFieldFlag name; 255 256 @SerializedName("value") 257 public String value; 258 } 259 260 public static class UserInfoCustomField { 261 @SerializedName("name") 262 public String name; 263 264 @SerializedName("user_chosen_values") 265 public List<String> userChosenValues; 266 } 267 268 public enum CommonFieldFlag { 269 @SerializedName("USER_FORM_FLAG_SEX") 270 USER_FORM_FLAG_SEX, 271 @SerializedName("USER_FORM_FLAG_NAME") 272 USER_FORM_FLAG_NAME, 273 @SerializedName("USER_FORM_FLAG_BIRTHDAY") 274 USER_FORM_FLAG_BIRTHDAY, 275 @SerializedName("USER_FORM_FLAG_ADDRESS") 276 USER_FORM_FLAG_ADDRESS, 277 @SerializedName("USER_FORM_FLAG_EMAIL") 278 USER_FORM_FLAG_EMAIL, 279 @SerializedName("USER_FORM_FLAG_CITY") 280 USER_FORM_FLAG_CITY 281 } 282 283} 284
需配合微信支付工具库 wxpay_utility 使用,请参考Go
1package main 2 3import ( 4 "demo/wxpay_utility" // 引用微信支付工具库,参考 https://pay.weixin.qq.com/doc/v3/partner/4015119446 5 "encoding/json" 6 "fmt" 7 "net/http" 8 "net/url" 9) 10 11func main() { 12 // TODO: 请准备商户开发必要参数,参考:https://pay.weixin.qq.com/doc/v3/partner/4013080340 13 config, err := wxpay_utility.CreateMchConfig( 14 "19xxxxxxxx", // 商户号,是由微信支付系统生成并分配给每个商户的唯一标识符,商户号获取方式参考 https://pay.weixin.qq.com/doc/v3/partner/4013080340 15 "1DDE55AD98Exxxxxxxxxx", // 商户API证书序列号,如何获取请参考 https://pay.weixin.qq.com/doc/v3/partner/4013058924 16 "/path/to/apiclient_key.pem", // 商户API证书私钥文件路径,本地文件路径 17 "PUB_KEY_ID_xxxxxxxxxxxxx", // 微信支付公钥ID,如何获取请参考 https://pay.weixin.qq.com/doc/v3/partner/4013038589 18 "/path/to/wxp_pub.pem", // 微信支付公钥文件路径,本地文件路径 19 ) 20 if err != nil { 21 fmt.Println(err) 22 return 23 } 24 25 request := &ListUserCardRequest{ 26 BrandId: wxpay_utility.String("1004"), 27 Openid: wxpay_utility.String("obLatjnx9gnqzS4myYGmLZ7LgLBA"), 28 UserCardState: USERCARDSTATE_EFFECTIVE.Ptr(), 29 Offset: wxpay_utility.Int64(0), 30 Limit: wxpay_utility.Int64(20), 31 } 32 33 response, err := ListUserCard(config, request) 34 if err != nil { 35 fmt.Printf("请求失败: %+v\n", err) 36 // TODO: 请求失败,根据状态码执行不同的处理 37 return 38 } 39 40 // TODO: 请求成功,继续业务逻辑 41 fmt.Printf("请求成功: %+v\n", response) 42} 43 44func ListUserCard(config *wxpay_utility.MchConfig, request *ListUserCardRequest) (response *ListUserCardResponse, err error) { 45 const ( 46 host = "https://api.mch.weixin.qq.com" 47 method = "GET" 48 path = "/v3/brand/partner/card-member/user-cards" 49 ) 50 51 reqUrl, err := url.Parse(fmt.Sprintf("%s%s", host, path)) 52 if err != nil { 53 return nil, err 54 } 55 query := reqUrl.Query() 56 if request.BrandId != nil { 57 query.Add("brand_id", *request.BrandId) 58 } 59 if request.Openid != nil { 60 query.Add("openid", *request.Openid) 61 } 62 if request.UserCardState != nil { 63 query.Add("user_card_state", fmt.Sprintf("%v", *request.UserCardState)) 64 } 65 if request.Offset != nil { 66 query.Add("offset", fmt.Sprintf("%v", *request.Offset)) 67 } 68 if request.Limit != nil { 69 query.Add("limit", fmt.Sprintf("%v", *request.Limit)) 70 } 71 reqUrl.RawQuery = query.Encode() 72 httpRequest, err := http.NewRequest(method, reqUrl.String(), nil) 73 if err != nil { 74 return nil, err 75 } 76 httpRequest.Header.Set("Accept", "application/json") 77 httpRequest.Header.Set("Wechatpay-Serial", config.WechatPayPublicKeyId()) 78 authorization, err := wxpay_utility.BuildAuthorization(config.MchId(), config.CertificateSerialNo(), config.PrivateKey(), method, reqUrl.RequestURI(), nil) 79 if err != nil { 80 return nil, err 81 } 82 httpRequest.Header.Set("Authorization", authorization) 83 84 client := &http.Client{} 85 httpResponse, err := client.Do(httpRequest) 86 if err != nil { 87 return nil, err 88 } 89 respBody, err := wxpay_utility.ExtractResponseBody(httpResponse) 90 if err != nil { 91 return nil, err 92 } 93 if httpResponse.StatusCode >= 200 && httpResponse.StatusCode < 300 { 94 // 2XX 成功,验证应答签名 95 err = wxpay_utility.ValidateResponse( 96 config.WechatPayPublicKeyId(), 97 config.WechatPayPublicKey(), 98 &httpResponse.Header, 99 respBody, 100 ) 101 if err != nil { 102 return nil, err 103 } 104 response := &ListUserCardResponse{} 105 if err := json.Unmarshal(respBody, response); err != nil { 106 return nil, err 107 } 108 109 return response, nil 110 } else { 111 return nil, wxpay_utility.NewApiException( 112 httpResponse.StatusCode, 113 httpResponse.Header, 114 respBody, 115 ) 116 } 117} 118 119type ListUserCardRequest struct { 120 BrandId *string `json:"brand_id,omitempty"` 121 Openid *string `json:"openid,omitempty"` 122 Offset *int64 `json:"offset,omitempty"` 123 Limit *int64 `json:"limit,omitempty"` 124 UserCardState *UserCardState `json:"user_card_state,omitempty"` 125} 126 127func (o *ListUserCardRequest) MarshalJSON() ([]byte, error) { 128 type Alias ListUserCardRequest 129 a := &struct { 130 BrandId *string `json:"brand_id,omitempty"` 131 Openid *string `json:"openid,omitempty"` 132 Offset *int64 `json:"offset,omitempty"` 133 Limit *int64 `json:"limit,omitempty"` 134 UserCardState *UserCardState `json:"user_card_state,omitempty"` 135 *Alias 136 }{ 137 // 序列化时移除非 Body 字段 138 BrandId: nil, 139 Openid: nil, 140 Offset: nil, 141 Limit: nil, 142 UserCardState: nil, 143 Alias: (*Alias)(o), 144 } 145 return json.Marshal(a) 146} 147 148type ListUserCardResponse struct { 149 Data []UserCard `json:"data,omitempty"` 150 TotalCount *int64 `json:"total_count,omitempty"` 151 Offset *int64 `json:"offset,omitempty"` 152 Limit *int64 `json:"limit,omitempty"` 153} 154 155type UserCardState string 156 157func (e UserCardState) Ptr() *UserCardState { 158 return &e 159} 160 161const ( 162 USERCARDSTATE_UNACTIVATED UserCardState = "UNACTIVATED" 163 USERCARDSTATE_EFFECTIVE UserCardState = "EFFECTIVE" 164 USERCARDSTATE_EXPIRED UserCardState = "EXPIRED" 165 USERCARDSTATE_INVALID UserCardState = "INVALID" 166) 167 168type UserCard struct { 169 UserCardCode *string `json:"user_card_code,omitempty"` 170 CardId *string `json:"card_id,omitempty"` 171 Openid *string `json:"openid,omitempty"` 172 CardColor *string `json:"card_color,omitempty"` 173 CardPictureUrl *string `json:"card_picture_url,omitempty"` 174 BrandId *string `json:"brand_id,omitempty"` 175 CardType *CardType `json:"card_type,omitempty"` 176 PhoneNumber *string `json:"phone_number,omitempty"` 177 Level *string `json:"level,omitempty"` 178 ValidDateInformation *DateInfo `json:"valid_date_information,omitempty"` 179 PickupTime *string `json:"pickup_time,omitempty"` 180 UserInformation *UserInfo `json:"user_information,omitempty"` 181 Attach *string `json:"attach,omitempty"` 182 UserCardState *UserCardState `json:"user_card_state,omitempty"` 183 InvalidReason *string `json:"invalid_reason,omitempty"` 184 InvalidTime *string `json:"invalid_time,omitempty"` 185 CreateTime *string `json:"create_time,omitempty"` 186 ModifyTime *string `json:"modify_time,omitempty"` 187} 188 189type CardType string 190 191func (e CardType) Ptr() *CardType { 192 return &e 193} 194 195const ( 196 CARDTYPE_PURCHASE CardType = "PURCHASE" 197 CARDTYPE_NORMAL CardType = "NORMAL" 198 CARDTYPE_BALANCE CardType = "BALANCE" 199) 200 201type DateInfo struct { 202 Type *DateType `json:"type,omitempty"` 203 AvailableBeginTime *string `json:"available_begin_time,omitempty"` 204 AvailableEndTime *string `json:"available_end_time,omitempty"` 205 AvailableDayAfterReceive *int64 `json:"available_day_after_receive,omitempty"` 206} 207 208type UserInfo struct { 209 CommonFieldList []UserInfoCommonField `json:"common_field_list,omitempty"` 210 CustomFieldList []UserInfoCustomField `json:"custom_field_list,omitempty"` 211} 212 213type DateType string 214 215func (e DateType) Ptr() *DateType { 216 return &e 217} 218 219const ( 220 DATETYPE_FIX_TIME_RANGE DateType = "FIX_TIME_RANGE" 221 DATETYPE_FIX_TERM DateType = "FIX_TERM" 222 DATETYPE_PERMANENT DateType = "PERMANENT" 223) 224 225type UserInfoCommonField struct { 226 Name *CommonFieldFlag `json:"name,omitempty"` 227 Value *string `json:"value,omitempty"` 228} 229 230type UserInfoCustomField struct { 231 Name *string `json:"name,omitempty"` 232 UserChosenValues []string `json:"user_chosen_values,omitempty"` 233} 234 235type CommonFieldFlag string 236 237func (e CommonFieldFlag) Ptr() *CommonFieldFlag { 238 return &e 239} 240 241const ( 242 COMMONFIELDFLAG_USER_FORM_FLAG_SEX CommonFieldFlag = "USER_FORM_FLAG_SEX" 243 COMMONFIELDFLAG_USER_FORM_FLAG_NAME CommonFieldFlag = "USER_FORM_FLAG_NAME" 244 COMMONFIELDFLAG_USER_FORM_FLAG_BIRTHDAY CommonFieldFlag = "USER_FORM_FLAG_BIRTHDAY" 245 COMMONFIELDFLAG_USER_FORM_FLAG_ADDRESS CommonFieldFlag = "USER_FORM_FLAG_ADDRESS" 246 COMMONFIELDFLAG_USER_FORM_FLAG_EMAIL CommonFieldFlag = "USER_FORM_FLAG_EMAIL" 247 COMMONFIELDFLAG_USER_FORM_FLAG_CITY CommonFieldFlag = "USER_FORM_FLAG_CITY" 248) 249
应答参数
200 OK
data 选填 array[object]
【会员卡列表】 符合条件的会员卡列表
| 属性 | |||||||||||||||||
user_card_code 必填 string(32) 【会员卡code】 会员在一个会员卡模板下的唯一标识,用户领取会员卡后获得的code。只能填写数字/英文/半角标点。平台支持2种会员卡code分配类型:(1)SYSTEM_ALLOCATE 微信支付系统分配,用户领取会员卡时从微信系统分配24位数字作为会员code;(2)MERCHANT_ALLOCATE 商家分配,商家同步会员开通结果时传入,用户开卡成功或失败都以商家传入的code作为会员卡code。 card_id 必填 string(32) 【会员卡模板 ID】 商家创建会员卡模板成功后系统返回的会员卡模板ID openid 必填 string(128) 【用户标识】 用户在品牌商家会员卡模板AppID下的唯一标识,获取方式详见参数说明。 card_color 选填 string(7) 【卡背景颜色】 用于卡片正面设计的RGB颜色编码,仅支持十六进制 card_picture_url 选填 string(256) 【卡图片】 商家自定义会员卡背景图。仅支持通过图片上传API接口获取的图片URL地址。支持JPG/JPEG/PNG格式,建议尺寸716px*320px,且图片小于1M。查看以下链接后传入:图片要求示例,图片上传API指引。 brand_id 必填 string(32) 【品牌ID】 商家进驻微信支付品牌商家后获得的品牌ID(灰度期间联系微信支付运营获取),用于标记该会员卡的归属方 card_type 必填 string 【会员卡类型】 支持付费、普通、储值 3 种类型。目前仅支持普通会员卡,填写付费和储值类型时会返回错误。 可选取值
phone_number 选填 string(512) 【加密的手机号】 注册会员的手机号码,仅在用户授权手机号、商家通过 API 传入的情况下有值。解密请参考如何使用API证书解密敏感字段。 level 选填 string(10) 【等级】 用户会员等级,展示字段,商家可以自定义填写内容。 valid_date_information 必填 object 【会员卡有效期】 会员卡有效期
pickup_time 必填 string(32) 【领取时间】 用户领取会员卡的时间,需遵循 RFC3339 标准格式:yyyy-MM-DDTHH:mm:ss+TIMEZONE。yyyy-MM-DD 表示年月日;T 字符用于分隔日期和时间部分;HH:mm:ss 表示具体的时分秒;TIMEZONE 表示时区(例如,+08:00 对应东八区时间,即北京时间)。示例:2015-05-20T13:29:35+08:00 表示北京时间2015年5月20日13点29分35秒。 user_information 选填 object 【用户开卡时填写的个人信息】 用户开卡时填写的个人信息
attach 选填 string(256) 【商家数据包】 商家在创建用户会员卡时可传入自定义数据包,该数据对用户不可见,用于存储商家自定义信息,其总长度限制在256字符以内。查询用户会员卡详情时会将此字段返回给商家。 user_card_state 必填 string 【用户会员卡状态】 用户当前的卡状态 可选取值
invalid_reason 选填 string(32) 【作废原因】 会员卡作废时传入的原因 invalid_time 选填 string(32) 【作废时间】 会员卡作废操作的时间,需遵循 RFC3339 标准格式:yyyy-MM-DDTHH:mm:ss+TIMEZONE。yyyy-MM-DD 表示年月日;T 字符用于分隔日期和时间部分;HH:mm:ss 表示具体的时分秒;TIMEZONE 表示时区(例如,+08:00 对应东八区时间,即北京时间)。示例:2015-05-20T13:29:35+08:00 表示北京时间2015年5月20日13点29分35秒。 create_time 必填 string(32) 【创建时间】 创建会员卡的时间,需遵循 RFC3339 标准格式:yyyy-MM-DDTHH:mm:ss+TIMEZONE。yyyy-MM-DD 表示年月日;T 字符用于分隔日期和时间部分;HH:mm:ss 表示具体的时分秒;TIMEZONE 表示时区(例如,+08:00 对应东八区时间,即北京时间)。示例:2015-05-20T13:29:35+08:00 表示北京时间2015年5月20日13点29分35秒。 modify_time 必填 string(32) 【更新时间】 更新会员卡的时间,需遵循 RFC3339 标准格式:yyyy-MM-DDTHH:mm:ss+TIMEZONE。yyyy-MM-DD 表示年月日;T 字符用于分隔日期和时间部分;HH:mm:ss 表示具体的时分秒;TIMEZONE 表示时区(例如,+08:00 对应东八区时间,即北京时间)。示例:2015-05-20T13:29:35+08:00 表示北京时间2015年5月20日13点29分35秒。 |
total_count 必填 integer
【总数量】 总数量
offset 必填 integer
【分页开始位置】 该次请求的分页开始位置,从0开始计数,例如offset=10,表示从第11条记录开始返回。
limit 必填 integer
【分页大小】 分页大小,范围为1~20
应答示例
200 OK
1{ 2 "data" : [ 3 { 4 "user_card_code" : "478515832665", 5 "card_id" : "pbLatjvWOibDc5-TBnbUk1pD12o0", 6 "openid" : "obLatjnx9gnqzS4myYGmLZ7LgLBA", 7 "card_color" : "#FFFF00", 8 "card_picture_url" : "https://wxpaylogo.qpic.cn/wxpaylogo/PiajxSqBRaEIPAeia7Imvtsn7sYGNcEj33YzVvJF88ECQ19LXId8ZL2Q/0", 9 "brand_id" : "1001622624", 10 "card_type" : "NORMAL", 11 "phone_number" : "vvysDQeEaH3I+wRh14St0abIkvQyFgh/fbWYSs2bLtG9tj+bdJn4WSCPzLhShNHgujZzseiL6sYmT7E65mv/eFeTa7yslYfrX0hrhHazSM/+tfvN/C3OZwiBbcrF9LTIIdBVhGOqhCx0gK5YAVZc8dbW/yJqC5i79PDfVYJtpQe3A4v/GiDa2Q+Mv03taxgnEkzqlSPjkXiCYBj9UaFJ4bqCTXiO2Kt6TpczvAaZW+9/blxiJwqEFXe78LbrIQvkDUmVdZbqBdPQ+QGQgc/2Ea4IbP/EEt1qSyXnFbzaaKSE2j4mAFON3kzNexb/SYkHZNJAuCittaW4wpGj7U+h9A==", 12 "level" : "钻石会员", 13 "valid_date_information" : { 14 "type" : "PERMANENT", 15 "available_begin_time" : "2020-05-20T13:29:35.120+08:00", 16 "available_end_time" : "2020-05-20T13:29:35.120+08:00", 17 "available_day_after_receive" : 30 18 }, 19 "pickup_time" : "2020-05-20T13:29:35.120+08:00", 20 "user_information" : { 21 "common_field_list" : [ 22 { 23 "name" : "USER_FORM_FLAG_BIRTHDAY", 24 "value" : "vvysDQeEaH3I+wRh14St0abIkvQyFgh/fbWYSs2bLtG9tj+bdJn4WSCPzLhShNHgujZzseiL6sYmT7E65mv/eFeTa7yslYfrX0hrhHazSM/+tfvN/C3OZwiBbcrF9LTIIdBVhGOqhCx0gK5YAVZc8dbW/yJqC5i79PDfVYJtpQe3A4v/GiDa2Q+Mv03taxgnEkzqlSPjkXiCYBj9UaFJ4bqCTXiO2Kt6TpczvAaZW+9/blxiJwqEFXe78LbrIQvkDUmVdZbqBdPQ+QGQgc/2Ea4IbP/EEt1qSyXnFbzaaKSE2j4mAFON3kzNexb/SYkHZNJAuCittaW4wpGj7U+h9A==" 25 } 26 ], 27 "custom_field_list" : [ 28 { 29 "name" : "喜欢的运动", 30 "user_chosen_values" : [ 31 "vvysDQeEaH3I+wRh14St0abIkvQyFgh/fbWYSs2bLtG9tj+bdJn4WSCPzLhShNHgujZzseiL6sYmT7E65mv/eFeTa7yslYfrX0hrhHazSM/+tfvN/C3OZwiBbcrF9LTIIdBVhGOqhCx0gK5YAVZc8dbW/yJqC5i79PDfVYJtpQe3A4v/GiDa2Q+Mv03taxgnEkzqlSPjkXiCYBj9UaFJ4bqCTXiO2Kt6TpczvAaZW+9/blxiJwqEFXe78LbrIQvkDUmVdZbqBdPQ+QGQgc/2Ea4IbP/EEt1qSyXnFbzaaKSE2j4mAFON3kzNexb/SYkHZNJAuCittaW4wpGj7U+h9A==" 32 ] 33 } 34 ] 35 }, 36 "attach" : "自定义数据说明", 37 "user_card_state" : "EFFECTIVE", 38 "invalid_reason" : "传入的自定义作废原因", 39 "invalid_time" : "2020-05-20T13:29:35.120+08:00", 40 "create_time" : "2020-05-20T13:29:35.120+08:00", 41 "modify_time" : "2020-05-20T13:29:35.120+08:00" 42 } 43 ], 44 "total_count" : 20, 45 "offset" : 0, 46 "limit" : 20 47} 48
错误码
以下是本接口返回的错误码列表。详细错误码规则,请参考微信支付接口规则-错误码和错误提示
状态码 | 错误码 | 描述 | 解决方案 |
|---|---|---|---|
400 | PARAM_ERROR | 参数错误 | 请根据错误提示正确传入参数 |
400 | INVALID_REQUEST | HTTP 请求不符合微信支付 APIv3 接口规则 | 请参阅 接口规则 |
401 | SIGN_ERROR | 验证不通过 | 请参阅 签名常见问题 |
500 | SYSTEM_ERROR | 系统异常,请稍后重试 | 请稍后重试 |
400 | INVALID_REQUEST | OpenID 不属于品牌的 AppID | 请检查OpenID是否属于品牌的AppID |
400 | INVALID_REQUEST | OpenID 无效 | 请检查并填写正确的OpenID |
400 | INVALID_REQUEST | 商家未开通商家名片会员功能 | 请联系运营为该商家开通商家名片会员功能 |
