Jump to content

Metodo de pago en función del importe 1.6-SOLUCIONADO


guelu

Recommended Posts

Hola amigos,

 

Aquí estoy con otra duda,.... perdonad a los novatos....

 

La cuestión es que algunos de los artículos que voy a vender en mi website son de un valor elevado. Esto implica, como todos sabeis, unos riesgos evidentes para usar un método de pago como paypal.

Por ello me gustaría que cuando la cantidad del carrito fuese mayor de, por ejemplo, 150€ , la opción de pago con paypal no le apareciera al cliente.

 

Buscando y buscando he encontrado este hilo: http://www.prestashop.com/forums/topic/241236-solucionado-forma-de-pago-en-funcion-del-importe/

 

Donde la solución la prueban para 1.4.8.2 y no se si funcionará en 1.609 pero además tal cual está explicado... la verdad no me entero mucho, no se bien que archivo modifican ni donde dentro de ese archivo.

 

Espero que alguien pueda explicarnos algo.

Gracias!

Edited by guelu (see edit history)
Link to comment
Share on other sites

Posiblemente esa modificación te sirva, por lo que he visto por encima están modificando el módulo de paypal. Está claro que ha sido modificado desde la 1.4, pero esta función hookpaymentreturn debería de seguir existiendo ya que esto hace que aparezca en módulo anclado a un hook. Busca dentro de la carpeta del módulo este código y aplica los cambios que indican, si no das con ello indica qué te está ocurriendo. 

Link to comment
Share on other sites

Hola amigos!

 

Como la forma de pago que yo quiero ocultar para ventas mayores de 150€ es paypal, busqué la función que me indicasteis. en mi caso estaba en modules>paypal>paypal.php

La función inicialmente estaba  asi:

	public function hookPaymentReturn()
	{
			if (!$this->active)
			return null;

		return $this->fetchTemplate('confirmation.tpl');
	}

y yo la he cambiado por esta:

public function hookPaymentReturn($params)
	{
		if (!$this->active)
			return;
		if ($params['cart']->id_currency == 1 && $params['cart']->getOrderTotal() > 200)
			return;

		if ($params['cart']->id_currency == 2 && $params['cart']->getOrderTotal() > 150)
			return;
		if (!$this->active)
			return null;

		return $this->fetchTemplate('confirmation.tpl');
	}

El tema es que no me oculta de ninguna manera el paypal cuando llego al paso 5 del proceso de pago.

 

A ver si podeis ayudarme....

 

Gracias!

Link to comment
Share on other sites

Hola amigos!

 

Como la forma de pago que yo quiero ocultar para ventas mayores de 150€ es paypal, busqué la función que me indicasteis. en mi caso estaba en modules>paypal>paypal.php

La función inicialmente estaba  asi:

	public function hookPaymentReturn()
	{
			if (!$this->active)
			return null;

		return $this->fetchTemplate('confirmation.tpl');
	}

y yo la he cambiado por esta:

public function hookPaymentReturn($params)
	{
		if (!$this->active)
			return;
		if ($params['cart']->id_currency == 1 && $params['cart']->getOrderTotal() > 200)
			return;

		if ($params['cart']->id_currency == 2 && $params['cart']->getOrderTotal() > 150)
			return;
		if (!$this->active)
			return null;

		return $this->fetchTemplate('confirmation.tpl');
	}

El tema es que no me oculta de ninguna manera el paypal cuando llego al paso 5 del proceso de pago.

 

A ver si podeis ayudarme....

 

Gracias!

 

Has revisado cuáles son los IDs de tus monedas?

Link to comment
Share on other sites

Gracias por la respuesta Joseantgv,

