Comparador de precios Comparador de precios


PayPal, descripcion, utf-8 y descuentos

Evolucion de la version 2.2.

Usuarios de oscommerce v. 2.3
Reglas del Foro
http://www.comercianos.com/reglas-del-foro-t61.html

Realizad siempre una copia de seguridad antes de realizar modificaciones. Realizad las modificaciones bajo vuestra responsabilidad, comercianos no sera responsable en ningun caso de los errores o perdidas que pudieran producirse.
  • Anuncio
boxbonux

PayPal, descripcion, utf-8 y descuentos

Notapor reflex_ocasion » Lun May 30, 2016 10:35 pm

Aunque hay hilos sobre el tema no estoy seguro de que estén todos solucionados así que abro este para explicar una serie de pasos a realizar para tener PayPal Standar bien configurado

Lo primero es advertir que PayPal está realizando cambios por motivos de seguridad tal como en su día hizo Redsys con el TPV así que es necesario actualizar el módulo de PayPal que tengamos en nuestra tienda por el mas reciente. O sea, este
http://addons.oscommerce.com/info/9184

Tarde o temprano hay que actualizarlo así que ya es cosa de cada uno cuando lo quiere actualizar, el que viene por defecto en la tienda tal como nos la bajamos ya no sirve o dejará de hacerlo en breve

Este nuevo módulo necesita confirmar que el email de la tienda realmente pertenece al dueño de la tienda y no a otra persona. Esto quiere decir que ya no sirve un email de yahoo, gmail, hotmail, etc., ha de ser un email del dominio

Mientras esto no se modifique PayPal no va a enviar el email de confirmación de pago desde nuestra tienda. Si enviará un email confirmando que han realizado un pago pero este email es de PayPal, no es de nuestra tienda online

Particularmente me ha afectado este cambio de PayPal ya que mis tiendas online han dejado de enviar todo tipo de emails, sea de consulta, sea de pago por otro medio aunque sea transferencia o contrareembolso, sea el que sea, hasta que no he puesto un email del dominio no he vuelto a recibir ni yo ni mis cliente email alguno

No quiero poner la mano en el fuego y quemarme pero el nuevo módulo de PayPal tiene todas las papeletas de ser el culpable de lo que me ha pasado, no es normal que desde 2008 haya estado usando un email de yahoo sin problemas y desde que instalé el nuevo módulo haya cambiado todo y ahora tenga que usar un email del dominio


Bueno, vamos a lo importante, todo lo demás :mf_bookread:

Cuando pagan a través de PayPal recibimos el email de confirmación y vemos que el pedido está grabado pero... !faltan campos! no sale el nif del cliente ni el teléfono móvil por citar los mas habituales

Como lo solucionamos? editando el módulo de pago de PayPal (catalog/includes/modules/payment/paypal_standar.php) y añadiendo dichos campos como en checkout_process.php. O sea, que lo que diga que hay que hacer en checkout_process lo haremos también en paypal_standar


Cuando pagan a través de PayPal sale el nombre de nuestra tienda online pero no sabes que ha comprado el cliente, tenemos que ir al pedido para enterarnos. Para solucionar esto hay una contribución que nos dice que hacer pero... son para las versiones anteriores de PayPal! O sea, que no nos sirve pero eso no es cierto porque si nos sirve, tan sólo hay que hacer una parte y adaptarla al nuevo módulo, no hay que hacerlo todo

