POST API per Nuovo Utente

Sto cercando di inviare una richiesta POST tramite API per creare un nuovo utente.

Caso d’uso: Creazione di un nuovo utente dopo l’invio di un modulo per la carta di credito su un sito WordPress. In definitiva, questo verrà attivato da Google Tag Manager utilizzando JavaScript.

Per testarlo, ho scritto il codice seguente, l’ho salvato come file PHP e l’ho caricato sul mio server. Ricevo un errore: Errore di parsing: errore di sintassi, 'POST' inaspettato (T_STRING) in /nas/content/live/username/newuser.php alla riga 2.

<?php 
curl -X POST "https://site.com/invites" \
-H "Content-Type: multipart/form-data;" \
-H "Api-Key: 123456789012345678901234567890" \

{
"email": "test@gmail.com",
"group_names": "Paid_Members",
"custom_message": "Messaggio personalizzato qui"
}

?>

Cosa sto trascurando in questa richiesta POST? Devo aggiungere Accept: application/json?

Se vuoi fare dei test con PHP, dovrai utilizzare le funzioni curl_*.

Grazie. Mi sto rendendo conto di non voler affatto utilizzare PHP; voglio solo usare JavaScript, dato che è ciò che userò con GTM.

Forse questo mi sta avvicinando? Anche se non so dove inserire la chiave API in questo script:

<script>
$.ajax({
method: "POST",
url: "https://site.com/invites",
data: { email: "foo@gmail.com", group_names: "Paid_Members" }
})
.done(function( msg ) {
alert( "Dati salvati: " + msg );
});
</script>

Chiave API/nome utente in

headers: {}

Ho quanto segue, anche se GTM segnala errori alla riga 5. Puoi aiutarmi a capire cosa mi sta sfuggendo?

 <script>
 $.ajax({
 method: "POST",
 url: "https://site.co/invites",
 headers: {Api-key: "1234567890987654321234578"},
 data: { email: "test@gmail.com", group_names: "Paid_Members" }
 })
 .done(function( msg ) {
 alert( "Dati salvati: " + msg );
 });
 </script>

Manca Api-Username associato alla chiave API che hai creato.
Per quanto riguarda gli errori, devi fornire più informazioni.

Prova:

headers: { Api-Username: "System", Api-Key: "123123958712389478923478923" },

“Errore alla riga 5, carattere 15: Errore di parsing. ‘}’ atteso”

Manca l’apostrofo ' attorno alle chiavi. E a meno che tu non abbia rinominato, dovrebbe essere system.

Ti consiglio di studiare prima le basi di JavaScript prima di affrontare compiti che non sei ancora in grado di gestire.

Scusa se sembro qualcuno che sa cosa sta facendo! Apprezzo il tuo aiuto, @Arkshine, e continuerò a cercare come risolvere questo problema.

È assolutamente un compito per cui non sono preparato, ma sto cercando. :slight_smile:

Sono riuscito a far funzionare la richiesta di salvataggio inserendo Api-Username e Api-Key tra virgolette. Grazie, Arkshine. Ho poi eseguito lo script tramite GTM e controllato i log di Discourse, ma senza alcun risultato.

Non viene generato alcun nuovo utente.

Hai qualche idea?

Ecco il mio script finale in GTM:

<script type="text/javascript">
$.ajax({
method: "POST",
url: "https://test.co/invites",
headers: { "Api-Username": "system", "Api-Key": "1234556" },
data: { email: "test@gmail.com", group_names: "Paid_Members" }
})
.done(function( msg ) {
alert( "Dati salvati: " + msg );
});
</script>

Penso che tu abbia frainteso l’API. Questo endpoint non serve a creare un utente. Genererà un link di invito e lo invierà all’email dell’utente. Una volta cliccato, l’utente potrà registrarsi.

Per creare manualmente un utente, dovresti utilizzare questo endpoint: Discourse API Docs

Beh, è stato sciocco da parte mia. Grazie, Arkshine.

Mi sento vicino alla soluzione, anche se non vedo cambiamenti nei log di Discourse.

Ho anche provato con type: "POST", ma senza successo.

<script type="application/json">
$.ajax({
method: "POST",
url: "https://test.co/users",
headers: { "Api-Username": "system", "Api-Key": "12345" },
data: { 
"name": "Bob Dingo",
"email": "grow@test.co",
"password": "Success101",
"username": "BobDingo",
"active": true,
"approved": true,
"user_fields[1]": "string"
}


});
</script>

Ti consiglio di fare un passo o due indietro per descrivere il problema che stai cercando di risolvere. Non è chiaro che il percorso che stai seguendo sia una buona soluzione.

Buona idea. Voglio creare un nuovo utente su Discourse, aggiunto a due Gruppi, quando qualcuno completa un modulo di pagamento sul mio sito WordPress.