La verdad es que no y no se muy bien como puedo verlo... :(

se definen en el mismo archivo?

 

Creo que el usuario Joseantgv se refiere a que si en esta comparación:

if ($params['cart']->id_currency == X

donde pongo X, estas colocando el ID real de la moneda que puedes ver en la pestaña Localización -> Monedas (Columna ID)

Link to comment
Share on other sites

Ahhhhh Rafaelamargo!!!

 

Efectivamente, el problema estaba en eso que comentas, la función a modificar es :



 public function hookPayment($params)
 


Os pego como yo la he dejado y funciona perfectamente:

public function hookPayment($params)
	{
		if (!$this->active)
			return;
		
		if ($params['cart']->id_currency == 1 && $params['cart']->getOrderTotal() > 200)
			return;

		if (!$this->active)
			return;

		$use_mobile = $this->useMobile();

		if ($use_mobile)
			$method = ECS;
		else
			$method = (int)Configuration::get('PAYPAL_PAYMENT_METHOD');

		if (isset($this->context->cookie->express_checkout))
			$this->redirectToConfirmation();

		$this->context->smarty->assign(array(
			'logos' => $this->paypal_logos->getLogos(),
			'sandbox_mode' => Configuration::get('PAYPAL_SANDBOX'),
			'use_mobile' => $use_mobile,
			'PayPal_lang_code' => (isset($iso_lang[$this->context->language->iso_code])) ? $iso_lang[$this->context->language->iso_code] : 'en_US'
		));

		if ($method == HSS)
		{
			$billing_address = new Address($this->context->cart->id_address_invoice);
			$delivery_address = new Address($this->context->cart->id_address_delivery);
			$billing_address->country = new Country($billing_address->id_country);
			$delivery_address->country = new Country($delivery_address->id_country);
			$billing_address->state	= new State($billing_address->id_state);
			$delivery_address->state = new State($delivery_address->id_state);

			$cart = $this->context->cart;
			$cart_details = $cart->getSummaryDetails(null, true);

			if ((int)Configuration::get('PAYPAL_SANDBOX') == 1)
				$action_url = 'https://securepayments.sandbox.paypal.com/acquiringweb';
			else
				$action_url = 'https://securepayments.paypal.com/acquiringweb';

			$shop_url = PayPal::getShopDomainSsl(true, true);

			$this->context->smarty->assign(array(
				'action_url' => $action_url,
				'cart' => $cart,
				'cart_details' => $cart_details,
				'currency' => new Currency((int)$cart->id_currency),
				'customer' => $this->context->customer,
				'business_account' => Configuration::get('PAYPAL_BUSINESS_ACCOUNT'),
				'custom' => Tools::jsonEncode(array('id_cart' => $cart->id, 'hash' => sha1(serialize($cart->nbProducts())))),
				'gift_price' => (float)$this->getGiftWrappingPrice(),
				'billing_address' => $billing_address,
				'delivery_address' => $delivery_address,
				'shipping' => $cart_details['total_shipping_tax_exc'],
				'subtotal' => $cart_details['total_price_without_tax'] - $cart_details['total_shipping_tax_exc'],
				'time' => time(),
				'cancel_return' => $this->context->link->getPageLink('order.php'),
				'notify_url' => $shop_url._MODULE_DIR_.$this->name.'/ipn.php',
				'return_url' => $shop_url._MODULE_DIR_.$this->name.'/integral_evolution/submit.php?id_cart='.(int)$cart->id,
				'tracking_code' => $this->getTrackingCode($method),
				'iso_code' => Tools::strtoupper($this->context->language->iso_code),
				'payment_hss_solution' => Configuration::get('PAYPAL_HSS_SOLUTION'),
				'payment_hss_template' => Configuration::get('PAYPAL_HSS_TEMPLATE'),
			));
			$this->getTranslations();
			return $this->fetchTemplate('integral_evolution_payment.tpl');
		}
		elseif ($method == WPS || $method == ECS)
		{
			$this->getTranslations();
			$this->context->smarty->assign(array(
				'PayPal_integral' => WPS,
				'PayPal_express_checkout' => ECS,
				'PayPal_payment_method' => $method,
				'PayPal_payment_type' => 'payment_cart',
				'PayPal_current_page' => $this->getCurrentUrl(),
				'PayPal_tracking_code' => $this->getTrackingCode($method)));

			return $this->fetchTemplate('express_checkout_payment.tpl');
		}

		return null;
	}

Lo único que he hecho es insertar al principio de la función el código con el que estábamos trabajando:

	{
		if (!$this->active)
			return;
		
		if ($params['cart']->id_currency == 1 && $params['cart']->getOrderTotal() > 200)
			return;

Como yo solo trabajo con una moneda solo he trabajado con un id_currency, quien trabaje con varias monedas solo tendrá que crear tantos if ($params['cart']..... etc como monedas tenga. Aqui un ejemplo con dos monedas:

                if (!$this->active)
			return;
		if ($params['cart']->id_currency == 1 && $params['cart']->getOrderTotal() > 200)
			return;

		if ($params['cart']->id_currency == 2 && $params['cart']->getOrderTotal() > 150)
			return;

Bueno, pues podemos dar el tema por solucionado. Muchas gracias a todos los que habeis ayudado a conseguirlo!!! :D

Link to comment
Share on other sites

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