Ist es möglich, benutzerdefinierte Daten an Stripe Checkout zu übergeben?

Lesezeit: 5 Minuten

Benutzeravatar von BugHunterUK
BugHunterUK

Ich folge der Dokumentation für Stripe Checkout mit Serverintegration: https://stripe.com/docs/payments/checkout/server

Der Code in den Beispielen funktioniert gut, aber das Problem, das ich habe, ist, dass ich den Benutzer oder seine Bestellung nicht verfolgen kann, wenn ein Kauf abgeschlossen ist.

Ich habe ein Webhook-Setup, das Stripe pingt, wenn eine Zahlung abgeschlossen ist. Aber die Antwortsitzung von Stripe enthält keine Informationen über das bestellte Produkt außer dem Namen, der Beschreibung und dem Bild. Ich könnte den Produktnamen verwenden, um die Datenbank abzufragen, aber ich hätte viel lieber eine ID oder eine Art Slug.

$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
});

Ist es möglich, eine ID zusammen mit der Checkout-Anforderung zu übergeben, die Stripe zurückpingen kann, damit ich die Bestellung nachschlagen und einen Download-Link generieren kann?

  • Im Ernst, ich kann nicht verstehen, warum die wichtigsten Daten, die Sie von einer Checkout-Sitzung wissen sollen, wie “Wofür hat mein Benutzer bezahlt”, zusätzlichen Abläufen oder Problemumgehungen von Stripe überlassen werden.

    – Jaume

    26. März 2021 um 16:32 Uhr

Benutzeravatar von Paul Asjes
Paul Asjes

Bearbeiten: metadata Jetzt tut auf dem Session-Objekt vorhanden sind. Obwohl Sie wahrscheinlich eine neuere API-Version verwenden müssen, um sie einstellen zu können.

metadata existiert noch nicht auf dem Session-Objekt, also können Sie das nicht verwenden.

Du kannst den … benutzen client_reference_id Feld, um einige benutzerdefinierte Daten in Ihrer Sitzung zu speichern. Beachten Sie nur, dass der Inhalt eindeutig sein muss. Schau mal hier.

  • Danke. Dies stellt ein Problem dar, da ich keine eindeutige ID für den Kunden habe. Der Kaufvorgang erfordert keine Registrierung. und erfordert nur eine E-Mail-Adresse, die der Benutzer beim Stripe-Checkout angibt. Generieren Sie vielleicht eine ID, indem Sie die Daten mit einem Schlüssel verschlüsseln, und entschlüsseln Sie sie bei erfolgreichem Checkout, um die erforderlichen Informationen für den Kauf zu erhalten?

    – BugHunterUK

    18. April 2019 um 10:27 Uhr


  • Ich habe es übertrieben. Ich kann den Produkt-Slug da reinstecken.

    – BugHunterUK

    18. April 2019 um 16:43 Uhr

  • Stripe „Session“ hat jetzt eine Metadateneigenschaft: stripe.com/docs/api/checkout/sessions/…. Seltsamerweise erscheinen zugewiesene Metadaten NICHT in der Stripe-Web-Admin-Oberfläche, aber sie kommen zurück zu meinem Webhook.

    – Adam Knowles

    26. Januar 2020 um 16:15 Uhr

  • In welchem ​​Webhook können Sie es sehen? Ich habe Payment_intent.succeeded ohne Erfolg versucht.

    – Benutzer177468

    24. September 2020 um 22:39 Uhr

  • payment_intent.succeeded beschreibt einen PaymentIntent. Sie möchten wahrscheinlich checkout.session.completed: stripe.com/docs/api/events/…

    – Paul Asjes

    25. September 2020 um 1:55 Uhr

Benutzeravatar von AJ
AJ

Sie können ein Array mit Schlüssel übergeben metadata. Stripe gibt dieses Feld so zurück, wie Sie es gesendet haben, wenn die Zahlung abgeschlossen ist.

Sie müssen nur als dieses Format übergeben werden.

"metadata": {}

Obwohl ich es zum Erstellen von Benutzer- und Speicherkarten verwendet habe. Allerdings habe ich es zum Zeitpunkt des Auscheckens nicht verwendet, aber es scheint, dass Sie dies mit jeder API passieren können.

Aus Stripe-Dokument,

Aktualisierbare Stripe-Objekte – einschließlich Account, Charge, Customer, PaymentIntent, Refund, Subscription und Transfer – haben einen Metadatenparameter. Sie können diesen Parameter verwenden, um Schlüsselwertdaten an diese Stripe-Objekte anzuhängen.

Metadaten sind nützlich, um zusätzliche, strukturierte Informationen zu einem Objekt zu speichern. Beispielsweise könnten Sie den vollständigen Namen Ihres Benutzers und die entsprechende eindeutige Kennung aus Ihrem System in einem Stripe-Kundenobjekt speichern. Metadaten werden von Stripe nicht verwendet – beispielsweise nicht zum Autorisieren oder Ablehnen einer Belastung – und werden von Ihren Benutzern nicht gesehen, es sei denn, Sie zeigen sie ihnen.

  • Es sieht so aus, als ob Sie das nicht können, laut dieser Frage stackoverflow.com/questions/55744094/…

    – Ryan

    24. April 2019 um 15:37 Uhr

  • Tatsächlich können Sie. Sie müssen jedoch das Feld session.PaymentIntentData.Metadata verwenden, nicht session.Metadata

    – Weichlöwe

    1. November 2019 um 7:56 Uhr

  • @Softlion danke! Ich habe einen Tag lang gekämpft und nur leere Metadaten erhalten.

    – Binäres Web

    14. Dezember 2021 um 10:16 Uhr

Ich weiß nicht, ob Sie die Lösung gefunden haben, aber das ist die Mine. Ich habe Zahlungsabsichtsdaten verwendet und in diese Metadaten eingefügt, das ist eine meiner ersten Hilfen bei Stackoverflow. Ich suche seit 2 2 Tagen die Lösung, und das wars. Also möchte ich dir helfen.

Stripe Docs sind nicht so übersichtlich und nützlich

                    payment_intent_data: {
                        metadata: {
                            key1 : val1,
                            ke2  : val2,
                            key3 : val3,
                        }
                    },

  • einfach und klar

    – Sunil Garg

    18. Juni 2022 um 7:55 Uhr

  • Legende. Danke schön!

    – Superluminal

    vor 1 Stunde

checkout_session = stripe.checkout.Session.create(
            customer_email="[email protected]",
            success_url=domain_url + 'success?session_id={CHECKOUT_SESSION_ID}',
            cancel_url=domain_url + 'cancel/',
            payment_method_types=['card'],
            mode="subscription",
            locale="pl",
            line_items=[
                {
                    'price': 'price_*****************',
                    'quantity': 1,
                }
            ],
            subscription_data={'metadata':{'someKeyHere': 'your session variable data'}}
        )

Das Streifen-Dashboard zeigt hier jetzt Metadaten-Eingabecode an

Benutzeravatar von Rahul Patil
Raul Patil

return {
      price_data: {
        
        currency: "inr",
        product_data: {
        name: item.name,
        metadata : { //passing extra data here
          id : item.id
        } 
        },
        unit_amount: item.price*100,
      },
      quantity: item.quantity,
     
    };
  })

Sie können die ID so weitergeben.

1444590cookie-checkIst es möglich, benutzerdefinierte Daten an Stripe Checkout zu übergeben?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy