Это на самом деле вопрос из двух частей, но я думаю, что это намного проще, чем вы думаете. Вот несколько советов о том, как решить проблему в машинописи.
Создать клиента
Чтобы создать клиента, через триггер create-auth выполните следующее:
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`);
}
Общие положения
- Подумайте, какую информацию вы хотели бы хранить в своем бэкэнде
- При обновлении информации об оплате рассмотрите возможность использования экспресса в сочетании с промежуточным программным обеспечением для аутентификации / извлечения соответствующей информации (чтобы вы могли повторно использовать код)
- Используйте
try catch
в вашем коде, чтобы ловить неожиданные ошибки
- Не забудьте сделать все с помощью полосовых тестовых клавиш. Вы можете использовать среду конфигурации функций firebase, чтобы помочь с этим на сервере.