News:

Support the VirtueMart project and become a member

Main Menu

Como Configurar Virtue Mart con 2checkout, how to config Virtue Mart 2checkout

Started by tallerdigitalvw.com, May 08, 2009, 10:43:17 AM

Previous topic - Next topic

tallerdigitalvw.com

Hola amigos hace unos días me toco integrar un carro en linea de Virtue Mart con 2checkout y la verdad me costo mucho poder hacer que las cosas funcionaran bien por lo cual les contare mis experiencias para que no tengan que sufrir tanto leyengo manuales y manuales para poder configurar lo.

Los problemas que tuve?
1-.Configure el modulo de 2checkout(si no sabes como configurar lo, sigue leyendo que lo explicare mas tarde) y cuando enviaba la confirmación de la compra me aparecía una información que decía "Parameter Error":

Solución: Resulta ser que 2checkout tiene 2 tipos de paneles administrativos, el clásico y el nuevo, el nuevo tiene ciertos problemas por lo cual aun no informa de los avisos importantes, por lo que deberán ingresar al panel clásico para poder ver todas las advertencias, resulto ser que el error era que aun no había confirmado el código de seguridad que 2checkout solicita a la hora de crear una cuenta nueva por lo cual la cuenta es bloqueada y marcada como cuenta en riesgo, lo cual impide que puedas utilizar tu interfaces de pago. ahora ya sabes si te aparece el error "Parameter Error" no significa específicamente que tu Virtue Mart 2checkout este malo el script, significa que tu cuenta por alguna información faltante 2checkout la tiene en riesgo, por lo cual solo continua rellenando la información y tu cuenta saldrá de riego.

2-.Después me tope con que solo me enviaba la información del shiping y no envia la de billing, el cliente tenia que rellenarla por el mismo lo cual consideraba que era innecesario que el cliente tuviera que llenar dos veces su info.

Solución: Navegando en todo el foro de Virtue Mart y sufriendo con el ingles al fin encontré una solución al problema. y resulto ser que solo había que quitar un par de lineas del script para que todo funcionara, a continuación les envió los ejemplos del script.

script en su forma original.
<?php
      $q  
"SELECT * FROM #__users WHERE user_info_id='".$db->f("user_info_id")."'";
    
$dbbt = new ps_DB;
   
$dbbt->setQuery($q);
        
$dbbt->query();
      
$dbbt->next_record();
       
// Get ship_to information
    
if( $db->f("user_info_id") != $dbbt->f("user_info_id")) {
         
$q2  "SELECT * FROM #__vm_user_info WHERE user_info_id='".$db->f("user_info_id")."'";
    
$dbst = new ps_DB;
   
$dbst->setQuery($q2);
       
$dbst->query();
      
$dbst->next_record();
      }
     else  {
         
$dbst $dbbt;
    }


      
//Authnet vars to send
        
$formdata = array (
   
'x_login' => TWOCO_LOGIN,
   
'x_email_merchant' => ((TWOCO_MERCHANT_EMAIL == 'True') ? 'TRUE' 'FALSE'),

      
// Customer Name and Billing Address
  
'x_first_name' => $dbbt->f("first_name"),
        
'x_last_name' => $dbbt->f("last_name"),
  
'x_company' => $dbbt->f("company"),
      
'x_address' => $dbbt->f("address_1"),
    
'x_city' => $dbbt->f("city"),
    
'x_state' => $dbbt->f("state"),
  
'x_zip' => $dbbt->f("zip"),
      
'x_country' => $dbbt->f("country"),
      
'x_phone' => $dbbt->f("phone_1"),
        
'x_fax' => $dbbt->f("fax"),
      
'x_email' => $dbbt->f("email"),

       
// Customer Shipping Address
  
'x_ship_to_first_name' => $dbst->f("first_name"),
        
'x_ship_to_last_name' => $dbst->f("last_name"),
  
'x_ship_to_company' => $dbst->f("company"),
      
'x_ship_to_address' => $dbst->f("address_1"),
    
'x_ship_to_city' => $dbst->f("city"),
    
'x_ship_to_state' => $dbst->f("state"),
  
'x_ship_to_zip' => $dbst->f("zip"),
      
'x_ship_to_country' => $dbst->f("country"),

       
'x_invoice_num' => $db->f("order_number"),
       
'x_receipt_link_url' => SECUREURL."2checkout_notify.php"
  
);

     if( 
TWOCO_TESTMODE == "Y" )
   
$formdata['demo'] = "Y";

       
$version "2";
    
$url "https://www2.2checkout.com/2co/buyer/purchase";
    
$formdata['x_amount'] = number_format($db->f("order_total"), 2'.''');

       
//build the post string
       
$poststring '';
       
  foreach(
$formdata AS $key => $val){
          
$poststring .= "<input type='hidden' name='$key' value='$val' />
 "
;
    }

      
?>

    <form action="<?php echo $url ?>" method="post" target="_blank">
       <?php echo $poststring ?>
    <p>Click on the Image below to pay...</p>
     <input type="image" name="submit" src="https://www.2checkout.com/images/buy_logo.gif" border="0" alt="Make payments with 2Checkout, it's fast and secure!" title="Pay your Order with 2Checkout, it's fast and secure!" />
      </form>


Por lo cual solo había que quitar estas lineas innecesarias que aparecen al principio, en pocas palabras lo que aparecía antes de // Get ship_to information.
      $q  = "SELECT * FROM #__users WHERE user_info_id='".$db->f("user_info_id")."'";
    $dbbt = new ps_DB;
   $dbbt->setQuery($q);
        $dbbt->query();
      $dbbt->next_record();


El script ya arreglado deberá verse así.
<?php
       
// Get ship_to information
    
