本文档面向自研商家和 ISV 服务商,覆盖小程序会员功能的完整接入流程。
非技术配置说明:小程序会员服务配置指引
# 接口全览
所有小程序会员 API 必须使用小程序身份的 access_token 调用(非小店 access_token)。ISV 服务商使用 authorizer_access_token,所需权限集 ID:185。
小店侧 API 需使用小店身份的 access_token 调用。
官方最新接口列表:小程序会员服务 | 接口列表
# 小程序侧 API
| 接口名称 | 请求路径 | 描述 |
|---|---|---|
| 新增小程序会员信息 | POST /wxa/vip/user/info/add | 用户在操作关联入会时,通过该接口可设置小程序的会员信息 |
| 更新小程序会员信息 | POST /wxa/vip/user/info/update | 用户已关联小店会员后,后续会员信息更新时的同步,如会员等级从1级到2级 |
| 获取小程序会员信息 | POST /wxa/vip/user/info/get | 通过该接口可获取小程序的会员信息 |
| 获取小程序会员列表 | POST /wxa/vip/user/list/get | 通过该接口可获取小程序的会员列表 |
| 删除小程序会员信息 | POST /wxa/vip/user/info/delete | 通过该接口可删除小程序在关联小店的会员信息 |
| 获取小程序已关联小店列表 | POST /wxa/vip/shop/list/get | 通过该接口可获取小程序已经关联的小店列表 |
# 小店侧 API
| 接口名称 | 请求路径 | 描述 |
|---|---|---|
| 小店获取关联小程序信息 | POST /channels/ec/vip/v3/wxa/info/get | 通过该接口可获取关联的小程序信息 |
# 事件通知(小程序回调)
| 触发时机 | 事件名 | 是否需要实时回调 |
|---|---|---|
| 静默关联时查询会员状态 | channels_ec_vip_user_info_get | 是(需实时返回) |
| 静默关联成功通知 | channels_ec_vip_user_auto_add | 否 |
| 用户进入下单页获取默认权益 | channels_ec_gen_order_info_init | 是(需实时返回,超时 3 秒) |
| 用户下单使用会员权益 | channels_ec_order_use_vip_discount | 是(需实时返回,超时 3 秒) |
| 用户取消使用会员权益 | channels_ec_order_unuse_vip_discount | 否 |
注意:回调格式说明
- 小店侧回调固定使用 JSON 格式
- 小程序侧回调格式取决于小程序后台的消息推送配置(JSON 或 XML),商家需确保服务端解析格式与小程序后台配置一致,否则会导致回调解析失败
# 开发前准备
# 1. 开通小程序会员功能
通过微信小店后台开通会员功能,绑定唯一的会员小程序 APPID。
当前仅微信小店热招品牌商家可申请开通。操作路径:用户运营 > 小程序会员。开通后功能处于「测试状态」,仅白名单用户可在店铺首页看到功能入口,跳转体验版小程序。
# 2. 绑定开放平台账号
将小店和小程序绑定到同一个微信开放平台账号,以便通过 UnionID 识别小店和小程序中的同一用户。
注意:小店跳转品牌小程序时不会携带 UnionID。用户打开小程序后,开发者需自行通过
wx.login()获取当前用户的小程序 openid 和开放平台 unionid。
# 3. 配置测试白名单与页面路径
通过小店后台设置测试白名单,并配置以下两个关键路径:
- 入会页路径:品牌小程序的会员注册页面路径
- 下单权益路径:品牌小程序的会员权益选择页面路径
完成配置后,白名单内的用户即可在店铺首页看到会员入口,并跳转体验版小程序进行测试。
# 4. 配置消息推送(事件通知)
小程序会员的事件通知通过小程序回调 URL 推送,需在小程序后台配置服务器地址。
消息解密方式与小程序消息推送一致,需使用小程序的 EncodingAESKey 进行解密。
# 5. 开发完成后提交上线
体验测试通过后,在小店后台提交会员功能上线申请,上线需要小店管理员审批。
# 接入流程
# 阶段一:会员绑定流程
用户在微信小店触发会员关联时,小店向商家后台发起 channels_ec_vip_user_info_get 回调,商家查询该用户是否已在品牌小程序入会并实时返回结果:
- 已入会(is_vip=true):无需跳转小程序,直接在小店完成静默关联
- 未入会(is_vip=false):跳转品牌小程序引导用户注册,完成后通过
channels_ec_vip_user_auto_add通知关联成功
路径一:用户已是小程序会员(静默关联)
路径二:用户未入会(跳转小程序注册)
# 阶段二:下单优惠流程
channels_ec_gen_order_info_init和channels_ec_order_use_vip_discount均需实时回调,超时时间为 3 秒,超时视为失败。- 每个 SKU 会员优惠金额最低 0.01 元(即 1 分),最低总优惠金额 = 0.01 元 × SKU 种类数。例如购买 3 种商品最少优惠 0.03 元,同一 SKU 购买 10 件最少优惠 0.10 元。
- 店铺优惠发生变化时,小程序需重新生成会话 id 并清空当前已选会员权益,避免权益信息错乱。
- 异常兜底:若品牌小程序内部已扣除权益,但微信后台侧因超时等原因判定失败,微信后台会主动推送
channels_ec_order_unuse_vip_discount通知取消,小程序需监听并恢复权益。
# 阶段三:售后权益回退流程
- 用户发起退款或取消订单后,商家需回退已使用的会员权益,避免权益被重复消耗。
# 前端对接说明
# 小程序返回小店(权益数据传递)
用户在品牌小程序选择完会员权益后,通过 wx.postMessageToReferrerPage 将权益信息传递给小店:
wx.postMessageToReferrerPage({
extraData: {
vip_discounted_info: {
vip_discounted_price: 100, // 会员优惠总金额,单位:分
product_infos: [ // 必填!!每个商品的会员优惠信息
{
product_id: "12345", // 商品ID
sku_id: "23456", // SKU ID
vip_discounted_price: 100 // 该SKU的会员优惠金额,单位:分
}
],
unuse_shop_discount: 0 // 是否叠加店铺优惠:0-叠加,1-不叠加
}
},
success() {
// Android:在 success 回调中退出小程序
wx.exitMiniProgram()
}
})
// iOS 若提示 can only be invoked by user TAP gesture,在同级调用:
// wx.exitMiniProgram()
⚠️ 常见错误提示:
product_infos为必填字段,不传或传空数组均会导致下单失败。请确保每个参与优惠的 SKU 都填入对应的优惠信息。内外金额必须一致:
product_infos中各 SKU 的vip_discounted_price之和,必须等于外层的vip_discounted_price。里外不一致会导致校验失败。示例(正确):
{ "vip_discounted_price": 100, "product_infos": [ { "product_id": "12345", "sku_id": "23456", "vip_discounted_price": 60 }, { "product_id": "12346", "sku_id": "23457", "vip_discounted_price": 40 } ] }外层 100 = 内层 60 + 40 ✅
叠加优惠的注意事项:当前无小程序优惠时,应传
unuse_shop_discount: 0(叠加)且vip_discounted_price: 0。不能传unuse_shop_discount: 1(不叠加)且vip_discounted_price: 0,否则会直接抹掉店铺券。
# 订单与售后字段说明
# 订单维度
| 字段路径 | 说明 |
|---|---|
order_detail.price_info.vip_discounted_price | 订单维度会员优惠总金额(单位:分) |
order_detail.product_infos[].vip_discounted_price | 商品维度会员优惠金额(单位:分) |
order_detail.ext_info.vip_order_session_id | 会员权益 session_id |
# 售后维度
| 字段路径 | 说明 |
|---|---|
AfterSaleDetails.wxa_vip_discounted_price | 售后单中已优惠金额(单位:分) |