Я интегрировал проверку Stripe (последняя версия), и мне нужно отправить дополнительные данные, чтобы я мог согласовать более поздний веб-перехватчик.
Stripe отклоняет метаданные со следующей ошибкой
Fatal error: Uncaught exception 'Stripe\Error\InvalidRequest' with message 'Received unknown parameter: metadata'
Мой частично отредактированный код выглядит так
$object = \Stripe\Checkout\Session::create([
'success_url' => 'www/payment_processor.php?action=success',
'cancel_url' => 'www/payment_processor.php?action=cancel',
'payment_method_types' => ['card'],
'customer_email' => $email,
'metadata' => ['user_id' => $user_id],
'line_items' => [[
'amount' => $amount,
'currency' => $currency,
'name' => 'Purchase',
'description' => $description,
'quantity' => 1,
]]
]);
Я ожидаю, что метаданные будут приняты и возвращены с помощью веб-перехватчика, как описано в Страйп-документация.
В конце я добавил свойство client_reference_id и использовал список значений, разделенных запятыми. Единственная проблема заключается в том, что client_reference_id возвращается только для завершенного сеанса оформления заказа, а не для события успешного списания средств.






Объект Stripe Session не принимает metadata в качестве параметра. Посмотреть здесь для подробностей.
ссылка, которую вы даете в вашем вопросе предназначен для объекта Stripe Заряжать, который делает принимает метаданные.
Первое предложение связанной документации гласит:
Updateable Stripe objects—including Account, Charge, Customer, PaymentIntent, Refund, Subscription, and Transfer —have a metadata parameter.
Вы не создаете ни того, ни другого, вы создаете Сессия
Я понимаю. Спасибо. Как они могут согласовать транзакцию, обработанную Stripe, с клиентом на моем сайте. Кажется, это будет обычно необходимое действие.
Если я правильно понял ваш комментарий, вы можете искать свойство client_reference_id объекта сеанса: «Уникальная строка для ссылки на сеанс проверки. Это может быть идентификатор клиента, идентификатор корзины или аналогичный, и его можно использовать для согласования сеанс с вашими внутренними системами».
Пониженные голоса, поскольку это просто указывает на то, что это не должно работать без предоставления решения, которое пользователь 13688383 сделал в своем ответе ниже.
@MarkusKnappenJohansson С технической точки зрения OP не спрашивал ничего конкретного, поэтому окончательного решения быть не может. Я указал, что сеанс не принимает метаданные, как ожидалось OP, поэтому прояснил проблему.
При создании сеанса метаданные должны быть следующими: payment_intent_data: { metadata: {platform: (data.platform || 'unsure')} }
Другие ответы верны, что metadata не существует в объекте Session. client_reference_id является альтернативой, но она должна быть уникальной и должна быть строкой.
Если вы просто хотите, чтобы метаданные отображались при покупке на панели инструментов Stripe, используйте атрибут payment_intent_data при создании сеанса. Вот как вы прикрепляете метаданные к покупке, совершенной во время сеанса. Соответствующая документация здесь.
Вы не можете прикреплять метаданные к Session, но вы могу прикрепляете метаданные либо к payment_intent, либо к setup_intent, которые будут созданы в сеансе.
Смотрите документация, вы передаете его как payment_intent_data.metadata.
Обратите внимание, что Stripe предупреждает вас не должен помещать конфиденциальные данные в metadata, поэтому, если вы хотите сохранить имя клиента и т. д., вам лучше поместить его в базу данных под уникальным ключом, а затем передать ключ как client_reference_id.
добавление метаданных к назначению платежа показывает метаданные в веб-интерфейсе — добавление метаданных к фактическому платежу не показывает их
Если вы похожи на меня и столкнулись с необходимостью объединить некоторую информацию, например идентификатор клиента, идентификатор заказа и т. д., в полосу. Есть параметр payment_intent_data, который представляет собой ассоциативный массив. В payment_intent_data у вас есть свойство описание, которое вы можете использовать для встраивания дополнительной информации. Размещенное здесь описание будет отображаться в поле описания при экспорте платежа в формате csv на полосу.
$stripe_session = \Stripe\Checkout\Session::create([
'submit_type' => 'pay',
'billing_address_collection' => 'required',
'customer' => $customer,
'client_reference_id' => $customer ,
'payment_intent_data'=>['description' =>'This is my description'],
'payment_method_types' => ['card'],
'line_items' => [[
'name' => $event->title,
'description' => $description/*This description does not go on csv export, it's more or less cosmetic */,
'amount' => ($fee),
'currency' => 'gbp',
'quantity' => 1,
]],
'success_url' => 'example.com',
'cancel_url' => 'example.com',
]);
Ты можешь это сделать
stripe.checkout.sessions.create({
payment_intent_data: {
application_fee_amount: this.booking_fee,
metadata: {
key1 : value1,
key2 : value2,
.
.
key N : value N
}
}
})
это круто, ты можешь, я не могу заставить это работать. Stripe продолжает отклонять претензии с «пустыми метаданными», хотя свойство метаданных явно является json.
По состоянию на октябрь 2020 года объект сеанса имеет метаданные.
Да, но, похоже, он не возвращает его должным образом. Однако прохождение через payment_intent_data.metadata работает. Или, может быть, это только я.
это не только ты. установка metadata для сеанса вернет его только при запуске события checkout.session.completed.
Для тех, кто все еще сталкивается с этой проблемой, простое размещение параметра client_reference_id или metadata не сработало для меня даже с API 2020-08-27.
Добавление payment_intent_data с метаданными заставило меня работать. Вы можете попробовать добавить следующий код:
'payment_intent_data'=>['metadata' => ["order_id" => $orderID, "type" => "myProduct"],
Да, но это работает только для режима payment
Метаданные должны быть вложенный в объекте создания сеанса:
Документы Stripe неправильно указывают метаданные как родитель (https://stripe.com/docs/api/checkout/sessions/create), хотя на самом деле это дочерний элемент:
https://support.stripe.com/questions/using-metadata-with-checkout-sessions
client_reference_id связан только с сеансом и не сохраняется в Stripe в виде метаданных.
У меня похожая проблема. Было бы удобно иметь возможность добавлять к элементам какой-то идентификатор.