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
相关产品推荐
相关产品推荐

