Полоса обработана, что теперь?

Я пытаюсь создать бессерверное приложение NuxtJS, используя firebase для аутентификации, netlify для развертывания (и функций) и полосу для оплаты.

Весь процесс оплаты и бессерверные функции на netlify для меня в новинку, так что это может быть непонятный вопрос.

Я следил за несколькими документами и руководствами и выполнил приложение с аутентификацией firebase, развертыванием netlify и бессерверными функциями, что позволило мне обрабатывать полосовой платеж - теперь я просто не могу понять, что делать дальше. Моя полосаsuccess_url приводит к /pages/succes/index.js маршрут, содержащий сообщение об успешном завершении -> хотя здесь мне понадобится ответ с данными от Stripe, чтобы я мог представить купленный элемент, а также прикрепить идентификатор продукта как запись "купленный продукт" к объекту пользователя в firebase (продукты по сути будет обновлением профиля пользователя).

Нажмите функцию "купить товар"

async buyProduct(sku, qty) {
  const data = {
    sku: sku,
    quantity: qty,
  };

  const response = await fetch('/.netlify/functions/create-checkout', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    body: JSON.stringify(data),
  }).then((res) => res.json());

  console.log(response);

  const stripe = await loadStripe(response.publishableKey);
  const { error } = await stripe.redirectToCheckout({
    sessionId: response.sessionId,
  });

  if (error) {
    console.error(error);
  }
}

Create-checkout функция Netlify

const stripe = require('stripe')(process.env.STRIPE_SECRET_KEY);
const inventory = require('./data/products.json');

exports.handler = async (event) => {
  const { sku, quantity } = JSON.parse(event.body);
  const product = inventory.find((p) => p.sku === sku);
  const validatedQuantity = quantity > 0 && quantity < 11 ? quantity : 1;

  const session = await stripe.checkout.sessions.create({
    payment_method_types: ['card'],
    billing_address_collection: 'auto',
    shipping_address_collection: {
      allowed_countries: ['US', 'CA'],
    },
    success_url: `${process.env.URL}/success`,
    cancel_url: process.env.URL,
    line_items: [
      {
        name: product.name,
        description: product.description,
        images: [product.image],
        amount: product.amount,
        currency: product.currency,
        quantity: validatedQuantity,
      },
    ],
  });

  return {
    statusCode: 200,
    body: JSON.stringify({
      sessionId: session.id,
      publishableKey: process.env.STRIPE_PUBLISHABLE_KEY,
    }),
  };
};

Пожалуйста, дайте мне знать, если вам нужна дополнительная информация или что-то не имеет смысла!

tldr; Я обработал платеж Stripe в бессерверном приложении с помощью функции Netlify и хотел бы, чтобы на странице успеха имелся доступ к купленному элементу и информации о пользователе.

1 ответ

Решение

Когда вы создаете сеанс оформления заказа и определяете свой success_url, вы можете добавить session_id={CHECKOUT_SESSION_ID}в качестве шаблона, в котором Stripe автоматически заполнит идентификатор сеанса. См. https://stripe.com/docs/payments/checkout/accept-a-payment.

В вашем случае вы бы сделали:

success_url: `${process.env.URL}/success?session_id={CHECKOUT_SESION_ID}`,

Затем, когда ваш пользователь будет перенаправлен на ваш успешный URL-адрес, вы можете получить сеанс с идентификатором сеанса и выполнить любую покупку.

Другие вопросы по тегам