Maison >développement back-end >Golang >Problème de récupération des données de session sur checkout.session.completed Stripe-Go

Problème de récupération des données de session sur checkout.session.completed Stripe-Go

WBOY
WBOYavant
2024-02-05 21:21:03538parcourir

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

Contenu de la question

Mon objectif est d'obtenir les articles commandés par un client après avoir terminé sa session de paiement (en utilisant la caisse prédéfinie de Stripe) et de les enregistrer dans ma base de données MongoDB. Le problème que j'ai est que lorsque j'essaie de récupérer les LineItems CheckoutSession, ils sont toujours nuls. Désolé si la question semble mal formulée, je suis nouveau ici.

Ceci est un extrait du point de terminaison du webhook, j'ai essayé d'omettre tout le code non pertinent, y compris la gestion des erreurs.

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
    }

Attentes : Je veux pouvoir obtenir un tableau des articles qu'ils ont achetés avec des données telles que Stripe PriceID, la quantité, etc...

Résultat : Les LineItems sont toujours des zéros, même si la commande contient toujours des articles, mais lorsque j'essaie d'imprimer la CheckoutSession elle-même, davantage de zéros apparaissent.

Mon diagnostic : Je ne peux pas m'empêcher de me demander si cela a quelque chose à voir avec la non-concordance de version de l'API, vous pouvez voir que lorsque j'ai construit l'événement, j'ai ajouté l'option pour ignorer la non-concordance de version de l'API. Ce que je rencontre, c'est que StripeCLI utilise apparemment une ancienne version de l'API Stripe (je dois noter que j'ai téléchargé la dernière version officielle depuis le GitHub officiel aujourd'hui et que j'utilise la version 1.17.2). La CLI m'a suggéré d'ajouter cet indicateur. Je trouve également étrange que la dernière version sur pkg.go.dev stripe-go soit répertoriée comme v70.15.0+ incompatible et publiée le 14 avril 2020 ? Les résultats courent 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. En lisant ceci, vous pensez peut-être « Wow, ce type est tellement stupide qu'il n'a jamais entendu parler de LTS » ? Mais j'ai pensé que je pourrais le mentionner parce que c'est la seule chose à laquelle je pouvais penser.

Remarque : Je voulais également mentionner que j'ai quelques problèmes avec leur documentation et ce qu'ils disent de faire :

FC4E38232407D7D61E722790E7D8A7F7

Pour obtenir des éléments de campagne, mais j'ai obtenu une erreur : Unresolved reference 'Get'


Réponse correcte


Comme la réponse à cette questionl'a mentionné, line_items est "extensible" et n'est pas inclus par défaut. Cela signifie qu'ils ne sont pas inclus dans l'objet lorsqu'ils sont transmis dans l'événement webhook.

Vous devez faire une demande distincte à l'une des parties suivantes :

  • Récupérez l'objet Session de paiement et développez-le explicitement line_items, ou
  • RécupérerlistLineItems

De plus, stripe-go, stripe-dotnet et stripe-java sont tous épinglés à une version spécifique de l'API (car ils sont fortement typés et chaque modification de l'API peut interrompre la désérialisation). Vous devez vous assurer de créer le point de terminaison du webhook en utilisant exactement la même version de l'API que celle que vous utilisez dans votre code.

Stripe CLI ne peut envoyer/transférer des webhooks que dans la version API par défaut de votre compte Stripe ou la dernière version : https://www.php.cn/link/4379cf00e1a95a97a33dac10ce454ca4. Vous pouvez vérifier la version API par défaut de votre compte ici : https://www.php.cn/link/689041c2baed0f6d91050495d632d6e0.

Concernant l'erreur Unresolved reference 'Get', il est presque impossible de dire ce qui se passe sur la base des informations actuellement fournies. Il peut s'agir d'un problème de paramètres de l'IDE ou du projet. Vous pouvez essayer les réponses répertoriées dans cette question : GoLand (JetBrains) affiche le message d'erreur "Référence non résolue". Mais le code se compile et s'exécute

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer
Article précédent:Prise Web GolangArticle suivant:Prise Web Golang