本文档面向自研商家和 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_initchannels_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()

⚠️ 常见错误提示:

  1. product_infos 为必填字段,不传或传空数组均会导致下单失败。请确保每个参与优惠的 SKU 都填入对应的优惠信息。

  2. 内外金额必须一致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 ✅

  3. 叠加优惠的注意事项:当前无小程序优惠时,应传 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 售后单中已优惠金额(单位:分)
文档变更日志(1条)
2026 年 03 月 27 日
优化开发指南