PAYATHON 2026

支付宝支付下单接口开票信息参数问题

支付老李

结论

  1. 在 alipay.trade.page.pay 的开票明细中:

    • code 是商家侧用于标识商品或服务的编码,不能直接当作税收分类编码。

    • sumPrice 是当前明细行的商品总价,不是含税单价。

    • 单价填写 price,数量填写 num。一般应满足:

      [ sumPrice = price \times num ]

    sumPrice 是否含税,不能只看字段名称。具体应以当前接口文档、商户开票配置和实际开票系统采用的金额口径为准。

  2. 如果当前 alipay.trade.wap.pay 接口文档的业务参数中没有 invoice_info,就应视为不支持在下单请求中传入这项开票信息,不要自行添加未公开参数。手机网站支付完成后,可以通过商户自己的开票页面或独立开票流程收集信息并开具发票。

参数含义

电脑网站支付的开票明细通常包含以下字段:

字段含义
code商家侧商品或服务编码
name商品或服务名称
num数量
price单价
sumPrice当前明细行总价
taxRate税率

例如,某项服务单价为 100.00 元,数量为 2,各字段应填写为:

price = 100.00
num = 2
sumPrice = 200.00

不要将 sumPrice 填成 100.00。如果接口要求填写税收分类编码,应使用文档中明确标注为“税收分类编码”的专用字段,不能用 code 代替。

电脑网站支付示例

不同语言的支付宝 SDK 可能采用驼峰命名,最终请求 JSON 则使用下划线命名。下面只展示参数结构,字段是否可用仍以当前 SDK 和接口文档为准:

{
  "out_trade_no": "202609130001",
  "product_code": "FAST_INSTANT_TRADE_PAY",
  "total_amount": "200.00",
  "subject": "技术服务",
  "invoice_info": {
    "key_info": {
      "is_support_invoice": true,
      "invoice_merchant_name": "示例科技有限公司",
      "tax_num": "统一社会信用代码或纳税人识别号"
    },
    "details": [
      {
        "code": "SERVICE-001",
        "name": "技术服务费",
        "num": 2,
        "price": "100.00",
        "sum_price": "200.00",
        "tax_rate": "0.06"
      }
    ]
  }
}

使用 Java SDK 对象时,字段可能写成:

item.setCode("SERVICE-001");
item.setName("技术服务费");
item.setNum(2L);
item.setPrice("100.00");
item.setSumPrice("200.00");
item.setTaxRate("0.06");

具体的数据类型和 setter 名称可能随 SDK 版本变化,请以项目实际引入的 SDK 类定义为准。

手机网站支付的处理方式

alipay.trade.wap.pay 用于创建手机网站支付交易。如果接口文档没有列出 invoice_info,可以按以下流程处理:

  1. 调用 alipay.trade.wap.pay 完成下单和支付。
  2. 根据异步通知确认交易已支付成功。
  3. 在商户订单页提供“申请开票”入口。
  4. 收集发票抬头、纳税人识别号、邮箱等必要信息。
  5. 通过商户自己的开票系统或已接入的开票服务完成开票。
  6. 保存发票申请与支付宝交易号、商户订单号之间的关联。

WAP 下单参数示例:

{
  "out_trade_no": "202609130002",
  "product_code": "QUICK_WAP_WAY",
  "total_amount": "200.00",
  "subject": "技术服务",
  "quit_url": "https://merchant.example.com/order/202609130002"
}

如果文档不支持,请勿直接追加:

{
  "invoice_info": {}
}

支付宝网关可能会忽略未知字段,也可能因参数校验失败而拒绝请求,因此不能依赖这种未公开的行为。

注意事项

  • sumPrice 是明细总价,price 才是单价。
  • code 是商品编码,不等同于税收分类编码。
  • 开票明细金额应与订单金额一致。如果存在折扣、优惠或多项商品,还需要明确优惠金额的分摊方式。
  • 金额建议使用字符串形式的十进制数,例如 "100.00",避免浮点数计算造成精度误差。
  • taxRate 的格式和可选范围应以当前接口文档为准,不要自行认定应填写 6、0.06 或 "6%" 中的某一种。
  • 是否含税取决于开票金额口径,不能只凭字段名称判断。如果文档没有明确说明,应向支付宝技术支持或所使用的开票服务商确认。
  • 接口能力可能发生调整。上线前请核对支付宝开放平台中对应接口的最新参数表,以及项目实际使用的 SDK 模型。

备注:内容仅供参考。