Buscaremos esto
Código: Seleccionar todo
      $parameters = array('cmd' => '_cart',
                          'upload' => '1',
                          'item_name_1' => STORE_NAME,
                          'shipping_1' => $this->_app->formatCurrencyRaw($order->info['shipping_cost']),
                          'business' => $this->_app->getCredentials('PS', 'email'),
                          'amount_1' => $this->_app->formatCurrencyRaw($order->info['total'] - $order->info['shipping_cost'] - $total_tax),
                          'currency_code' => $currency,
                          'invoice' => substr($cart_PayPal_Standard_ID, strpos($cart_PayPal_Standard_ID, '-')+1),
                          'custom' => $customer_id,
                          'no_note' => '1',
                          'notify_url' => tep_href_link('ext/modules/payment/paypal/standard_ipn.php', (isset($ipn_language) ? 'language=' . $ipn_language : ''), 'SSL', false, false),
                          'rm' => '2',
                          'return' => tep_href_link(FILENAME_CHECKOUT_PROCESS, '', 'SSL'),
                          'cancel_return' => tep_href_link(FILENAME_CHECKOUT_PAYMENT, '', 'SSL'),
                          'bn' => 'OSCOM23_PS',
                          'paymentaction' => (OSCOM_APP_PAYPAL_PS_TRANSACTION_METHOD == '1') ? 'sale' : 'authorization');


y añadiremos a continuación esto otro, nada mas
Código: Seleccionar todo
      for ($i=0, $n=sizeof($order->products); $i<$n; $i++) {
        $j = $i + 1;
        $attributes_description = '';
        if ( (isset($order->products[$i]['attributes'])) && (sizeof($order->products[$i]['attributes']) > 0) ) {
          for ($j2=0, $n2=sizeof($order->products[$i]['attributes']); $j2<$n2; $j2++) {
             $attributes_description = $attributes_description . "&nbsp;(" . $order->products[$i]['attributes'][$j2]['option'] . ': ' . $order->products[$i]['attributes'][$j2]['value'] . ")";
          }
        }
        $parameters['item_name_'.$j] = $order->products[$i]['name'] . $attributes_description ;
        $parameters['amount_'.$j] = $this->_app->formatCurrencyRaw($order->products[$i]['final_price']);
        $parameters['quantity_'.$j] = $order->products[$i]['qty'];
      }


Con esto saldrá que ha comprado el cliente. Incluso sale si tiene atributos, por ejemplo la talla de la camisa o del pantalón

El problema es que si algún producto de nuestro inventario contiene acentos o letra eñe saldrán simbolos raros

Hay quien ha hecho cosas como integrar el utf-8 en el módulo y puede que le funcione o no, no lo se, sólo se que hay una cosa mas sencilla y es irnos a nuestra cuenta de PayPal, ir a Perfil (arriba a la derecha, junto a cerrar sesión) y pulsar en Configuración de la cuenta

En la nueva ventana veremos 4 opciones en la columna izquierda. Pulsaremos en la última, en Opciones de venta
[ img ]

Ahora nos vamos abajo, al centro, y pulsamos ahí, en Codificación de idioma de botones de PayPal
[ img ]

Como esto no nos soluciona el problema pulsamos en el botón central que hay debajo del menú desplegable, el que dice Mas opciones
[ img ]

Veremos que saldrá Windows-1252 así que tan solo tenemos que elegir utf-8 del menú desplegable en los dos puntos (el segundo no es estrictamente necesario pero por si acaso lo cambiaremos también) y pulsaremos en Guardar
[ img ]

A partir de ese momento ya saldrán los acentos y la letra eñe correctamente sin necesidad de editar archivo alguno
[ img ]

