Ошибка "нет такого токена" при отправке запроса на оплату в Stripe
я настраиваю платежи с помощью Stripe API, чтобы позволить пользователю войти в свою учетную запись Stripe на iPad и принимать платежи от кого угодно. Для этого я использую Stripe Connect для входа в систему и сохранения идентификатора учетной записи, затем я использую STPPaymentCardTextField
чтобы получить данные кредитной карты, затем с помощью Stripe iOS SDK я отправляю карту (с информацией о тестовой карте-4242...) и получить обратно токен через createTokenWithCard
. Это успешно возвращает маркер. На данный момент мне нужно отправить этот маркер вместе с идентификатором учетной записи назначения (предоставленной приложению после входа пользователя в систему) и другой информацией (валюта, сумма и т. д.) На мой собственный сервер для отправки платежа в Stripe. Я проверил, что информация передается и пересылается на Stripe, но Stripe возвращает ошибку:
{ type: 'invalid_request_error',
app[web.1]: message: 'No such token: tok_13vxes2eZkKYli2C9bHY1YfX',
app[web.1]: param: 'source',
app[web.1]: statusCode: 400,
app[web.1]: requestId: 'req_7AIT8cEasnzEaq' },
app[web.1]: requestId: 'req_7AIT8cEasnzEaq',
app[web.1]: statusCode: 400 }
если мы отправим информацию о кредитной карте напрямую, избегая токена в целом, платеж будет успешным. Что-то не так с этим маркером, и мы не уверены, почему он терпит неудачу. Что может быть здесь что-то не так?
[[STPAPIClient sharedClient] createTokenWithCard:card completion:^(STPToken *token, NSError *error) {
//submit tokenId and other info to 'charge' endpoint below
}
NodeJS:
app.post('/charge', (req, res, next) => {
stripe.charges.create({
amount: req.body.amount,
currency: req.body.currency,
source: req.body.token,
description: req.body.description,
destination: req.body.destination
}, (err, charge) => {
if (err) return next(err)
res.json(charge)
})
})
2 ответов
принятый ответ не работа для меня. Я использую правильный ключ для клиента и сервера, но проблема все еще существует. Я также отправляю источник с iOS на сервер, основываясь на примере Stripe RocketRides, он отправляет идентификатор источника кредитной карты, который является "card_xxx", и это не сработает. Вам нужно будет добавить атрибут "клиент" для вызова на стороне вашего сервера.
например: (python)
stripe.Charge.create(amount=1000, currency='usd', source="card_xxxxx", **customer**='cus_xxxx', application_fee=600,destination={'account': 'acct_xxxx'})
вы уверены, что используете одни и те же ключи API на сервере и клиенте?
Ваш сервер должен использовать ваш (live/test) секретный ключ, а ваше приложение iOS должно использовать ваш (live/ test) публикуемый ключ, как указано здесь на Полоса Испытаний.