#stripe-payments
#stripe-платежи
Вопрос:
Я использую Stripe checkout. Я создаю сеанс и обрабатываю платеж. В случае успеха у меня есть идентификатор сеанса. Я хочу получить объект сеанса для подключенной учетной записи. (Это отлично работает для оплаты моей стандартной учетной записи, но не работает при получении сеанса для подключенной учетной записи).
Для справки, вот PHP-код для создания сеанса до взимания платы:
StripeStripe::setApiKey($Skey);
$session = StripeCheckoutSession::create([
'customer_email' => $Email,
'payment_method_types' => ['card'],
'line_items' => $itms,
'payment_intent_data' => [
'description' => $Web_Short_Name . '*' .$Transaction_ID,
'application_fee_amount' => $Fee,
'metadata' => ['Transaction_ID' => $Transaction_ID],
],
'success_url' => 'https://[myweb]/success.php?session_id={CHECKOUT_SESSION_ID}',
'cancel_url' => 'https://[myweb]/cart.php',
],
['stripe_account' => $Stripe_Account] );
}
ПЕРВАЯ ПОПЫТКА:
$s = $_GET['session_id'];
$stripe = new StripeStripeClient(
['api_key' => '[my secret key'],
['stripe_account' => '[connected account]']
);
$s2=$stripe->checkout->sessions->retrieve($s,[]);
ВТОРАЯ ПОПЫТКА:
$s = $_GET['session_id'];
StripeStripe::setApiKey('[my secret key]');
$stripe = new StripeStripeClient(
'[my secret key]'
);
$s2=$stripe->checkout->sessions->retrieve($s,[]);
Заранее спасибо!
Боб
(Я годами использовал StackOverflow в качестве ресурса…но это мой первый пост).
Комментарии:
1. Стандартная и подключенная учетная запись — это продукты, которые у вас есть в Stripe? Не могли бы вы прислать больше информации об ошибке?
Ответ №1:
Для подключенных учетных записей вы можете заполнить второй параметр функции извлечения, точно так же, как вы делали при создании сеанса:
StripeStripe::setApiKey('<your API key>');
$session = StripeCheckoutSession::retrieve('<the session id>', [
'stripe_account' => '<the id of the connected Stripe account>'
]);
Ответ №2:
Получил то, что мне нужно для работы. По сути, я искал объект PaymentIntent, когда получил вызов на свой webhook от Stripe.
Фрагмент из моего веб-справочника оформления заказа:
<?
require __DIR__ . '/vendor/autoload.php';
$payload = @file_get_contents('php://input');
$event = null;
try {
$event = StripeEvent::constructFrom(
json_decode($payload, true)
);
} catch(UnexpectedValueException $e) {
// Invalid payload
http_response_code(400);
exit();
}
// Handle the event
StripeStripe::setApiKey({YOUR_SECRET_KEY});
$session_id = $event->data->object->id;
switch ($event->type) {
case 'checkout.session.completed':
$checkout = $event->data->object; // contains a StripePaymentIntent
// Then define and call a method to handle the successful payment intent.
//handleCheckoutSucceeded($checkout);
handleCheckout($db,$Transaction_ID,$session_id,'SUCCEEDED');
?>
Ответ №3:
StripeStripe::setApiKey('<your API key>');
$session = StripeCheckoutSession::retrieve('<the session id>',[], [
'stripe_account' => '<the id of the connected Stripe account>'
]);
Второй массив параметров должен быть пустым, если нет других передаваемых параметров, а stripe_account должен быть передан в третьем массиве, который предназначен для массива опций.