if( $db->f("user_info_id") != $dbbt->f("user_info_id")) {
         
$q2  "SELECT * FROM #__vm_user_info WHERE user_info_id='".$db->f("user_info_id")."'";
    
$dbst = new ps_DB;
   
$dbst->setQuery($q2);
       
$dbst->query();
      
$dbst->next_record();
      }
     else  {
         
$dbst $dbbt;
    }


      
//Authnet vars to send
        
$formdata = array (
   
'x_login' => TWOCO_LOGIN,
   
'x_email_merchant' => ((TWOCO_MERCHANT_EMAIL == 'True') ? 'TRUE' 'FALSE'),

      
// Customer Name and Billing Address
  
'x_first_name' => $dbbt->f("first_name"),
        
'x_last_name' => $dbbt->f("last_name"),
  
'x_company' => $dbbt->f("company"),
      
'x_address' => $dbbt->f("address_1"),
    
'x_city' => $dbbt->f("city"),
    
'x_state' => $dbbt->f("state"),
  
'x_zip' => $dbbt->f("zip"),
      
'x_country' => $dbbt->f("country"),
      
'x_phone' => $dbbt->f("phone_1"),
        
'x_fax' => $dbbt->f("fax"),
      
'x_email' => $dbbt->f("email"),

       
// Customer Shipping Address
  
'x_ship_to_first_name' => $dbst->f("first_name"),
        
'x_ship_to_last_name' => $dbst->f("last_name"),
  
'x_ship_to_company' => $dbst->f("company"),
      
'x_ship_to_address' => $dbst->f("address_1"),
    
'x_ship_to_city' => $dbst->f("city"),
    
'x_ship_to_state' => $dbst->f("state"),
  
'x_ship_to_zip' => $dbst->f("zip"),
      
'x_ship_to_country' => $dbst->f("country"),

       
'x_invoice_num' => $db->f("order_number"),
       
'x_receipt_link_url' => SECUREURL."2checkout_notify.php"
  
);

     if( 
TWOCO_TESTMODE == "Y" )
   
$formdata['demo'] = "Y";

       
$version "2";
    
$url "https://www2.2checkout.com/2co/buyer/purchase";
    
$formdata['x_amount'] = number_format($db->f("order_total"), 2'.''');

       
//build the post string
       
$poststring '';

  foreach(
$formdata AS $key => $val){
          
$poststring .= "<input type='hidden' name='$key' value='$val' />
 "
;
    }

      
?>

    <form action="<?php echo $url ?>" method="post" target="_blank">
       <?php echo $poststring ?>
    <p>Click on the Image below to pay...</p>
     <input type="image" name="submit" src="https://www.2checkout.com/images/buy_logo.gif" border="0" alt="Make payments with 2Checkout, it's fast and secure!" title="Pay your Order with 2Checkout, it's fast and secure!" />
      </form>


3-.ok ya enviaba la info completa pero resultaba ser que en la información del producto aparecía un hash mero feo lo cual considero que causaría desconfianza a nuestros compradores por lo cual tenia que encontrar algo mejor y buscando dentro del foro encontré que había otro script que eliminaba el hash, pero necesitaba que el el producto estuviera en el carro de Virtue Mart y en el carro de 2checkout así que funciono pero como siempre problema con la info de billing y a continuación pongo el código.

Así quedo el código.
<?php

       $q  
"SELECT * FROM #__users WHERE user_info_id='".$db->f("user_info_id")."'";

       
$dbbt = new ps_DB;

       
$dbbt->setQuery($q);

       
$dbbt->query();

       
$dbbt->next_record();

       
// Get ship_to information

       
if( $db->f("user_info_id") != $dbbt->f("user_info_id")) {

         
$q2  "SELECT * FROM #__vm_user_info WHERE user_info_id='".$db->f("user_info_id")."'";

         
$dbst = new ps_DB;

         
$dbst->setQuery($q2);

         
$dbst->query();

         
$dbst->next_record();

       }

       else  {

         
$dbst $dbbt;

       }



       
$q3 "SELECT * FROM #__vm_order_item WHERE user_info_id='".$db->f("user_info_id")."'";

       
$dbcprod = new ps_DB;

       
$dbcprod->setQuery($q3);

       
$dbcprod->query();

       
$dbcprod->next_record();





       for(
$i 0$i count($dbcprod->record); $i++){ //sort out user orders

          
$orders[$i] = $dbcprod->record[$i]->order_id;

       }

       
arsort($orders);

       
$this_order_id current($orders); //sets most recent order number for user



       
for($i 0$i count($dbcprod->record); $i++){ //gets all product info entries for this order number

           
if($dbcprod->record[$i]->order_id == $this_order_id){

             
$this_order[$i] = $dbcprod->record[$i];

           }

       }

       
sort($this_order);



       
//2co c_prods to send

       
for($i 0$i count($this_order); $i++){ //creates 2co c_prod parameters

          
$twoco_prod_info["c_prod_$i"] = $this_order[$i]->order_item_sku .","$this_order[$i]->product_quantity;

          
$twoco_prod_info["c_name_$i"] = $this_order[$i]->order_item_name;

          
$twoco_prod_info["c_price_$i"] = $this_order[$i]->product_final_price;

          
$twoco_prod_info["c_description_$i"] = $this_order[$i]->order_item_name .","$this_order[$i]->product_attribute;

       }



       
