小程序订单中心的 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 字段提交商品数据,并通过商户订单号或支付单号建立关联。
完整流程通常如下:
- 在业务系统中创建订单并保存 SKU ID。
- 服务端调用支付下单接口,将商户 SKU ID 写入
detail.goods_detail[].merchant_goods_id。 - 小程序使用服务端返回的签名参数调用
wx.requestPayment。 - 服务端根据支付回调确认结果。
- 按照订单中心接口的字段要求同步订单及 SKU 信息。
注意事项
attach 是商户自定义数据包,可在支付回调时原样返回,但它不是标准的 SKU 字段。确有业务需要时,可以用它保存简短的关联信息,但不能用它代替订单明细,也不应写入敏感数据。
如果当前使用的不是微信支付 API v3,或者所谓的“SKU ID”来自特定交易组件、订单中心版本或第三方支付平台,字段名称可能不同,应以相应的接口定义为准。基本原则不变:商户 SKU 编码传入商品明细字段,支付订单号传入 out_trade_no,不要混用。
备注:内容仅供参考。
