Requête POST API pour un nouvel utilisateur

Je tente d’effectuer une requête POST via API pour créer un nouvel utilisateur.

Cas d’utilisation : Créer un nouvel utilisateur une fois qu’un formulaire de carte de crédit est soumis sur un site WordPress. Finalement, cela sera déclenché depuis Google Tag Manager en utilisant JavaScript.

Pour tester cela, j’ai écrit le code suivant, enregistré dans un fichier PHP, et téléchargé le fichier sur mon serveur. Je reçois l’erreur suivante : Erreur de syntaxe : erreur de syntaxe, 'POST' inattendu (T_STRING) dans /nas/content/live/username/newuser.php à la ligne 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": "Message personnalisé ici"
}

?>

Qu’est-ce qui manque dans cette requête POST ? Dois-je ajouter Accept: application/json à cette requête ?

Si vous souhaitez tester avec PHP, vous devrez utiliser les fonctions curl_*.

1 « J'aime »

Merci. Je réalise que je ne veux pas du tout utiliser PHP ; je veux simplement utiliser JavaScript, car c’est ce que j’utiliserai avec GTM.

Peut-être que cela me rapproche du but ? Bien que je ne sache pas où ajouter la clé API dans ce script :

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

Clé API/nom d’utilisateur dans

headers: {}
1 « J'aime »

J’ai le code suivant, mais GTM signale des erreurs à la ligne 5. Pouvez-vous m’aider à voir ce qui manque ?

 <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( "Données enregistrées : " + msg );
 });
 </script>

Vous omettez le Api-Username associé à la clé API que vous avez créée.
En ce qui concerne les erreurs, vous devez fournir plus d’informations.

1 « J'aime »

Tentative :

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

“Erreur à la ligne 5, caractère 15 : erreur d’analyse. ‘}’ attendu”

Il manque des guillemets autour des clés. Et sauf si vous avez renommé, cela devrait être system.

Je vous recommande d’apprendre d’abord les bases de JavaScript avant de vous lancer dans des tâches que vous ne maîtrisez pas encore.

Désolé si j’ai l’air de quelqu’un qui sait ce qu’il fait ! Je vous remercie de votre aide, @Arkshine, et je continuerai à chercher comment résoudre ce problème.

C’est absolument une tâche pour laquelle je suis mal préparé, mais j’essaie. :slight_smile:

J’ai réussi à faire en sorte que la requête soit enregistrée en mettant Api-Username et Api-Key entre guillemets. Merci Arkshine. J’ai ensuite exécuté le script via GTM, puis vérifié mes journaux Discourse, mais rien ne s’est affiché.

Aucun nouvel utilisateur n’est créé.

Des idées ?

Voici mon script final dans 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( "Données enregistrées : " + msg );
});
</script>
1 « J'aime »

Je pense que vous avez mal compris l’API. Ce point de terminaison ne sert pas à créer un utilisateur. Il génère un lien d’invitation et l’envoie par e-mail à l’utilisateur. Une fois cliqué, l’utilisateur pourra s’inscrire.

Pour créer manuellement un utilisateur, il faut utiliser ce point de terminaison : Discourse API Docs

2 « J'aime »

Eh bien, c’était de ma part une erreur. Merci, Arkshine.

Je sens que je suis sur la bonne voie, mais je ne vois aucun changement dans mes journaux Discourse.

J’ai aussi essayé type: "POST", sans succès.

<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>

Je vous recommande de faire un ou deux pas en arrière pour décrire le problème que vous essayez de résoudre. Il n’est pas clair que la voie que vous empruntez soit une bonne solution.

2 « J'aime »

Bonne idée. Je souhaite créer un nouvel utilisateur sur Discourse et l’ajouter à deux groupes lorsqu’une personne remplit un formulaire de paiement sur mon site WordPress.

Mon plan consiste à transmettre les variables nom/e-mail du formulaire vers la page de remerciement, puis à envoyer à l’acheteur un e-mail contenant ses identifiants de connexion.

Google Tag Manager peut extraire les variables nom/e-mail de l’URL, puis les ajouter au script publié ci-dessus.

Y a-t-il une meilleure façon de procéder ? Je ne souhaite pas mettre en place l’authentification unique (SSO) avec WP Discourse.

