查询品牌会员发券活动列表
更新时间:2025.11.14查询符合条件的品牌会员发券活动列表
接口限频:按服务商商户号维度 5次/秒
接口说明
支持商户:【普通服务商】
请求方式:【GET】/v3/brand/partner/card-member/membership-activities
请求域名:【主域名】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(灰度期间联系微信支付运营获取),用于标记该会员卡的归属方
card_id 选填 string(32)
【会员卡模板ID】 商家创建会员卡模板成功后系统返回的会员卡模板ID
activity_state 选填 string
【活动状态】 活动状态
可选取值
MEMBERSHIP_ACTIVITY_CREATED: 调用创建活动API成功后的活动状态MEMBERSHIP_ACTIVITY_EFFECTIVE: 当活动正式开始时的活动状态MEMBERSHIP_ACTIVITY_TERMINATED: 调用终止活动API成功后的活动状态MEMBERSHIP_ACTIVITY_EXPIRED: 当前活动时间超过结束时间
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/membership-activities?brand_id=1004&card_id=pbLatjvWOibDc5-TBnbUk1pD12o0&activity_state=MEMBERSHIP_ACTIVITY_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 ListMembershipActivity { 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/membership-activities"; 29 30 public static void main(String[] args) { 31 // TODO: 请准备商户开发必要参数,参考:https://pay.weixin.qq.com/doc/v3/partner/4013080340 32 ListMembershipActivity client = new ListMembershipActivity( 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 ListMembershipActivityRequest request = new ListMembershipActivityRequest(); 41 request.brandId = "1004"; 42 request.cardId = "pbLatjvWOibDc5-TBnbUk1pD12o0"; 43 request.activityState = MembershipGiftActivityState.MEMBERSHIP_ACTIVITY_EFFECTIVE; 44 request.offset = 0L; 45 request.limit = 20L; 46 try { 47 ListMembershipActivityResponse 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 ListMembershipActivityResponse run(ListMembershipActivityRequest request) { 57 String uri = PATH; 58 Map<String, Object> args = new HashMap<>(); 59 args.put("brand_id", request.brandId); 60 args.put("card_id", request.cardId); 61 args.put("activity_state", request.activityState); 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, ListMembershipActivityResponse.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 ListMembershipActivity(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 ListMembershipActivityRequest { 110 @SerializedName("brand_id") 111 @Expose(serialize = false) 112 public String brandId; 113 114 @SerializedName("card_id") 115 @Expose(serialize = false) 116 public String cardId; 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("activity_state") 127 @Expose(serialize = false) 128 public MembershipGiftActivityState activityState; 129 } 130 131 public static class ListMembershipActivityResponse { 132 @SerializedName("data") 133 public List<MembershipActivity> 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 MembershipGiftActivityState { 146 @SerializedName("MEMBERSHIP_ACTIVITY_CREATED") 147 MEMBERSHIP_ACTIVITY_CREATED, 148 @SerializedName("MEMBERSHIP_ACTIVITY_EFFECTIVE") 149 MEMBERSHIP_ACTIVITY_EFFECTIVE, 150 @SerializedName("MEMBERSHIP_ACTIVITY_TERMINATED") 151 MEMBERSHIP_ACTIVITY_TERMINATED, 152 @SerializedName("MEMBERSHIP_ACTIVITY_EXPIRED") 153 MEMBERSHIP_ACTIVITY_EXPIRED 154 } 155 156 public static class MembershipActivity { 157 @SerializedName("out_request_no") 158 public String outRequestNo; 159 160 @SerializedName("brand_id") 161 public String brandId; 162 163 @SerializedName("card_id") 164 public String cardId; 165 166 @SerializedName("activity_channel") 167 public MembershipActivityChannel activityChannel; 168 169 @SerializedName("title") 170 public String title; 171 172 @SerializedName("sub_title") 173 public String subTitle; 174 175 @SerializedName("begin_time") 176 public String beginTime; 177 178 @SerializedName("end_time") 179 public String endTime; 180 181 @SerializedName("apply_total") 182 public Long applyTotal; 183 184 @SerializedName("apply_available") 185 public Long applyAvailable; 186 187 @SerializedName("product_coupon_stock_list") 188 public List<ProductCouponStock> productCouponStockList; 189 190 @SerializedName("activity_id") 191 public Long activityId; 192 193 @SerializedName("activity_state") 194 public MembershipGiftActivityState activityState; 195 196 @SerializedName("create_time") 197 public String createTime; 198 199 @SerializedName("modify_time") 200 public String modifyTime; 201 } 202 203 public enum MembershipActivityChannel { 204 @SerializedName("MECHANT_APP_COMPONENT") 205 MECHANT_APP_COMPONENT 206 } 207 208 public static class ProductCouponStock { 209 @SerializedName("product_coupon_id") 210 public String productCouponId; 211 212 @SerializedName("stock_id") 213 public String stockId; 214 } 215 216} 217
需配合微信支付工具库 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 := &ListMembershipActivityRequest{ 26 BrandId: wxpay_utility.String("1004"), 27 CardId: wxpay_utility.String("pbLatjvWOibDc5-TBnbUk1pD12o0"), 28 ActivityState: MEMBERSHIPGIFTACTIVITYSTATE_MEMBERSHIP_ACTIVITY_EFFECTIVE.Ptr(), 29 Offset: wxpay_utility.Int64(0), 30 Limit: wxpay_utility.Int64(20), 31 } 32 33 response, err := ListMembershipActivity(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 ListMembershipActivity(config *wxpay_utility.MchConfig, request *ListMembershipActivityRequest) (response *ListMembershipActivityResponse, err error) { 45 const ( 46 host = "https://api.mch.weixin.qq.com" 47 method = "GET" 48 path = "/v3/brand/partner/card-member/membership-activities" 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.CardId != nil { 60 query.Add("card_id", *request.CardId) 61 } 62 if request.ActivityState != nil { 63 query.Add("activity_state", fmt.Sprintf("%v", *request.ActivityState)) 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 := &ListMembershipActivityResponse{} 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 ListMembershipActivityRequest struct { 120 BrandId *string `json:"brand_id,omitempty"` 121 CardId *string `json:"card_id,omitempty"` 122 Offset *int64 `json:"offset,omitempty"` 123 Limit *int64 `json:"limit,omitempty"` 124 ActivityState *MembershipGiftActivityState `json:"activity_state,omitempty"` 125} 126 127func (o *ListMembershipActivityRequest) MarshalJSON() ([]byte, error) { 128 type Alias ListMembershipActivityRequest 129 a := &struct { 130 BrandId *string `json:"brand_id,omitempty"` 131 CardId *string `json:"card_id,omitempty"` 132 Offset *int64 `json:"offset,omitempty"` 133 Limit *int64 `json:"limit,omitempty"` 134 ActivityState *MembershipGiftActivityState `json:"activity_state,omitempty"` 135 *Alias 136 }{ 137 // 序列化时移除非 Body 字段 138 BrandId: nil, 139 CardId: nil, 140 Offset: nil, 141 Limit: nil, 142 ActivityState: nil, 143 Alias: (*Alias)(o), 144 } 145 return json.Marshal(a) 146} 147 148type ListMembershipActivityResponse struct { 149 Data []MembershipActivity `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 MembershipGiftActivityState string 156 157func (e MembershipGiftActivityState) Ptr() *MembershipGiftActivityState { 158 return &e 159} 160 161const ( 162 MEMBERSHIPGIFTACTIVITYSTATE_MEMBERSHIP_ACTIVITY_CREATED MembershipGiftActivityState = "MEMBERSHIP_ACTIVITY_CREATED" 163 MEMBERSHIPGIFTACTIVITYSTATE_MEMBERSHIP_ACTIVITY_EFFECTIVE MembershipGiftActivityState = "MEMBERSHIP_ACTIVITY_EFFECTIVE" 164 MEMBERSHIPGIFTACTIVITYSTATE_MEMBERSHIP_ACTIVITY_TERMINATED MembershipGiftActivityState = "MEMBERSHIP_ACTIVITY_TERMINATED" 165 MEMBERSHIPGIFTACTIVITYSTATE_MEMBERSHIP_ACTIVITY_EXPIRED MembershipGiftActivityState = "MEMBERSHIP_ACTIVITY_EXPIRED" 166) 167 168type MembershipActivity struct { 169 OutRequestNo *string `json:"out_request_no,omitempty"` 170 BrandId *string `json:"brand_id,omitempty"` 171 CardId *string `json:"card_id,omitempty"` 172 ActivityChannel *MembershipActivityChannel `json:"activity_channel,omitempty"` 173 Title *string `json:"title,omitempty"` 174 SubTitle *string `json:"sub_title,omitempty"` 175 BeginTime *string `json:"begin_time,omitempty"` 176 EndTime *string `json:"end_time,omitempty"` 177 ApplyTotal *int64 `json:"apply_total,omitempty"` 178 ApplyAvailable *int64 `json:"apply_available,omitempty"` 179 ProductCouponStockList []ProductCouponStock `json:"product_coupon_stock_list,omitempty"` 180 ActivityId *int64 `json:"activity_id,omitempty"` 181 ActivityState *MembershipGiftActivityState `json:"activity_state,omitempty"` 182 CreateTime *string `json:"create_time,omitempty"` 183 ModifyTime *string `json:"modify_time,omitempty"` 184} 185 186type MembershipActivityChannel string 187 188func (e MembershipActivityChannel) Ptr() *MembershipActivityChannel { 189 return &e 190} 191 192const ( 193 MEMBERSHIPACTIVITYCHANNEL_MECHANT_APP_COMPONENT MembershipActivityChannel = "MECHANT_APP_COMPONENT" 194) 195 196type ProductCouponStock struct { 197 ProductCouponId *string `json:"product_coupon_id,omitempty"` 198 StockId *string `json:"stock_id,omitempty"` 199} 200
应答参数
200 OK
data 选填 array[object]
【活动列表】 符合查询条件的活动列表
| 属性 | |||||
out_request_no 必填 string(128) 【商家请求单号】 商家创建品牌会员发券活动凭据号。商家自定义,注意保持唯一性,仅供参考的格式:品牌ID+时间戳+流水号。字符仅允许包含英文半角的数字、字母、连接线 brand_id 必填 string(32) 【品牌ID】 商家进驻微信支付品牌商家后获得的品牌ID(灰度期间联系微信支付运营获取),用于标记该会员卡的归属方 card_id 必填 string(32) 【会员卡模板ID】 商家创建会员卡模板成功后系统返回的会员卡模板ID activity_channel 必填 string 【活动渠道】 活动渠道 可选取值
title 必填 string(128) 【活动主标题】 活动主标题 sub_title 必填 string(128) 【活动副标题】 活动副标题 begin_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秒。 end_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秒。 apply_total 必填 integer 【活动总库存】 活动总库存 apply_available 必填 integer 【活动剩余库存】 活动剩余库存 product_coupon_stock_list 选填 array[object] 【商品券批次列表】 商品券批次列表,最多可配置200个商品券批次
activity_id 必填 integer 【活动ID】 活动ID activity_state 必填 string 【活动状态】 活动状态 可选取值
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 "out_request_no" : "100002322019090134234sfdf", 5 "brand_id" : "1004", 6 "card_id" : "pbLatjvWOibDc5-TBnbUk1pD12o0", 7 "activity_channel" : "MECHANT_APP_COMPONENT", 8 "title" : "入会享券", 9 "sub_title" : "5张满减券", 10 "begin_time" : "2025-05-20T13:29:35.120+08:00", 11 "end_time" : "2026-05-20T13:29:35.120+08:00", 12 "apply_total" : 1000, 13 "apply_available" : 1000, 14 "product_coupon_stock_list" : [ 15 { 16 "product_coupon_id" : "701138812971763025610907319729", 17 "stock_id" : "701211100891757235590194161918" 18 } 19 ], 20 "activity_id" : 25, 21 "activity_state" : "MEMBERSHIP_ACTIVITY_EFFECTIVE", 22 "create_time" : "2020-05-20T13:29:35.120+08:00", 23 "modify_time" : "2020-05-20T13:29:35.120+08:00" 24 } 25 ], 26 "total_count" : 20, 27 "offset" : 0, 28 "limit" : 20 29} 30
错误码
以下是本接口返回的错误码列表。详细错误码规则,请参考微信支付接口规则-错误码和错误提示
