Почему я получаю token_already_used из полосы, хотя я использую его один раз - PullRequest
0 голосов
/ 05 октября 2019

В моем приложении я получаю токен полосы из внешнего интерфейса и передаю его на внутренний сервер для создания клиента.

Я получаю ответ от Stripe заявляя, что вы не можете использовать токен Stripe более одного раза.

Хотя я использую токен только один раз при создании клиента.

Это мой полный бэкэнд-код:

router.post('/', (req, res) => {
    var code = rng(6)

    var validationError = {};
    if (!req.body.name) validationError['name'] = 'name is required';
    if (!req.body.email) validationError['email'] = 'email is required';
    if (!req.body.password) validationError['password'] = 'password is required';

    if (Object.keys(validationError).length > 0) {
        res.status(417).send({
            message: 'Validation Error',
            error: validationError
        })
    }
    else {
        stripe.customers.create({
            email: req.body.email,
            description: req.body.name,
            source: req.body.token // obtained with Stripe.js
        }, function (err, customer) {
            if (customer) {
                Model.getOneData({email: req.body.email}, (err, data) => {
                    if (!data) {
                        Model.createData({
                            name: req.body.name,
                            email: req.body.email,
                            password: req.body.password,
                            city: req.body.city,
                            phone: req.body.phone,
                            age: req.body.age,
                            condition: {
                                one: req.body.condition1,
                                two: req.body.condition2,
                                three: req.body.condition3
                            },
                            status: req.body.status ? req.body.status : "trial",
                            customerid: customer.id,
                            confirmationCode: code,
                            last4digit: customer.sources.data[0].last4
                        }, (err, newUser) => {
                            if (err) {
                                res.status(400).send(err)
                            }
                            else {
                                // sendEmail(req.body.email, "Verify your email", "Your verification code is " + code + "\nOr click on this url to activate your account: http://localhost:3000/users/verify/" + data._id + "/" + code);
                                const html = TemplateMaker({
                                    headline: 'Merci de vous être enregistré',
                                    subHeadline: 'Vous pouvez activer votre compte en cliquant sur le button ci-dessous :',
                                    buttonText: 'ACTIVER MON COMPTE',
                                    buttonUrl: constants.Api_endpoint + "verify-email/" + newUser._id + "/" + code,
                                    para1: 'Votre code de vérification est :' + code,
                                    para2: constants.Api_endpoint + "verify-email/" + newUser._id + "/" + code,
                                }, null);
                                Mailer.sendEmail(req.body.email, "Merci de vous être enregistré", html);
                                res.send(newUser)

                            }
                        })
                    }
                    else {
                        res.status(409).send({
                            error: "User already exists"
                        })
                    }
                })

            }
            else {
                console.log(err)
                res.status(402).send(err)
            }

        });
    }
})

Кроме того, я проверил мои настройки webhook. Кажется, что webhook трижды ударил по следующим событиям:

customer.created

payment_method.attached

customer.source.created

...