为什么我可以从node.js中的stripe结帐会话中获取客户电子邮件

问题描述 投票:0回答:1

我想在支付 Stripe 后收到客户电子邮件。 我可以在条纹中看到与使用我的帐户付款相关的信息。 但我无法在后端使用 API 获取客户电子邮件。

这是我的后端代码。

const stripe = require('stripe')('sk_test_********');
const express = require('express');
const cors = require('cors');



const app = express();
const YOUR_DOMAIN = 'http://localhost:3000/buy';


app.use(cors())
app.use(express.static("public"));
app.use(express.json());

app.post('/create-checkout-session', async (req, res) => {

    const priceID = 'price_******';
    const session = await stripe.checkout.sessions.create({
        line_items: [
        {
            price: priceID,
            quantity: 1,
        },
        ],
        mode: 'payment',
        success_url: `${YOUR_DOMAIN}?success=true`,
        cancel_url: `${YOUR_DOMAIN}?canceled=true`,
    });
    
    const sessionId = session.id;
    if(sessionId){

        //--------     First try     --------//
        const customers = await stripe.customers.list({});
        customers.data.forEach(customer => {
            console.log(customer.email);
        });
        const email = session.customer_email;

        //--------     Second try     --------//
        stripe.charges.list({ limit: 10 }, (err, charges) => {
            if (err) {
                console.error('Error retrieving charges:', err);
                return;
            }
          
            charges.data.forEach(charge => {
                const customerEmail = charge.receipt_email;
                console.log('Customer Email:', customerEmail);
            });
        });

        res.send({id:session.id});
    }
    
});

app.listen(4242, () => console.log('Running on port 4242'));

但我只能看到空值,而不是客户电子邮件。

node.js api email stripe-payments payment
1个回答
0
投票

您在这里不会有任何客户信息,因为您刚刚创建了结帐会话,并且没有人为其付款。

需要在 2 个单独的步骤中创建和支付 CheckoutSession。 (参见Stripe文档)只有付款后,您才能收到webhook事件checkout.session.completed并能够从中提取客户信息

© www.soinside.com 2019 - 2024. All rights reserved.