Error gastos de envío con Paypal

Desde que paypal ha actualizado su modulo para prestashop por la vulnerabilidad del ssl 3.0,  hemos observado que muchos clientes se han quejado sobre errores en los gastos de envío cuando pagan con paypal.

El error en gastos de envío con paypal es que a la hora de redirigir a la plataforma de pago de paypal este borra los gastos de envío o modifica el precio, esto es debido a que el modulo sobrescribe la información de la dirección del usuario en Prestashop, y por lo general no inserta ningún dato de provincia y como no existe provincia aparecen como portes gratuitos.

Esto ha provocado que muchos administradores se rompan la cabeza buscando el error ya que en nuestra tienda prestashop aparece todo correcto hasta que se accede a paypal.

Si tienes pedidos en los que los gastos de envío no corresponden a los que tienes configurados en prestashop y han realizado el pago con paypal tienes el mismo problema, si no es así mejor no toques nada y continua como siempre pero ten bien guardado este post por si en un futuro te ocurre.

Para solucionar este fallo de paypal debemos modificar un par de ficheros de nuestro modulo de paypal.

Buscamos el fichero /modules/paypal/views/templates/hook/integral_evolution_payment.tpl, lo abrimos y buscamos la linea donde aparece:

<input type="hidden" name="address_override" value="true" />

Y lo modificamos dejándolo de esta forma

<input type="hidden" name="address_override" value="false" />

Buscamos el fichero /modules/paypal/express_checkout/payment.php, lo abrimos y buscamos el siguiente codigo:

/* Create address */
if (is_array($address) && isset($address['id_address']))
$address = new Address($address['id_address']);

if ((!$address || !$address->id) && $customer->id)
{//If address does not exists, we create it
$address = setCustomerAddress($ppec, $customer);
$address->add();
}
else if ($customer->id)
{//If address exists, we update it with new informations
$address = setCustomerAddress($ppec, $customer, $address->id);
$address->save();
}

Y lo dejamos asi

/* Create address */
if (is_array($address) && isset($address['id_address']))
$address = new Address($address['id_address']);

if ((!$address || !$address->id) && $customer->id)
{//If address does not exists, we create it
$address = setCustomerAddress($ppec, $customer);
//$address->add();
}
else if ($customer->id)
{//If address exists, we update it with new informations
$address = setCustomerAddress($ppec, $customer, $address->id);
//$address->save();
}

Como se puede observar hemos comentado las lineas $addess->add(); y $addess->save(); , es en este código donde sobrescribe la nueva dirección.

Realizar copia de seguridad antes de realizar modificaciones, si actualiza el modulo deberá volver a realizar las modificaciones.