如何使用Firebase云功能创建Stripe客户

时间:2018-06-28 19:51:48

标签: ios firebase stripe-payments google-cloud-functions

大家好,我是Stripe的新手,所以我有一个关于如何通过Firebase云功能创建Stripe客户的问题。我已经阅读了Stripe标准集成和一些教程。 This example teaches you how to set up the firebase cloud function.问题在于该示例在处理费用或输入金额时就创建了客户。 Stripe文档说,可以创建没有付款信息的客户用户。所以我的想法是,每当我为Firebase创建用户时,我都会触发云功能来同时创建条带化客户。谁能教我如何正确执行此操作,并且还可以向我展示如何更新绑定到该客户的付款信息。非常感谢。

1 个答案:

答案 0 :(得分:0)

这实际上是一个分为两部分的问题,但是我认为这比您想象的要容易得多。这是有关如何解决打字稿中问题的一些指导。

创建客户

要创建客户,请通过create-auth-trigger执行以下操作:

export const syncUserToStripe = functions.auth.user().onCreate(async (data, context) => 
  const stripe = new Stripe(<stripe-token>); // Initialize the stripe SDK
  const stripeCustomer = await stripe.customers.create({
        email: data.email
  }); // Now you have the stripe customer. Maybe you would like to save the stripeCustomer Id to database/firestore
  console.log(`Done syncing firestore user with id: ${data.uid} to Stripe. The stripe id is ${stripeCustomer.id}`);
);

更新付款信息

更新付款是两步走的火箭。首先,您需要从客户端收集数据条令牌。这很容易通过条纹上的checkout.js之类的东西来获得(让我们安全地收集信用卡)。实际的实现很容易,但是根据您的前端框架而有所不同。重要的是,一旦有了令牌,就可以在后端更新付款信息,即云https函数(当您拥有条带令牌时调用此函数)。代码的重要部分如下所示:

export async function updateStripePayment(req: Request, res: Response): Promise<any> {
 const stripe = new Stripe(<stripe-token>); // Initialize the stripe SDK
 // Extract the stripe token from the header
 const stripeToken = req.header('StripeToken');
 // You also need to get the stripe customer id. Here I will get it from the header, but maybe it makes more sense for you to read it from firestore/realtime db.
 const stripeCustomerId = req.header('stripeCustomerId');
 // Now you can create a new payment source
 const newSource = await stripeAPI.customers.createSource(stripeCustomerId, {source: stripeToken});
 // And you can now optionally set it as default
 await stripeAPI.customers.update(stripeCustomerId, {default_source: newSource.id});
 res.status(200).json(`Sucessfully updated stripe payment info`);
}

一般注意事项

  • 考虑要在后端存储哪些信息
  • 更新付款信息时,请考虑结合使用express和中间件来认证/提取相关信息(以便您可以重复使用代码)
  • 在代码上使用try catch,以捕获意外错误
  • 请记住使用条纹测试键进行所有操作。您可以在后端使用firebase函数配置环境来解决此问题。