支付宝app端关闭周期/商家扣款后的挽留弹窗如何设置
结论
用户在支付宝 App 中按“支付设置 → 自动续费/免密支付 → 关闭服务”的路径操作时,可能会看到挽留弹窗。这个页面通常不是商家在品牌 App 中通过支付宝支付 SDK 设置的,也无法通过普通签约或代扣接口直接控制。
解约挽留属于支付宝侧的运营能力。商家需要先联系支付宝对应的行业运营、商务或技术支持,确认该能力是否已开放,再通过支付宝提供的运营后台配置挽留方案。如果商家后台没有相关入口,通常说明当前账号或产品尚未开通,无法只靠客户端代码实现。
为什么不能在品牌 App 内设置
用户关闭服务时,操作页面位于支付宝 App 内。弹窗是否展示、向哪些用户展示,以及用户接受权益后是否保留签约关系,都由支付宝侧的流程控制。
品牌 App 通常只能处理以下事项:
- 发起周期扣款或商家扣款签约;
- 查询签约状态;
- 接收签约、解约等异步通知;
- 按照双方约定发放优惠券或会员权益。
品牌 App 无法直接在支付宝的系统页面中插入自定义弹窗,也不应通过遮挡或模拟页面等方式干预用户解约。
设置流程
1. 确认对应的签约产品
先整理需要配置挽留策略的签约信息:
- 支付宝商户账号;
app_id;- 周期扣款或商家扣款产品类型;
- 签约协议模板或产品标识;
- 当前签约和解约链路;
- 计划赠送的权益类型,例如优惠券、会员天数;
- 权益库存、有效期及使用条件。
如果同一品牌使用多个 app_id、商户主体或协议模板,需要分别确认各自是否已开通该能力。
2. 向支付宝申请解约挽留能力
商家可以通过支付宝开放平台工单、对应商务或行业运营人员申请,并说明具体使用场景:
用户在支付宝 App 的自动续费/免密支付页面关闭指定服务时,希望展示优惠券或会员时长等挽留权益。
申请时需要确认:
- 当前产品是否支持解约挽留;
- 是否需要加入白名单或单独签约;
- 配置入口位于哪个商家运营后台;
- 支持哪些权益类型;
- 权益由支付宝发放还是商家履约;
- 是否会提供领取结果通知;
- 用户领取权益后如何处理签约关系;
- 是否有展示频次、库存和人群限制。
后台名称和菜单路径可能会因商户行业、产品权限及支付宝后台版本而异,应以支付宝为该商户开通后提供的入口为准。
3. 配置挽留方案
获得权限后,通常需要配置:
- 适用的签约产品或协议;
- 目标用户范围;
- 弹窗文案;
- 优惠券、会员天数等权益;
- 权益有效期和使用门槛;
- 单个用户可领取的次数;
- 活动时间;
- 总库存及每日库存;
- 用户接受权益后的处理规则;
- 权益领取失败时的降级方案。
如果规则涉及“领取权益后暂不解约”,必须在页面上明确告知用户,不能让用户误以为服务已经关闭。
4. 对接权益履约
如果权益由支付宝侧的券系统直接发放,商家通常只需完成活动和券模板配置。
如果会员天数或券包由商家系统发放,则需要根据支付宝实际提供的通知协议完成服务端履约。以下代码只用于说明处理结构,其中的字段名和签名方法均为占位示例,不能直接用于支付宝正式接口:
@PostMapping("/alipay/retention/benefit/notify")
public String handleBenefitNotify(HttpServletRequest request) {
Map<String, String> parameters = extractParameters(request);
// 必须使用支付宝正式文档规定的验签方法。
boolean verified = verifyAlipaySignature(parameters);
if (!verified) {
return "failure";
}
String requestId = parameters.get("request_id");
String agreementNo = parameters.get("agreement_no");
String benefitType = parameters.get("benefit_type");
// 使用支付宝通知中的唯一业务标识做幂等控制。
if (benefitService.hasProcessed(requestId)) {
return "success";
}
if ("MEMBER_DAYS".equals(benefitType)) {
int days = Integer.parseInt(parameters.get("benefit_value"));
benefitService.grantMemberDays(agreementNo, days, requestId);
} else if ("COUPON".equals(benefitType)) {
benefitService.grantCoupon(
agreementNo,
parameters.get("benefit_template_id"),
requestId
);
}
return "success";
}
正式开发时,通知地址、字段、验签算法、响应格式和重试机制都必须以支付宝为该能力提供的接入文档为准。在取得正式文档前,不建议自行预设接口名称或请求参数。
验收重点
上线前,应通过支付宝提供的测试方式或灰度环境验证以下内容:
- 目标签约产品能否命中挽留方案;
- 非目标产品是否不会误展示;
- 权益库存不足时能否正确降级;
- 重复通知是否会造成重复发券或重复增加会员天数;
- 用户拒绝权益后能否继续完成解约;
- 用户接受权益后,签约状态是否符合配置;
- 商家系统与支付宝侧的签约状态最终是否一致;
- 解约通知和权益通知乱序到达时,系统能否正确处理。
注意事项
- 不要混淆品牌 App 内的“取消订阅弹窗”和支付宝 App 内的解约挽留弹窗,两者属于不同的处理链路。
- 挽留活动不能阻止用户正常关闭服务,也不能设置不必要的操作障碍。
- 优惠券使用门槛、会员有效期及是否自动续费等信息需要明确展示。
- 权益发放接口必须验签,并使用唯一业务流水号实现幂等。
- 不要只根据前端结果更新签约状态,应以支付宝正式查询接口或异步通知为准。
- 如果商家后台找不到配置入口,应提交支付宝开放平台工单,并提供
app_id、商户主体和协议产品信息,请支付宝确认当前是否具备该能力。
备注:内容仅供参考。
