POST API para Nuevo Usuario

Estoy intentando realizar una solicitud POST a través de la API para crear un nuevo usuario.

Caso de uso: Crear un nuevo usuario una vez que se envía un formulario de tarjeta de crédito en un sitio de WordPress. En última instancia, esto se activará desde Google Tag Manager usando JavaScript.

Para probarlo, he escrito lo siguiente, lo he guardado como un archivo PHP y lo he subido a mi servidor. Recibo un error de Error de parseo: error de sintaxis, 'POST' inesperado (T_STRING) en /nas/content/live/username/newuser.php en la línea 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": "Mensaje personalizado aquí"
}

?>

¿Qué me falta en esta solicitud POST? ¿Necesito agregar Accept: application/json a esto?

Si deseas probar con PHP, necesitarás usar las funciones curl_*.

Gracias. Me estoy dando cuenta de que no quiero usar PHP en absoluto; solo quiero usar JavaScript, ya que es lo que usaré con GTM.

¿Quizás esto me está acercando más? Aunque no sé dónde agregar la clave API en este script:

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

Clave de API/usuario en

headers: {}

Tengo lo siguiente, aunque GTM está marcando errores en la línea 5. ¿Puedes ayudarme a ver qué me falta?

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

Te falta Api-Username asociado a la clave de API que creaste.
Sobre los errores, necesitas proporcionar más información.

Intentando:

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

“Error en la línea 5, carácter 15: Error de análisis. Se esperaba ‘}’”

Faltan las comillas simples ' alrededor de las claves. Y a menos que las hayas renombrado, debería ser system.

Te recomendaría que aprendas primero lo básico de JavaScript antes de realizar tareas que aún no estás en condiciones de manejar.

¡Disculpas si parezco alguien que sabe lo que está haciendo! Agradezco tu ayuda, @Arkshine, y seguiré buscando cómo resolver esto.

Esto es absolutamente una tarea para la que no estoy preparado, pero lo estoy intentando. :slight_smile:

Logré que la solicitud se guardara poniendo Api-Username y Api-Key entre comillas. Gracias, Arkshine. Luego ejecuté el script a través de GTM y revisé los registros de Discourse, pero no apareció nada.

No se está generando ningún usuario nuevo.

¿Alguna idea?

Aquí está mi script final en 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( "Datos guardados: " + msg );
});
</script>

Creo que malinterpretaste la API. Este endpoint no es para crear un usuario. Generará un enlace de invitación y lo enviará al correo electrónico del usuario. Una vez que haga clic, el usuario podrá registrarse.

Para crear un usuario manualmente, debería ser este endpoint: Discourse API Docs

Bueno, eso fue una tontería de mi parte. Gracias, Arkshine.

Me siento cerca, aunque no estoy viendo ningún cambio en mis registros de Discourse.

También he probado con type: "POST", sin éxito.

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

Recomiendo que den un paso o dos hacia atrás para describir el problema que intentan resolver. No está claro que el camino que están siguiendo sea una buena solución.

Buena idea. Quiero crear un nuevo usuario en Discourse y asignarlo a dos grupos cuando alguien complete un formulario de pago en mi sitio de WordPress.

Mi plan es pasar las variables de nombre y correo electrónico desde el formulario a la página de agradecimiento, y luego enviar al comprador un correo electrónico con sus nuevas credenciales de acceso.

Google Tag Manager puede extraer las variables de nombre y correo electrónico de la URL y luego añadirlas al script publicado anteriormente.

¿Hay una mejor manera de hacerlo? No quiero implementar SSO con WP Discourse.

¿Por qué no usar SSO y uno de los varios gestores de suscripciones de WordPress documentados aquí? La forma de actualizar la membresía de los grupos desde WordPress está bien documentada.

Está bien, estoy teniendo dificultades para encontrar el enfoque adecuado. Quiero mantener mi foro en Discourse por todos sus beneficios Y también quiero ofrecer un curso sencillo con 7 módulos distribuidos a lo largo de 14 semanas.

Con tu componente de tema Feverbee, el diseño se ve excelente.

Anteriormente, impartía el curso en cohortes: la gente pagaba y yo creaba manualmente su cuenta de usuario en Discourse. Eso funcionaba bien, pero ahora quiero un sistema de “matrícula abierta”.

Investigué Paid Membership Pro, pero no me convence la idea de usar un sitio de WordPress solo para gestionar las membresías.

Utilicé Memberful durante unos meses, pero su comisión por transacción del 4,9 % más la cuota mensual me parece un poco excesiva.

Discourse Subscriptions parece una buena opción, aunque creo que no puedo mostrar las páginas de planes a usuarios que no hayan iniciado sesión (y no lo habrían hecho si aún no fueran clientes).

Mi idea de realizar una solicitud POST a la API para crear un nuevo miembro y agregarlo a un grupo es una solución provisional mientras atraigo a más miembros. Una vez que tenga más usuarios, pensé en encargar algún desarrollo personalizado.

Problema adicional: tengo una aplicación para iOS compilada desde el repositorio y preferiría no alquilar una máquina virtual nuevamente para volver a compilarla con una nueva URL si tengo que usar SSO desde un sitio de WordPress. Podría estar equivocado sobre la necesidad de modificar el archivo de configuración de la aplicación; aún no lo he intentado.

Parece que WordPress SSO + Paid Membership Pro es la única opción viable para la gestión real de miembros.

¡Estoy bastante emocionado con el plugin Discourse Subscriptions.

Eso parece un problema solucionable, tal vez pagando por la funcionalidad o quizás teniendo una parte de tu sitio accesible para personas que aún no han pagado.

Hoy he probado un poco el plugin de Suscripciones. Creo que lo que recomendaría es que tengas contenido gratuito en tu sitio para que las personas tengan una razón para crear una cuenta antes de comprar un curso. Considero que esta es una solución bastante decente para hacer que las páginas de planes estén disponibles para los no suscriptores. Tiene sentido que quieran ver un poco del contenido antes de pagar.

Buena observación, pero mi experiencia como comprador aquí es bastante diferente. En este caso, se trata más de una venta directa, donde el foro de Discourse es parte del producto.

Necesito una solución que me permita enviar a un cliente potencial a un formulario de pago que pueda completar sin necesidad de crear primero una cuenta de usuario en Discourse.

Sí. Necesitas que la suscripción esté vinculada al modal de nuevo usuario.

Mi idea es que simplemente lograr que esta API POST funcione me dará una solución a corto plazo mientras incorporo clientes y puedo permitirme el desarrollo personalizado.

Mi etiqueta de Google Tag Manager se está ejecutando, aunque no aparece nada dentro de Discourse. Si puedo lograr que GTM cree un nuevo usuario y establezca el Grupo correcto, mi solución será 70% a largo plazo y 100% a corto plazo.

¿Alguna idea sobre qué podría estar mal con esto?

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

Probé esta URL en Postman:
https://site.co/users.json?Api-Key=12345&Api-Username=system&email=hello@domain.com&group_names=Alumni&custom_message=Welcome321

Lo cual me devolvió esto:

{
    "success": true,
    "active": false,
    "message": "<p>¡Casi terminas! Hemos enviado un correo de activación a <b>hello@domain.com</b>. Sigue las instrucciones del correo para activar tu cuenta.</p><p>Si no llega, revisa tu carpeta de spam.</p>"
}

Sin embargo, no he recibido ningún correo. Revisé mis registros en /logs y no hay nada listado. También revisé el spam.