//Authnet vars to send

       
$formdata = array (

       
'x_login' => TWOCO_LOGIN,

       
'x_email_merchant' => ((TWOCO_MERCHANT_EMAIL == 'True') ? 'TRUE' 'FALSE'),

       
'id_type' => 1//added for c_prod compliance



       // Customer Name and Billing Address

       
'x_first_name' => $dbbt->f("first_name"),

       
'x_last_name' => $dbbt->f("last_name"),

       
'x_company' => $dbbt->f("company"),

       
'x_address' => $dbbt->f("address_1"),

       
'x_city' => $dbbt->f("city"),

       
'x_state' => $dbbt->f("state"),

       
'x_zip' => $dbbt->f("zip"),

       
'x_country' => $dbbt->f("country"),

       
'x_phone' => $dbbt->f("phone_1"),

       
'x_fax' => $dbbt->f("fax"),

       
'x_email' => $dbbt->f("email"),



       
// Customer Shipping Address

       
'x_ship_to_first_name' => $dbst->f("first_name"),

       
'x_ship_to_last_name' => $dbst->f("last_name"),

       
'x_ship_to_company' => $dbst->f("company"),

       
'x_ship_to_address' => $dbst->f("address_1"),

       
'x_ship_to_city' => $dbst->f("city"),

       
'x_ship_to_state' => $dbst->f("state"),

       
'x_ship_to_zip' => $dbst->f("zip"),

       
'x_ship_to_country' => $dbst->f("country"),



       
'x_invoice_num' => $db->f("order_id"),

       
'x_receipt_link_url' => SECUREURL."2checkout_notify.php"

       
);



       
$formdata array_merge($twoco_prod_info$formdata); //combine formdata with twoco_prod_info so c_prod info gets sent to 2co



       
if( TWOCO_TESTMODE == "Y" )

       
$formdata['demo'] = "Y";

       
$version "2";

       
$url "https://www2.2checkout.com/2co/buyer/purchase";

       
$formdata['x_amount'] = number_format($db->f("order_total"), 2'.''');



       
//build the post string

       
$poststring '';

       foreach(
$formdata AS $key => $val){

       
$poststring .= "<input type='hidden' name='$key' value='$val' />

       "
;

       }



?>

   <form action="<?php echo $url ?>" method="post" target="_self">
   <?php echo $poststring ?>
   <p>Click on the Image below to pay...</p>
   <input type="image" name="submit" src="https://www.2checkout.com/images/buy_logo.gif" border="0" alt="Make payments with 2Checkout, it's fast and secure!" title="Pay your Order with 2Checkout, it's fast and secure!" />
   </form>


4-. ooooooo no otra vez!!! el nuevo código no envía la info de Billing así que decidí hacer con el script nuevo lo que hice con el script anterior.

Nuevo codigo ya con info de billing.
<?php
       
// Get ship_to information

       
if( $db->f("user_info_id") != $dbbt->f("user_info_id")) {

         
$q2  "SELECT * FROM #__vm_user_info WHERE user_info_id='".$db->f("user_info_id")."'";

         
$dbst = new ps_DB;

         
$dbst->setQuery($q2);

         
$dbst->query();

         
$dbst->next_record();

       }

       else  {

         
$dbst $dbbt;

       }



       
$q3 "SELECT * FROM #__vm_order_item WHERE user_info_id='".$db->f("user_info_id")."'";

       
$dbcprod = new ps_DB;

       
$dbcprod->setQuery($q3);

       
$dbcprod->query();

       
$dbcprod->next_record();





       for(
$i 0$i count($dbcprod->record); $i++){ //sort out user orders

          
$orders[$i] = $dbcprod->record[$i]->order_id;

       }

       
arsort($orders);

       
$this_order_id current($orders); //sets most recent order number for user



       
for($i 0$i count($dbcprod->record); $i++){ //gets all product info entries for this order number

           
if($dbcprod->record[$i]->order_id == $this_order_id){

             
$this_order[$i] = $dbcprod->record[$i];

           }

       }

       
sort($this_order);



       
//2co c_prods to send

       
for($i 0$i count($this_order); $i++){ //creates 2co c_prod parameters

          
$twoco_prod_info["c_prod_$i"] = $this_order[$i]->order_item_sku .","$this_order[$i]->product_quantity;

          
$twoco_prod_info["c_name_$i"] = $this_order[$i]->order_item_name;

          
$twoco_prod_info["c_price_$i"] = $this_order[$i]->product_final_price;

          
$twoco_prod_info["c_description_$i"] = $this_order[$i]->order_item_name .","$this_order[$i]->product_attribute;

       }



       
//Authnet vars to send

       
$formdata = array (

       
'x_login' => TWOCO_LOGIN,

       
'x_email_merchant' => ((TWOCO_MERCHANT_EMAIL == 'True') ? 'TRUE' 'FALSE'),

       
'id_type' => 1//added for c_prod compliance



       // Customer Name and Billing Address

       
'x_first_name' => $dbbt->f("first_name"),

       
'x_last_name' => $dbbt->f("last_name"),

       
'x_company' => $dbbt->f("company"),

       
'x_address' => $dbbt->f("address_1"),

       
'x_city' => $dbbt->f("city"),

       
'x_state' => $dbbt->f("state"),

       
'x_zip' => $dbbt->f("zip"),

       
'x_country' => $dbbt->f("country"),

       
'x_phone' => $dbbt->f("phone_1"),

       
'x_fax' => $dbbt->f("fax"),

       
'x_email' => $dbbt->f("email"),



       
// Customer Shipping Address

       
'x_ship_to_first_name' => $dbst->f("first_name"),

       
'x_ship_to_last_name' => $dbst->f("last_name"),

       
'x_ship_to_company' => $dbst->f("company"),

       
'x_ship_to_address' => $dbst->f("address_1"),

       
'x_ship_to_city' => $dbst->f("city"),

       
'x_ship_to_state' => $dbst->f("state"),

       
'x_ship_to_zip' => $dbst->f("zip"),

       
'x_ship_to_country' => $dbst->f("country"),



       
'x_invoice_num' => $db->f("order_id"),

       
'x_receipt_link_url' => SECUREURL."2checkout_notify.php"

       
);



       
$formdata array_merge($twoco_prod_info$formdata); //combine formdata with twoco_prod_info so c_prod info gets sent to 2co



       
if( TWOCO_TESTMODE == "Y" )

       
$formdata['demo'] = "Y";

       
$version "2";

       
$url "https://www2.2checkout.com/2co/buyer/purchase";

       
$formdata['x_amount'] = number_format($db->f("order_total"), 2'.''');



       
//build the post string

       
$poststring '';

       foreach(
$formdata AS $key => $val){

       
$poststring .= "<input type='hidden' name='$key' value='$val' />

       "
;

       }



