0

Ошибка 'Нет такого токена' при отправке запроса на оплату в Stripe

10

Я настраиваю прием платежей с использованием API Stripe, чтобы пользователь мог войти в свою учетную запись Stripe на iPad и принимать платежи от любого. Для этого я использую Stripe Connect для входа и сохранения идентификатора учетной записи, затем использую STPPaymentCardTextField для получения данных кредитной карты. С помощью iOS SDK Stripe я создаю токен, отправляя данные карты (с тестовой информацией карты - 4242...) через метод createTokenWithCard. Этот процесс проходит успешно, и токен возвращается.

На этом этапе мне нужно отправить токен вместе с идентификатором целевой учетной записи (полученным после входа пользователя) и другой информацией (валюта, сумма и т.д.) на свой собственный сервер для обработки платежа в Stripe. Я убедился, что информация отправляется и передается в Stripe, но Stripe возвращает ошибку:

{ type: 'invalid_request_error',
  message: 'No such token: tok_13vxes2eZkKYli2C9bHY1YfX',
  param: 'source',
  statusCode: 400,
  requestId: 'req_7AIT8cEasnzEaq' },
requestId: 'req_7AIT8cEasnzEaq',
statusCode: 400 }

Если мы отправляем информацию кредитной карты напрямую, избегая токена полностью, платеж проходит успешно. Кажется, что что-то не так с этим токеном, и мы не можем понять, почему он не работает. Что может идти не так в этом случае?

Вот код, который я использую для создания токена:

[[STPAPIClient sharedClient] createTokenWithCard:card completion:^(STPToken *token, NSError *error) {
    // Отправить tokenId и другую информацию на конечную точку 'charge' ниже
}

На стороне 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)
  })
})

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

4 ответ(ов)

0

Я сталкивался с аналогичной проблемой в своей тестовой среде. Ошибка, которую я допускал, заключалась в том, что я добавлял токен, полученный от Stripe, следующим образом: source: 'tok_18nnwSJ6tVEvTdcVs3dNIhGs'. Но для тестовой среды нужно использовать source: 'tok_visa'.

Вот список тестовых источников, предоставленный Stripe: перейдите по ссылке.

Это позволило мне создать клиента. Надеюсь, что это поможет и другим!

0

Принимаемый ответ не работает для меня. Я использую правильные ключи для клиента и сервера, но проблема все еще существует. Я отправляю источник с iOS на сервер, и, основываясь на примере Stripe RocketRides, отправляю ID источника кредитной карты, который выглядит как "card_xxx", и это не сработает. Вам нужно будет добавить атрибут "customer" для вызова на стороне сервера.

Например, на Python это будет выглядеть так:

stripe.Charge.create(
    amount=1000,
    currency='usd',
    source="card_xxxxx",
    customer='cus_xxxx',
    application_fee=600,
    destination={'account': 'acct_xxxx'}
)

Проверьте, добавлен ли атрибут "customer" при создании запроса на сервере, так как это необходимо для корректной обработки платежа.

0

Ни один из ответов здесь не сработал для меня.

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

$charge = \Stripe\Charge::create([
    'amount' => 1000,
    'currency' => 'gbp',
    'card' => 'card_xxx',
    'description' => 'Payment for Sam',
]);

Но получал ошибку "no such token".

Чтобы это заработало, мне также пришлось указать идентификатор клиента вот так...

$charge = \Stripe\Charge::create([
    'amount' => 1000,
    'currency' => 'gbp',
    'customer' => 'cus_xxx',
    'card' => 'card_xxx',
    'description' => 'Payment for Sam',
]);

Таким образом, убедитесь, что вы предоставляете идентификатор клиента при создании платежа, если вы хотите использовать уже существующую карту.

0

Чтобы решить вашу проблему, следуйте этим шагам:

  1. Сначала проверьте, совпадают ли API-ключи на фронтенде и бэкенде. Они должны быть идентичными, иначе возможны ошибки при взаимодействии с API.

  2. Если вы используете тестовые API-ключи, убедитесь, что передаете source: 'tok_visa' вместо вашего токена карты, например, source: 'tok_kb3kb23k2bk32bk3b2'. Это важно для корректного прохождения тестов.

Следуя этим рекомендациям, вы сможете избежать распространенных ошибок при работе с API.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь