Heim  >  Artikel  >  Backend-Entwicklung  >  Problem beim Abrufen der Sitzungsdaten auf checkout.session.completed Stripe-Go

Problem beim Abrufen der Sitzungsdaten auf checkout.session.completed Stripe-Go

WBOY
WBOYnach vorne
2024-02-05 21:21:03497Durchsuche

在 checkout.session.completed Stripe-Go 上检索会话数据时出现问题

Frageninhalt

Mein Ziel ist es, die von einem Kunden bestellten Artikel nach Abschluss seiner Checkout-Sitzung (mithilfe des vorgefertigten Checkouts von Stripe) zu erhalten und sie in meiner MongoDB-Datenbank zu speichern. Das Problem, das ich habe, ist, dass wenn ich versuche, die CheckoutSession-LineItems abzurufen, diese immer Null sind. Tut mir leid, wenn die Frage schlecht formuliert erscheint, ich bin neu hier.

Dies ist ein Ausschnitt des Webhook-Endpunkts. Ich habe versucht, den gesamten irrelevanten Code einschließlich der Fehlerbehandlung wegzulassen.

payload, err := c.GetRawData()
event, err := webhook.ConstructEventWithOptions(payload, c.Request.Header.Get("Stripe-Signature"), webhookSecret, webhook.ConstructEventOptions{IgnoreAPIVersionMismatch: true})

switch (event.Type) {
case "checkout.session.completed":
    var session stripe.CheckoutSession
    err := json.Unmarshal(event.Data.Raw, &session)

    if session.LineItems == nil {
        // I always get here
    }

Erwartungen: Ich möchte in der Lage sein, eine Reihe von Artikeln zu erhalten, die sie gekauft haben, mit Daten wie Stripe-Preis-ID, Menge usw.

Ergebnis: Die LineItems sind immer Nullen, auch wenn die Bestellung immer Artikel enthält, aber wenn ich versuche, die CheckoutSession selbst zu drucken, erscheinen mehr Nullen.

Meine Diagnose: Ich frage mich, ob das etwas mit der Nichtübereinstimmung der API-Versionen zu tun hat. Sie können sehen, dass ich beim Erstellen des Ereignisses die Option hinzugefügt habe, die Nichtübereinstimmung der API-Versionen zu ignorieren. Was mir auffällt, ist, dass StripeCLI offenbar eine ältere Version der Stripe-API verwendet (ich sollte beachten, dass ich heute die neueste offizielle Version vom offiziellen GitHub heruntergeladen habe und Version 1.17.2 verwende). Die CLI hat mir vorgeschlagen, dieses Flag hinzuzufügen. Ich finde es auch seltsam, dass die neueste Version auf pkg.go.dev stripe-go als v70.15.0+ inkompatibel aufgeführt und am 14. April 2020 veröffentlicht wurde? Ergebnisse laufen go get -u github.com/stripe/stripe-go 会得到这个版本。但是,如果我访问 stripe-go GitHub Repo,它会显示最新版本是 v75.6.0,并且建议像这样添加 Go: go get -u github.com/stripe/stripe-go/v75. Wenn Sie dies lesen, denken Sie vielleicht: „Wow, dieser Typ ist so dumm, er hat noch nie von LTS gehört“? Aber ich dachte, ich könnte das erwähnen, weil es das Einzige ist, was mir einfällt.

Hinweis: Ich wollte auch erwähnen, dass ich einige Probleme mit ihrer Dokumentation und ihren Anweisungen habe:

FC4E38232407D7D61E722790E7D8A7F7

Um Werbebuchungen zu erhalten, wurde aber folgende Fehlermeldung angezeigt: Unresolved reference 'Get'


Richtige Antwort


Wie in der Antwort auf diese Frage erwähnt wurde, ist line_items „erweiterbar“ und nicht standardmäßig enthalten. Dies bedeutet, dass sie bei der Übergabe im Webhook-Ereignis nicht im Objekt enthalten sind.

Sie müssen einen separaten Antrag an eine der folgenden Parteien stellen:

    Rufen Sie das Checkout-Sitzungsobjekt ab und erweitern Sie es explizit
  • oder line_items
  • Abrufen
  • listLineItems
Außerdem sind Stripe-Go, Stripe-Dotnet und Stripe-Java alle an eine bestimmte API-Version gebunden (da sie stark typisiert sind und jede API-Änderung die Deserialisierung unterbrechen kann). Sie sollten sicherstellen, dass Sie den Webhook-Endpunkt mit genau derselben API-Version erstellen, die Sie in Ihrem Code verwenden.

Stripe CLI kann Webhooks nur in der Standard-API-Version Ihres Stripe-Kontos oder der neuesten Version senden/weiterleiten: https://www.php.cn/link/4379cf00e1a95a97a33dac10ce454ca4

. Sie können die Standard-API-Version für Ihr Konto hier überprüfen:

https://www.php.cn/link/689041c2baed0f6d91050495d632d6e0. Was den Fehler angeht, ist es aufgrund der derzeit bereitgestellten Informationen fast unmöglich zu sagen, was los ist. Dies kann ein Problem mit der IDE oder den Projekteinstellungen sein. Sie können die in dieser Frage aufgeführten Antworten ausprobieren:

GoLand (JetBrains) zeigt die Fehlermeldung „Ungelöste Referenz“ an. Aber der Code wird kompiliert und ausgeführt

Unresolved reference 'Get'

Das obige ist der detaillierte Inhalt vonProblem beim Abrufen der Sitzungsdaten auf checkout.session.completed Stripe-Go. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen
Vorheriger Artikel:Golang-WebsocketNächster Artikel:Golang-Websocket