?>

   <form action="<?php echo $url ?>" method="post" target="_self">
   <?php echo $poststring ?>
   <p>Click on the Image below to pay...</p>
   <input type="image" name="submit" src="https://www.2checkout.com/images/buy_logo.gif" border="0" alt="Make payments with 2Checkout, it's fast and secure!" title="Pay your Order with 2Checkout, it's fast and secure!" />
   </form>


Continua en el siguiente post ==) ???


Esto a sido elaborado gracias al foro de virtue mart a Ruppert, leona, John Sawatdee, subvención, a los amigos de 2checkout, a mis compañeros del trabajo en http://www.tallerdigitalvw.com y principalmente a Dios que nos da la sabiduria para poder crear y aprender de todos los developers.


Importante: Favor comentarme si me e equivocado en algo para poder corregirlo, recuerden que postear un reply dando un simple gracias es muy importante para que un foro cresca y lo mas importante es que debemos de fomentar la cultura de donar, por que es bueno donar? por que cada developer que crea interfaces tan maravillosas como es Virtue Mart tiene hijos o esposa o simplemente nesecidades y pasan dias, meses y años sentados en su computadora a tiempo completo creando interfaces sin animo de lucro, solamente con el deseo de crecer en conocimiento y ayudar al progimo, por eso y muchas cosas mas es necesario que donemos aunque sea solo $1 pero ten por seguro que sera de mucha ayuda.

Si deseas Donar a Virtue Mart ve a la pagina principal y busca al lado izquierdo la viñeta de soporte y preciona el botón de donar.


Continua en el siguiente post ==) ???

tallerdigitalvw.com

5-.El otro problema era que cuando el usuario confirmaba su compra en el carro de Virtue Mart tenia que presionar el botón de pagar en el logo de 2checkout por lo cual investigue un poco mas en el foro y descubrí que alguien había utilizado una parte del script de paypal para que cuando el cliente confirmara su orden de una vez se fuera al área de pago.

El script que envia la info de Billing y de Shiping, de una vez envia a la pagina de 2checkout al confirmar la orden y elimina el hash y lo vuelve mas estetico.
<?php
       
// Get ship_to information

       
if( $db->f("user_info_id") != $dbbt->f("user_info_id")) {

         
$q2  "SELECT * FROM #__vm_user_info WHERE user_info_id='".$db->f("user_info_id")."'";

         
$dbst = new ps_DB;

         
$dbst->setQuery($q2);

         
$dbst->query();

         
$dbst->next_record();

       }

       else  {

         
$dbst $dbbt;

       }



       
$q3 "SELECT * FROM #__vm_order_item WHERE user_info_id='".$db->f("user_info_id")."'";

       
$dbcprod = new ps_DB;

       
$dbcprod->setQuery($q3);

       
$dbcprod->query();

       
$dbcprod->next_record();





       for(
$i 0$i count($dbcprod->record); $i++){ //sort out user orders

          
$orders[$i] = $dbcprod->record[$i]->order_id;

       }

       
arsort($orders);

       
$this_order_id current($orders); //sets most recent order number for user



       
for($i 0$i count($dbcprod->record); $i++){ //gets all product info entries for this order number

           
if($dbcprod->record[$i]->order_id == $this_order_id){

             
$this_order[$i] = $dbcprod->record[$i];

           }

       }

       
sort($this_order);



       
//2co c_prods to send

       
for($i 0$i count($this_order); $i++){ //creates 2co c_prod parameters

          
$twoco_prod_info["c_prod_$i"] = $this_order[$i]->order_item_sku .","$this_order[$i]->product_quantity;

          
$twoco_prod_info["c_name_$i"] = $this_order[$i]->order_item_name;

          
$twoco_prod_info["c_price_$i"] = $this_order[$i]->product_final_price;

          
$twoco_prod_info["c_description_$i"] = $this_order[$i]->order_item_name .","$this_order[$i]->product_attribute;

       }



       
//Authnet vars to send

       
$formdata = array (

       
'x_login' => TWOCO_LOGIN,

       
'x_email_merchant' => ((TWOCO_MERCHANT_EMAIL == 'True') ? 'TRUE' 'FALSE'),

       
'id_type' => 1//added for c_prod compliance



       // Customer Name and Billing Address

       
'x_first_name' => $dbbt->f("first_name"),

       
'x_last_name' => $dbbt->f("last_name"),

       
'x_company' => $dbbt->f("company"),

       
'x_address' => $dbbt->f("address_1"),

       
'x_city' => $dbbt->f("city"),

       
'x_state' => $dbbt->f("state"),

       
'x_zip' => $dbbt->f("zip"),

       
'x_country' => $dbbt->f("country"),

       
'x_phone' => $dbbt->f("phone_1"),

       
'x_fax' => $dbbt->f("fax"),

       
'x_email' => $dbbt->f("email"),



       
// Customer Shipping Address

       
'x_ship_to_first_name' => $dbst->f("first_name"),

       
'x_ship_to_last_name' => $dbst->f("last_name"),

       
'x_ship_to_company' => $dbst->f("company"),

       
'x_ship_to_address' => $dbst->f("address_1"),

       
'x_ship_to_city' => $dbst->f("city"),

       
'x_ship_to_state' => $dbst->f("state"),

       
'x_ship_to_zip' => $dbst->f("zip"),

       
'x_ship_to_country' => $dbst->f("country"),



       
'x_invoice_num' => $db->f("order_id"),

       
'x_receipt_link_url' => SECUREURL."2checkout_notify.php"

       
);



       
$formdata array_merge($twoco_prod_info$formdata); //combine formdata with twoco_prod_info so c_prod info gets sent to 2co



       
if( TWOCO_TESTMODE == "Y" )

       
$formdata['demo'] = "Y";

       
$version "2";

       
$url "https://www2.2checkout.com/2co/buyer/purchase";

       
$formdata['x_amount'] = number_format($db->f("order_total"), 2'.''');



       
//build the post string

       
$poststring '';

       foreach(
$formdata AS $key => $val){

       
$poststring .= "<input type='hidden' name='$key' value='$val' />

       "
;

       }



