FaustoRM Posted September 16, 2015 Share Posted September 16, 2015 Hola a todos, es la primera vez que escribo en el foro con una duda, normalmente todo le ha pasado a alguien ya XD. No es el caso, esta vez no he encontrado a nadie con el mismo problema. Os cuento, a ver si alguien me puede ayudar. La versión de la tienda es la 1.6.0.14 y el theme es LEO Winestore. El problema es el siguiente: Tengo una ventana modal hecha entera por mi, el objetivo es que el usuario introduzca su e-mail y con ello registrarlo directamente. Para ello hay un formulario con dos input visibles: el email y el check de aceptación TyC. La idea es que al darle al botón de envío del formulario se haga una llamada al webservice y se registre al usuario en segundo plano, pero al hacer esto la consola de Chrome devuelve un error 500: POST http://mitienda.com/es/api/customers/?ws_key=KEYCORRECTA 500 (Internal Server Error) Por supuesto, la url desde el navegador funciona correctamente, el problema viene al hacerle la petición POST, porque cambiando a GET se obtiene una respuesta normal (un xml con todos los clientes, en este caso), pero claro, no registra al usuario... Este es el código: function enviarRegistroAPI() { $.ajax({ url: "http://mitienda.com/es/api/customers/?ws_key=KEYCORRECTA", data: { xml: string // el xml en string con la estructura correcta }, type: "post", dataType: "text", success : function( data ) { console.log(data); }, error : function (xhr, ajaxOptions, thrownError){ console.log(xhr.status); console.log(thrownError); } }); }; Más info: Cambié los permisos de los archivos del index y el dispatcher del webservice a 755, por si acaso. Obviamente tampoco funcionó así... El string que contiene el xml es el sigueinte (he puesto uno de prueba por asegurar que no era ese el problema, aunque quizá lo sea): var string = '<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\ <prestashop xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n\ <customer>\n\ <id></id>\n\ <id_default_group></id_default_group>\n\ <id_lang>1</id_lang>\n\ <newsletter_date_add></newsletter_date_add>\n\ <ip_registration_newsletter></ip_registration_newsletter>\n\ <last_passwd_gen></last_passwd_gen>\n\ <secure_key></secure_key>\n\ <deleted></deleted>\n\ <passwd>12345566</passwd>\n\ <lastname>Apellido</lastname>\n\ <firstname>Cliente</firstname>\n\ <email>[email protected]</email>\n\ <id_gender></id_gender>\n\ <birthday></birthday>\n\ <newsletter>1</newsletter>\n\ <optin></optin>\n\ <website></website>\n\ <company></company>\n\ <siret></siret>\n\ <ape></ape>\n\ <outstanding_allow_amount></outstanding_allow_amount>\n\ <show_public_prices></show_public_prices>\n\ <id_risk></id_risk>\n\ <max_payment_days></max_payment_days>\n\ <active></active>\n\ <note></note>\n\ <is_guest></is_guest>\n\ <id_shop></id_shop>\n\ <id_shop_group></id_shop_group>\n\ <date_add></date_add>\n\ <date_upd></date_upd>\n\ <associations></associations>\n\ </customer>\n\ </prestashop>'; ¿Alguien sabe algo al respecto? Gracias de antebrazo Link to comment Share on other sites More sharing options...
joseantgv Posted September 16, 2015 Share Posted September 16, 2015 Has habilitado errores para ver si te devuelve un error distinto al 500? 1 Link to comment Share on other sites More sharing options...
FaustoRM Posted September 16, 2015 Author Share Posted September 16, 2015 Hola Enrique, no he encontrado otra forma de hacerlo. El truco está en que sólo queremos pedir el correo, generamos la password aleatoriamente y se la mandamos por correo. Si conoces otra forma de hacerlo puede ser una alternativa. Saludos Link to comment Share on other sites More sharing options...
FaustoRM Posted September 16, 2015 Author Share Posted September 16, 2015 Has habilitado errores para ver si te devuelve un error distinto al 500? Hola Joseantgv, sí, he probado y no obtengo ningún otro error :S Gracias! Link to comment Share on other sites More sharing options...
FaustoRM Posted September 16, 2015 Author Share Posted September 16, 2015 OK Enrique, creo que te he entendido, en cuanto pueda lo intento así y os cuento. Por otro lado, sí le estoy pasando nombre y apellidos, en ese caso no debería devolver un 500 si no un xml indicando el error, ¿no? Gracias! Link to comment Share on other sites More sharing options...
FaustoRM Posted September 17, 2015 Author Share Posted September 17, 2015 Hola Enrique, hay una cosa que no entiendo. El proceso sería el siguiente: Cojo el correo y reviso que no esté en la base de datos, ok. Genero la contraseña, ok. Redirecciono a su cuenta. Esto es lo que no entiendo, ¿a qué te refieres? Saludos Link to comment Share on other sites More sharing options...
FaustoRM Posted September 17, 2015 Author Share Posted September 17, 2015 Perfecto, vamos a verlo. Gracias Link to comment Share on other sites More sharing options...
FaustoRM Posted September 18, 2015 Author Share Posted September 18, 2015 He probado de otra forma, mandando los datos en json a atuhcontroller, os pego el código: function submitFunction() { $.ajax({ type: 'POST', url: basedir, async: true, cache: false, dataType : "json", data: { controller: 'authentication', SubmitCreate: 1, email_create:1, customer_privacy:1, ajax: true, passwd: '1dsfsdfsdfsd', is_new_customer:1, lastname:"Testeo ", popup :1, firstname: "Cliente", customer_firstname:"Cliente", customer_lastname:"Testeo ", email_create: $( "#caja_email" ).val(), token: token }, success: function(jsonData) { if (jsonData.hasError) { var errors = ''; for(error in jsonData.errors){ //IE6 bug fix if(error != 'indexOf'){ //errors += '<li>'+jsonData.errors[error]+'</li>'; //$('.agru').html('<ol>'+errors+'</ol>').show(); alert(jsonData.errors[error]); } } } else { console.log(jsonData); } }, error: function(XMLHttpRequest, textStatus, errorThrown) { alert("TECHNICAL ERROR: unable to load form.\n\nDetails:\nError thrown: " + XMLHttpRequest + "\n" + 'Text status: ' + textStatus); console.log(XMLHttpRequest); } }); return false; } Lo que obtengo como respuesta es el formulario de registro con los datos que le estamos mandando, lo cual creo que es lo correcto, pero no registra al usuario. En ningún momento se produce ningún error. He comprobado que todos los campos requeridos llevan su atributo "value" correcto, y todos parecen estar bien... pero no funciona... Tiene que ser alguna tontería que estoy pasando por alto. ¿Qué estoy haciendo mal? Saludos Link to comment Share on other sites More sharing options...
FaustoRM Posted October 4, 2015 Author Share Posted October 4, 2015 No he conseguido resolver esto, pero he optado por una solución que no pase por usar el webservice. Sigo con un problema y he abierto este hilo al respecto. https://www.prestashop.com/forums/topic/472995-registro-de-clientes-por-ajax-no-funciona/ Gracias a todos por vuestras respuestas PD: ¿Tengo que cambiar el título por [sOLUCIONADO] en este caso? Link to comment Share on other sites More sharing options...
Recommended Posts