PAYATHON 2026

小程序未按时升级为JSAPI支付会影响发版和收款吗?

支付老李

明确结论

仅凭这则通知,无法判断“2024 年 4 月 1 日后,当面付一定会立即停止收款”。“可能影响”表示平台可能针对不同商户、小程序或交易场景采取限制措施,具体范围和执行时间应以商户后台提示、产品规则和官方通知为准。

可以确定的是:小程序内支付应迁移到与使用场景匹配的专用支付产品。如果继续在小程序中使用当面付,可能遇到以下问题:

  • 新版本审核不通过或无法发布;
  • 小程序内的支付能力受到限制,用户无法正常付款;
  • 无法参与小程序专项激励或公域推广;
  • 实际交易场景与签约产品不一致,可能触发风控或合规检查。

因此,当前还能收款,并不代表以后可以继续使用当面付。只要小程序仍提供在线付款功能,就应尽快开通并接入 JSAPI 支付。涉及预授权或免密扣款时,应选择相应的专用产品。

为什么当面付不适合小程序内支付

当面付主要用于线下收银,例如商户出示二维码供顾客扫码,或者商户扫描顾客的付款码。小程序内付款属于线上场景,需要在小程序中唤起支付,通常应使用 JSAPI 支付。

两者的调用方式和平台识别到的交易场景都不相同:

  • 当面付常用的接口包括 alipay.trade.precreate、alipay.trade.pay;
  • 小程序 JSAPI 支付通常由服务端调用 alipay.trade.create 创建交易;
  • 服务端把支付宝返回的交易号交给小程序;
  • 小程序通过 my.tradePay 唤起收银台。

如果在小程序中生成当面付二维码,或通过其他方式绕过小程序专用支付链路,即使暂时能够完成交易,也不代表这种接入方式会一直符合平台要求。

未升级后可能出现什么情况

通知没有列出统一且确定的限制清单,不能据此断言所有商户都会在同一天停止收款。实际影响可能因商户资质、开放能力、交易类型和平台执行策略而异。

可能出现的情况包括:

  1. 原有当面付接口暂时仍能调用,但在小程序内使用时被识别为场景不匹配。
  2. 小程序提交新版本时,支付能力或相关页面无法通过审核。
  3. 已发布版本中的付款入口受到限制,或者交易请求被风控拦截。
  4. 小程序仍能正常打开,但无法继续享受特定的流量、激励或推广权益。
  5. 当面付在线下收银场景中仍可使用,但不能再作为小程序内的支付方案。

“发版受限”和“收款受限”不一定会同时发生。是否已受到限制,应根据开放平台控制台、商家平台、接口返回码和官方通知判断。

建议的升级步骤

1. 确认实际交易场景

先检查小程序目前的支付实现:

  • 如果服务端调用 alipay.trade.precreate 生成二维码,再让用户通过小程序扫码或识别二维码,这种方式需要重点迁移。
  • 如果调用 alipay.trade.pay 扫描用户付款码,该接口更适合线下收银设备,不应直接用于普通的小程序在线付款流程。
  • 如果已经使用 alipay.trade.create 创建交易,并通过 my.tradePay 唤起支付,还要确认商户后台是否已正式开通相应的 JSAPI 支付产品。

只修改前端调用名称不算完成升级。产品签约、应用绑定、服务端接口和支付回调都要一并检查。

2. 开通小程序专用支付产品

在相应的商户后台或开放平台检查:

  • JSAPI 支付是否已经签约并生效;
  • 商户主体与小程序主体是否符合产品要求;
  • 小程序应用是否已与收款商户建立正确关系;
  • 应用公钥、支付宝公钥、网关和签名方式是否配置正确;
  • 如果由服务商代开发,商户授权关系及 app_auth_token 是否有效。

后台入口和产品名称可能会随平台调整,请以当前控制台显示的升级指南为准。

3. 服务端改用 JSAPI 交易创建接口

服务端创建订单时,可以参照下面的结构调用 alipay.trade.create。示例只列出主要字段,签名、SDK 初始化和商户授权参数需要根据实际接入方式补充。

AlipayTradeCreateRequest request = new AlipayTradeCreateRequest();