?>

   <form id="cho" action="<?php echo $url ?>" method="post" target="_self">
   <?php echo $poststring ?>
   <p>Click on the Image below to pay...</p>
   <input type="image" name="submit" src="https://www.2checkout.com/images/buy_logo.gif" border="0" alt="Make payments with 2Checkout, it's fast and secure!" title="Pay your Order with 2Checkout, it's fast and secure!" />
   </form>
   <script language="JavaScript" type="text/javascript">
   <!--
   document.getElementById('cho').submit();
   //-->
   </script>


por alguna razon el script me esta funcionando sin que tenga que agregar el producto en el carro de 2checkout pero eso es algo que aun no se por que pero la cosa es que me esta funcionando.

6-.Como configurar el plugin de 2checkout?

Simplemente debes de llenar los datos del plugin con tu numero de cliente 2checkout, la palabra de seguridad, orden aceptada en aceptada y orden denegada en Cancelada, y modo demo activado en lo que realizas tus pruebas.

7-.ya todo estaba configurado pero cuando recibía el correo de demo aparecía en error "no hay item para enviar por lo cual su orden sera enviada y no se le cargara a su tarjeta".

Solución: Esas palabras son normales en modo demo pero si te vas a tu panel administrativo de 2checkout y lo pones en live sales vera que ya no habrá problemas.

8-.2checkout no redirege al terminar la compra a mi tienda en linea.

Solución: hay que copiar un archivo por ftp path /www/dominio.com/administrator/components/com_virtuemart/2checkout_notify.php a tu path /www/dominio.com/2checkout_notify.php luego tendras que entrar en tu panel nuevo de 2checkout y pulsar en Account/Site Management y el la parte de abajo donde dice Approved URL y Pending URL escribir lo siguiente http:www.dominio.com/2checkout_notify.php y luego guardar. Luego en el menu Notification en el area de global settings escribir nuevamente http:www.dominio.com/2checkout_notify.php luego marcar casilla Enable All Notifications y presionar el botón de aplicar y guardar y listo ya debera funcionar.

Esto a sido elaborado gracias al foro de virtue mart a Ruppert, leona, John Sawatdee, subvención, a los amigos de 2checkout, a mis compañeros del trabajo en http://www.tallerdigitalvw.com y principalmente a Dios que nos da la sabiduria para poder crear y aprender de todos los developers.


Importante: Favor comentarme si me e equivocado en algo para poder corregirlo, recuerden que postear un reply dando un simple gracias es muy importante para que un foro cresca y lo mas importante es que debemos de fomentar la cultura de donar, por que es bueno donar? por que cada developer que crea interfaces tan maravillosas como es Virtue Mart tiene hijos o esposa o simplemente nesecidades y pasan dias, meses y años sentados en su computadora a tiempo completo creando interfaces sin animo de lucro, solamente con el deseo de crecer en conocimiento y ayudar al progimo, por eso y muchas cosas mas es necesario que donemos aunque sea solo $1 pero ten por seguro que sera de mucha ayuda.

Si deseas Donar a Virtue Mart ve a la pagina principal y busca al lado izquierdo la viñeta de soporte y preciona el botón de donar.


dragoncia

Hola! Primero 1000% gracias. Muy buena la guía me dio resultado todo, yo soy completamente nueva y no tuve mayor dificultad, pero aún así tengo algunas preguntas extras que agradecería mucho si me ayudan.

1. El módulo de VirtueMart me pide los datos de la tarjeta pero al llevarme a la página de 2CO me pide los datos de nuevo... es esto normal? se supone que sea así?

2. Para usuarios en español como se puede cambiar el hecho de que te lleve a la página de 2CO en inglés por la de español de manera automática... sin que el usuario de la página tenga que elegir su idioma? será posible esto?

3. Cuando termina la transacción me envía de nuevo al site original... pero de una manera muy súbita! no me avisa si la transacción fue aceptada o no, o si tuvo problemas o al menos que revise mi correo. Es posible cambiar eso o así se supone que sea?

4. Y último... el recibo de venta de 2CO "sales receipt" que me llega a mi correo informándome que la compra se realizó es un poco simple, se puede personalizar?? como? se puede configurar para que se envíe en español??

De nuevo muchas gracias en avance. Gracias por tu comentario sobre las donaciones parece mentira que a veces la donación sólo se queda en intención cuando haces uso de estos recursos pero tu post hizo que llevara a cabo la acción.  :)

tallerdigitalvw.com

Saludos Dragoncia:

A continuación te envió las respuestas que solicitaste.

1-.esta te la quedo pendiente

2-.con respecto a lo de los usuarios en español podrías probar lo siguiente:

me imagino que tu script quedo algo asi.

