Hai configurato correttamente i webhook? Ricordo che erano piuttosto complicati da configurare, e le istruzioni su come farlo potrebbero essere un po’ più chiare.
Sì, ho configurato correttamente i webhook, è così che la risposta stava tornando indietro.
Ho scoperto il problema. Le istruzioni mancano di un punto in cui dobbiamo impostare i tag personalizzati con il nome del gruppo da promuovere nella pagina di configurazione dei prezzi di Stripe.
Ora funziona bene per me. Il plugin è ottimo ma la documentazione non è dettagliata.
Puoi spiegarlo un po’ di più in modo che qualcuno possa aggiornare la documentazione? Quale tag personalizzato hai aggiunto e dove lo hai aggiunto?
[Guida] Come configurare gli abbonamenti a Discourse con le tabelle dei prezzi di Stripe (e le insidie comuni)
Ciao a tutti,
Dopo un lungo processo di risoluzione dei problemi, volevo condividere una guida definitiva per configurare il plugin ufficiale discourse-subscriptions utilizzando il moderno metodo Stripe Pricing Table. Questo approccio è potente ma presenta alcuni passaggi critici che non sono immediatamente evidenti e possono portare a errori come webhook non funzionanti (404 Not Found) o utenti non aggiunti ai gruppi dopo un pagamento andato a buon fine.
Ecco il processo passo dopo passo che è confermato funzionare.
Parte 1: Configurazione Stripe
Questo processo utilizza Stripe come "fonte di verità" per tutti i prodotti e prezzi.
1. Crea i tuoi prodotti e prezzi
- Nella tua dashboard Stripe, assicurati di essere in Modalità Live.
- Vai su Prodotti > Catalogo prodotti.
- Crea prima i tuoi prodotti principali (ad esempio, "Premium Membership", "VIP Access").
- Sotto ogni prodotto, crea tutti i prezzi associati (ad esempio,
XX / mese,XXX / anno).
2. Il passaggio CRUCIALE dei metadati Affinché il plugin aggiunga automaticamente gli utenti a un gruppo, devi aggiungere metadati specifici a ogni singolo oggetto Prezzo che crei. L’interfaccia utente della dashboard Stripe può rendere difficile trovarlo.
- Quando crei un nuovo prezzo (o se riesci a trovare l’opzione "Modifica prezzo"), devi aggiungere i metadati. Potrebbe essere necessario fare clic su "Opzioni aggiuntive" durante la creazione del prezzo per visualizzare i campi dei metadati.
- Fai clic su + Aggiungi metadati e inserisci quanto segue:
- CHIAVE:
group_name - VALORE: Lo slug/handle univoco e sicuro per l’URL del gruppo da Discourse, non il suo nome completo.
- CHIAVE:
Esempio:
- Se il nome completo del tuo gruppo Discourse è "Enclave Plus", il suo slug è probabilmente
EnclavePlus.- Devi usare
EnclavePluscome valore. Usare\"Enclave Plus\"con uno spazio causerà un errore.
- Devi ripetere questo passaggio per ogni piano tariffario che desideri collegare a un gruppo.
3. Crea la tua tabella dei prezzi Stripe
- Vai su Prodotti > Tabelle dei prezzi.
- Crea una nuova tabella e aggiungi i Prezzi che hai appena configurato.
- Dopo aver pubblicato la tabella, fai clic sul pulsante "Copia codice" per ottenere il tuo ID tabella dei prezzi (inizia con
prctbl_...).
4. Configura l’endpoint webhook (La correzione dell’errore 404) Questo è il punto di errore più comune.
- Vai su Sviluppatori > Webhook e fai clic su + Aggiungi endpoint.
- L’URL dell’endpoint deve essere nel seguente formato:
https://iltuositodiscourse.com/s/hooks
Nota: il percorso corretto è/s/hooks, non/s/stripe/webhook. - Per Eventi da inviare, aggiungi almeno:
checkout.session.completedcustomer.subscription.deleted
- Crea l’endpoint e copia il Segreto di firma (inizia con
whsec_...).
Parte 2: Configurazione Discourse
Ora, configuriamo il plugin per utilizzare tutto ciò che hai impostato in Stripe.
1. Inserisci le chiavi API e l’ID della tabella dei prezzi
- Vai su
Admin>Impostazionie cercadiscourse subscriptions. - Inserisci le tue chiavi Stripe live:
discourse subscriptions public key(pk_live_...)discourse subscriptions secret key(sk_live_...)discourse subscriptions webhook secret(whsec_...)
- Abilita la modalità tabella dei prezzi:
- Seleziona la casella per
discourse subscriptions pricing table enabled. - Incolla il tuo ID
prctbl_...nel campodiscourse subscriptions pricing table id.
- Seleziona la casella per
2. Collega i prodotti Stripe ai gruppi Discourse Anche con una tabella dei prezzi, devi dire a Discourse a quale gruppo appartiene quale prodotto.
- Vai su
Admin>Plugin>Subscriptionse fai clic sulla scheda Prodotti. - Fai clic su Crea nuovo prodotto.
- Inserisci un Nome prodotto che corrisponda esattamente al Nome prodotto in Stripe (ad esempio,
Enclave Plus). - Salva il prodotto. Nella pagina del prodotto, scorri verso il basso e fai clic su Aggiungi nuovo piano.
- Questo piano è solo un "ponte". L’unico campo critico è Gruppo utenti.
- Nickname piano:
Enclave Plus Group Link(o qualsiasi cosa per riferimento). - Gruppo utenti: Seleziona il gruppo Discourse corretto dal menu a discesa.
- Gli altri campi (Importo, Intervallo) possono essere lasciati come predefiniti, poiché verranno ignorati.
- Nickname piano:
- Salva il piano. Ripeti questo passaggio per tutti i tuoi diversi prodotti.
Riepilogo risoluzione problemi
- Problema: I webhook falliscono con un errore
404 Not Found.- Soluzione: L’URL dell’endpoint in Stripe non è corretto. Deve essere
https://iltuositodiscourse.com/s/hooks.
- Soluzione: L’URL dell’endpoint in Stripe non è corretto. Deve essere
- Problema: Il webhook ha successo (
200 OK) e il pagamento appare nel profilo di fatturazione dell’utente, ma non viene aggiunto al gruppo.- Soluzione: I tuoi metadati non sono corretti. Controlla tre cose:
- I metadati devono essere sull’oggetto Prezzo Stripe, non sull’oggetto Prodotto.
- La CHIAVE dei metadati deve essere esattamente
group_name. - Il VALORE dei metadati deve essere lo slug/handle univoco del gruppo (ad esempio,
EnclavePlus), non il suo nome completo con spazi.
- Soluzione: I tuoi metadati non sono corretti. Controlla tre cose:
Spero che questa guida risparmi ad altri il tempo e la frustrazione di questa configurazione complessa ma molto potente.
L’ho appena testato ed è stato perfetto! Aggiorneremo la documentazione originale per includerlo!
La parte fondamentale mancante nella documentazione è questa. Lo faccio notare poiché hai citato un’altra parte.
C’è un modo per impostare automaticamente la data di ancoraggio con questo? Se qualcuno paga devo regolare manualmente il periodo di abbonamento per resettarlo il 1° del mese per ogni utente.
La documentazione di Stripe dice che può essere fatto con l’API al momento del checkout ma attualmente non abbiamo modo di regolarlo nel plugin.
Sposto questo nella nuova discussione poiché potrebbe diventare lunga man mano che pubblico gli aggiornamenti.
Questo plugin è ora incluso nel core di Discourse come parte di Bundling more popular plugins with Discourse core. Se stai auto-ospitando e utilizzi il plugin, devi rimuoverlo dal tuo app.yml prima del tuo prossimo aggiornamento.
Come posso rimuoverlo dal core? Poiché utilizzerei il fork del plugin che ho migliorato.
Qualcosa come
rm - rf discourse-subscroptions
Prima del git clone.
Mi dispiace, non ho capito, durante la ricompilazione recupererà questo codice di plugin integrato e lo compilerà, tutto in un unico passaggio, non è così?
Non l’ho testato, ma sono abbastanza sicuro che funzionerà:
hooks:
after_code:
- exec:
cd: $home/plugins
cmd:
- rm -rf discourse-subscriptions
- git clone https://github.com/yourForkUser/discourse-subscriptions
Poiché questo viene eseguito dalla directory dei plugin, rimuoverà discourse-subscriptions che ora è incluso nel core e lo sostituirà con quello che hai sempre usato prima. Quindi, aggiungere solo quel rm -rf al tuo app.yml prima del tuo git clone (per questo o qualsiasi altro plugin che non vuoi includere o che vuoi sostituire) dovrebbe fare quello che desideri e sostituire il plugin core con il tuo fork.
Va bene, quindi quando dicono che il plugin X fa ora parte del core, intendono solo che il plugin sarà pre-confezionato nel repository core nella directory dei plugin e non dovremo richiamare quel codice opzionalmente. Capito. Strutturalmente non cambia nulla.
Se è pre-confezionato ora. Perderò tutti i dati nella versione del plugin? Dovrò configurarlo di nuovo o verrà trasferito?
Non perderai dati. Rimuovi semplicemente la riga da app.yml e il plugin continuerà a funzionare come prima.
È un comportamento previsto che dopo aver inserito un codice coupon, l’importo totale dell’abbonamento non venga aggiornato immediatamente?
Testato su Discourse 3.5.0.beta8-dev
Ho scoperto che se un utente tenta di registrarsi e il suo pagamento fallisce, la voce nella tabella discourse_subscriptions_customer che lo associa al suo ID cliente Stripe viene rimossa. Non sono sicuro se questo comportamento sia intenzionale, ma in ogni caso, non credo sia un buon comportamento poiché si traduce in clienti orfani in Stripe che devono essere eliminati manualmente. Ciò comporta anche la creazione di clienti duplicati se ritentano, il che può influire sui nostri report.
C’è un modo per resettare la campagna? Speravo in un obiettivo di donazione mensile ma è l’inizio di un nuovo mese e non vedo un modo per reimpostarlo a zero per un nuovo obiettivo mensile.
Mi piacerebbe vedere questo plugin in azione su un sito. Qualcuno è disposto a condividere il link al proprio forum che utilizza il Plugin Abbonamenti? Grazie!
