获取商品券事件通知地址
更新时间:2025.08.28||
品牌方可以通过本接口查询商品券相关事件的回调地址,该地址配置为品牌方维度配置,该品牌方下的所有商品券相关事件均会通知到该地址。
前置条件:品牌方已经配置商品券事件通知地址
接口说明
请求方式:【GET】/brand/marketing/product-coupon/notify-configs
请求域名:【主域名】https://api.mch.weixin.qq.com 使用该域名将访问就近的接入点
【备域名】https://api2.mch.weixin.qq.com 使用该域名将访问异地的接入点 ,指引点击查看
接口限频:20/秒(品牌ID维度)
请求参数
Header HTTP头参数
Authorization 必填 string
请参考签名认证生成认证信息
Accept 必填 string
请设置为application/json
Wechatpay-Serial 必填 string
【微信支付公钥ID】 请传入brand_id对应的微信支付公钥ID,接口将会校验两者的关联关系,参考微信支付公钥产品简介及使用说明获取微信支付公钥ID和相关的介绍。以下两种场景将使用到微信支付公钥:
1、接收到接口的返回内容,需要使用微信支付公钥进行验签;
2、调用含有敏感信息参数(如姓名、身份证号码)的接口时,需要使用微信支付公钥加密敏感信息后再传输参数,加密指引请参考微信支付公钥加密敏感信息指引。
请求示例
GET

1curl -X GET \
2 https://api.mch.weixin.qq.com/brand/marketing/product-coupon/notify-configs \
3 -H "Authorization: WECHATPAY-BRAND-SHA256-RSA2048 brand_id=\"XXXX\",..." \
4 -H "Accept: application/json" \
5 -H "Wechatpay-Serial: PUB_KEY_ID_XXXX"
6
需配合微信支付工具库 WXPayUtility 使用,请参考Java

1package com.java.demo;
2
3import com.java.utils.WXPayBrandUtility;
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 GetNotifyConfig {
26 private static String HOST = "https://api.mch.weixin.qq.com";
27 private static String METHOD = "GET";
28 private static String PATH = "/brand/marketing/product-coupon/notify-configs";
29
30 public static void main(String[] args) {
31
32 GetNotifyConfig client = new GetNotifyConfig(
33 "xxxxxxxx",
34 "1DDE55AD98Exxxxxxxxxx",
35 "/path/to/apiclient_key.pem",
36 "PUB_KEY_ID_xxxxxxxxxxxxx",
37 "/path/to/wxp_pub.pem"
38 );
39
40 try {
41 GetNotifyConfigResponse response = client.run();
42
43 System.out.println(response);
44 } catch (WXPayBrandUtility.ApiException e) {
45
46 e.printStackTrace();
47 }
48 }
49
50 public GetNotifyConfigResponse run() {
51 String uri = PATH;
52
53 Request.Builder reqBuilder = new Request.Builder().url(HOST + uri);
54 reqBuilder.addHeader("Accept", "application/json");
55 reqBuilder.addHeader("Wechatpay-Serial", wechatPayPublicKeyId);
56 reqBuilder.addHeader("Authorization", WXPayBrandUtility.buildAuthorization(brand_id, certificateSerialNo, privateKey, METHOD, uri, null));
57 reqBuilder.method(METHOD, null);
58 Request httpRequest = reqBuilder.build();
59
60
61 OkHttpClient client = new OkHttpClient.Builder().build();
62 try (Response httpResponse = client.newCall(httpRequest).execute()) {
63 String respBody = WXPayBrandUtility.extractBody(httpResponse);
64 if (httpResponse.code() >= 200 && httpResponse.code() < 300) {
65
66 WXPayBrandUtility.validateResponse(this.wechatPayPublicKeyId, this.wechatPayPublicKey,
67 httpResponse.headers(), respBody);
68
69
70 return WXPayBrandUtility.fromJson(respBody, GetNotifyConfigResponse.class);
71 } else {
72 throw new WXPayBrandUtility.ApiException(httpResponse.code(), respBody, httpResponse.headers());
73 }
74 } catch (IOException e) {
75 throw new UncheckedIOException("Sending request to " + uri + " failed.", e);
76 }
77 }
78
79 private final String brand_id;
80 private final String certificateSerialNo;
81 private final PrivateKey privateKey;
82 private final String wechatPayPublicKeyId;
83 private final PublicKey wechatPayPublicKey;
84
85 public GetNotifyConfig(String brand_id, String certificateSerialNo, String privateKeyFilePath, String wechatPayPublicKeyId, String wechatPayPublicKeyFilePath) {
86 this.brand_id = brand_id;
87 this.certificateSerialNo = certificateSerialNo;
88 this.privateKey = WXPayBrandUtility.loadPrivateKeyFromPath(privateKeyFilePath);
89 this.wechatPayPublicKeyId = wechatPayPublicKeyId;
90 this.wechatPayPublicKey = WXPayBrandUtility.loadPublicKeyFromPath(wechatPayPublicKeyFilePath);
91 }
92
93 public static class GetNotifyConfigResponse {
94 @SerializedName("notify_url")
95 public String notifyUrl;
96
97 @SerializedName("update_time")
98 public String updateTime;
99 }
100
101}
102需配合微信支付工具库 wxpay_utility 使用,请参考Go

