guelu Posted October 14, 2014 Share Posted October 14, 2014 (edited) 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 October 19, 2014 by guelu (see edit history) Link to comment Share on other sites More sharing options...
jesa Posted October 14, 2014 Share Posted October 14, 2014 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 More sharing options...
guelu Posted October 16, 2014 Author Share Posted October 16, 2014 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 More sharing options...
joseantgv Posted October 17, 2014 Share Posted October 17, 2014 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 More sharing options...
guelu Posted October 18, 2014 Author Share Posted October 18, 2014 Gracias por la respuesta Joseantgv, La verdad es que no y no se muy bien como puedo verlo... se definen en el mismo archivo? Link to comment Share on other sites More sharing options...
rafaelamargo Posted October 18, 2014 Share Posted October 18, 2014 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 More sharing options...
guelu Posted October 18, 2014 Author Share Posted October 18, 2014 Buenos días Rafaelamargo Si, si, acabo de mirarlo y los id coinciden, lo que voy a hacer es quitar una de las monedas que tengo y quedarme solo con el Euro cuyo ID=1 a ver... Link to comment Share on other sites More sharing options...
guelu Posted October 18, 2014 Author Share Posted October 18, 2014 No, sigue sin funcionar, sigue presentando paypal en las opciones de pago... Link to comment Share on other sites More sharing options...
rafaelamargo Posted October 18, 2014 Share Posted October 18, 2014 Intenta hacerlo dentro del: public function hookPayment($params) no del: public function hookPaymentReturn($params) y comprueba si funciona. Ya que el hookPayment es donde aparecen el listado de módulos a la hora de elegir con que módulo pagar.Suerte ! Link to comment Share on other sites More sharing options...
guelu Posted October 19, 2014 Author Share Posted October 19, 2014 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!!! Link to comment Share on other sites More sharing options...
Recommended Posts