# 【接入指引】微信小程序:会员订阅
# 【产品介绍】
# 1. 核心能力
● 一次订阅,多次扣费:仅需和用户完成一次签约,后续可持续按周期发起扣费,完成周期会员续费。
● 会员订阅消息:对于有订阅关系的用户,微信开放平台会新增「会员专属」长期订阅消息;详见:会员订阅消息接入指引
*仅支持安卓设备调用
# 2. 用户交互示意
# 3. 接入模式说明
a. 用户首次签约、即扣费
用户签约后,可在签约开始的12个小时内直接发起扣费,首次扣费无需向用户发起预扣费通知
b. 用户首次签约时,不扣款
用户先免费试用,后续再发起扣费,每次扣款、均需在t-2日向用户发送预扣费通知
# 4. 扣费说明
扣费 - 首次(用户签约12小时内):
| 校验项 | 业务规则 |
|---|---|
| 扣费权限 | 用户与小程序有签约 & 扣费时签约关系生效 |
| 扣费时间 | 用户签约起12小时内 |
| 扣费金额 | 最低1元,最高为道具价格 |
扣费 - 非首次(用户签约12小时以外)
| 校验项 | 业务规则 |
|---|---|
| 扣费权限 | 用户与小程序有签约 & 扣费时签约关系生效 |
| 扣费日期 | 商户在t-2日向用户发送了预扣费通知,t日可扣费 |
| 扣费时间 | 07:10~21:50 |
| 扣费金额 | 需和当次预扣费金额保持一致 |
预扣费:
| 校验项 | 业务规则 |
|---|---|
| 扣费权限 | 用户与商户有签约 & 扣费时签约关系生效 |
| 扣费日期 | 「首次」发送预扣费通知:无日期限制「非首次」预扣费通知:当前日期 >= 上一个会员周期结束日 - 3日 |
| 预扣费时间 | 07:10~21:50 |
| 扣费金额 | 最低1元,最高为道具价格 |
# 5. 结算周期、费率
当前开放三种周期的会员:
| 支付方式 | 会员周期 | 结算周期 |
|---|---|---|
| 主动支付 | / | T+3 |
| 会员订阅 | 单周会员 | T+7 |
| 双周会员 | T+14 | |
| 月会员 | T+31 |
虚拟支付,技术服务费率:
| 支付方式 | 小程序类目 | 技术服务费率 | 说明 |
|---|---|---|---|
| 一次型支付 | 短剧 | 10% | 政策激励:抽10返5广告金 |
| 小说 | 1% | 政策激励:限时优惠费率 | |
| 其他虚拟类目 | 1% | / | |
| 订阅型支付 | / | 10% | / |
# 6. 准入标准
● 已接入小程序虚拟支付
● 小程序首次发布时间至今 >= 90天
● 小程序完成认证备案
● 近30天日均dau >= 1万
# 【对接开发】
# 接入流程
| 步骤 | 流程 | 对接方式 | api接口名称 |
|---|---|---|---|
| 初始化配置 | 开通权限授权 | 邮件 | / |
| 申请代扣模版 | 邮件 | / | |
| 配置订阅道具 | api | start_upload_goodsstart_publish_goods道具价格 = 会员原价(不可以是优惠价) | |
| 道具、模版关联 | 邮件 | / | |
| 签约、解约 | 用户签约 | api | wx.requestSubscribeSign |
| 签约、解约结果通知 | api | xpay_subscribe_signing_result_notify | |
| 商家解约 | api | cancel_subscribe_contract | |
| 查询签约状态 | api | query_subscribe_contract | |
| 发起扣款 | 预通知扣款 | api | send_subscribe_pre_payment |
| 发起订阅扣款 | api | submit_subscribe_pay_order | |
| 扣款失败通知 | api | 事件类型:xpay_subscribe_pay_fail_notify | |
| 扣款成功通知 | api | 事件类型:xpay_goods_deliver_notify | |
| 查询扣款订单 | api | query_order | |
| 退款 | 申请退款 | api | refund_order |
| 查询退款 | api | query_order |
# 申请开通、配置模版
收件人:wx_virtualpayment@tencent.com
| 流程 | 对接方式 | 前置流程 | 邮件主题 | 邮件正文 | 邮件说明 |
|---|---|---|---|---|---|
| 开通权限授权 (小程序维度) | 邮件 | 已和小程序产品团队确认接入意愿 | 申请开通小程序会员订阅 - 小程序昵称 - 申请日期 | 小程序昵称: 小程序appid: 虚拟支付商户号: 小程序主体: 小程序类目: 业务模式:主营业务,小程序dau,交易金额 申请用途: 会员相关产品页面交互:(开通、续费、管理流程,图片jpg、png格式,文件大小不超过2MB) | 注意事项: ● 不允许使用拍照图片 ● 需把完整的交互都放在一张图片里 ● 购买记录页面需要出现客服电话,且客服电话需要完成认证 认证方式 交互示意: ![]() |
| 申请代扣模版 (道具维度) | 已收到开通权限授权成功邮件 (预计需3个工作日) | 申请配置代扣模版 - 小程序昵称 - 申请日期 | 小程序昵称: 小程序appid: 虚拟支付商户号: 小程序主体: 小程序类目: 扣费周期: 会员价格(原价): 产品介绍说明url:官方网站,需支持访问 产品价目表:图片jpg、png格式,文件大小不超过2MB 扣费产品介绍:用户操作主路径,会员开通、续费、管理流程,图片jpg、png格式,文件大小不超过2MB | 注意事项: ● 每一个模版,需单独说明以下内容 ● 价目表需和交互示意搭配,说明优惠价格、原价 价目表示意: 短剧、小说周会员<=25,双周、月<=50,其他行业无此限制 | |
| 道具、模版管理 (道具维度) | 已收到代扣模版配置成功邮件,获取模版ID (预计需3个工作日) 已通过api创建会员订阅道具 | 申请代扣模版、会员道具关联 - 小程序昵称 - 申请日期 | 小程序昵称: 小程序appid: 虚拟支付商户号: 小程序主体: 小程序类目: 代扣模版ID: 会员道具ID: | 道具、模版一一对应; 道具价格 = 会员原价; 道具周期 = 会员周期 |
# 接口调用
# 支付签名
签名算法伪代码为:
paySig = to_hex(hmac_sha256(appKey,uri + '&' + signData))
| 参数 | wx API | 服务器API |
|---|---|---|
| appKey | 可通过小程序MP查看:虚拟支付 -> 基本配置 -> 基础配置中的沙箱AppKey和现网AppKey。注意:订阅制接口调试请走现网环境,env = 0,使用现网AppKey | 同理 |
| signData | 基础库的signData字段 | api的post body |
| uri | 签约接口填:requestSubscribeSign | 举例:对于https://api.weixin.qq.com/xpay/query_user_balance来说,uri = /xpay/query_user_balance |
# 用户签约wx.requestSubscribeSign
注:该接口返回值不能作为签约成功的判定标准,需以签约结果通知/签约查询为准
| 字段 | 类型 | 说明 |
|---|---|---|
| signData | string | json字符串 |
| paySig | string | 支付签名, 详见签名详解uri:requestSubscribeSign |
| signature | string | 用户态签名, 详见签名详解 |
| success | function | 接口调用成功的回调函数 |
| fail | function | 接口调用失败的回调函数 |
| complete | function | 接口调用完成的回调函数(调用成功、失败都会执行) |
signData 参数
| 字段 | 类型 | 说明 |
|---|---|---|
| productId | string | 订阅道具的id |
| outContractCode | string | 签约协议号,由商户生成,只能是数字、大小写字母的描述,长度不超过64。如重新发起签约,需更换单号重试,同一用户也需要换单。示例值:100001256(建议以用户纬度生成,避免重复) |
| contractAccountName | string | 签约用户的名称,用于页面展示不允许传入以下字符:()'"<> |
| openid | string | 用户 openid |
返回参数
| 字段 | 类型 | 说明 |
|---|---|---|
| errcode | int | 错误码 |
| errmsg | string | "ERR_SUBSCRIBE_DEVICE_NOT_ALLOWED"(苹果设备暂未开放订阅制)"USER_DATA_ILLEGAL""OPENID_ILLEGAL""OPENID_NOT_MATCH""SIGNATURE_INVALID""EC_PAY_SIG_INVALID""ERR_SUBSCRIBE_OUT_CONTRACT_CODE_ILLEGAL""PRODUCT_ID_NOT_PUBLISH""ERR_CODE_SUBSCIRBE_PRODUCT_NOT_BIND""ERR_SUBSCIRBE_CONTRACT_CODE_REPEAT" "EC_SYS" - (系统错误,联系开发人员排查) |
# 配置订阅道具 start_upload_goods
说明
该接口为异步接口,上传后请用query_upload_goods确认
多个道具请分批次上传,一次上传一个
地址
https://api.weixin.qq.com/xpay/start_upload_goods?access_token=xxx&pay_sig=xxx
请求参数
| 字段 | 类型 | 说明 |
|---|---|---|
| upload_item | array | 上传的商品列表 |
| env | int | 0-正式环境 1-沙箱环境 |
upload_item的每一项内容如下:
| 字段 | 类型 | 说明 |
|---|---|---|
| id | string | 道具id,长度(0,64],字符只允许使用字母、数字、'_'、'-' |
| name | string | 道具名称,长度(0,1024] |
| subscribe_period_days | int | 订阅周期,只能为 7,14,31 |
| price | int | 道具单价,单位分,需要大于0 |
| remark | string | 道具备注,长度(0,1024] |
| item_url | string | 道具图片的url地址,当前仅支持jpg,png等格式 |
返回参数
| 字段 | 类型 | 说明 |
|---|---|---|
| errcode | int | 错误码 |
| errmsg | string | 错误信息 |
# 发布订阅道具 start_publish_goods
说明
该接口为异步接口,发布后请用 query_publish_goods 确认
发布操作格式易错,正确格式参考:{"env":0,"publish_item":[{"id":"100001"},{"id":"100002"},{"id":"100003"}]}
地址
https://api.weixin.qq.com/xpay/start_publish_goods?access_token=xxx&pay_sig=xxx
请求参数
| 字段 | 类型 | 说明 |
|---|---|---|
| publish_item | array | 发布的商品列表 |
| env | int | 0-正式环境 1-沙箱环境 |
publish_item的每一项内容如下:
| 字段 | 类型 | 说明 |
|---|---|---|
| id | string | 道具id |
返回参数
| 字段 | 类型 | 说明 |
|---|---|---|
| errcode | int | 错误码 |
| errmsg | string | 错误信息 |
# 商家解约 cancel_subscribe_contract
地址:https://api.weixin.qq.com/xpay/cancel_subscribe_contract?access_token=xxx&pay_sig=xxx
| 参数 | 类型 | 备注 |
|---|---|---|
| openid | String | 用户的openid |
| termination_reason | String | 解约原因 |
| product_id | String | 道具 id,需为订阅制道具 |
| out_contract_code | string | 签约时传入的协议号 |
返回值:
| 参数 | 类型 | 备注 |
|---|---|---|
| errcode | Number | 错误码 |
| errmsg | String | 错误信息 |
# 查询签约关系 query_subscribe_contract
地址:https://api.weixin.qq.com/xpay/query_subscribe_contract?access_token=xxx&pay_sig=xxx
| 参数 | 类型 | 备注 |
|---|---|---|
| openid | String | 用户的openid |
| product_id | String | 道具 id,需为订阅制道具 |
| out_contract_code | string | 签约时传入的协议号 |
返回值:
| 参数 | 类型 | 备注 |
|---|---|---|
| errcode | Number | 错误码 |
| errmsg | String | 错误信息 |
| authorization_state | String | SIGNED: 签约生效中。TERMINATED: 生效的签约协议已被解约。此时协议已经到达终态,该协议无法再次进行签约;可更换协议号再发起签约。UNBINDUSER: 从未签约过 |
# 预通知扣款 send_subscribe_pre_payment
地址:https://api.weixin.qq.com/xpay/send_subscribe_pre_payment?access_token=xxx&pay_sig=xxx
| 参数 | 类型 | 备注 |
|---|---|---|
| openid | string | 用户的openid |
| deduct_price | int | 金额/分,属于 [1,道具价格] |
| product_id | string | 道具 id,需为订阅制道具 |
| out_contract_code | string | 签约时传入的协议号 |
错误码:
| errcode | errmsg | 原因 |
|---|---|---|
| -1 | "sys error" | 非预期系统错误,可重试 |
| 690000001 | "not allowed to trigger pre payment at this time" | 预通知时间不合法 1. 上一单成功支付,且订阅周期到期 T-3 之前 2. 上一单支付失败 or 没有发起支付 or 正在支付中,且在上一单的 T+8 内 3. 发起时间不在 07:10 ~ 21:50 |
| 674690001 | "product type not support""input deduct_price not valied" | 参数错误 |
| 690000000 | "user not subscribed" | 用户未签约 |
# 发起订阅扣款 submit_subscribe_pay_order
受理后扣款,返回成功仅代表受理成功,不代表扣款成功。扣款成功后再通过xpay_goods_deliver_notify通知
如受理成功后,通知/查询到扣款失败,可在【t日~t+6日】发起重试,同一用户、同一道具,一个小时内仅可以重试一次。
地址:https://api.weixin.qq.com/xpay/submit_subscribe_pay_order?access_token=xxx&pay_sig=xxx
请求参数
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| openid | string | 是 | 用户的openid |
| offer_id | string | 是 | 在米大师侧申请的应用 id, mp-支付基础配置中的offerid |
| buy_quantity | number | 是 | 购买数量,填:1 |
| env | number | 否 | 环境配置, 0 米大师正式环境, 1 米大师沙箱环境, 默认为 0 |
| currency_type | string | 是 | 币种,填:CNY |
| product_id | string | 是 | 订阅道具ID |
| deduct_price | number | 是 | 扣款金额(分), 属于 [1,道具价格] |
| order_id | string | 是 | 业务订单号, 每个订单号只能使用一次, 重复使用会失败(不建议业务强依赖平台对这里的唯一性校验),要求8-32个字符内, 只能是数字、大小写字母、符号 -|*@组成, 不能以下划线()开头,与主动支付的outTradeNo 一样 |
| attach | string | 是 | 透传数据, 发货通知时会透传给开发者 |
返回参数
| 字段 | 类型 | 说明 |
|---|---|---|
| errcode | int | 错误码 |
| errmsg | string | 错误信息 |
错误码
| 错误码 | 说明 |
|---|---|
| 1001 | 参数错误 |
| -15001 | 参数错误,具体原因见err_msg |
| -15002 | outTradeNo重复使用,请换新单号重试 |
| -15003 | 系统错误 |
| -15004 | currencyType错误,目前只能填CNY |
| -15005 | 用户态签名signature错误 |
| -15006 | 支付签名paySig错误 |
| -15007 | session_key过期 |
| -15008 | 二级商户进件未完成 |
| -15009 | 代币未发布 |
| -15010 | 道具productId未发布 |
| -15011 | 现网版本的env只能是0,不能填1(沙盒环境) |
| -15012 | 调用米大师失败导致关单,请换新单号重试 |
| -15013 | goodsPrice道具价格错误 |
| -15014 | 道具/代币发布未生效,禁止下单,大概10分钟后生效 |
| -15016 | signData格式有问题 |
| -15017 | 此商家涉嫌违规,收款功能已被限制,暂无法支付。商家可以登录微信商户平台/微信支付商家助手小程序查看原因和解决方案 |
| -15018 | 代币或者道具productId审核不通过 |
| -15019 | 调微信报商户受限,商家可以登录微信商户平台/微信支付商家助手小程序查看原因和解决方案 |
| -15020 | 操作过快,请稍候再试 |
| -15021 | 小程序被限频交易 |
| -15025 | 不存在预通知单/重复下单 |
| -15026 | 扣款时间不合法 |
| -15027 | 扣款价格不合法 |
# 查询扣款订单 query_order
地址
https://api.weixin.qq.com/xpay/query_order?access_token=xxx&pay_sig=xxx
请求参数
| 字段 | 类型 | 说明 |
|---|---|---|
| openid | string | 用户的openid |
| env | int | 0-正式环境 1-沙箱环境 |
| order_id | string | 创建的订单号 |
| wx_order_id | string | 微信内部单号(与order_id二选一) |
返回参数
| 字段 | 类型 | 说明 |
|---|---|---|
| errcode | int | 错误码 |
| errmsg | string | 错误信息 |
| order | object | 订单信息 |
其中order的内容如下:
| 字段 | 类型 | 说明 |
|---|---|---|
| order_id | string | 订单号 |
| create_time | int | 创建时间 |
| update_time | int | 更新时间 |
| status | int | 当前状态 0-订单初始化(未创建成功,不可用于支付)1-订单创建成功 2-订单已经支付,待发货 3-订单发货中 4-订单已发货 5-订单已经退款 6-订单已经关闭(不可再使用) 7-订单退款失败 8-用户退款完成 9-回收广告金完成 10-分账回退完成 |
| biz_type | int | 业务类型0-短剧 |
| order_fee | int | 订单金额,单位分 |
| coupon_fee | int | 订单优惠金额,单位分(暂无此字段) |
| paid_fee | int | 用户支付金额 |
| order_type | int | 订单类型0-支付单 1-退款单 |
| refund_fee | int | 当类型为退款单时表示退款金额,单位分 |
| paid_time | int | 支付/退款时间,unix秒级时间戳 |
| provide_time | int | 发货时间 |
| biz_meta | string | 订单创建时传的信息 |
| env_type | int | 环境类型1-现网 2-沙箱 |
| token | string | 下单时米大师返回的token |
| left_fee | int | 支付单类型时表示此单经过退款还剩余的金额,单位分 |
| wx_order_id | string | 微信内部单号 |
| channel_order_id | string | 渠道单号,为用户微信支付详情页面上的商户单号 |
| wxpay_order_id | string | 微信支付交易单号,为用户微信支付详情页面上的交易单号 |
| sett_time | int | 结算时间的秒级时间戳,大于0表示结算成功 |
| sett_state | int | 结算状态0-未开始结算 1-结算中 2-结算成功 3-待结算(与0相同) |
| platform_fee_fen | int | 虚拟支付技术服务费,单位为分;sett_state = 2时返回 |
| cps_fee_fen | int | 公众号、视频号平台的cps服务费,单位为分;sett_state = 2时返回 |
# 申请退款 refund_order
说明
对使用jsapi接口下的单进行退款,此接口只是启动退款任务成功,启动后需要调用query_order接口来查询退款单状态,等状态变成退款完成后即为最终成功
地址
https://api.weixin.qq.com/xpay/refund_order?access_token=xxx&pay_sig=xxx
请求参数
| 字段 | 类型 | 说明 |
|---|---|---|
| openid | string | 下单时的用户openid |
| order_id | string | 下单时的单号,即jsapi接口传入的OutTradeNo,与wx_order_id字段二选一 |
| wx_order_id | string | 支付单对应的微信侧单号,与order_id字段二选一 |
| refund_order_id | string | 本次退款时需要传的单号,长度为[8,32],字符只允许使用字母、数字、'_'、'-' |
| left_fee | int | 当前单剩余可退金额,单位分,可以通过调用query_order接口查到 |
| refund_fee | int | 本次退款金额,单位分,需要(0,left_fee] |
| biz_meta | string | 商家自定义数据,传入后可在query_order接口查询时原样返回,长度需要[0,1024] |
| refund_reason | string | 退款原因,当前仅支持以下值 0-暂无描述 1-产品问题,影响使用或效果不佳 2-售后问题,无法满足需求 3-意愿问题,用户主动退款 4-价格问题 5:其他原因 |
| req_from | string | 退款来源,当前仅支持以下值 1-人工客服退款,即用户电话给客服,由客服发起退款流程 2-用户自己发起退款流程 3-其它 |
| env | int | 0-正式环境 1-沙箱环境 |
返回参数
| 字段 | 类型 | 说明 |
|---|---|---|
| errcode | int | 错误码 |
| errmsg | string | 错误信息 |
| refund_order_id | string | 退款单号 |
| refund_wx_order_id | string | 退款单的微信侧单号 |
| pay_order_id | string | 该退款单对应的支付单单号 |
| pay_wx_order_id | string | 该退款单对应的支付单微信侧单号 |
# 签约、解约结果通知 xpay_subscribe_signing_result_notify
说明:
1. 建议通过 query_subscribe_contract 接口查询订单兜底
2. 按正确格式回复该通知
请求参数
基础字段
| 字段 | 类型 | 备注 |
|---|---|---|
| ToUserName | String | 小程序原始ID |
| FromUserName | String | 该事件消息的openid,道具发货场景固定为微信官方的openid |
| CreateTime | Number | 消息发送时间 |
| MsgType | String | 消息类型,固定为:event |
| Event | String | 事件类型xpay_subscribe_signing_result_notify |
特殊字段
| 字段 | 类型 | 备注 |
|---|---|---|
| Action | String | contract_notify(签约通知)/cancel_contract_notify(解约通知) |
| UserOpenid | String | 发起签约时的 openid |
| OpenorcloseTime | Number | 时间戳,签约/解约时间 |
| ProductId | String | 道具 id |
| OutContractCode | String | 商户签约协议号 |
| ContractWxAppid | String | 签约 appid |
返回参数
| 字段 | 类型 | 备注 |
|---|---|---|
| ErrCode | Number | 发送状态。0:成功,其他:失败 |
| ErrMsg | String | (非必填)错误原因,用于调试。在errcode非0 的情况下返回 |
返回格式参考消息推送文档:消息推送 | 微信开放文档
XML 示例:
"
"
# 扣款失败结果通知 xpay_subscribe_pay_fail_notify
注:
1. 建议通过 query_order 接口查询订单兜底,状态为 13 则为扣款失败
2. 按正确格式回复该通知
请求参数
基础字段
| 字段 | 类型 | 备注 |
|---|---|---|
| ToUserName | String | 小程序原始ID |
| FromUserName | String | 该事件消息的openid,道具发货场景固定为微信官方的openid |
| CreateTime | Number | 消息发送时间 |
| MsgType | String | 消息类型,固定为:event |
| Event | String | 事件类型xpay_subscribe_pay_fail_notify |
特殊字段
| 字段 | 类型 | 备注 |
|---|---|---|
| OpenId | String | 用户openid |
| OutTradeNo | String | 业务订单号 |
| Env | Number | 环境配置 0:现网环境(也叫正式环境) 1:沙箱环境 |
| WeChatPayInfo | Object | 微信支付信息 非微信支付渠道可能没有 |
| GoodsInfo | Object | 道具参数信息 |
| ContractWxAppid | String | 签约 appid |
WeChatPayInfo内容
| 字段 | 类型 | 备注 |
|---|---|---|
| MchOrderNo | String | 微信支付商户单号 |
| TransactionId | String | 交易单号(微信支付订单号) |
| PaidTime | Number | 用户支付时间,Linux秒级时间戳 |
GoodsInfo内容
| 字段 | 类型 | 备注 |
|---|---|---|
| ProductId | String | 道具ID |
| Quantity | Number | 数量 |
| OrigPrice | Number | 物品原始价格 (单位:分) |
| ActualPrice | Number | 物品实际支付价格(单位:分) |
| Attach | String | 透传信息 |
| SubscribePeriodDays | Number | 订阅周期 |
返回参数
| 字段 | 类型 | 备注 |
|---|---|---|
| ErrCode | Number | 发送状态。0:成功 |
| ErrMsg | String | (非必填)错误原因,用于调试。在errcode非0 的情况下可以返回 |
返回格式参考消息推送文档:消息推送 | 微信开放文档
XML 示例:
"
"
# 扣款成功通知 xpay_goods_deliver_notify
请求参数
| 字段 | 类型 | 说明 |
|---|---|---|
| ToUserName | String | 小程序原始ID |
| FromUserName | String | 该事件消息的openid,道具发货场景固定为微信官方的openid |
| CreateTime | Number | 消息发送时间 |
| MsgType | String | 消息类型,固定为:event |
| Event | String | 事件类型 xpay_goods_deliver_notify |
| OpenId | String | 用户openid |
| OutTradeNo | String | 业务订单号 |
| Env | Number | 环境配置 0:现网环境(也叫正式环境) 1:沙箱环境 |
| WeChatPayInfo | Object | 微信支付信息 非微信支付渠道可能没有 |
| GoodsInfo | Object | 道具参数信息 |
| TeamInfo | Object | 拼团信息 |
WeChatPayInfo内容如下:
| 字段 | 类型 | 说明 |
|---|---|---|
| MchOrderNo | String | 微信支付商户单号 |
| TransactionId | String | 交易单号(微信支付订单号) |
| PaidTime | Number | 用户支付时间,Linux秒级时间戳 |
GoodsInfo内容如下:
| 字段 | 类型 | 说明 |
|---|---|---|
| ProductId | String | 道具ID |
| Quantity | Number | 数量 |
| OrigPrice | Number | 物品原始价格 (单位:分) |
| ActualPrice | Number | 物品实际支付价格(单位:分) |
| Attach | String | 透传信息 |
TeamInfo内容如下:
| 字段 | 类型 | 说明 |
|---|---|---|
| ActivityId | String | 活动id |
| TeamId | String | 团id |
| TeamType | Number | 团类型1-支付全部,拼成退款 |
| TeamAction | 0-创团 1-参团 |
返回参数
| 字段 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| ErrCode | Number | 是 | 发送状态。0:成功,其他:失败 todo |
| ErrMsg | String | 否 | 错误原因,用于调试。在errcode非0 的情况下可以返回 |
# 【运营规范】
为响应工业和信息化部相关通知,增强用户在签约流程中的感知及交易保障,保障用户账户权益,维护良好的信息消费环境,现微信开放平台针对小程序自动续费订阅会员能力的使用,推进以下的运营相关规范:
# 用户签约前
1. 开发者申请自动续费订阅会员能力时,必须明确在服务详情中说明优惠结束后,每个周期扣款的原始金额为多少元,不得用小字、不得做模糊描述处理,须用户明确感知。
2. 自动续费订阅会员能力为开发者提供自定义扣款金额能力,但是扣款金额不得超过申请委托代扣模板的上限,不得低于平台规定的最低下限。
3. 申请自动续费订阅会员能力时,为保障用户权益,开发者需缴纳相应金额的交易保证金,保证金按照《小程序交易保证金管理规定》进行管理
4. 开发者申请自动续费订阅会员能力时,必须提供《会员自动续费服务协议》供平台审核,平台将合理判断是否有滥用能力、侵犯消费者合法权益等行为,审核通过后方可开放自动续费订阅会员能力。
a. 须在《会员自动续费服务协议》中明确展示订阅会员服务所包含的内容、服务周期、计费周期以及其他法律要求的等内容。
b. 须在《会员自动续费服务协议》中明确展示自动续费服务的退订方式。明确指引iOS用户、安卓用户在不同的支付平台的退订路径,该流程不得只在常见问题等类似界面展示。
c. 建议在《会员自动续费服务协议》中明确展示关于补扣款的条款内容,因为在扣费日期有可能因为网络、用户账户问题或余额不足导致不能正常扣费续费,在用户未主动明确取消服务前,平台将根据此前开发者与用户达成的委托在扣费日期继续发出续费代扣指令,一旦扣款成功,小程序将继续为用户开通下一个计费周期的连续服务。但由于用户对于补充扣费过程无感知,通常会带来用户投诉问题。因此建议开发者在用户服务协议中明确补扣款的条款内容,确保用户在阅读和签署协议时有接收到醒目的提示。
# 用户签约中
1. 在用户支付场景时,小程序需要提供单次付费的商品,不得只提供自动续费商品,并强制用户绑定使用。
2. 用户在发起自动续费订阅会员能力签约时,须明确感知到当前的订阅优惠金额、未来续费金额、订阅周期以及订阅包含的服务
3. 在用户首次支付时醒目展示下一次周期的扣款时间。建议开发者在会员产品相关页面,加粗或高亮展示下一次服务周期的扣款时间。尤其在首次会员价格有设置营销策略时,通常第一个服务周期非常规周期。不可使用“到期前”“次月”等模糊字眼,不建议用灰色小字体表达。建议明确展示下个周期履约的第一天的具体日期,使小程序用户清晰接收到下一个扣款时间信息
4. 用户在发起自动续费订阅会员能力签约时,小程序需要提供《会员自动续费服务协议》勾选操作,且不得做默认勾选。醒目展示《会员自动续费服务协议》,并强化提醒用户主动勾选。建议开发者高亮展示《会员自动续费服务协议》文案,更好的做法是二次弹窗强化展示,让用户做二次确认。可以降低用户对于“被动签署协议、不明所以就签署了协议”的负向体验和解约诉求。
5. 小程序内的委托代扣商品前端展示时必须有自动续费订阅会员扣款模式的明显描述,如连续包周、连续包月等。
# 用户签约后
1. 开发者针对用户的营销策略必须在用户签约时确认,用户确认后商家不得在签约后擅自修改已签约的优惠以及原本金额。服务内容变更需提前7日公示,重要变更需用户再次确认
2. 根据法律法规要求,自动续费服务在发起正式周期扣款之前必须通过有效手段提前 5 日提醒用户,包括不限于短信、邮件、消息推送等方式。基于用户体验,平台提供了预扣费通知能力,在小程序自动续费前2天将通知用户,且服务通知中说明的扣费金额必须与实际扣款金额相符。
3. 小程序内需要为用户提供客服服务如微信客服、在线IM客服,400电话等,以便用户能够直接联系到小程序开发者并进行相关的使用问题咨询与处理。
4. 如因开发者经营原因,出现周期代扣能力相关的客诉和资金风险等问题,或平台合理判断有滥用能力、侵犯消费者合法权益等情形,平台将进行相应治理处罚,包括但不限于限制小程序发版、回收周期代扣能力、限制结算和限制支付能力、下架小程序等。
5. 开发者须要支持在小程序内的订阅会员退款,应存在简洁清晰的用户退款界面和退款路径
6. 开发者收到投诉后须在24小时内处理投诉以及协商退款事宜,若在24小时内未处理,平台将主动介入处理客诉
7. 开发者应做好未成年消费引导,避免出现未成年人冲动/大额消费等问题,未成年人交易退款依照未成年人退款流程处理
8. 需在小程序内展示自动续费服务的退订解约方式。明确指引iOS用户、安卓用户在不同的支付平台的退订路径,该流程不得只在常见问题等类似界面展示;安卓端微信内退订路径:打开微信 - 我 - 服务 - 钱包 - 支付设置 - 自动续费 - 关闭相关小程序自动续费
