支付宝小程序支付完成后如何避免跳转阿里妈妈广告页?
结论
“优选好物”是支付宝收银台在支付完成后展示的营销页面,通常与小程序的页面跳转逻辑无关。小程序调用 my.tradePay 后,无法通过 redirectTo、navigateBack 或支付参数跳过支付宝收银台中的广告页。
如果希望用户点击“完成”后直接返回小程序,需要关闭对应商户账号下的“支付后推荐”“支付成功页营销”或类似广告功能。若该功能由服务商、支付插件或代运营方开通,则需要联系实际签约方关闭。
处理步骤
1. 确认广告页是否来自支付宝收银台
先确认广告出现的过程:
- 支付成功后,页面仍停留在支付宝收银台;
- 点击“完成”后进入“优选好物”;
- 关闭“优选好物”后,小程序才收到支付回调或重新显示。
如果实际流程与上述情况一致,说明广告页不在小程序的页面栈中,小程序代码无法直接关闭或跳过它。
如果支付回调已经执行,之后才从小程序跳转到广告页,则需要检查业务代码是否调用了 my.ap.navigateToAlipayPage、my.navigateToMiniProgram,或打开了外部 H5 页面。
2. 检查商户后台的支付后营销配置
使用该笔交易对应的支付宝商户账号登录支付宝商家平台,在支付产品、运营中心、营销管理等栏目中查找名称相近的功能,例如:
- 支付后推荐
- 支付成功页推荐
- 支付后广告
- 优选好物
- 支付后营销
找到相关活动或服务后,将其暂停、关闭或解除授权。
后台入口和功能名称可能因账号类型、签约产品或平台版本而不同。如果商户后台找不到对应入口,可以向支付宝客服提供订单号和广告页截图,请客服确认该页面来自哪个产品或授权关系。
3. 检查服务商和第三方支付配置
如果小程序通过服务商代开发、第三方支付组件或聚合支付平台接入,还要确认以下信息:
- 支付订单使用的
app_id和支付宝商户账号是否属于自己; - 服务商是否开通了支付后营销功能;
- 是否签署过阿里妈妈推广、支付后推荐等协议;
- 聚合支付平台是否在收银台流程中加入了营销页面。
这类配置的关闭入口不一定会出现在小程序开发者后台,需要联系服务商或实际签约商户处理。
4. 正确处理支付完成后的返回逻辑
关闭平台侧的营销页面后,小程序仍需在 my.tradePay 回调中处理支付结果:
my.tradePay({
tradeNO: order.tradeNo,
success: (result) => {
if (result.resultCode === '9000') {
my.redirectTo({
url: `/pages/pay-result/pay-result?orderId=${order.id}`
});
return;
}
if (result.resultCode === '6001') {
my.showToast({
content: '支付已取消'
});
return;
}
my.showToast({
content: '支付结果确认中'
});
},
fail: () => {
my.showToast({
content: '暂时无法发起支付'
});
}
});
这段代码只能控制用户返回小程序后进入哪个页面,无法决定用户在支付宝收银台内点击“完成”时会看到什么内容。
不要依赖客户端回调判断最终支付状态
my.tradePay 返回成功,只表示客户端支付流程给出了相应结果。订单是否真正支付成功,应由服务端根据支付宝异步通知或主动查询结果来确认。
服务端需要完成以下处理:
1. 接收支付宝异步通知
2. 验证通知签名
3. 校验 app_id、seller_id、out_trade_no、total_amount
4. 确认 trade_status
5. 以幂等方式更新订单
6. 向支付宝返回 success
notify_url 用于服务端接收支付通知,不能控制用户点击“完成”后的跳转。即使某些支付产品支持 return_url,也不能用它关闭支付宝客户端中的营销页。
注意事项
- 不要通过定时跳转或连续调用
navigateBack来抢占页面。广告页属于支付宝客户端或收银台流程,小程序在此期间通常没有页面控制权。 - 支付接口的成功回调与关闭广告是两件事。回调只能决定用户返回小程序后看到哪个业务页面。
- 使用同一套小程序代码时,不同商户账号可能出现不同结果,应重点核对生成订单的实际收款账号。
- 如果后台已经关闭相关营销功能,但广告仍然出现,应保留广告页截图、发生时间、支付宝订单号、商户 PID 和小程序
app_id,提交给支付宝客服排查缓存、授权关系或服务商配置。 - 在没有确认具体签约产品前,无法确定后台入口的准确名称。应以该商户账号后台实际显示的内容和支付宝客服的核查结果为准。
备注:内容仅供参考。
