Rumah > Artikel > pembangunan bahagian belakang > Masalah mendapatkan data sesi pada checkout.session.completed Stripe-Go
Matlamat saya adalah untuk mendapatkan item yang dipesan oleh pelanggan selepas mereka menyelesaikan sesi pembayaran mereka (menggunakan pembayaran pra-bina Stripe) dan menyimpannya ke pangkalan data MongoDB saya. Masalah yang saya hadapi ialah apabila saya cuba mendapatkan kembali CheckoutSession LineItems, ia sentiasa sifar. Maaf jika soalan itu kelihatan kurang perkataan, saya baru di sini.
Ini adalah coretan titik akhir webhook, saya cuba meninggalkan semua kod yang tidak berkaitan termasuk pengendalian ralat.
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 }
Harapan: Saya ingin mendapatkan pelbagai item yang mereka beli dengan data seperti Stripe PriceID, kuantiti dll...
Hasil: LineItems sentiasa sifar, walaupun pesanan sentiasa mengandungi item, tetapi apabila saya cuba mencetak CheckoutSession itu sendiri, lebih banyak sifar muncul.
Diagnosis saya:
Saya tidak dapat membantu tetapi tertanya-tanya jika ini ada kaitan dengan ketidakpadanan versi API, anda dapat melihat bahawa apabila saya membina acara itu, saya menambah pilihan untuk mengabaikan ketidakpadanan versi API. Apa yang saya hadapi ialah StripeCLI nampaknya menggunakan versi API Stripe yang lebih lama (saya harus ambil perhatian bahawa saya memuat turun versi rasmi terkini daripada GitHub rasmi hari ini dan saya menggunakan versi 1.17.2). CLI mencadangkan saya menambah bendera ini.
Saya juga merasa pelik bahawa versi terkini pada pkg.go.dev stripe-go disenaraikan sebagai v70.15.0+ tidak serasi dan dikeluarkan pada 14 April 2020? Keputusan berjalan 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
.
Apabila anda membaca ini, anda mungkin berfikir "Wah, lelaki ini sangat bodoh, dia tidak pernah mendengar tentang LTS"? Tetapi saya fikir saya mungkin menyebut ini kerana itu satu-satunya perkara yang saya boleh fikirkan.
Nota: Saya juga ingin menyatakan bahawa saya mempunyai beberapa masalah dengan dokumentasi mereka dan perkara yang mereka katakan untuk dilakukan:
FC4E38232407D7D61E722790E7D8A7F7Untuk mendapatkan item baris, tetapi mendapat ralat: Unresolved reference 'Get'
Seperti jawapan kepada soalan iniyang disebut, line_item adalah "boleh dilanjutkan" dan tidak disertakan secara lalai. Ini bermakna mereka tidak disertakan dalam objek apabila diluluskan dalam acara webhook.
Anda mesti membuat permintaan berasingan kepada mana-mana pihak berikut:
line_items
, atau Selain itu, stripe-go, stripe-dotnet dan stripe-java semuanya disematkan pada versi API tertentu (kerana ia ditaip dengan kuat dan setiap perubahan API mungkin memecahkan penyahserikatan). Anda harus memastikan untuk membuat titik akhir webhook menggunakan versi API yang sama yang anda gunakan dalam kod anda.
Stripe CLI hanya boleh menghantar/majukan webhook dalam versi API lalai akaun Stripe anda atau versi terkini: https://www.php.cn/link/4379cf00e1a95a97a33dac10ce454ca4. Anda boleh menyemak versi API lalai untuk akaun anda di sini: https://www.php.cn/link/689041c2baed0f6d91050495d632d6e0.
Mengenai ralat Unresolved reference 'Get'
, hampir mustahil untuk memberitahu apa yang berlaku berdasarkan maklumat yang diberikan pada masa ini. Ini mungkin isu tetapan IDE atau projek. Anda boleh mencuba jawapan yang disenaraikan dalam soalan ini: GoLand (JetBrains) menunjukkan mesej ralat "Rujukan tidak diselesaikan". Tetapi kod itu menyusun dan berjalan
Atas ialah kandungan terperinci Masalah mendapatkan data sesi pada checkout.session.completed Stripe-Go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!