iOS Swift中如何将账单地址关联至Stripe PaymentSheet
解决PaymentSheet关联用户地址的Swift代码修改方案
核心思路
要让收集到的地址同步到Stripe后端,需将地址数据通过PaymentSheet.Configuration传递给Stripe,同时配合后端创建PaymentIntent时关联地址字段。
前端代码修改步骤
整理收集到的地址数据
把你通过地址元素获取的地址,转换为Stripe要求的STPBillingDetails格式:// 假设address是你已收集的用户地址实例 let billingDetails = STPBillingDetails() billingDetails.address = STPAddress() billingDetails.address?.line1 = address.street billingDetails.address?.line2 = address.apartment // 可选,如公寓号 billingDetails.address?.city = address.city billingDetails.address?.state = address.state billingDetails.address?.postalCode = address.postalCode billingDetails.address?.country = address.countryCode // 需为ISO 3166-1 alpha-2格式,比如"CN"或"US"配置PaymentSheet并关联地址
初始化PaymentSheet.Configuration时,将整理好的billingDetails赋值给配置项:var configuration = PaymentSheet.Configuration() configuration.customer = .init(id: customerId, ephemeralKeySecret: ephemeralKey) // 关联地址到PaymentSheet配置 configuration.customer.billingDetails = billingDetails // 保留原有其他配置 configuration.merchantDisplayName = "你的商家名称"启动PaymentSheet时传入修改后的配置
确保启动PaymentSheet时使用上述配置:let paymentSheet = PaymentSheet(paymentIntentClientSecret: paymentIntentSecret, configuration: configuration) paymentSheet.present(from: self)
后端配合修改(关键)
仅前端传递地址无法在Stripe后台显示,后端创建PaymentIntent时需指定shipping或billing字段:
- 如果是发货地址,创建PaymentIntent时设置
shipping参数:# 示例Ruby后端代码,其他语言逻辑一致 Stripe::PaymentIntent.create({ amount: 1000, currency: 'cny', customer: customer_id, shipping: { address: { line1: params[:shipping_address][:line1], line2: params[:shipping_address][:line2], city: params[:shipping_address][:city], state: params[:shipping_address][:state], postal_code: params[:shipping_address][:postal_code], country: params[:shipping_address][:country] }, name: params[:shipping_name], phone: params[:shipping_phone] }, automatic_payment_methods: { enabled: true } }) - 如果是账单地址,设置
billing_details参数即可。
验证方式
完成修改后发起一笔测试支付,在Stripe后台的支付记录中点击对应PaymentIntent,即可在详情页查看关联的地址信息。
内容的提问来源于stack exchange,提问作者Bosco Tsin
相关产品推荐
相关产品推荐