Pourquoi ne pas utiliser SSO et l’un des nombreux gestionnaires d’abonnements WordPress documentés ici ? La mise à jour de l’appartenance aux groupes depuis WordPress est bien documentée.

Bon, j’ai du mal à trouver la bonne approche. Je souhaite conserver mon forum sur Discourse pour tous ses avantages ET offrir un cours simple composé de 7 modules répartis sur 14 semaines.

Avec votre composant de thème Feverbee, la mise en page est excellente.

Auparavant, je gérais le cours par cohortes : les participants payaient, puis je créais manuellement leur compte Discourse. Cela fonctionnait, mais je souhaite maintenant passer à un système d’inscription « ouvert ».

J’ai examiné Paid Membership Pro, mais l’idée d’utiliser un site WordPress uniquement pour gérer les adhésions ne me plaît pas vraiment.

J’ai utilisé Memberful pendant quelques mois, mais leurs frais de transaction de 4,9 % plus les frais mensuels sont un peu excessifs.

Discourse Subscriptions semble prometteur, bien que je pense qu’il n’est pas possible d’afficher les pages des plans aux personnes non connectées (ce qui serait le cas si elles n’étaient pas encore des clients).

Mon idée d’effectuer une requête API POST pour créer un nouveau membre et l’ajouter à un groupe est une solution temporaire acceptable tant que je continue à attirer des membres. Une fois que j’en aurai davantage, je pourrais faire développer un code personnalisé.

Problème bonus : j’ai une application iOS compilée à partir du dépôt et je préférerais éviter de louer à nouveau une machine virtuelle pour la recompiler avec une nouvelle URL si je devais utiliser SSO depuis un site WordPress. Je peux me tromper sur la nécessité de modifier le fichier de configuration de l’application ; je ne l’ai pas encore fait.

WordPress SSO + Paid Membership Pro semble être la seule option viable pour la gestion réelle des membres.

Je suis vraiment enthousiaste à propos du plugin Discourse Subscriptions.

Cela semble être un problème soluble, soit en payant pour cette fonctionnalité, soit en ayant une partie de votre site accessible aux personnes qui n’ont pas encore payé.

J’ai un peu testé le plugin Subscriptions aujourd’hui. Je pense que ce que je recommanderais, c’est de proposer du contenu gratuit sur votre site, afin que les visiteurs aient une raison de créer un compte avant d’acheter un cours. Je trouve que c’est une solution assez pertinente pour rendre les pages de plans accessibles aux non-abonnés. Cela paraît logique : ils souhaitent voir un aperçu du contenu avant de payer.

Bonne analyse, mais mon expérience en tant qu’acheteur est ici tout à fait différente. Il s’agit plutôt d’une vente directe, où le forum Discourse fait partie intégrante du produit.

J’ai besoin d’une solution me permettant d’orienter un prospect vers un formulaire de paiement qu’il pourra remplir sans avoir à créer un compte Discourse au préalable.

Ouais. Il faut que l’abonnement soit intégré au modal pour les nouveaux utilisateurs.

Mon idée est que la simple mise en œuvre de cette requête POST via l’API me fournira une solution à court terme pendant que j’accueille les clients et que je peux me permettre un développement personnalisé.

Mon tag Google Tag Manager se déclenche, mais rien n’apparaît dans Discourse. Si je parviens à faire en sorte que GTM crée un nouvel utilisateur et affecte le bon groupe, ma solution sera à 70 % viable à long terme et à 100 % fonctionnelle à court terme.

Avez-vous des idées sur ce qui pourrait clocher ?

<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>

J’ai testé cette URL dans Postman :
https://site.co/users.json?Api-Key=12345&Api-Username=system&email=hello@domain.com&group_names=Alumni&custom_message=Welcome321

Ce qui m’a renvoyé ceci :

{
    "success": true,
    "active": false,
    "message": "<p>Vous y êtes presque ! Nous avons envoyé un e-mail d'activation à <b>hello@domain.com</b>. Veuillez suivre les instructions contenues dans l'e-mail pour activer votre compte.</p><p>Si vous ne le recevez pas, vérifiez vos courriers indésirables.</p>"
}

Cependant, je n’ai reçu aucun e-mail. J’ai vérifié mes journaux dans /logs et rien n’y figure. J’ai également vérifié mes courriers indésirables.

1 « J'aime »