- Вопрос или проблема
- Я использую Stripe с React на своем сайте, но каждый раз, когда я завершаю оформление заказа, появляется следующее:
- Ваша кредитная карта была отклонена. В качестве альтернативы попробуйте оплатить дебетовой картой.
- Не имеет значения, что я делаю, я уже поменял карту, поменял email, ввел дебетовую карту, и ничего…
- Я получаю этот код ошибки:
- Ответ или решение
- Возможные причины отклонения платежей:
- Рассмотрение кода
- Дополнительные рекомендации
- Заключение
Вопрос или проблема
Я использую Stripe с React на своем сайте, но каждый раз, когда я завершаю оформление заказа, появляется следующее:
Ваша кредитная карта была отклонена. В качестве альтернативы попробуйте оплатить дебетовой картой.
Не имеет значения, что я делаю, я уже поменял карту, поменял email, ввел дебетовую карту, и ничего…
Примечание: в тестовом режиме все работает, но в рабочем режиме это именно так:\
Я получаю этот код ошибки:
402 POST/v1/payment_pages/cs_live/confirm
"error":
"charge":
"ch_",
"code":
"card_declined",
"decline_code":
"generic_decline",
"doc_url":
"https://stripe.com/docs/error-codes/card-declined",
"extra_fields": {
"recommended_payment_method":
"debit_card",
},
"message":
"Ваша карта была отклонена.",
"payment_method": {… 9 items},
"request_log_url":
"https://dashboard.stripe.com/logs/req_",
"type":
"card_error",
},
}
```
`const express = require('express');
const cors = require('cors');
const bodyParser = require('body-parser');
const stripe = require('stripe')('sk_live');
const app = express();
const endpointSecret="whsec_";
const YOUR_DOMAIN = 'https://quimplo.online';
app.use(cors());
app.use(bodyParser.raw({
type: 'application/json'
}));
app.use(express.json()); // Создать сессию оформления заказа
app.post('/create-checkout-session', async (req, res) => {
try {
const session = await stripe.checkout.sessions.create({
line_items: [
{
price: 'price_', quantity: 1, },
],
mode: 'payment',
success_url: ${YOUR_DOMAIN}/success?session_id={CHECKOUT_SESSION_ID},
cancel_url: ${YOUR_DOMAIN}?canceled=true, });
res.json({
url: session.url
});
}
catch (error) {
console.error('Ошибка при создании сессии оформления заказа:', error);
res.status(500).send('Внутренняя ошибка сервера');
}
});
// Функция обработки async function fulfillCheckout(sessionId) { console.log('Обработка сессии оформления заказа ' + sessionId);
const checkoutSession = await stripe.checkout.sessions.retrieve(sessionId, {
expand: ['line_items'],
});
if (checkoutSession.payment_status === 'paid') {
console.log(`Сессия оформления заказа ${sessionId} завершена.`);
} else {
console.log(`Сессия оформления заказа ${sessionId} не завершена, потому что платеж не завершен.`);
}
}
app.post('/webhook', async (request, response) => {
const payload = request.body;
const sig = request.headers['stripe-signature'];
let event;
try {
event = stripe.webhooks.constructEvent(payload, sig, endpointSecret);
} catch (err) {
return response.status(400).send(`Ошибка вебхука: ${err.message}`);
}
// Обработка событий платежа
if (event.type === 'checkout.session.completed' || event.type === 'checkout.session.async_payment_succeeded') {
await fulfillCheckout(event.data.object.id);
}
switch (event.type) {
case 'payment_intent.succeeded':
const paymentIntent = event.data.object;
console.log('PaymentIntent был успешным!');
break;
case 'payment_intent.payment_failed':
const paymentFailedIntent = event.data.object;
console.log('PaymentIntent не удался:', paymentFailedIntent.last_payment_error.message);
break;
default:
console.log(`Необработанный тип события ${event.type}`);
}
response.status(200).end();
});
app.listen(4242, () => console.log('Запуск на порту 4242'));`
```
Ответ или решение
Ваш вопрос касается проблемы отклонения платежей при использовании Stripe в режиме реального времени с React. Ошибка "Your credit card has been declined" сообщает о том, что ваша кредитная карта была отклонена, что может возникать по различным причинам. Давайте рассмотрим возможные причины и решение этой проблемы по шагам.
Возможные причины отклонения платежей:
-
Проблемы с картой:
- Убедитесь, что карта активна и имеет достаточный баланс.
- Некоторые карты могут иметь ограничения на международные транзакции.
-
Ошибки ввода:
- Проверьте правильность введенных данных (номер карты, дата истечения, CVV).
-
Ограничения банка:
- Некоторые банки могут отклонять транзакции по подозрительным причинам. Рекомендуется обратиться в банк за разъяснениями.
-
Проблемы с конфигурацией Stripe:
- Убедитесь, что вы использовали правильные ключи API, особенно в режиме реального времени. Ваша строка
const stripe = require('stripe')('sk_live');
должна содержать ваш действительный секретный ключ Stripe для рабочего окружения.
- Убедитесь, что вы использовали правильные ключи API, особенно в режиме реального времени. Ваша строка
Рассмотрение кода
Ваш код на сервере в целом выглядит корректно, но есть несколько моментов, которые стоит уточнить:
-
Webhook конфигурация:
Убедитесь, что ваш вебхук настроен правильно в панели управления Stripe и вашendpointSecret
правильный. -
Обработка ошибок:
Возможно, вам стоит добавить более подробную обработку ошибок, чтобы отслеживать, почему транзакции могут быть отклонены.
Дополнительные рекомендации
-
Тестовые карты:
При тестировании в вашем приложении в тестовом режиме Stripe также предоставляет специальные тестовые номера карт, которые вы можете попробовать, чтобы убедиться, что интеграция работает правильно.Вот пример тестовой карты:
- Номер карты:
4242 4242 4242 4242
- Срок действия: любой будущий месяц/год
- CVV: любые 3 цифры
- Номер карты:
-
Логи Stripe:
Проверьте логи вашей учетной записи в Stripe для получения дополнительной информации об ошибках. Вы можете посмотреть логи запросов по URL, который вы указали в выводе ошибки:https://dashboard.stripe.com/logs/req_
. -
Документация:
Обратите внимание на документацию Stripe по ошибкам, чтобы понять дополнительные коды отклонений и рекомендации по их исправлению.
Заключение
Если после всевозможных проверок проблема все еще сохраняется, рекомендуется обратиться в службу поддержки Stripe с деталями вашей проблемы, включая код ошибки и логи запроса, чтобы получить профессиональную помощь. Надеюсь, что эти рекомендации помогут вам решить вашу проблему с платежами.