Jump to content

Error 500 al hacer post al webservice con Jquery


FaustoRM

Recommended Posts

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

 

 

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

 

 

Hola Enrique, hay una cosa que no entiendo.

 

El proceso sería el siguiente:

  1. Cojo el correo y reviso que no esté en la base de datos, ok.
  2. Genero la contraseña, ok.
  3. Redirecciono a su cuenta. Esto es lo que no entiendo, ¿a qué te refieres?

Saludos

Link to comment
Share on other sites

 

 

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

  • 3 weeks later...

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

  • nadie locked this topic
Guest
This topic is now closed to further replies.
×
×
  • Create New...