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

При использовании Stripe в режиме реального времени я получаю эту ошибку PHP:

Нет такого токена tok_fgfhn .. похожий объект существует в тестовом режиме, но для выполнения этого запроса использовался ключ в режиме реального времени.

В тестовом режиме Stripe все работает хорошо, и я переключился на живой API-ключ.

Я создаю нового клиента, как это:

$token  = $_POST['stripeToken'];
$email  = $_POST['email'];

$customer = \Stripe\Customer::create(array(
'email' => $email,
'card'  => $token
));

//charge for user ads
$charge = \Stripe\Charge::create(array(
'customer' => $customer->id,
'amount'   => $amount,
'currency' => 'eur'
));

Я ждал много часов, но все еще получаю эту ошибку. Как я могу это исправить?

17

Решение

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

7

Другие решения

Посмотрите на JavaScript, который использует тестовый открытый ключ API для получения токена. Измените его на ваш открытый ключ API.

Должно быть как то так

Stripe.setPublishableKey('pk_test_axEdfdasdfasfsadfsad');
2

У вас будет два разных ключа в вашем аккаунте. Пожалуйста, убедитесь, что вы заменили оба тестовых ключа на живые ключи:

ключ активной сектры: sk_live_00000000000000000000000

живой ключ публикации: pk_live_00000000000000000000000

1- Секретный ключ заменит во всех ваших php-скриптах где вы заряжаете

  \Stripe\Stripe::setApiKey("sk_live_00000000000000000000");

2- Ключ публикации заменит в вашем файле .JS, с помощью которого вы проверяете форму платежа, этот же файл также создает токен после успешной проверки. Это может вызвать stripe.js или другое имя, которое вам нужно, чтобы найти этот файл, у него будет ключ публикации, который вам нужно заменить с test на live:

 Stripe.setPublishableKey('pk_live_0000000000000'); //this would be publish key

function stripeResponseHandler(status, response) { //token function
if (response.error) {
// re-enable the submit button
$('.submit-button').removeAttr("disabled");
// show hidden div
document.getElementById('a_x200').style.display = 'block';
// show the errors on the form
$(".payment-errors").html(response.error.message);
} else {
var form$ = $("#payment-form");
// token contains id, last4, and card type
var token = response['id'];
// insert the token into the form so it gets submitted to the server
form$.append("<input type='hidden' name='stripeToken' value='" + token + "' />");
// and submit
form$.get(0).submit();
}
}
2

Потратив на это несколько часов. Я позволю это здесь, если это может помочь кому-то еще:

У меня есть приложение, развернутое в Heroku с секретным и публикуемым ключом, хранящимся в переменной окружения на heroku.

я использую <%= ENV.fetch('STRIPE_PU_KEY') %> в .coffee.erb

Помните, что если вы измените и перезапустите свой сервер, этого будет недостаточно. Вам нужно будет перегенерировать ваш application.js, иначе он все равно примет значение catched.

Надеюсь, поможет

0