Quote<?php
       // Get ship_to information

       if( $db->f("user_info_id") != $dbbt->f("user_info_id")) {

         $q2  = "SELECT * FROM #__vm_user_info WHERE user_info_id='".$db->f("user_info_id")."'";

         $dbst = new ps_DB;

         $dbst->setQuery($q2);

         $dbst->query();

         $dbst->next_record();

       }

       else  {

         $dbst = $dbbt;

       }



       $q3 = "SELECT * FROM #__vm_order_item WHERE user_info_id='".$db->f("user_info_id")."'";

       $dbcprod = new ps_DB;

       $dbcprod->setQuery($q3);

       $dbcprod->query();

       $dbcprod->next_record();





       for($i = 0; $i < count($dbcprod->record); $i++){ //sort out user orders

          $orders[$i] = $dbcprod->record[$i]->order_id;

       }

       arsort($orders);

       $this_order_id = current($orders); //sets most recent order number for user



       for($i = 0; $i < count($dbcprod->record); $i++){ //gets all product info entries for this order number

           if($dbcprod->record[$i]->order_id == $this_order_id){

             $this_order[$i] = $dbcprod->record[$i];

           }

       }

       sort($this_order);



       //2co c_prods to send

       for($i = 0; $i < count($this_order); $i++){ //creates 2co c_prod parameters

          $twoco_prod_info["c_prod_$i"] = $this_order[$i]->order_item_sku .",". $this_order[$i]->product_quantity;

          $twoco_prod_info["c_name_$i"] = $this_order[$i]->order_item_name;

          $twoco_prod_info["c_price_$i"] = $this_order[$i]->product_final_price;

          $twoco_prod_info["c_description_$i"] = $this_order[$i]->order_item_name .",". $this_order[$i]->product_attribute;

       }



       //Authnet vars to send

       $formdata = array (

       'x_login' => TWOCO_LOGIN,

       'x_email_merchant' => ((TWOCO_MERCHANT_EMAIL == 'True') ? 'TRUE' : 'FALSE'),

       'id_type' => 1, //added for c_prod compliance



       // Customer Name and Billing Address

       'x_first_name' => $dbbt->f("first_name"),

       'x_last_name' => $dbbt->f("last_name"),

       'x_company' => $dbbt->f("company"),

       'x_address' => $dbbt->f("address_1"),

       'x_city' => $dbbt->f("city"),

       'x_state' => $dbbt->f("state"),

       'x_zip' => $dbbt->f("zip"),

       'x_country' => $dbbt->f("country"),

       'x_phone' => $dbbt->f("phone_1"),

       'x_fax' => $dbbt->f("fax"),

       'x_email' => $dbbt->f("email"),



       // Customer Shipping Address

       'x_ship_to_first_name' => $dbst->f("first_name"),

       'x_ship_to_last_name' => $dbst->f("last_name"),

       'x_ship_to_company' => $dbst->f("company"),

       'x_ship_to_address' => $dbst->f("address_1"),

       'x_ship_to_city' => $dbst->f("city"),

       'x_ship_to_state' => $dbst->f("state"),

       'x_ship_to_zip' => $dbst->f("zip"),

       'x_ship_to_country' => $dbst->f("country"),



       'x_invoice_num' => $db->f("order_id"),

       'x_receipt_link_url' => SECUREURL."2checkout_notify.php"

       );



       $formdata = array_merge($twoco_prod_info, $formdata); //combine formdata with twoco_prod_info so c_prod info gets sent to 2co



       if( TWOCO_TESTMODE == "Y" )

       $formdata['demo'] = "Y";

       $version = "2";

       $url = "https://www2.2checkout.com/2co/buyer/purchase";

       $formdata['x_amount'] = number_format($db->f("order_total"), 2, '.', '');



       //build the post string

       $poststring = '';

       foreach($formdata AS $key => $val){

       $poststring .= "<input type='hidden' name='$key' value='$val' />

       ";

       }



?>
   <form id="cho" action="<?php echo $url ?>" method="post" target="_self">
   <?php echo $poststring ?>
   <p>Click on the Image below to pay...</p>
   <input type="image" name="submit" src="https://www.2checkout.com/images/buy_logo.gif" border="0" alt="Make payments with 2Checkout, it's fast and secure!" title="Pay your Order with 2Checkout, it's fast and secure!" />
   </form>
   <script language="JavaScript" type="text/javascript">
   <!--
   document.getElementById('cho').submit();
   //-->
   </script>

por que no pruevas cambiar la linea
$url = "https://www2.2checkout.com/2co/buyer/purchase";
por
$url = "https://www2.2checkout.com/checkout/purchase?lang=es_la";

