PAYATHON 2026

H5 跳转支付宝小程序签约付款需要开发哪些页面?

支付阿杰

明确结论

不能只接入一个支付按钮。

支付宝会提供收银台、签约确认等平台页面,但商家仍需开发支付宝小程序中的业务承接页面,以及服务端的订单、签约、支付回调和状态查询能力。至少包括:

  • H5 跳转后的承接页
  • 订单确认或订单加载页
  • 签约发起及签约结果处理
  • 支付发起及支付结果页
  • 异常、取消和重试页面
  • 必要的协议、隐私政策及客服入口

如果签约产品支持”签约后立即支付”,可以把上述步骤集中在一个页面中,但相关业务逻辑仍然不能省略。

哪些页面由支付宝提供

以下页面通常由支付宝提供,商家不需要自行仿制:

  • 支付密码输入、付款方式选择等支付宝收银台页面
  • 签约授权确认页面
  • 实名认证、风险验证等支付宝安全页面

小程序调用相应能力后,支付宝会展示对应的系统页面。商家不应自行采集支付密码、银行卡号等敏感信息。

“独立签约付款”可能对应周期扣款、先享后付、代扣协议或其他签约产品。不同产品的签约 API、准入要求和页面流程并不完全相同,应以商户实际开通产品的文档为准。

支付宝小程序需要开发什么

1. H5 跳转承接页

H5 拉起支付宝小程序时,只传递用于定位业务的参数,例如短期有效的跳转令牌或订单引用。不要把订单金额、支付状态直接作为可信参数。

alipays://platformapi/startapp?appId=支付宝小程序AppId&page=pages/order/index%3Ftoken%3D一次性令牌

小程序打开后,使用令牌向商家服务端查询订单:

Page({
  async onLoad(query) {
    if (!query.token) {
      this.setData({ error: '缺少订单参数' });
      return;
    }

    const result = await my.request({
      url: 'https://api.example.com/orders/resolve',
      method: 'POST',
      headers: {
        'content-type': 'application/json'
      },
      data: {
        token: query.token
      }
    });

    this.setData({
      order: result.data.order
    });
  }
});

服务端必须重新校验订单归属、金额、商品状态和令牌有效期。

2. 订单确认或加载页

用户需要清楚当前购买的商品、支付金额和签约内容。即使不设置完整的商品详情页,也至少要展示:

  • 商品或服务名称
  • 支付金额
  • 签约服务名称
  • 扣款周期、扣款条件和解约方式
  • 商户名称及客服入口

小程序打开后直接拉起签约页面,容易让用户不清楚授权对象,也可能影响审核和转化。

3. 签约流程

签约请求通常由商家服务端创建,小程序再按照产品要求打开支付宝签约页面。不能只根据前端回调判断签约结果,应以服务端异步通知或主动查询结果为准。

建议采用以下状态流程:

未签约 → 签约处理中 → 已签约 → 待支付 → 支付处理中 → 支付成功
                    ↘ 签约失败              ↘ 支付失败

签约和支付是否由同一个接口完成,取决于商户已经开通的支付宝产品。在没有确认产品类型前,不要把普通支付接口当作代扣签约接口使用。

4. 支付发起页

使用支付宝小程序支付时,常见做法是由服务端调用支付宝交易接口创建交易,再将支付宝交易号返回给小程序。小程序通过 my.tradePay 拉起支付宝收银台:

my.tradePay({
  tradeNO: '服务端返回的支付宝交易号',
  success: (result) => {
    // 此处只表示客户端调用结束,不能直接作为最终入账依据
    this.queryOrderStatus();
  },
  fail: () => {
    my.alert({
      title: '支付未完成',
      content: '请稍后重试或查询订单状态'
    });
  }
});

订单金额、商品信息和商户订单号应由服务端生成。不要让小程序提交未经校验的金额并直接创建交易。

5. 支付结果页

客户端返回成功,不代表商家已经确认收款。结果页应调用商家服务端查询订单:

async function queryOrderStatus(orderId) {
  const response = await my.request({
    url: `https://api.example.com/orders/${encodeURIComponent(orderId)}`,
    method: 'GET'
  });

  return response.data.status;
}

服务端应验签并处理支付宝异步通知,同时提供主动查询作为补偿机制。只有服务端确认交易成功后,才能发货、开通会员或履行业务服务。

6. 异常处理页面

至少要处理以下情况:

  • 用户取消签约
  • 签约成功但支付失败
  • 支付处理中,暂时没有最终结果
  • 订单已关闭或重复支付
  • H5 传入的令牌过期
  • 用户未安装支付宝或无法正常拉起
  • 用户从支付宝返回抖音后需要继续查询订单

页面应提供重新查询、重新支付、返回订单和联系客服等操作,不能在失败后只显示空白页。

推荐的完整实现流程

  1. 用户在抖音内的 H5 选择商品并提交订单。
  2. H5 请求商家服务端创建业务订单。
  3. 服务端生成一次性、短期有效的跳转令牌。
  4. H5 使用合规的跳转方式拉起支付宝,并打开指定的小程序页面。
  5. 小程序使用令牌从服务端获取订单,不信任 URL 中的金额和支付状态。
  6. 小程序展示订单与签约信息。
  7. 服务端创建签约请求,小程序进入支付宝提供的签约确认页面。
  8. 服务端确认签约成功后创建支付交易。
  9. 小程序调用支付能力,由支付宝展示收银台。
  10. 服务端处理支付宝异步通知并更新订单。
  11. 小程序结果页查询服务端,展示最终的签约和支付状态。

还需要开发的服务端能力

这类方案不只是开发小程序页面,服务端至少还要具备以下能力:

  • 创建业务订单
  • 生成并校验跳转令牌
  • 创建签约请求
  • 查询签约状态
  • 创建支付交易
  • 接收并验签异步通知
  • 主动查询交易结果
  • 关闭超时订单
  • 幂等处理和重复通知处理
  • 退款、解约及售后处理

签约号、商户订单号和支付宝交易号应分别保存,不能共用同一个字段。

注意事项

抖音内跳转限制

抖音内置浏览器能否通过 URL Scheme 直接拉起支付宝,可能受平台规则、系统版本、投放资质和风控策略影响。上线前应分别测试 Android、iOS 和不同的失败回退路径,不能默认所有环境都能直接拉起。

小程序审核

承接页需要提供真实、完整的业务内容。如果小程序只有一个按钮,打开后立即进入签约或支付流程,可能无法清楚说明商品、服务和授权关系。具体审核要求应以提交审核时的平台规范为准。

签约必须充分告知

如果涉及自动续费、周期扣款或免密代扣,应明确展示:

  • 扣款金额或金额计算方式
  • 扣款周期和触发条件
  • 服务期限
  • 取消签约的方法
  • 退款与售后规则

不要使用默认勾选、含糊的按钮文案,也不要隐藏解约入口。

防止参数篡改

H5 跳转参数只能用于定位订单,不能决定实际支付金额。服务端必须根据订单记录生成支付宝请求,并校验订单所属用户、订单状态和有效期。

保证接口幂等

用户可能重复点击按钮,也可能在关闭小程序后重新进入。服务端还可能多次收到异步通知。创建交易、更新订单和发放权益时,都要使用商户订单号进行幂等控制。

支付宝提供的是签约确认页和支付收银台,不是完整的商家业务页面。一个能够上线的最小方案,通常也要包含小程序承接页、订单确认、结果展示、异常重试和对应的服务端闭环,不能只接入支付功能。

备注:内容仅供参考。