API POST für neuen Benutzer

Ich versuche, über eine API eine POST-Anfrage zu stellen, um einen neuen Benutzer zu erstellen.

Anwendungsfall: Erstellen eines neuen Benutzers, nachdem ein Kreditkartenformular auf einer WordPress-Website abgesendet wurde. Letztendlich wird dies über Google Tag Manager mit JavaScript ausgelöst.

Um dies zu testen, habe ich den folgenden Code geschrieben, als PHP-Datei gespeichert und auf meinen Server hochgeladen. Ich erhalte einen Fehler: Parse error: syntax error, unexpected 'POST' (T_STRING) in /nas/content/live/username/newuser.php on line 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": "Custom message here"
}

?>

Was fehlt mir bei diesem POST? Muss ich Accept: application/json hinzufügen?

Wenn Sie mit PHP testen möchten, müssen Sie die curl_*-Funktionen verwenden.

Danke. Mir wird klar, dass ich PHP überhaupt nicht verwenden möchte; ich möchte nur JavaScript nutzen, da das ist, was ich mit GTM verwenden werde.

Vielleicht bringt mich das schon näher? Allerdings weiß ich nicht, wo ich den API-Schlüssel in diesem Skript hinzufügen soll:

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

API-Schlüssel/Benutzername in

headers: {}

Ich habe Folgendes, aber GTM meldet Fehler in Zeile 5. Können Sie mir helfen zu erkennen, was ich übersehen habe?

 <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( "Daten gespeichert: " + msg );
 });
 </script>

Sie haben den Api-Username vergessen, der mit dem von Ihnen erstellten API-Schlüssel verknüpft ist.
Bezüglich der Fehler müssen Sie weitere Informationen bereitstellen.

Versuch:

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

“Fehler in Zeile 5, Zeichen 15: Parse-Fehler. ‘}’ erwartet”

Es fehlen die ' um die Schlüssel. Und es sei denn, Sie haben es umbenannt, sollte es system heißen.

Ich würde empfehlen, dass Sie zuerst die Grundlagen von JavaScript lernen, bevor Sie Aufgaben übernehmen, die Sie noch nicht bewältigen können.

Entschuldigung, falls ich so wirke, als wüsste ich, was ich tue! Ich schätze deine Hilfe, @Arkshine, und werde weiter nach einer Lösung suchen.

Das ist definitiv eine Aufgabe, für die ich nicht gut vorbereitet bin, aber ich gebe mein Bestes. :slight_smile:

Ich habe es geschafft, die Anfrage zu speichern, indem ich Api-Username und Api-Key in Anführungszeichen gesetzt habe. Danke, Arkshine. Anschließend habe ich das Skript über GTM ausgeführt und meine Discourse-Protokolle überprüft, aber es gab keine Anzeigen.

Es wird kein neuer Benutzer erstellt.

Hast du irgendwelche Ideen?

Hier ist mein finales Skript 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( "Daten gespeichert: " + msg );
});
</script>

Ich glaube, Sie haben die API missverstanden. Dieser Endpunkt dient nicht dazu, einen Benutzer zu erstellen. Er generiert einen Einladungslink und sendet diesen an die E-Mail-Adresse des Benutzers. Sobald dieser angeklickt wird, kann sich der Benutzer registrieren.

Um manuell einen Benutzer zu erstellen, sollte dieser Endpunkt verwendet werden: Discourse API Docs

Nun, das war von mir unklug. Danke, Arkshine.

Ich fühle mich schon nah dran, aber ich sehe keine Änderungen in meinen Discourse-Logs.

Ich habe auch type: "POST", ausprobiert, leider ohne Erfolg.

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

Ich empfehle dir, einen oder zwei Schritte zurückzutreten, um das Problem zu beschreiben, das du lösen möchtest. Es ist nicht klar, ob der Weg, den du einschlägst, eine gute Lösung ist.

Gute Idee. Ich möchte einen neuen Benutzer in Discourse erstellen, der zwei Gruppen hinzugefügt wird, sobald jemand ein Zahlungsformular auf meiner WordPress-Website ausfüllt.

Mein Plan ist es, die Variablen für Name und E-Mail-Adresse vom Formular an die „Danke-Seite

Warum nutzen Sie nicht SSO und einen der mehreren hier dokumentierten WordPress-Abonnement-Manager? Wie man die Gruppenmitgliedschaft von WordPress aus aktualisiert, ist gut dokumentiert.

Alles klar, ich habe Schwierigkeiten, den richtigen Ansatz zu finden. Ich möchte mein Forum auf Discourse behalten – wegen all der Vorteile – und gleichzeitig einen einfachen Kurs mit 7 Modulen anbieten, die über 14 Wochen verteilt werden.

Mit deinem Feverbee Theme Component sieht das Layout großartig aus.

Früher habe ich den Kurs in Cohorts angeboten: Die Teilnehmer haben einfach gezahlt, und ich habe manuell ihre Discourse-Benutzerkonten erstellt. Das war in Ordnung, aber jetzt möchte ich eine „offene Anmeldung

Ich bin ziemlich begeistert vom Discourse Subscriptions-Plugin.

Das scheint ein lösbares Problem zu sein, entweder durch Bezahlung der Funktion oder indem man einen Teil der Website für Personen zugänglich macht, die noch nicht bezahlt haben.

Ich habe heute ein wenig mit dem Subscriptions-Plugin gearbeitet. Meine Empfehlung wäre, etwas kostenlosen Inhalt auf Ihrer Website anzubieten, damit Besucher einen Grund haben, ein Konto zu erstellen, bevor sie einen Kurs kaufen. Das ist meiner Meinung nach eine recht gute Lösung, um die Planseiten für Nicht-Abonnenten zugänglich zu machen. Es ergibt Sinn, dass sie sich vor dem Kauf einen kleinen Einblick in den Inhalt verschaffen möchten.

Guter Einblick, aber meine Käufererfahrung hier ist ganz anders. In diesem Fall geht es eher um einen Direktverkauf, bei dem das Discourse-Forum Teil des Produkts ist.

Ich benötige eine Lösung, mit der ich einen Interessenten zu einem Checkout-Formular leiten kann, das er ausfüllen kann, ohne dass er vorher einen Discourse-Benutzer erstellen muss.

Ja. Du musst das Abonnement mit dem neuen Benutzermodal verknüpfen.

Mein Gedanke ist, dass das Funktionieren dieses API-POSTs mir eine kurzfristige Lösung bietet, während ich Kunden onboarde und mir eine individuelle Entwicklung leisten kann.

Mein Google Tag Manager-Tag wird ausgelöst, aber in Discourse wird nichts angezeigt. Wenn ich GTM dazu bringen kann, einen neuen Benutzer zu erstellen und die richtige Gruppe festzulegen, ist meine Lösung zu 70 % langfristig und zu 100 % kurzfristig.

Haben Sie einen Hinweis darauf, was hier falsch laufen könnte?

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

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

Daraufhin erhielt ich Folgendes zurück:

{
    "success": true,
    "active": false,
    "message": "<p>Sie sind fast fertig! Wir haben eine Aktivierungs-E-Mail an <b>hello@domain.com</b> gesendet. Bitte folgen Sie den Anweisungen in der E-Mail, um Ihr Konto zu aktivieren.</p><p>Falls sie nicht ankommt, überprüfen Sie bitte Ihren Spam-Ordner.</p>"
}

Ich habe jedoch keine E-Mail erhalten. Ich habe meine Logs unter /logs überprüft, und es ist nichts aufgeführt. Auch den Spam-Ordner habe ich geprüft.