You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS Apple Pay展示多个PKPaymentSummaryItem出现异常问题求助

Apple Pay 多PKPaymentSummaryItem显示异常的解决方案

问题根源

Apple Pay的paymentSummaryItems有两个容易被忽略的规则:

  • 数组最后一项必须是交易总计,弹窗默认仅展示这一项,你之前的代码把最后一个商品项当成了总计,所以弹窗只显示item3。
  • 明细项的显示顺序是数组顺序的反转——你按item1、item2、item3添加,详情页会按item3、item2、item1的顺序展示,这就是你看到的“顺序错乱”。

修正后的代码实现

先计算总额,再把明细项倒序排列后追加总计项,就能让弹窗显示正确的总计,详情页按预期顺序展示所有商品:

let paymentRequest = PKPaymentRequest()

// 定义明细项
let item1 = PKPaymentSummaryItem(label: "item 1", amount: NSDecimalNumber(decimal: 10))
let item2 = PKPaymentSummaryItem(label: "item 2", amount: NSDecimalNumber(decimal: 20))
let item3 = PKPaymentSummaryItem(label: "item 3", amount: NSDecimalNumber(decimal: 30))

// 计算总计金额
let totalAmount = NSDecimalNumber(decimal: 10 + 20 + 30)
let totalItem = PKPaymentSummaryItem(label: "你的商家名称", amount: totalAmount)

// 关键:明细倒序 + 最后追加总计
paymentRequest.paymentSummaryItems = [item3, item2, item1, totalItem]

// 其他配置保持不变
paymentRequest.merchantIdentifier = merchantIdentifier
paymentRequest.merchantCapabilities = .capability3DS
paymentRequest.currencyCode = self.currencyCode
paymentRequest.countryCode = self.countryCode
paymentRequest.supportedNetworks = supportedNetworks
paymentRequest.shippingType = .servicePickup
applePayController = PKPaymentAuthorizationController(paymentRequest: paymentRequest)

额外注意事项

  • 总计项的label建议使用商家名称,这样用户在弹窗里能清晰识别交易主体。
  • 如果涉及折扣、运费等额外项,同样要加入明细数组,遵循倒序排列规则后再追加总计。
  • 部分地区的Apple Pay会校验总计金额是否等于所有明细项的金额总和,务必保证计算准确,避免支付流程报错。

内容的提问来源于stack exchange,提问作者brigadir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 18:52:49