Не удается получить метаданные об успешном намерении оплаты с помощью полосы - PullRequest
2 голосов
/ 18 июня 2020

Я новичок в использовании полосовых платежей, поэтому я решил упростить и внедрил redirectToCheckout и веб-перехватчики полосы из документации полосы, я выполнил шаги, сначала я создал продукт из панели инструментов полосы, затем я добавил несколько ключей метаданных и value, наконец, я написал свой код на Angular, и все работало отлично, пока я не понял, что я не получаю ожидаемые метаданные, на самом деле они были пустыми.

Я использую облачные функции Firebase как бэкэнд и Angular, это мой код:

Angular

stripe.redirectToCheckout({
  lineItems: [{ price: itemSku, quantity: 1}],
  mode: 'payment',
  customerEmail: this.userEmail,
  successUrl: 'http://localhost:4200/purchase/success',
  cancelUrl: 'http://localhost:4200/purchase/failed'
})

Облачная функция Firebase

app.post('/webhook', bodyParser.raw({type: 'application/json'}), (request, response) => {
    const sig = request.headers['stripe-signature'];
    let event;
    try {
        event = stripe.webhooks.constructEvent(request.rawBody, sig, endpointSecret);
    } catch (err) {
        response.status(404).end()
    }

    const intent = event.data.object
    switch (event.type) {
        case constants.INTENT_SUCCESS:
            // it prints the object with empty metadata
            console.log('Success object:', intent);  <- metadata:{}
            break;
        case constants.INTENT_FAILED:
            console.log('Failed:', intent.id);
            break;
    }
    response.json({received: true});
    response.sendStatus(200)
});

1 Ответ

2 голосов
/ 18 июня 2020

Каждый объект в Stripe будет иметь разные метаданные. Похоже, что метаданные были добавлены к объекту Product, который не будет скопирован в PaymentIntent.

Я бы прослушал тип события уведомления checkout.session.completed webhook, затем получил сеанс проверки и расширение это связано с line_items, price и product.

  const session = await stripe.checkout.sessions.retrieve(
    "cs_test_xxx", {
      expand: ["line_items.data.price.product"]
    }
  )
  console.log(res.line_items.data[0].price.product);
...