# 小程序会员
本文档面向自研商家和 ISV 服务商,覆盖小程序会员功能的完整接入流程。
# 开发前准备
- 功能了解:开发前建议先阅读以下运营文档了解完整业务流程:
- 权限与凭证:小程序侧 API 使用小程序身份的 access_token 调用;小店侧 API 使用小店身份的 access_token 调用;第三方服务商需获得商家对
权限集 ID:185的授权,使用 authorizer_access_token - 消息推送配置:需在小程序后台配置服务器地址接收事件通知,消息解密方式与小程序消息推送一致,需使用小程序的 EncodingAESKey 进行解密。本模块涉及的事件:[事件] 会员状态查询 / channels_ec_vip_user_info_get、[事件] 静默关联成功 / channels_ec_vip_user_auto_add、[事件] 获取默认权益 / channels_ec_gen_order_info_init、[事件] 使用会员权益 / channels_ec_order_use_vip_discount、[事件] 取消使用权益 / channels_ec_order_unuse_vip_discount。详见 消息推送 | 微信开放文档
- 绑定开放平台账号:小店和小程序必须绑定到同一个微信开放平台账号,以便通过 UnionID 识别同一用户。参考:基本概念介绍、UnionID 机制说明
- 开通小程序会员功能:在微信小店管理后台(用户运营 > 小程序会员)申请开通,当前仅限热招品牌商家。开通后功能处于「测试状态」,仅白名单用户可体验
- 配置测试白名单与页面路径:在微信小店管理后台设置测试白名单,并配置入会页路径(
register_path,会员注册页面)和下单权益路径(rights_path,会员权益选择页面) - 提交上线:测试通过后在微信小店管理后台提交上线申请,需小店管理员审批
小店跳转品牌小程序时不会携带 UnionID,开发者需自行通过
wx.login()获取当前用户的 openid 和 unionid。
# 接入流程
# 阶段一:会员绑定流程
用户在微信小店触发会员关联时,小店向商家后台发起 [事件] 会员状态查询 / 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 | 售后单中已优惠金额(单位:分) |
# 接口全览
# API 接口
小程序侧(使用小程序 access_token)
| 中文名 / 英文名 | 请求方式 | 功能说明 |
|---|---|---|
| 新增小程序会员信息 / adduserinfo | POST /wxa/vip/user/info/add | 用户关联入会时设置会员信息 |
| 更新小程序会员信息 / updateuserinfo | POST /wxa/vip/user/info/update | 同步会员信息更新(如等级变更) |
| 获取小程序会员信息 / getuserinfo | POST /wxa/vip/user/info/get | 获取小程序的会员信息 |
| 获取小程序会员列表 / getuserlist | POST /wxa/vip/user/list/get | 获取小程序的会员列表 |
| 删除小程序会员信息 / deluserinfo | POST /wxa/vip/user/info/delete | 删除小程序在关联小店的会员信息 |
| 获取小程序已关联小店列表 / getshoplist | POST /wxa/vip/shop/list/get | 获取小程序已关联的小店列表 |
小店侧(使用小店 access_token)
| 中文名 / 英文名 | 请求方式 | 功能说明 |
|---|---|---|
| 小店获取关联小程序信息 / getwxainfo | POST /channels/ec/vip/v3/wxa/info/get | 获取关联的小程序信息 |
# 事件通知
本模块所有事件通知均为小程序侧回调,回调格式取决于小程序后台的消息推送配置(JSON 或 XML),需确保服务端解析格式与配置一致。
| 中文名 / 英文名 | 事件标识 | 功能说明 |
|---|---|---|
| 会员状态查询 / channels_ec_vip_user_info_get | Event: channels_ec_vip_user_info_get | 静默关联时查询用户是否已入会,需实时返回 |
| 静默关联成功 / channels_ec_vip_user_auto_add | Event: channels_ec_vip_user_auto_add | 静默关联成功通知 |
| 获取默认权益 / channels_ec_gen_order_info_init | Event: channels_ec_gen_order_info_init | 用户进入下单页时获取默认会员优惠,需实时返回(超时 3 秒) |
| 使用会员权益 / channels_ec_order_use_vip_discount | Event: channels_ec_order_use_vip_discount | 用户下单使用会员权益时确认优惠,需实时返回(超时 3 秒) |
| 取消使用权益 / channels_ec_order_unuse_vip_discount | Event: channels_ec_order_unuse_vip_discount | 用户取消使用会员权益或超时兜底通知 |