Il mio piano è passare le variabili nome/email dal modulo alla pagina Grazie, quindi inviare all’acquirente un’email con le sue nuove credenziali di accesso.

Google Tag Manager può estrarre le variabili nome/email dall’URL, quindi aggiungerle allo script pubblicato sopra.

Esiste un modo migliore per farlo? Non voglio utilizzare l’SSO con WP Discourse.

Perché non utilizzare SSO e uno dei numerosi gestori di abbonamenti WordPress documentati qui? Come aggiornare l’appartenenza ai gruppi da WordPress è ben documentato.

D’accordo, sto faticando a trovare l’approccio giusto. Voglio mantenere il mio forum su Discourse per tutti i vantaggi E voglio anche offrire un corso semplice con 7 moduli distribuiti nell’arco di 14 settimane.

Con il tuo componente tema Feverbee, il layout sembra ottimo.

In precedenza, gestivo il corso con gruppi (cohort) e facevo semplicemente pagare gli utenti, dopodiché creavo manualmente il loro account Discourse. Andava bene, ma ora vorrei un’iscrizione più “aperta”.

Ho dato un’occhiata a Paid Membership Pro, ma non mi piace l’idea di utilizzare un sito WordPress solo per gestire l’abbonamento.

Ho usato Memberful per alcuni mesi, ma la commissione di transazione del 4,9% più l’abbonamento mensile sono un po’ eccessivi.

Discourse Subscriptions sembra una buona soluzione, anche se credo che non sia possibile mostrare le pagine dei piani a chi non è loggato (e non lo sarebbero, se non fossero già clienti).

La mia idea di effettuare una richiesta API POST per creare un nuovo membro e aggiungerlo a un Gruppo è una soluzione provvisoria accettabile mentre aumento il numero di membri. Una volta che avrò più utenti, pensavo di poter far realizzare del codice personalizzato.

Problema aggiuntivo: ho un’app iOS compilata dal repository e preferirei non dover noleggiare di nuovo una macchina virtuale per ricompilarla con un nuovo URL se dovessi utilizzare SSO da un sito WordPress. Potrei sbagliare sul fatto di dover modificare il file di configurazione dell’app; non l’ho ancora fatto.

WordPress SSO + Paid Membership Pro sembra l’unica opzione per una vera gestione degli abbonamenti.

Sono davvero entusiasta del plugin Discourse Subscriptions.

Sembra un problema risolvibile, forse pagando per la funzionalità o creando una parte del tuo sito accessibile anche a chi non ha ancora effettuato il pagamento.

Ho provato un po’ il plugin Subscriptions oggi. Penso che il mio consiglio sia di avere del contenuto gratuito sul tuo sito, in modo che le persone abbiano un motivo per creare un account prima di acquistare un corso. Penso che questa sia una soluzione abbastanza valida per rendere le pagine dei piani accessibili ai non abbonati. Ha senso che vogliano vedere un po’ di contenuto prima di pagare.

Buona osservazione, ma la mia esperienza di acquisto qui è piuttosto diversa. In questo caso, si tratta più di una vendita diretta, dove il forum Discourse fa parte del prodotto.

Ho bisogno di una soluzione che mi permetta di inviare un lead a un modulo di checkout che possa completare senza dover prima creare un utente Discourse.

Sì. Devi collegare l’abbonamento al nuovo modulo per gli utenti.

Il mio pensiero è che riuscire a far funzionare questa chiamata API POST mi fornirà una soluzione a breve termine mentre accoglio i clienti e posso permettermi uno sviluppo personalizzato.

Il tag di Google Tag Manager si sta attivando, ma non appare nulla all’interno di Discourse. Se riesco a far sì che GTM crei un nuovo utente e imposti il Gruppo corretto, la mia soluzione sarà al 70% a lungo termine e al 100% a breve termine.

Hai qualche idea su cosa potrebbe non funzionare?

<script type="application/json">
$.ajax({
method: "POST",
url: "https://site.co/invites",
headers: { "Api-Username": "system", "Api-Key": "12345" },
data: { 
"email": "grow@site.co",
"group_names": "Alumni",
"custom_message": "Welcome123"
}


});
</script>

Ho provato questo URL in Postman:
https://site.co/users.json?Api-Key=12345&Api-Username=system&email=hello@domain.com&group_names=Alumni&custom_message=Welcome321

Che mi ha restituito quanto segue:

{
    "success": true,
    "active": false,
    "message": "<p>Sei quasi arrivato alla fine! Abbiamo inviato un'email di attivazione a <b>hello@domain.com</b>. Segui le istruzioni contenute nell'email per attivare il tuo account.</p><p>Se non arriva, controlla la cartella spam.</p>"
}

Tuttavia non ho ricevuto alcuna email. Ho controllato i miei log in /logs e non c’è nulla elencato. Ho controllato anche lo spam.