Ошибка "нет такого токена" при отправке запроса на оплату в 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) публикуемый ключ, как указано здесь на Полоса Испытаний.