1package main
2
3import (
4 "demo/wxpay_brand_utility"
5 "encoding/json"
6 "fmt"
7 "net/http"
8 "net/url"
9 "time"
10)
11
12func main() {
13
14 config, err := wxpay_brand_utility.CreateBrandConfig(
15 "xxxxxxxx",
16 "1DDE55AD98Exxxxxxxxxx",
17 "/path/to/apiclient_key.pem",
18 "PUB_KEY_ID_xxxxxxxxxxxxx",
19 "/path/to/wxp_pub.pem",
20 )
21 if err != nil {
22 fmt.Println(err)
23 return
24 }
25
26 response, err := GetNotifyConfig(config)
27 if err != nil {
28 fmt.Printf("请求失败: %+v\n", err)
29
30 return
31 }
32
33
34 fmt.Printf("请求成功: %+v\n", response)
35}
36
37func GetNotifyConfig(config *wxpay_brand_utility.BrandConfig) (response *GetNotifyConfigResponse, err error) {
38 const (
39 host = "https://api.mch.weixin.qq.com"
40 method = "GET"
41 path = "/brand/marketing/product-coupon/notify-configs"
42 )
43
44 reqUrl, err := url.Parse(fmt.Sprintf("%s%s", host, path))
45 if err != nil {
46 return nil, err
47 }
48 if err != nil {
49 return nil, err
50 }
51 httpRequest.Header.Set("Accept", "application/json")
52 httpRequest.Header.Set("Wechatpay-Serial", config.WechatPayPublicKeyId())
53 authorization, err := wxpay_brand_utility.BuildAuthorization(config.BrandId(), config.CertificateSerialNo(), config.PrivateKey(), method, reqUrl.RequestURI(), nil)
54 if err != nil {
55 return nil, err
56 }
57 httpRequest.Header.Set("Authorization", authorization)
58
59 client := &http.Client{}
60 httpResponse, err := client.Do(httpRequest)
61 if err != nil {
62 return nil, err
63 }
64 respBody, err := wxpay_brand_utility.ExtractResponseBody(httpResponse)
65 if err != nil {
66 return nil, err
67 }
68 if httpResponse.StatusCode >= 200 && httpResponse.StatusCode < 300 {
69
70 err = wxpay_brand_utility.ValidateResponse(
71 config.WechatPayPublicKeyId(),
72 config.WechatPayPublicKey(),
73 &httpResponse.Header,
74 respBody,
75 )
76 if err != nil {
77 return nil, err
78 }
79 response := &GetNotifyConfigResponse{}
80 if err := json.Unmarshal(respBody, response); err != nil {
81 return nil, err
82 }
83
84 return response, nil
85 } else {
86 return nil, wxpay_brand_utility.NewApiException(
87 httpResponse.StatusCode,
88 httpResponse.Header,
89 respBody,
90 )
91 }
92}
93
94type GetNotifyConfigResponse struct {
95 NotifyUrl *string `json:"notify_url,omitempty"`
96 UpdateTime *time.Time `json:"update_time,omitempty"`
97}
98应答参数
200 OK
notify_url 必填 string
【通知URL地址】 品牌方通过【设置商品券事件通知地址API】设置的用于接收商品券事件通知的URL地址,原样返回
update_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秒。
应答示例
200 OK

1{
2 "notify_url" : "https://www.example.com/notify",
3 "update_time" : "2025-01-01T00:00+08:00"
4}
5
错误码
以下是本接口返回的错误码列表。详细错误码规则,请参考微信支付接口规则-错误码和错误提示
|
| | 参数错误 | 请根据错误提示正确传入参数 |
| | HTTP 请求不符合微信支付 APIv3 接口规则 | 请参阅 接口规则 |
| | 验证不通过 | 请参阅 签名常见问题 |
| | 系统异常,请稍后重试 | 请稍后重试 |
| | 品牌没有此接口权限 | 品牌没有此接口权限 |
| | Http header中缺少必填参数Wechatpay-Serial | 缺少必要商品券图片,请补充上传后重试 |