PAYATHON 2026

小程序订单中心的 SKU ID 应传给支付接口的哪个参数?

支付老李

结论

如果 SKU ID 是商户系统中的商品规格编码,应传入微信支付下单接口的以下字段:

detail.goods_detail[].merchant_goods_id

如果使用微信支付定义的统一商品编号,则应传入:

detail.goods_detail[].wechatpay_goods_id

SKU ID 不应作为 out_trade_no、transaction_id 或 attach 使用。小程序端的 wx.requestPayment 也没有接收 SKU ID 的参数。商品信息需要由服务端在创建支付订单时提交。

服务端下单示例

以下是微信支付 API v3 的 JSAPI 下单示例:

{
  "appid": "wx1234567890abcdef",
  "mchid": "1900000109",
  "description": "黑色 T 恤 / L 码",
  "out_trade_no": "ORDER_202609150001",
  "notify_url": "https://example.com/pay/notify",
  "amount": {
    "total": 9900,
    "currency": "CNY"
  },
  "payer": {
    "openid": "oUpF8uMuAJO_M2pxb1Q9zNjWeS6o"
  },
  "detail": {
    "goods_detail": [
      {
        "merchant_goods_id": "SKU_TSHIRT_BLACK_L",
        "goods_name": "黑色 T 恤 / L 码",
        "quantity": 1,
        "unit_price": 9900
      }
    ]
  }
}

各字段的含义如下:

  • merchant_goods_id:商户系统中的 SKU ID。
  • wechatpay_goods_id:微信支付侧的统一商品编号。如果没有该编号,不要自行虚构。
  • quantity:购买数量。
  • unit_price:商品单价,通常以分为单位。
  • out_trade_no:支付订单号,不是 SKU ID。

小程序端支付

服务端下单成功后会取得 prepay_id,并生成支付签名参数返回给小程序。小程序使用这些参数调起支付:

wx.requestPayment({
  timeStamp,
  nonceStr,
  package: `prepay_id=${prepayId}`,
  signType: 'RSA',
  paySign,
  success(res) {
    console.log('支付已调起并返回成功', res)
  },
  fail(err) {
    console.error('支付失败或取消', err)
  }
})

这里不需要,也不能额外传入 SKU ID。

与订单中心的关系

支付接口中的商品明细与小程序订单中心的商品明细属于两套数据。支付完成后,如果还要向订单中心同步订单,需要按照订单中心接口要求的 SKU 字段提交商品数据,并通过商户订单号或支付单号建立关联。

完整流程通常如下:

  1. 在业务系统中创建订单并保存 SKU ID。
  2. 服务端调用支付下单接口,将商户 SKU ID 写入 detail.goods_detail[].merchant_goods_id。
  3. 小程序使用服务端返回的签名参数调用 wx.requestPayment。
  4. 服务端根据支付回调确认结果。
  5. 按照订单中心接口的字段要求同步订单及 SKU 信息。

注意事项

attach 是商户自定义数据包,可在支付回调时原样返回,但它不是标准的 SKU 字段。确有业务需要时,可以用它保存简短的关联信息,但不能用它代替订单明细,也不应写入敏感数据。

如果当前使用的不是微信支付 API v3,或者所谓的“SKU ID”来自特定交易组件、订单中心版本或第三方支付平台,字段名称可能不同,应以相应的接口定义为准。基本原则不变:商户 SKU 编码传入商品明细字段,支付订单号传入 out_trade_no,不要混用。

备注:内容仅供参考。