PAYATHON 2026

快应用中如何拉起支付宝支付并传递orderInfo?

支付小周

结论

快应用可以通过运行平台提供的支付服务拉起支付宝。orderInfo 不是订单号或普通 JSON 对象,而是业务服务端按照支付宝 App 支付规则生成并完成签名的完整订单参数字符串。

支付时,快应用先向业务服务端请求创建订单。服务端调用支付宝相关 SDK 或接口生成 orderInfo,再把该字符串返回给快应用。支付宝应用私钥不能放在快应用端,快应用也不应自行拼接或签名。

调用流程

  1. 用户在快应用中确认支付。
  2. 快应用请求业务服务端创建订单。
  3. 服务端生成唯一的商户订单号,并确定金额和商品信息。
  4. 服务端使用支付宝应用私钥完成 RSA2 签名,生成完整的 orderInfo。
  5. 快应用将服务端返回的 orderInfo 原样传给支付 API。
  6. 用户在支付宝客户端完成付款后,支付宝通过异步通知向服务端发送最终结果。
  7. 快应用向服务端查询订单状态,再根据查询结果更新页面。

快应用端示例

如果当前平台文档指定使用 @service.pay,调用方式通常如下:

<script>
import pay from '@service.pay'
import fetch from '@system.fetch'

export default {
  startAlipay() {
    fetch.fetch({
      url: 'https://api.example.com/orders',
      method: 'POST',
      header: {
        'Content-Type': 'application/json'
      },
      data: {
        productId: 'product_001',
        quantity: 1
      },
      success: (response) => {
        const result = JSON.parse(response.data)

        if (!result.orderInfo) {
          console.error('服务端未返回 orderInfo')
          return
        }

        pay.pay({
          orderInfo: result.orderInfo,
          callback: (ret) => {
            console.log('支付调用结果:', ret)

            // 不要仅凭客户端回调认定支付成功。
            // 此处应继续请求业务服务端查询订单状态。
            this.queryOrder(result.orderNo)
          }
        })
      },
      fail: (data, code) => {
        console.error('创建订单失败:', code, data)
      }
    })
  },

  queryOrder(orderNo) {
    fetch.fetch({
      url: `https://api.example.com/orders/${orderNo}`,
      method: 'GET',
      success: (response) => {
        const result = JSON.parse(response.data)

        if (result.status === 'PAID') {
          console.log('订单支付成功')
        }
      }
    })
  }
}
</script>

不同厂商或不同版本的快应用平台,可能使用不同的支付模块名称、回调字段和错误码。如果平台文档指定的不是 @service.pay,应继续使用文档中的 API。无论使用哪种接口,orderInfo 都应由服务端生成,并按平台文档的要求传入。

orderInfo 包含什么

orderInfo 通常是一段由支付宝 App 支付请求参数和签名组成的字符串,可能包含:

  • app_id
  • method=alipay.trade.app.pay
  • charset=utf-8
  • sign_type=RSA2
  • timestamp
  • version=1.0
  • notify_url
  • biz_content
  • sign

其中,biz_content 一般包含:

  • out_trade_no:商户订单号
  • total_amount:支付金额
  • subject:订单标题
  • product_code=QUICK_MSECURITY_PAY

下面的内容只用于展示字符串的形式,不能直接用于支付:

app_id=2021xxxxxxxxxxxx
&biz_content=%7B%22out_trade_no%22%3A%22202609090001%22%2C%22total_amount%22%3A%220.01%22%2C%22subject%22%3A%22测试商品%22%2C%22product_code%22%3A%22QUICK_MSECURITY_PAY%22%7D
&charset=utf-8
&method=alipay.trade.app.pay
&notify_url=https%3A%2F%2Fapi.example.com%2Falipay%2Fnotify
&sign_type=RSA2
&timestamp=2026-09-09%2012%3A00%3A00
&version=1.0
&sign=服务端生成的签名

实际使用的 orderInfo 应是一整段连续字符串。参数编码、排序和签名应通过支付宝 SDK 完成,或严格遵循支付宝当前的签名规范,不能直接复制上面的示例。

服务端返回示例

服务端创建订单后,可以向快应用返回如下数据:

{
  "orderNo": "202609090001",
  "orderInfo": "app_id=...&biz_content=...&charset=utf-8&method=alipay.trade.app.pay&sign_type=RSA2&timestamp=...&version=1.0&sign=..."
}

快应用收到响应后,应将 orderInfo 原样传给支付 API。不要再次解析、拼接、排序或编码,否则可能导致验签失败。

注意事项

  • 支付宝应用私钥只能保存在服务端,不能写入快应用包。
  • 支付金额必须由服务端根据商品和订单计算,不能信任客户端上传的金额。
  • out_trade_no 必须保持唯一,重复使用可能导致订单冲突。
  • 支付 API 的客户端回调只反映调用过程的结果。付款是否成功,应以支付宝异步通知和服务端查单结果为准。
  • 服务端处理异步通知时,必须验证签名,并核对商户订单号、金额、应用 ID 和卖家信息。
  • 真机能否拉起支付宝,还取决于设备是否安装支付宝、快应用运行平台是否支持该支付能力,以及应用是否完成相关配置。
  • 如果使用厂商专有的支付接口,应遵循对应平台文档规定的模块名、清单配置、参数格式和回调字段。

备注:内容仅供参考。