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

如何在Firebase云函数中创建Stripe PaymentIntent端点并解决iOS端报错

问题排查与修复方案

初始崩溃问题原因

  • 你定义的BackendUrl是Firebase项目控制台的页面地址,并非云函数的API调用地址,拼接create-payment-intent后生成的URL无效,强制解包URL(string:)返回的nil值就会触发崩溃
  • 你现有的云函数只有Firestore触发、用户身份认证触发的逻辑,没有提供/create-payment-intent对应的HTTP触发接口,iOS端调用的目标端点根本不存在

具体修复步骤

步骤1:新增PaymentIntent HTTP云函数

在你的index.js中添加如下HTTP触发的云函数,用来生成PaymentIntent并返回客户端所需参数:

exports.createPaymentIntent = functions.https.onRequest(async (req, res) => {
  // 配置跨域允许iOS端调用
  res.set('Access-Control-Allow-Origin', '*');
  res.set('Access-Control-Allow-Methods', 'POST');
  res.set('Access-Control-Allow-Headers', 'Content-Type');
  
  if (req.method === 'OPTIONS') {
    return res.status(204).send('');
  }
  
  try {
    const { amount, currency } = req.body;
    // 生成PaymentIntent,金额单位为最小货币单位(如美元对应美分)
    const paymentIntent = await stripe.paymentIntents.create({
      amount: amount,
      currency: currency || 'usd',
      automatic_payment_methods: { enabled: true },
    });
    
    res.json({
      clientSecret: paymentIntent.client_secret,
      publishableKey: '你的Stripe公钥(pk_test_开头的字符串)'
    });
  } catch (error) {
    res.status(500).json({ error: error.message });
  }
});

代码编写完成后重新部署云函数,部署后可在Firebase控制台云函数页面拿到该函数的调用地址,格式为https://<部署区域>-<你的项目ID>.cloudfunctions.net/createPaymentIntent

步骤2:修改iOS端配置

将原有的BackendUrl替换为上述拿到的云函数根地址:

let BackendUrl = "https://<部署区域>-<你的项目ID>.cloudfunctions.net/"

同时调整startCheckout方法的请求参数,传入合法金额:

let json: [String: Any] = [
    "currency": "usd",
    "amount": 1000 // 对应10美元
]

以上修改完成后初始的强制解包崩溃就会消失。

步骤3:修复新增的401报错

你补充的MyAPIClient逻辑存在错误:Stripe的ephemeral_keys接口必须在服务端调用,需要携带你的Stripe密钥,直接从iOS端请求该接口没有认证信息,所以会返回401错误。
你需要新增对应云函数提供临时密钥接口,修改MyAPIClient的baseURL为你自己的云函数地址,调用自有后端接口获取ephemeral key即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 02:45:03