y te quedara haci
Quote<?php
       // Get ship_to information

       if( $db->f("user_info_id") != $dbbt->f("user_info_id")) {

         $q2  = "SELECT * FROM #__vm_user_info WHERE user_info_id='".$db->f("user_info_id")."'";

         $dbst = new ps_DB;

         $dbst->setQuery($q2);

         $dbst->query();

         $dbst->next_record();

       }

       else  {

         $dbst = $dbbt;

       }



       $q3 = "SELECT * FROM #__vm_order_item WHERE user_info_id='".$db->f("user_info_id")."'";

       $dbcprod = new ps_DB;

       $dbcprod->setQuery($q3);

       $dbcprod->query();

       $dbcprod->next_record();





       for($i = 0; $i < count($dbcprod->record); $i++){ //sort out user orders

          $orders[$i] = $dbcprod->record[$i]->order_id;

       }

       arsort($orders);

       $this_order_id = current($orders); //sets most recent order number for user



       for($i = 0; $i < count($dbcprod->record); $i++){ //gets all product info entries for this order number

           if($dbcprod->record[$i]->order_id == $this_order_id){

             $this_order[$i] = $dbcprod->record[$i];

           }

       }

       sort($this_order);



       //2co c_prods to send

       for($i = 0; $i < count($this_order); $i++){ //creates 2co c_prod parameters

          $twoco_prod_info["c_prod_$i"] = $this_order[$i]->order_item_sku .",". $this_order[$i]->product_quantity;

          $twoco_prod_info["c_name_$i"] = $this_order[$i]->order_item_name;

          $twoco_prod_info["c_price_$i"] = $this_order[$i]->product_final_price;

          $twoco_prod_info["c_description_$i"] = $this_order[$i]->order_item_name .",". $this_order[$i]->product_attribute;

       }



       //Authnet vars to send

       $formdata = array (

       'x_login' => TWOCO_LOGIN,

       'x_email_merchant' => ((TWOCO_MERCHANT_EMAIL == 'True') ? 'TRUE' : 'FALSE'),

       'id_type' => 1, //added for c_prod compliance



       // Customer Name and Billing Address

       'x_first_name' => $dbbt->f("first_name"),

       'x_last_name' => $dbbt->f("last_name"),

       'x_company' => $dbbt->f("company"),

       'x_address' => $dbbt->f("address_1"),

       'x_city' => $dbbt->f("city"),

       'x_state' => $dbbt->f("state"),

       'x_zip' => $dbbt->f("zip"),

       'x_country' => $dbbt->f("country"),

       'x_phone' => $dbbt->f("phone_1"),

       'x_fax' => $dbbt->f("fax"),

       'x_email' => $dbbt->f("email"),



       // Customer Shipping Address

       'x_ship_to_first_name' => $dbst->f("first_name"),

       'x_ship_to_last_name' => $dbst->f("last_name"),

       'x_ship_to_company' => $dbst->f("company"),

       'x_ship_to_address' => $dbst->f("address_1"),

       'x_ship_to_city' => $dbst->f("city"),

       'x_ship_to_state' => $dbst->f("state"),

       'x_ship_to_zip' => $dbst->f("zip"),

       'x_ship_to_country' => $dbst->f("country"),



       'x_invoice_num' => $db->f("order_id"),

       'x_receipt_link_url' => SECUREURL."2checkout_notify.php"

       );



       $formdata = array_merge($twoco_prod_info, $formdata); //combine formdata with twoco_prod_info so c_prod info gets sent to 2co



       if( TWOCO_TESTMODE == "Y" )

       $formdata['demo'] = "Y";

       $version = "2";

       $url = "https://www2.2checkout.com/checkout/purchase?lang=es_la";

       $formdata['x_amount'] = number_format($db->f("order_total"), 2, '.', '');



       //build the post string

       $poststring = '';

       foreach($formdata AS $key => $val){

       $poststring .= "<input type='hidden' name='$key' value='$val' />

       ";

       }



?>
   <form id="cho" action="<?php echo $url ?>" method="post" target="_self">
   <?php echo $poststring ?>
   <p>Click on the Image below to pay...</p>
   <input type="image" name="submit" src="https://www.2checkout.com/images/buy_logo.gif" border="0" alt="Make payments with 2Checkout, it's fast and secure!" title="Pay your Order with 2Checkout, it's fast and secure!" />
   </form>
   <script language="JavaScript" type="text/javascript">
   <!--
   document.getElementById('cho').submit();
   //-->
   </script>

3-.con respecto a los detalles de la transaccion dame tiempesito en lo que piensao tu solucion.

4-.Esto debera solucionarse con arreglar lo que te puse en el insiso 2

Saludos

TallerDigitalVW.com

metalgear


Hola

acabo de registrarme en 2checkout y tengo lista, pero no se como integrar 2checkout al ir mi administrador lo hice fue poner el ID de 2checkout y eso fue

Entonces probando el componente trate de realizar un compra , pero cuando llega a complete order me sale este mensaje y no se como solucionarlo

Please review the provided data and confirm the order!

