查询用户在品牌下所有会员卡
更新时间:2025.07.25查询用户在当前品牌下领取的会员卡列表
接口限频:按服务商商户号维度 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 "time" 10) 11 12func main() { 13 // TODO: 请准备商户开发必要参数,参考:https://pay.weixin.qq.com/doc/v3/partner/4013080340 14 config, err := wxpay_utility.CreateMchConfig( 15 "19xxxxxxxx", // 商户号,是由微信支付系统生成并分配给每个商户的唯一标识符,商户号获取方式参考 https://pay.weixin.qq.com/doc/v3/partner/4013080340 16 "1DDE55AD98Exxxxxxxxxx", // 商户API证书序列号,如何获取请参考 https://pay.weixin.qq.com/doc/v3/partner/4013058924 17 "/path/to/apiclient_key.pem", // 商户API证书私钥文件路径,本地文件路径 18 "PUB_KEY_ID_xxxxxxxxxxxxx", // 微信支付公钥ID,如何获取请参考 https://pay.weixin.qq.com/doc/v3/partner/4013038589 19 "/path/to/wxp_pub.pem", // 微信支付公钥文件路径,本地文件路径 20 ) 21 if err != nil { 22 fmt.Println(err) 23 return 24 } 25 26 request := &ListUserCardRequest{ 27 BrandId: wxpay_utility.String("1004"), 28 Openid: wxpay_utility.String("obLatjnx9gnqzS4myYGmLZ7LgLBA"), 29 UserCardState: USERCARDSTATE_EFFECTIVE.Ptr(), 30 Offset: wxpay_utility.Int64(0), 31 Limit: wxpay_utility.Int64(20), 32 } 33 34 response, err := ListUserCard(config, request) 35 if err != nil { 36 fmt.Printf("请求失败: %+v\n", err) 37 // TODO: 请求失败,根据状态码执行不同的处理 38 return 39 } 40 41 // TODO: 请求成功,继续业务逻辑 42 fmt.Printf("请求成功: %+v\n", response) 43} 44 45func ListUserCard(config *wxpay_utility.MchConfig, request *ListUserCardRequest) (response *ListUserCardResponse, err error) { 46 const ( 47 host = "https://api.mch.weixin.qq.com" 48 method = "GET" 49 path = "/v3/brand/partner/card-member/user-cards" 50 ) 51 52 reqUrl, err := url.Parse(fmt.Sprintf("%s%s", host, path)) 53 if err != nil { 54 return nil, err 55 } 56 query := reqUrl.Query() 57 if request.BrandId != nil { 58 query.Add("brand_id", *request.BrandId) 59 } 60 if request.Openid != nil { 61 query.Add("openid", *request.Openid) 62 } 63 if request.UserCardState != nil { 64 query.Add("user_card_state", fmt.Sprintf("%v", *request.UserCardState)) 65 } 66 if request.Offset != nil { 67 query.Add("offset", fmt.Sprintf("%v", *request.Offset)) 68 } 69 if request.Limit != nil { 70 query.Add("limit", fmt.Sprintf("%v", *request.Limit)) 71 } 72 reqUrl.RawQuery = query.Encode() 73 httpRequest, err := http.NewRequest(method, reqUrl.String(), nil) 74 if err != nil { 75 return nil, err 76 } 77 httpRequest.Header.Set("Accept", "application/json") 78 httpRequest.Header.Set("Wechatpay-Serial", config.WechatPayPublicKeyId()) 79 authorization, err := wxpay_utility.BuildAuthorization(config.MchId(), config.CertificateSerialNo(), config.PrivateKey(), method, reqUrl.RequestURI(), nil) 80 if err != nil { 81 return nil, err 82 } 83 httpRequest.Header.Set("Authorization", authorization) 84 85 client := &http.Client{} 86 httpResponse, err := client.Do(httpRequest) 87 if err != nil { 88 return nil, err 89 } 90 respBody, err := wxpay_utility.ExtractResponseBody(httpResponse) 91 if err != nil { 92 return nil, err 93 } 94 if httpResponse.StatusCode >= 200 && httpResponse.StatusCode < 300 { 95 // 2XX 成功,验证应答签名 96 err = wxpay_utility.ValidateResponse( 97 config.WechatPayPublicKeyId(), 98 config.WechatPayPublicKey(), 99 &httpResponse.Header, 100 respBody, 101 ) 102 if err != nil { 103 return nil, err 104 } 105 response := &ListUserCardResponse{} 106 if err := json.Unmarshal(respBody, response); err != nil { 107 return nil, err 108 } 109 110 return response, nil 111 } else { 112 return nil, wxpay_utility.NewApiException( 113 httpResponse.StatusCode, 114 httpResponse.Header, 115 respBody, 116 ) 117 } 118} 119 120type ListUserCardRequest struct { 121 BrandId *string `json:"brand_id,omitempty"` 122 Openid *string `json:"openid,omitempty"` 123 Offset *int64 `json:"offset,omitempty"` 124 Limit *int64 `json:"limit,omitempty"` 125 UserCardState *UserCardState `json:"user_card_state,omitempty"` 126} 127 128func (o *ListUserCardRequest) MarshalJSON() ([]byte, error) { 129 type Alias ListUserCardRequest 130 a := &struct { 131 BrandId *string `json:"brand_id,omitempty"` 132 Openid *string `json:"openid,omitempty"` 133 Offset *int64 `json:"offset,omitempty"` 134 Limit *int64 `json:"limit,omitempty"` 135 UserCardState *UserCardState `json:"user_card_state,omitempty"` 136 *Alias 137 }{ 138 // 序列化时移除非 Body 字段 139 BrandId: nil, 140 Openid: nil, 141 Offset: nil, 142 Limit: nil, 143 UserCardState: nil, 144 Alias: (*Alias)(o), 145 } 146 return json.Marshal(a) 147} 148 149type ListUserCardResponse struct { 150 Data []UserCard `json:"data,omitempty"` 151 TotalCount *int64 `json:"total_count,omitempty"` 152 Offset *int64 `json:"offset,omitempty"` 153 Limit *int64 `json:"limit,omitempty"` 154} 155 156type UserCardState string 157 158func (e UserCardState) Ptr() *UserCardState { 159 return &e 160} 161 162const ( 163 USERCARDSTATE_UNACTIVATED UserCardState = "UNACTIVATED" 164 USERCARDSTATE_EFFECTIVE UserCardState = "EFFECTIVE" 165 USERCARDSTATE_EXPIRED UserCardState = "EXPIRED" 166 USERCARDSTATE_INVALID UserCardState = "INVALID" 167) 168 169type UserCard struct { 170 UserCardCode *string `json:"user_card_code,omitempty"` 171 CardId *string `json:"card_id,omitempty"` 172 Openid *string `json:"openid,omitempty"` 173 CardColor *string `json:"card_color,omitempty"` 174 CardPictureUrl *string `json:"card_picture_url,omitempty"` 175 BrandId *string `json:"brand_id,omitempty"` 176 CardType *CardType `json:"card_type,omitempty"` 177 PhoneNumber *string `json:"phone_number,omitempty"` 178 Level *string `json:"level,omitempty"` 179 ValidDateInformation *DateInfo `json:"valid_date_information,omitempty"` 180 PickupTime *time.Time `json:"pickup_time,omitempty"` 181 UserInformation *UserInfo `json:"user_information,omitempty"` 182 Attach *string `json:"attach,omitempty"` 183 UserCardState *UserCardState `json:"user_card_state,omitempty"` 184 InvalidReason *string `json:"invalid_reason,omitempty"` 185 InvalidTime *time.Time `json:"invalid_time,omitempty"` 186 CreateTime *time.Time `json:"create_time,omitempty"` 187 ModifyTime *time.Time `json:"modify_time,omitempty"` 188} 189 190type CardType string 191 192func (e CardType) Ptr() *CardType { 193 return &e 194} 195 196const ( 197 CARDTYPE_PURCHASE CardType = "PURCHASE" 198 CARDTYPE_NORMAL CardType = "NORMAL" 199 CARDTYPE_BALANCE CardType = "BALANCE" 200) 201 202type DateInfo struct { 203 Type *DateType `json:"type,omitempty"` 204 AvailableBeginTime *time.Time `json:"available_begin_time,omitempty"` 205 AvailableEndTime *time.Time `json:"available_end_time,omitempty"` 206 AvailableDayAfterReceive *int64 `json:"available_day_after_receive,omitempty"` 207} 208 209type UserInfo struct { 210 CommonFieldList []UserInfoCommonField `json:"common_field_list,omitempty"` 211 CustomFieldList []UserInfoCustomField `json:"custom_field_list,omitempty"` 212} 213 214type DateType string 215 216func (e DateType) Ptr() *DateType { 217 return &e 218} 219 220const ( 221 DATETYPE_FIX_TIME_RANGE DateType = "FIX_TIME_RANGE" 222 DATETYPE_FIX_TERM DateType = "FIX_TERM" 223 DATETYPE_PERMANENT DateType = "PERMANENT" 224) 225 226type UserInfoCommonField struct { 227 Name *CommonFieldFlag `json:"name,omitempty"` 228 Value *string `json:"value,omitempty"` 229} 230 231type UserInfoCustomField struct { 232 Name *string `json:"name,omitempty"` 233 UserChosenValues []string `json:"user_chosen_values,omitempty"` 234} 235 236type CommonFieldFlag string 237 238func (e CommonFieldFlag) Ptr() *CommonFieldFlag { 239 return &e 240} 241 242const ( 243 COMMONFIELDFLAG_USER_FORM_FLAG_SEX CommonFieldFlag = "USER_FORM_FLAG_SEX" 244 COMMONFIELDFLAG_USER_FORM_FLAG_NAME CommonFieldFlag = "USER_FORM_FLAG_NAME" 245 COMMONFIELDFLAG_USER_FORM_FLAG_BIRTHDAY CommonFieldFlag = "USER_FORM_FLAG_BIRTHDAY" 246 COMMONFIELDFLAG_USER_FORM_FLAG_ADDRESS CommonFieldFlag = "USER_FORM_FLAG_ADDRESS" 247 COMMONFIELDFLAG_USER_FORM_FLAG_EMAIL CommonFieldFlag = "USER_FORM_FLAG_EMAIL" 248 COMMONFIELDFLAG_USER_FORM_FLAG_CITY CommonFieldFlag = "USER_FORM_FLAG_CITY" 249) 250
应答参数
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 【领取时间】 用户领取会员卡的时间,需遵循 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 【作废时间】 会员卡作废操作的时间,需遵循 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 【创建时间】 创建会员卡的时间,需遵循 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 【更新时间】 更新会员卡的时间,需遵循 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 | 商家未开通商家名片会员功能 | 请联系运营为该商家开通商家名片会员功能 |