JSONObject bizContent = new JSONObject();
bizContent.put("out_trade_no", "ORDER_202409140001");
bizContent.put("total_amount", "99.00");
bizContent.put("subject", "小程序订单");
bizContent.put("buyer_id", buyerId);

request.setBizContent(bizContent.toJSONString());
request.setNotifyUrl("https://example.com/alipay/notify");

AlipayTradeCreateResponse response = alipayClient.execute(request);

if (!response.isSuccess()) {
    throw new IllegalStateException(
        response.getCode() + ": " + response.getSubMsg()
    );
}

String tradeNo = response.getTradeNo();

其中:

  • out_trade_no 在商户系统中必须保持唯一;
  • total_amount 应由服务端根据订单计算,不能直接采用前端传入的值;
  • buyer_id 应通过支付宝小程序授权流程获取;
  • notify_url 必须是支付宝服务器可以访问的 HTTPS 地址;
  • 返回给小程序的应是服务端创建交易后取得的 trade_no,而不是商户订单号。

具体字段要求请以当前接口文档和所用 SDK 的定义为准。

4. 小程序端唤起支付

小程序取得服务端返回的 trade_no 后,通过 my.tradePay 发起支付:

my.tradePay({
  tradeNO: tradeNo,
  success: (result) => {
    console.log('支付调用完成', result);

    // 不要只根据前端结果发货。
    // 应继续向服务端查询订单的最终支付状态。
    queryOrderStatus();
  },
  fail: (error) => {
    console.error('支付调用失败', error);
  }
});

前端返回的支付结果只能用于页面提示,不能作为发货、充值或开通服务的唯一依据。

5. 正确处理异步通知

服务端收到支付通知后,应完成以下处理:

  1. 验证通知签名;
  2. 校验 app_id、商户订单号、金额和收款方等重要数据;
  3. 确认交易状态是否符合业务要求;
  4. 通过幂等逻辑更新订单,避免重复通知造成重复发货;
  5. 按照接口规范返回响应。

如果没有收到通知,应调用官方交易查询接口核实订单状态,不能只依赖小程序前端回调。

6. 完成测试后再切换正式流量

测试至少应覆盖以下情况:

  • 正常支付成功;
  • 用户取消支付;
  • 用户重复点击付款;
  • 支付成功但前端页面中断;
  • 异步通知重复到达;
  • 金额或订单状态异常;
  • 订单超时关闭;
  • 退款及退款查询;
  • 服务商模式下商户授权失效。

确认新支付链路稳定后,再移除小程序内原有的当面付入口。如果线下确实需要扫码收银,可以保留当面付,但应将其与小程序内的 JSAPI 支付分开使用。

如何判断当前是否已经受到限制

可以从以下三个方面排查:

  • 在商户后台查看 JSAPI 支付产品的签约状态,以及是否存在待处理的升级任务或风险提示;
  • 在开放平台检查小程序版本审核、支付能力和应用绑定状态;
  • 检查支付接口返回的 code、sub_code、sub_msg,确认失败是否与产品未开通、权限不足或场景不匹配有关。

一次支付成功,不能证明后续一定不会受限。也不要只根据通知中的日期,推断相关接口会在当天全部关闭。

注意事项

  • 当面付与 JSAPI 支付适用于不同的交易场景,迁移时不能只替换一个前端 API。
  • 不要把在小程序中展示当面付二维码作为长期替代方案。
  • 不要将私钥、应用密钥或签名逻辑放在小程序前端。
  • 金额、商品信息和订单状态必须由服务端控制。
  • 上线前应保留新旧订单的对账能力,避免迁移期间漏单。
  • 如果控制台仍未明确显示限制范围,应通过官方客服或工单提交小程序 app_id、商户号和当前使用的接口名称,确认该账号适用的实际执行策略。

仅凭通知,无法确定未升级后是否会“立即完全无法收款”。但继续用当面付承载小程序内支付,确实存在不确定性和合规风险。建议尽快完成 JSAPI 支付的签约和技术迁移,并根据服务端支付结果及后台状态决定是否上线。

备注:内容仅供参考。