Shipping Address: No valid database connection You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AND state_2_code=''' at line 1 SQL=SELECT * FROM jos_vm_state WHERE country_id= AND state_2_code=''


Espero me puedan ayudar
saludos


Nome

I'd like to share the following code
<?php
// Get ship_to information
if( $db->f("user_info_id") != $dbbt->f("user_info_id"))
{
$q2  "SELECT * FROM #__vm_user_info WHERE user_info_id='".$db->f("user_info_id")."'"
$dbst = new ps_DB;
$dbst->setQuery($q2);
$dbst->query();
$dbst->next_record();
} else {
$dbst $dbbt;

           
$q3 "SELECT * FROM #__vm_order_item WHERE user_info_id='".$db->f("user_info_id")."'";
$dbcprod = new ps_DB;
$dbcprod->setQuery($q3);
$dbcprod->query();
$dbcprod->next_record();

//sort out user orders
for($i 0$i count($dbcprod->record); $i++){ $orders[$i] = $dbcprod->record[$i]->order_id; }
arsort($orders);
$this_order_id current($orders); //sets most recent order number for user

//gets all product info entries for this order number
for($i 0$i count($dbcprod->record); $i++)

if($dbcprod->record[$i]->order_id == $this_order_id) { $this_order[$i] = $dbcprod->record[$i]; }
}
sort($this_order);

//2co c_prods to send
//creates 2co c_prod parameters
for($i 0$i count($this_order); $i++)

$twoco_prod_info["c_prod_$i"] = $this_order[$i]->order_item_sku .","$this_order[$i]->product_quantity;
$twoco_prod_info["c_name_$i"] = $this_order[$i]->order_item_name;
$twoco_prod_info["c_price_$i"] = $this_order[$i]->product_final_price;
$twoco_prod_info["c_description_$i"] = $this_order[$i]->order_item_name .","$this_order[$i]->product_attribute;

}
   
//Authnet vars to send
$formdata = array (
'x_login' => TWOCO_LOGIN,
'x_email_merchant' => ((TWOCO_MERCHANT_EMAIL == 'True') ? 'TRUE' 'FALSE'),
'id_type' => 1//added for c_prod compliance

// Customer Name and Billing Address
'x_first_name' => $dbbt->f("first_name"),
'x_last_name' => $dbbt->f("last_name"),
'x_company' => $dbbt->f("company"),
'x_address' => $dbbt->f("address_1"),
'x_city' => $dbbt->f("city"),
'x_state' => $dbbt->f("state"),
'x_zip' => $dbbt->f("zip"),
'x_country' => $dbbt->f("country"),
'x_phone' => $dbbt->f("phone_1"),
'x_fax' => $dbbt->f("fax"),
'x_email' => $dbbt->f("email"),
 
// Customer Shipping Address
'x_ship_to_first_name' => $dbst->f("first_name"),
'x_ship_to_last_name' => $dbst->f("last_name"),
'x_ship_to_company' => $dbst->f("company"),
'x_ship_to_address' => $dbst->f("address_1"),
'x_ship_to_city' => $dbst->f("city"),
'x_ship_to_state' => $dbst->f("state"),
'x_ship_to_zip' => $dbst->f("zip"),
'x_ship_to_country' => $dbst->f("country"),
 
'x_invoice_num' => $db->f("order_id"),
'x_receipt_link_url' => SECUREURL."2checkout_notify.php"
 );

$formdata array_merge($twoco_prod_info$formdata); //combine formdata with twoco_prod_info so c_prod info gets sent to 2co
 
if( TWOCO_TESTMODE == "Y" )
$formdata['demo'] = "Y";
       
$version "2";
$url "https://www2.2checkout.com/2co/buyer/purchase";
    
//Convert the currency 
$my_2co_default_currency 'USD';
$order_total $db->f("order_total");
if (
$db->f('order_currency') != $my_2co_default_currency 
{
$order_total $GLOBALS['CURRENCY']->convert$db->f("order_total") , $db->f('order_currency'), $my_2co_default_currency );
}
$formdata['x_amount'] = number_format($order_total2'.''');

if( 
$page == "checkout.thankyou" )
{
$query_string "?";
foreach( $formdata as $name => $value )
{
$query_string .= $name"=" urlencode($value) ."&";
}
vmRedirect$url $query_string );
} else {
//build the post string
$poststring '';
foreach($formdata AS $key => $val)
{
$poststring .= "<input type='hidden' name='$key' value='$val' />
"
;

    
//old buy logo: https://www.2checkout.com/images/buy_logo.gif
?>

<form id="cho" action="<?php echo $url ?>" method="post" target="_blank">
<?php echo $poststring?>
<p><font size=+1>Click on the Image below to pay...</font></p>
<input type="image" name="submit" src="https://www2.2checkout.com/static/checkout/CheckoutButton2COCards.gif" border="0" alt="Make payments with 2Checkout, it's fast and secure!" title="Pay your Order with 2Checkout, it's fast and secure!" />
</form>
<?php 
}
?>

Its a compilation of existing codes and includes the following features:
- proper item name and desc transferred to 2CO web
- proper & full contact info sent to 2CO
- currency conversion
- quick link to 2CO (no image clicking to pay)

regards to all who contributed & hope it'll save somebody a couple of days

jcl

El script funciona bien, ahora mis productos salen en el detalle
de la pagina de 2CO, pero ahora tengo un problema,..mis productos son descargables, y utilizando el script virtuemart no envia los links de descarga,..sin el script si los envia pero se ve el codigo largo en 2CO.

Gracias por su ayuda!!

PRO

Mira en tu configuacion de la pago

Foto Below



[attachment cleanup by admin]

jcl

Creo que esa parte la tengo bien configurada,..
Ver imagen...

[attachment cleanup by admin]

PRO

si pero en configuracion de "paga" "confirmed"

[attachment cleanup by admin]


mariemusic

Saludos: Me alegra tengan ayuda en español. Mi tienda está activa en este momento y hasta ahora mis clientes hacen sus pagos a trav´ś de PayPal, pero quisiera que tuviesen la oportunidad de escoger hacerlo directamente con su tarjeta de crédito y no necesariamente teniendo una cuenta de PayPal. Es por eso que abrí una cuenta con 2checkout y tengo mi númnero de vendedor. El problema es que en mi configuración (módulos) de Virtuemart no se como configurarlo pues en ninguna parte me sale un blanco para escribir mi palabra secreta, etc tak como describen en las instrucciones. No será que me falta algo?? Me pueden ayudar? Se los agradecería mucho.

Cuando voy a Virtuemart--->Store--->List Payment Methods---->2checkout  tengo esto:


Nada que tenga que ver con relacionarse con 2checkut...no tengo más modulos que digan 2checkout...me falta algo?

Como puedo solucionar esto?

Gracias!!!



Jumbo!

I managed to install 2CO module correctly as discussed above. Now product details are trasferred to 2CO correctly.

But I am still having a major issue. On completion of the Payment, order status does not get updated to "Confirmed". It still remain as pending.

However it work fine with PayPal.

Can anyone help me please?

Sanyaaa

Hi guys! When i try scripts from here http://forum.virtuemart.net/index.php?topic=55302.msg204027#msg204027 and here http://forum.virtuemart.net/index.php?topic=55302.msg180824#msg180824i've got an error message when buyer goes back from 2co page.
QuoteNo valid database connection You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1 SQL=SELECT order_item_id FROM jos_vm_order_item WHERE order_id=
Samebody help, how to fix it? :(