我的目標是在客戶完成結帳會話(使用Stripe 預先建立的結帳)後,取得他們訂購的商品並將其保存到我的MongoDB 資料庫中。我遇到的問題是,當我嘗試檢索 CheckoutSession LineItems 時,它們始終為零。 抱歉,如果這個問題的措詞看起來很糟糕,我是新來的。
這是 Webhook 端點的片段,我嘗試省略所有不相關的程式碼,包括錯誤處理。
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 }
期望: 我希望能夠獲得他們購買的商品的數組,並且其中包含 Stripe PriceID、數量等數據...
結果: LineItems 始終為零,儘管訂單中始終包含項目,但當我嘗試列印 CheckoutSession 本身時,出現了更多的零。
我的診斷:
我忍不住想知道這是否與 API 版本不匹配有關,您可以看到,當我建構事件時,我添加了忽略 API 版本不匹配的選項。我遇到的情況是,StripeCLI 顯然使用的是舊版的 Stripe API(我應該注意,我今天從官方 GitHub 下載了最新的官方版本,並且正在使用該版本 1.17.2)。 CLI 建議我添加該標誌。
我還發現很奇怪,在 pkg.go.dev stripe-go 上將最新版本列為 v70.15.0 不相容並於 2020 年 4 月 14 日發布?結果運行 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
。
讀到這篇文章時,您可能會想「哇,這傢伙太蠢了,他從來沒有聽說過 LTS」嗎?但我想我可能會提到這一點,因為這是我唯一能想到的。
注意: 我還想提一下,我確實對他們的文檔有一些問題,他們說要這樣做:
FC4E38232407D7D61E722790E7D8A7F7要取得行項目,但出現錯誤:Unresolved reference 'Get'
就像這個問題的答案提到的那樣,line_items 是“可擴展的”,預設不包含在內。這表示它們在 Webhook 事件中傳遞時不包含在物件中。
您必須向以下任一方提出單獨的請求:
line_items
,或此外,stripe-go、stripe-dotnet 和 stripe-java 都會固定到特定的 API 版本(因為它們是強類型的,並且每次 API 變更都可能會破壞反序列化)。您應該確保使用完全相同的 API 版本建立 Webhook 端點您在程式碼中使用的。
Stripe CLI 只能在您的 Stripe 帳戶預設 API 版本或最新版本中傳送/轉送 Webhook:https://www.php.cn/link/4379cf00e1a95a97a33dac10ce454ca4。您可以在此處查看您帳戶的預設 API 版本:https://www.php.cn/link/689041c2baed0f6d91050495d632d6e0。
關於錯誤 Unresolved reference 'Get'
,根據目前提供的資訊幾乎不可能判斷發生了什麼。這可能是 IDE 或專案設定問題。您可以嘗試此問題中列出的答案: GoLand ( JetBrains)顯示錯誤訊息「未解析的引用」。但是程式碼編譯並執行
以上是在 checkout.session.completed Stripe-Go 上檢索會話資料時出現問題的詳細內容。更多資訊請關注PHP中文網其他相關文章!