Stripe Checkout не принимает метаданные

Я интегрировал проверку 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,
    ]]
]);

Я ожидаю, что метаданные будут приняты и возвращены с помощью веб-перехватчика, как описано в Страйп-документация.

У меня похожая проблема. Было бы удобно иметь возможность добавлять к элементам какой-то идентификатор.

ryryan 24.04.2019 17:34

В конце я добавил свойство client_reference_id и использовал список значений, разделенных запятыми. Единственная проблема заключается в том, что client_reference_id возвращается только для завершенного сеанса оформления заказа, а не для события успешного списания средств.

seventeen 25.04.2019 18:06
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
12
2
6 347
9
Перейти к ответу Данный вопрос помечен как решенный

Ответы 9

Объект Stripe Session не принимает metadata в качестве параметра. Посмотреть здесь для подробностей.

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

Ответ принят как подходящий

Первое предложение связанной документации гласит:

Updateable Stripe objects—including Account, Charge, Customer, PaymentIntent, Refund, Subscription, and Transfer —have a metadata parameter.

Вы не создаете ни того, ни другого, вы создаете Сессия

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

seventeen 18.04.2019 13:49

Если я правильно понял ваш комментарий, вы можете искать свойство client_reference_id объекта сеанса: «Уникальная строка для ссылки на сеанс проверки. Это может быть идентификатор клиента, идентификатор корзины или аналогичный, и его можно использовать для согласования сеанс с вашими внутренними системами».

Fitzi 18.04.2019 13:56

Пониженные голоса, поскольку это просто указывает на то, что это не должно работать без предоставления решения, которое пользователь 13688383 сделал в своем ответе ниже.

Markus Knappen Johansson 27.10.2020 12:43

@MarkusKnappenJohansson С технической точки зрения OP не спрашивал ничего конкретного, поэтому окончательного решения быть не может. Я указал, что сеанс не принимает метаданные, как ожидалось OP, поэтому прояснил проблему.

Fitzi 27.10.2020 12:52

При создании сеанса метаданные должны быть следующими: payment_intent_data: { metadata: {platform: (data.platform || 'unsure')} }

Satya Kalluri 18.03.2021 10:29

Другие ответы верны, что metadata не существует в объекте Session. client_reference_id является альтернативой, но она должна быть уникальной и должна быть строкой.

Если вы просто хотите, чтобы метаданные отображались при покупке на панели инструментов Stripe, используйте атрибут payment_intent_data при создании сеанса. Вот как вы прикрепляете метаданные к покупке, совершенной во время сеанса. Соответствующая документация здесь.

Вы не можете прикреплять метаданные к Session, но вы могу прикрепляете метаданные либо к payment_intent, либо к setup_intent, которые будут созданы в сеансе.

Смотрите документация, вы передаете его как payment_intent_data.metadata.

Обратите внимание, что Stripe предупреждает вас не должен помещать конфиденциальные данные в metadata, поэтому, если вы хотите сохранить имя клиента и т. д., вам лучше поместить его в базу данных под уникальным ключом, а затем передать ключ как client_reference_id.

добавление метаданных к назначению платежа показывает метаданные в веб-интерфейсе — добавление метаданных к фактическому платежу не показывает их

danday74 10.01.2020 18:44

Если вы похожи на меня и столкнулись с необходимостью объединить некоторую информацию, например идентификатор клиента, идентификатор заказа и т. д., в полосу. Есть параметр payment_intent_data, который представляет собой ассоциативный массив. В payment_intent_data у вас есть свойство описание, которое вы можете использовать для встраивания дополнительной информации. Размещенное здесь описание будет отображаться в поле описания при экспорте платежа в формате csv на полосу.

https://stripe.com/docs/api/checkout/sessions/create#create_checkout_session-payment_intent_data-description

              $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.

GPP 02.02.2021 10:53

По состоянию на октябрь 2020 года объект сеанса имеет метаданные.

Да, но, похоже, он не возвращает его должным образом. Однако прохождение через payment_intent_data.metadata работает. Или, может быть, это только я.

Shreyansh Panchal 01.02.2021 07:49

это не только ты. установка metadata для сеанса вернет его только при запуске события checkout.session.completed.

Binar Web 14.12.2021 11:19

Для тех, кто все еще сталкивается с этой проблемой, простое размещение параметра client_reference_id или metadata не сработало для меня даже с API 2020-08-27.

Добавление payment_intent_data с метаданными заставило меня работать. Вы можете попробовать добавить следующий код:

'payment_intent_data'=>['metadata' => ["order_id" => $orderID, "type" => "myProduct"],

Да, но это работает только для режима payment

parkerproject 03.01.2021 18:24

Метаданные должны быть вложенный в объекте создания сеанса:

Документы Stripe неправильно указывают метаданные как родитель (https://stripe.com/docs/api/checkout/sessions/create), хотя на самом деле это дочерний элемент:

https://support.stripe.com/questions/using-metadata-with-checkout-sessions

  1. payment_intent_data.metadata
  2. подписка_данные.метаданные

client_reference_id связан только с сеансом и не сохраняется в Stripe в виде метаданных.

Другие вопросы по теме