Можно ли передать пользовательские данные для оформления заказа? - PullRequest
4 голосов
/ 18 апреля 2019

Я следую документации для Stripe Checkout с интеграцией с сервером: https://stripe.com/docs/payments/checkout/server

Код в примерах работает нормально, но проблема в том, что я не могу отследить пользователя или егозаказ, когда покупка завершена.

У меня есть настройка веб-крюка, которая Stripe пингует, когда платеж завершен.Но сеанс ответов от Stripe не содержит никакой информации о заказанном продукте, за исключением его названия, описания и изображения.Я мог бы использовать имя продукта для запроса к базе данных, но я бы предпочел идентификатор или слаг, своего рода.

$app->post("/stripe-pingback", function(Request $request, Response $response, array $args) {
    \Stripe\Stripe::setApiKey("xxxxx");

    // You can find your endpoint's secret in your webhook settings
    $endpoint_secret = 'xxxxx';

    $payload = $request->getBody();
    $sig_header = isset($_SERVER['HTTP_STRIPE_SIGNATURE']) ? $_SERVER['HTTP_STRIPE_SIGNATURE'] : null;
    $event = null;

    try {
        $event = \Stripe\Webhook::constructEvent($payload, $sig_header, $endpoint_secret);
    } catch(\UnexpectedValueException $e) {
        // Invalid payload
        http_response_code(400); // PHP 5.4 or greater
        exit();
    } catch(\Stripe\Error\SignatureVerification $e) {
        // Invalid signature
        http_response_code(400); // PHP 5.4 or greater
        exit();
    }

    // Handle the checkout.session.completed event
    if ($event->type == 'checkout.session.completed') {
        $session = $event->data->object;
        var_dump($session);

        // Possible to get custom data from session?
        $customer = $session->customer;
        $customerEmail = $session->customer_email;

        // Fulfill the purchase...
        $this->db->insertAudioPurchase();
    }

    http_response_code(200); // PHP 5.4 or greater
});

Можно ли передать идентификатор вместе с запросом извлечения, который может Stripeping, чтобы я смог найти заказ и сгенерировать ссылку для скачивания?

Ответы [ 2 ]

4 голосов
/ 18 апреля 2019

metadata еще не существует в объекте Session, поэтому вы не можете его использовать.

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

1 голос
/ 18 апреля 2019

Вы можете передать массив с ключом metadata.Stripe вернет это поле после отправки платежа.

Вы просто должны передать этот формат.

"metadata": {}

Хотя я использовал его для создания пользовательских карт и сохранения карт,Тем не менее, я не использовал его во время оформления заказа, но, кажется, вы можете в значительной степени передать это с каждым API.

С Stripe Doc ,

Обновляемые объекты Stripe - в том числе Account, Charge, Customer, PaymentIntent, Refund, Subscription и Transfer - имеют параметр метаданных.Этот параметр можно использовать для присоединения данных значения ключа к этим объектам Stripe.

Метаданные полезны для хранения дополнительной структурированной информации об объекте. Например, вы можете сохранить своего пользователяполное имя и соответствующий уникальный идентификатор вашей системы на объекте Stripe Customer.Метаданные не используются Stripe - например, не используются для авторизации или отклонения платежа - и не будут видны вашим пользователям, если вы не решите показать их им.

...