PAYATHON 2026

沙箱环境的小程序能否使用小程序支付?

支付小周

结论

支付宝沙箱通常无法完整测试小程序支付。沙箱小程序即使能正常运行,服务端调用 alipay.trade.create 创建支付订单时,仍可能收到“没有权限”或 isv.insufficient-isv-permissions 错误。

这类错误通常不是代码参数有误,而是沙箱应用没有“小程序支付”产品权限。沙箱与正式环境支持的能力并不完全相同,拥有沙箱账号或沙箱 app_id,不等于已经获得小程序支付接口权限。

解决步骤

支付能力需要在正式环境中开通和联调:

  1. 在支付宝开放平台创建正式小程序应用,或进入已有的正式应用。
  2. 为该小程序申请并开通“小程序支付”能力。
  3. 按照平台要求完成商家签约、应用审核和必要的绑定。
  4. 将服务端配置换成正式应用的 app_id、应用私钥和支付宝公钥。
  5. 将接口网关切换到正式地址:
https://openapi.alipay.com/gateway.do
  1. 由服务端调用 alipay.trade.create 创建订单并取得 trade_no。
  2. 小程序端调用 my.tradePay,传入该 trade_no 发起支付。
  3. 服务端通过异步通知或主动查询接口确认最终支付结果。

如果正式应用仍提示没有权限,先到开放平台控制台确认“小程序支付”已经签约并生效,再检查调用接口所用的 app_id 是否属于已开通支付能力的小程序应用。

服务端创建订单示例

下面的示例只保留了主要调用流程。密钥、金额和订单号等信息应从安全配置或业务系统中获取:

AlipayClient alipayClient = new DefaultAlipayClient(
    "https://openapi.alipay.com/gateway.do",
    APP_ID,
    APP_PRIVATE_KEY,
    "json",
    "UTF-8",
    ALIPAY_PUBLIC_KEY,
    "RSA2"
);

AlipayTradeCreateRequest request = new AlipayTradeCreateRequest();
request.setNotifyUrl("https://example.com/alipay/notify");

request.setBizContent("""
{
  "out_trade_no": "ORDER_202609130001",
  "total_amount": "0.01",
  "subject": "测试商品",
  "buyer_id": "用户的支付宝 user_id"
}
""");

AlipayTradeCreateResponse response = alipayClient.execute(request);

if (response.isSuccess()) {
    String tradeNo = response.getTradeNo();
    System.out.println("trade_no: " + tradeNo);
} else {
    System.out.println("code: " + response.getCode());
    System.out.println("sub_code: " + response.getSubCode());
    System.out.println("sub_msg: " + response.getSubMsg());
}

小程序端使用服务端返回的 trade_no:

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

无法使用正式支付时如何开发

正式支付能力开通前,可以暂时隔离支付模块:

  • 服务端返回模拟的下单结果,用来验证页面和订单状态流转。
  • 小程序端封装统一的支付方法,并在开发环境中返回模拟结果。
  • 使用测试请求验证支付回调逻辑,但不能把模拟结果作为真实到账凭证。
  • 正式能力开通后,再联调真实支付、取消支付、重复通知和退款等场景。

注意事项

“没有权限”和签名失败不是同一类问题。排查时需要结合响应中的 code、sub_code 和 sub_msg 判断:

  • 遇到权限类错误,检查产品签约状态、应用类型和 app_id。
  • 遇到签名类错误,检查应用私钥、支付宝公钥、签名方式和字符集。
  • 遇到买家信息错误,确认 buyer_id 是当前支付宝用户对应的 user_id。
  • 不要混用不同环境的参数。沙箱 app_id、沙箱密钥和沙箱网关需要配套使用,正式环境的参数也一样。
  • 不能只根据小程序端回调判断支付是否成功,应以服务端异步通知或 alipay.trade.query 的查询结果为准。

支付宝开放平台可能调整沙箱能力范围。如果控制台已经为沙箱应用提供明确的“小程序支付”签约入口,应以当前控制台和对应接口文档为准。否则,应按沙箱不支持完整支付链路处理。

备注:内容仅供参考。