Presumo che sia solo per questo sito? Non lo vedi su altri siti? Sì, c’è un “bug” per cui non dovremmo restituire un 500, ma probabilmente ci sono dei dati “cattivi” da qualche parte, come un piano mancante o qualcosa del genere. Forse è stato rimosso in Stripe e non è mai stato aggiornato nel database del plugin.
Puoi eseguire questi comandi da console Rails per aiutarmi a fare il debug?
Stripe.api_key = SiteSetting.discourse_subscriptions_secret_key
user = User.find_by(username: 'xxx')
customer = DiscourseSubscriptions::Customer.find_by(user_id: user.id)
subs = ::Stripe::Subscription.list(customer: stripe_customer_id, status: 'all')[:data]
subs.count # nota quante sottoscrizioni hanno
subscription = subs.first # cambia questo ed esegui le righe sottostanti per ogni sottoscrizione
price_id = subscription[:items][:data].first[:price][:id]
plans = ::Stripe::Price.list(expand: ['data.product'], limit: 100)
plan = plans[:data].find { |p| p[:id] == price_id }
plan
Penso che o plans o plan restituiranno nil, ma questo ci aiuterà a restringere il campo del problema. Potresti dirmi quante sottoscrizioni hanno e se mancano dei piani per loro?
Probabilmente una correzione del codice che farò sarà semplicemente quella di non restituire alcuna sottoscrizione per questi utenti in caso di errore, ma se hanno effettivamente una sottoscrizione che non risolve il problema. Forse restituirò un errore che dice qualcosa come “è stata trovata una sottoscrizione ma c’è un errore nel caricamento dei dettagli del piano per essa, si prega di contattare un amministratore per assistenza”.