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

Swift调用HTTPS可调用函数时如何向TypeScript云函数传入参数?

TypeScript Stripe 删除客户云函数接收端上传参数的实现方法

其实可调用云函数的传参逻辑和你在Swift里写的函数传参是完全对齐的,没有额外的特殊机制:Swift端调用云函数时把需要的参数放到请求的payload里,云函数回调的data参数就会自动接收到这些键值对,直接取值用就可以。

调整后的云函数实现

你之前写的云函数有两处需要修正:

  • 代码里使用了await关键字,必须把整个onCall的回调标记为async,否则会触发语法报错
  • 不需要硬编码Stripe客户ID,直接从入参的data对象中提取提前约定好键名的参数即可
exports.deleteStripeCustomer = functions.https.onCall(async (data, context) => { 
  // 从请求入参中取出约定的Stripe客户ID,比如约定键名为customerId
  const stripeCustomerId = data.customerId;
  // 增加基础参数校验,避免空值请求直接调用Stripe接口报错
  if (!stripeCustomerId) {
    throw new functions.https.HttpsError(
      'invalid-argument',
      '缺少必须的Stripe客户ID参数'
    );
  }
  const deleted = await stripe.customers.del(stripeCustomerId);
  // 把删除结果返回给Swift端
  return { success: true, deletedInfo: deleted };
});

这里的data就等价于你Swift里sayHello函数的形参容器,两边只要约定好参数键名,就可以正常传值。

Swift端调用时传参的实现

对应你熟悉的Swift传参逻辑,不需要手动拼接请求格式,直接使用Firebase可调用云函数的SDK,在调用时把参数以字典形式传入即可,和你给sayHello传入usersName的逻辑完全一致:

// 假设你已经从本地拿到了当前用户的Stripe客户ID
let currentCustomerId = "cus_xxxxxxxx"
// 获取对应云函数的实例
let deleteFunc = Functions.functions().httpsCallable("deleteStripeCustomer")
// 调用时传入参数,键名要和云函数端约定的customerId完全匹配
deleteFunc.call(["customerId": currentCustomerId]) { result, error in
  // 在这里处理接口返回结果或错误
}

实操注意事项

  • 两边的参数键名要完全大小写匹配,否则云函数端会取到undefined值
  • 出于安全考虑,不要完全信任前端传入的客户ID:可以在云函数里通过context.auth.uid拿到调用者的Firebase用户ID,校验该用户ID确实归属当前传入的Stripe客户ID,避免出现越权删除他人客户数据的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 20:57:06