En caso de que tengamos las contribuciones cupones de descuento (discount code http://addons.oscommerce.com/info/7397) y cantidad de descuento (quantity discounts http://addons.oscommerce.com/info/6751) instaladas seguiremos al pie de la letra las instrucciones de la contribución pero adaptandolas a la nueva versión de PayPal

Para quantity discounts buscaremos en catalog/includes/modules/payment/paypal_standar.php
Código: Seleccionar todo
    function process_button() {
      global $language, $customer_id, $order, $sendto, $currency, $cart_PayPal_Standard_ID, $shipping, $order_total_modules;


y lo sustituimos por
Código: Seleccionar todo
     function process_button() {
      global $language, $customer_id, $order, $sendto, $currency, $cart_PayPal_Standard_ID, $shipping, $order_total_modules, $od_amount;


En realidad lo que hacemos es añadir $od_amount al final

Ahora buscamos lo que añadimos antes para la descripción de lo comprado
Código: Seleccionar todo
      for ($i=0, $n=sizeof($order->products); $i<$n; $i++) {
          $j = $i + 1;
          $attributes_description = '';
          if ( (isset($order->products[$i]['attributes'])) && (sizeof($order->products[$i]['attributes']) > 0) ) {
               for ($j2=0, $n2=sizeof($order->products[$i]['attributes']); $j2<$n2; $j2++) {       
                    $attributes_description = $attributes_description . "&nbsp;(" . $order->products[$i]['attributes'][$j2]['option'] . ': ' . $order->products[$i]['attributes'][$j2]['value'] . ")";       
               }
          }
          $parameters['item_name_'.$j] = $order->products[$i]['name'] . $attributes_description ;         
          $parameters['amount_'.$j] = $this->_app->formatCurrencyRaw($order->products[$i]['final_price']);
          $parameters['quantity_'.$j] = $order->products[$i]['qty'];
      }


y añadimos ANTES esto
Código: Seleccionar todo
      if (($od_amount['total'] > 0 ) {
               $parameters['discount_amount_cart'] = $this->_app->formatCurrencyRaw($od_amount['total']);
      }


Ahora buscamos en el archivo catalog/includes/order_total/ot_quantity_discount.php
Código: Seleccionar todo
    function calculate_deductions() {
       global $order, $currencies;
       global $languages_id;
       global $cart;


y añadimos a continuación esto
Código: Seleccionar todo
       global $od_amount;


Con esto ya aplica el descuento por cantidad cuando pagan a través de PayPal


Para discount code buscaremos en catalog/includes/modules/payment/paypal_standar.php
Código: Seleccionar todo
    function process_button() {
      global $language, $customer_id, $order, $sendto, $currency, $cart_PayPal_Standard_ID, $shipping, $order_total_modules;


y lo sustituimos por
Código: Seleccionar todo
          function process_button() {
      global $language, $customer_id, $order, $sendto, $currency, $cart_PayPal_Standard_ID, $shipping, $order_total_modules, $discount;


Aqui lo que hemos hecho es añadir $discount al final

Ahora buscamos lo que hemos añadido antes para la descripción de lo comprado
Código: Seleccionar todo
      for ($i=0, $n=sizeof($order->products); $i<$n; $i++) {
          $j = $i + 1;
          $attributes_description = '';
          if ( (isset($order->products[$i]['attributes'])) && (sizeof($order->products[$i]['attributes']) > 0) ) {
               for ($j2=0, $n2=sizeof($order->products[$i]['attributes']); $j2<$n2; $j2++) {       
                    $attributes_description = $attributes_description . "&nbsp;(" . $order->products[$i]['attributes'][$j2]['option'] . ': ' . $order->products[$i]['attributes'][$j2]['value'] . ")";       
               }
          }
          $parameters['item_name_'.$j] = $order->products[$i]['name'] . $attributes_description ;         
          $parameters['amount_'.$j] = $this->_app->formatCurrencyRaw($order->products[$i]['final_price']);
          $parameters['quantity_'.$j] = $order->products[$i]['qty'];
      }


y añadimos ANTES esto
Código: Seleccionar todo
      if ($discount > 0 ) {
               $parameters['discount_amount_cart'] = $this->_app->formatCurrencyRaw($discount);
      }


Con esto ya aplica los cupones de descuento cuando pagan a través de PayPal


Para las dos contribuciones, quantity discounts y discount code, al mismo tiempo seguiremos estos pasos, buscamos en catalog/includes/modules/payment/paypal_standar.php
Código: Seleccionar todo
    function process_button() {
      global $language, $customer_id, $order, $sendto, $currency, $cart_PayPal_Standard_ID, $shipping, $order_total_modules;


y lo sustituimos por
Código: Seleccionar todo
    function process_button() {
      global $language, $customer_id, $order, $sendto, $currency, $cart_PayPal_Standard_ID, $shipping, $order_total_modules, $od_amount, $discount;


Aqui tan sólo hemos añadido $od_amount y $discount al final

Ahora buscamos lo que hemos añadido antes para la descripción de lo comprado
Código: Seleccionar todo
      for ($i=0, $n=sizeof($order->products); $i<$n; $i++) {
          $j = $i + 1;
          $attributes_description = '';
          if ( (isset($order->products[$i]['attributes'])) && (sizeof($order->products[$i]['attributes']) > 0) ) {
               for ($j2=0, $n2=sizeof($order->products[$i]['attributes']); $j2<$n2; $j2++) {       
                    $attributes_description = $attributes_description . "&nbsp;(" . $order->products[$i]['attributes'][$j2]['option'] . ': ' . $order->products[$i]['attributes'][$j2]['value'] . ")";       
               }
          }
          $parameters['item_name_'.$j] = $order->products[$i]['name'] . $attributes_description ;         
          $parameters['amount_'.$j] = $this->_app->formatCurrencyRaw($order->products[$i]['final_price']);
          $parameters['quantity_'.$j] = $order->products[$i]['qty'];
      }


y añadimos ANTES esto
Código: Seleccionar todo
      if (($od_amount['total'] or $discount) > 0 ) {
        $parameters['discount_amount_cart'] = $this->_app->formatCurrencyRaw($od_amount['total'] + ($discount));
      }


Ahora buscamos en el archivo catalog/includes/order_total/ot_quantity_discount.php
Código: Seleccionar todo
    function calculate_deductions() {
       global $order, $currencies;
       global $languages_id;
       global $cart;


y añadimos a continuación esto
Código: Seleccionar todo
       global $od_amount;


Con esto ya aplica los cupones de descuento y los descuento por cantidad cuando pagan a través de PayPal. No importa si es uno de los dos o son los dos al mismo tiempo, el descuento se aplica


Lo que no funciona porque PayPal no lo admite son los recargos, por ejemplo el del seguro de envío (http://addons.oscommerce.com/info/8997). Cualquier otro módulo de pago lo acepta sin problema pero PayPal no


Seguro que se me queda algo en el tintero pero ahora mismo no me acuerdo de mas :coffe:

En el momento en que me acuerde se añadirá

Saludeo a todos
reflex_ocasion
Moderador Global
 
Mensajes: 696
Registrado: Jue Ene 13, 2011 10:25 pm
Ubicación: Mijas Costa (Málaga)

Re: PayPal, descripcion, utf-8 y descuentos

Notapor raiwa » Sab Jul 02, 2016 4:39 pm

Si se usa la última versión de pay pal standard (o express) incluida en PayPal App ya no hace falta ninguna modificación para incluir los códigos descuento. Por lo menos esta y anteriores versiones:
http://addons.oscommerce.com/info/9460

saludos
Rainer
raiwa
Estoy en ello....
 
Mensajes: 32
Registrado: Dom Jul 14, 2013 3:50 pm

Re: PayPal, descripcion, utf-8 y descuentos

Notapor reflex_ocasion » Lun Jul 11, 2016 7:18 pm

Vale, pero tu hablas de la versión BS donde estará solucionado y yo hablo de la versión estandar donde no lo está. Tengo instalada la contribución que dices en la versión estadar de osC y a mi no me funcionan los descuentos, no los aplica a la hora de pagar a través de PayPal (en el resto de módulos de pago si se aplica), por eso digo que hay que hacer para quien tenga el mismo problema

Por cierto, la solución no es mia sino tuya, yo sólo he cambiado algunos parametros en base a la nueva versión de PayPal. O sea, que lo que tu publicaste en su día era para la vieja versión de PayPal y lo que yo he publicado aqui es una actualización

Saludos a todos
reflex_ocasion
Moderador Global
 
Mensajes: 696
Registrado: Jue Ene 13, 2011 10:25 pm
Ubicación: Mijas Costa (Málaga)


  • Temas Similares
    Respuestas
    Vistas
    Autor

Volver a Oscommerce v2.3.x

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados

cron