VirtueMart Forum

VirtueMart 1.1.x [ Old version - no longer supported ] => Payment VM 1.1 => PayPal / PayPal Pro VM 1.1 => Topic started by: norman kaui on April 21, 2010, 06:37:03 AM

Title: Information passing to Paypal?
Post by: norman kaui on April 21, 2010, 06:37:03 AM
Hi can anyone tell me where to find the html code of the information being passed to paypal during checkout?

Paypal support tells us that we are sending the wrong country code.  Everything looks fine on our side but I can't seem to find where to verify the info.

Any help would be greatly appreciated.
Title: Re: Information passing to Paypal?
Post by: TEST 123 on April 21, 2010, 07:27:51 AM
in VM-store -> payment list->paypal->configuration.
Add below code.it will help you..
<?php
$url = "https://www.paypal.com/cgi-bin/webscr";
$order_id = $db->f("order_id");
$tax_total = $db->f("order_tax") + $db->f("order_shipping_tax");
$discount_total = $db->f("coupon_discount") + $db->f("order_discount");  

// Query for Order Items
$dboi = new ps_DB;
$q_oi = "SELECT * FROM #__vm_order_item ";
$q_oi .= "WHERE #__vm_order_item.order_id='$order_id'";
$dboi->query($q_oi);

$row_num = $dboi->num_rows();

//Getting Cart Items
$auth = $_SESSION['auth'];
$cart = $_SESSION['cart'];
$t_quantity = 0;
$disc_perItem = 0;
$i=1;

// Query to get User Info
$dbb = new ps_DB;
$q = "SELECT * FROM #__vm_user_info ";
$q .= "WHERE user_id ='".$my->id."' ";
$dbb->setQuery($q);
$dbb->query();

//logic for applying discounts to multiple items
$discount_totalCP = $db->f("coupon_discount") + $db->f("order_discount");

while($dboi->next_record()) {
 $t_quantity = $t_quantity + intval($dboi->f("product_quantity"));
}

$dboi = null;
$dboi = new ps_DB;
$dboi->query($q_oi);

if($t_quantity > 0)
{
 if($discount_totalCP > 0) {
   $disc_perItem = round($discount_totalCP / $t_quantity, 2);
 }
 else {
   $disc_perItem = 0;
 }
}
else {
 $disc_perItem = 0;
}
//query to optain product attributes
while($dboi->next_record()) {

 $prod_attrib = $dboi->f("product_attribute");
 $supp_var['item_name_' . $i] = strip_tags("Order #". $db->f("order_id").": ". $dboi->f("order_item_name"));

 if($prod_attrib > ''){
   $attributes_array = explode('<br/>',$prod_attrib);
   $v = 0;
   $z = 1;
   foreach ( $attributes_array as $attributes_value){
     $attrib_name = trim(substr($attributes_value, 0, strpos($attributes_value, ':')), " ");
     $supp_var['on' . $z . '_' . $i] = $attrib_name;
     $attrib_sel = trim(substr_replace(substr_replace($attributes_value, "", 0, strrpos($attributes_value, ':')), "", 0, 2));
     $supp_var['os' . $z . '_' . $i] = $attrib_sel;
     $v++;
     $z++;
     unset($attributes_value);
   }
 }

 $supp_vaProxy-Connection: keep-alive
Cache-Control: max-age=0

5B'item_number_' . $i] = $dboi->f("order_item_sku");
 $supp_var['quantity_' . $i] = $dboi->f("product_quantity");
 $supp_var['amount_' . $i] = round(($dboi->f("product_item_price") - $disc_perItem),2);
 $i++;
}


//Query used to find whether to use Bill Address or Ship to address
$dboui = new ps_DB;
$q_oui = "SELECT * FROM #__vm_order_user_info ";
$q_oui .= "WHERE #__vm_order_user_info.order_id='$order_id' ORDER BY #__vm_order_user_info.order_info_id DESC";
$dboui->query($q_oui);

/*$oui_id = $dboui->f("order_info_id");

if($oui_id == $order_id){
 $first_nameProxy-Connection: keep-alive
Cache-Control: max-age=0

$dbb->f("first_name");
 $last_name = $dbb->f("last_name");
 $address1 = $dbb->f("address_1");
 $address2 = $dbb->f("address_2");
 $city = $dbb->f("city");
 $state = $dbb->f("state");
 $address_country = $dbbt->f("country");
 $zip = $dbb->f("zip");
 $H_PhoneNumber = $dbb->f("phone_1");
}
else {*/
 $first_name = $dboui->f("first_name");
 $last_name = $dboui->f("last_name");
 $address1 = $dboui->f("address_1");
 $address2 = $dboui->f("address_2");
 $city = $dboui->f("city");
 $state = $dboui->f("state");
 $address_country = $dboui->f("country");
 $zip = $dboui->f("zip");
 $H_PhoneNumber = $dboui->f("phone_1");
//}

// Builds array for the form
$post_variables = Array(
"cmd" => "_cart",
"upload" => "1",
"page_style" => "paypal",
"business" => PAYPAL_EMAIL,
"currency_code" => $_SESSION['vendor_currency'],
"amount" => round( $db->f("order_subtotal")+$tax_total-$discount_total, 2),
"handling_cart" => sprintf("%.2f", $db->f("order_shipping")),
"tax" => $tax_total,
"tax_cart" => $tax_total,
"invoice" => $db->f("order_number"),
"image_url" => $vendor_image_url,
"return" => SECUREURL ."index.php?option=com_virtuemart&page=checkout.result&order_id=".$db->f("order_id"),
"notify_url" => SECUREURL ."administrator/components/com_virtuemart/notify.php",
"cancel_return" => SECUREURL ."index.php",
"no_shipping" => "1",
"no_note" => "1",
"email" => $dbb->f("user_email"),
"address_override" => "1",//change this to 0 if you have - Paypal does not allow your country of residence to ship to the country you wish to - errors
"first_name" => $first_name,
"last_name" => $last_name,
"address1" => $address1,
"address2" => $address2,
"city" => $city,
"state" => $state,
"country" => $address_country,
"zip" => $zip,
"night_phone_b" => $H_PhoneNumber
);
//add and send the new variables
if( $page == "checkout.thankyou" ) {
 $query_string = "?";

 foreach( $post_variables as $name => $value ) {
   $query_string .= $name. "=" . urlencode($value) ."&";
 }

 if(is_array($supp_var) && count($supp_var)) {
   foreach($supp_var as $name => $value) {
     $query_string .= $name. "=" . urlencode($value) ."&";
   }
 }

 vmRedirect( $url . $query_string );
}
else {
 echo '<form action="'.$url.'" method="post" target="_blank">';

 foreach( $post_variables as $name => $value ) {
   echo '<input type="hidden" name="'.$name.'" value="'.$value.'" />';
 }

 if(is_array($supp_var) && count($supp_var)) {
   foreach($supp_var as $name => $value) {
     echo '<input type="hidden" name="'.$name.'" value="'.$value.'" />';
   }
 }
 echo '<input type="image" name="submit" src="https://www.paypal.com/en_US/i/btn/x-click-but6.gif" border="0" alt="Make payments with PayPal, it is fast, free, and secure!">';
//Change the above image url for different languages and countries
 echo '</form>';
}
?>
 
Title: Re: Information passing to Paypal?
Post by: norman kaui on April 21, 2010, 09:13:54 AM
Thank you.  I just tried it but received the following error during checkout:

QuoteParse error: syntax error, unexpected ':' in /home/mysite/public_html/components/com_virtuemart/themes/vm_green/templates/pages/checkout.thankyou.tpl.php(61) : eval()'d code on line 73

any suggestions? :)
Title: Re: Information passing to Paypal?
Post by: TEST 123 on April 21, 2010, 12:24:58 PM
try this :
<?php
$db1 = new ps_DB();
$q = "SELECT country_2_code FROM #__vm_country WHERE country_3_code='".$user->country."' ORDER BY country_2_code ASC";
$db1->query($q);
$dboi = new ps_DB;
$q_oi = "SELECT * FROM #__vm_order_item ";
$q_oi .= "WHERE #__vm_order_item.order_id='$order_id'";
$dboi->query($q_oi);
$row_num = $dboi->num_rows();
$url = "https://www.paypal.com/cgi-bin/webscr";
$tax_total = $db->f("order_tax") + $db->f("order_shipping_tax");
$discount_total = $db->f("coupon_discount") + $db->f("order_discount");
$post_variables = Array(
"cmd" => "_ext-enter",
"redirect_cmd" => "_xclick",
"upload" => "1",
"business" => PAYPAL_EMAIL,
"receiver_email" => PAYPAL_EMAIL,
"item_name" => $VM_LANG->_('PHPSHOP_ORDER_PRINT_PO_NUMBER').": ".$db->f("order_id")."::  " . $dboi->f("product_quantity") ."  " .  $dboi->f("order_item_name").", " . $dboi->f("product_attribute"),
"order_id" => $db->f("order_id"),
"invoice" => $db->f("order_number") ,
"amount" => round( $db->f("order_subtotal")+$tax_total-$discount_total, 2),
"shipping" => sprintf("%.2f", $db->f("order_shipping")),
"currency_code" => $_SESSION['vendor_currency'],

"address_override" => "1",
"first_name" => $dbbt->f('first_name'),
"last_name" => $dbbt->f('last_name'),
"address1" => $dbbt->f('address_1'),
"address2" => $dbbt->f('address_2'),
"zip" => $dbbt->f('zip'),
"city" => $dbbt->f('city'),
"state" => $dbbt->f('state'),
"country" => $db1->f('country_2_code'),
"email" => $dbbt->f('user_email'),
"night_phone_b" => $dbbt->f('phone_1'),
"cpp_header_image" => $vendor_image_url,

"return" => SECUREURL ."index.php?option=com_virtuemart&page=checkout.result&order_id=".$db->f("order_id"),
"notify_url" => SECUREURL ."administrator/components/com_virtuemart/notify.php",
"cancel_return" => SECUREURL ."index.php",
"undefined_quantity" => "0",

"test_ipn" => PAYPAL_DEBUG,
"pal" => "NRUBJXESJTY24",
"no_shipping" => "1",
"no_note" => "1"
);
if( $page == "checkout.thankyou" ) {
$query_string = "?";
foreach( $post_variables as $name => $value ) {
$query_string .= $name. "=" . urlencode($value) ."&";
}
vmRedirect( $url . $query_string );
} else {
echo '<form action="'.$url.'" method="post" target="_blank">';
echo '<input type="image" name="submit" src="https://www.paypal.com/en_US/i/btn/x-click-but6.gif" alt="Click to pay with PayPal - it is fast, free and secure!" />';

foreach( $post_variables as $name => $value ) {
echo '<input type="hidden" name="'.$name.'" value="'.htmlspecialchars($value).'" />';
}
echo '</form>';

}
?>


in previous code variable definations are different
Title: Re: Information passing to Paypal?
Post by: norman kaui on April 21, 2010, 13:36:59 PM
The error is gone but now the shipping isn't passed to paypal.  Shipping is calculated in the card during checkout but once it arrives at the paypal payment page it only shows the amount for the product.

Also, when the paypal page pops up and you click on "CONTINUE" at the bottom left corner of the page it takes you to the credit card option.  At the top of that page is a "country" drop down menu that is suppose be set to whatever country was selected in virtuemart during checkout but that is still not happening.  So you have to select the country manually. 

Paypal claims that this is due to the fact that virtuemart is not passing the correct two digit country code.

I really appreciate you taking the time to help. :)  I have no way of testing what information is being passed to paypal.  All I can see is the customers address (my self in this case), Name, Street, Zip Code and State....Country is not selected and this is what's causing the issue for international orders with Paypal.

Thank you again for any advise you can provide!!! :)
Title: Re: Information passing to Paypal?
Post by: Seiko on April 23, 2010, 06:05:58 AM
Try the following code to see if it helps you.
http://forum.virtuemart.net/index.php?topic=49535.msg231957#msg231957

Title: Re: Information passing to Paypal?
Post by: stinga on April 23, 2010, 08:53:15 AM
I have posted my paypal extra info here somewhere, do a search, it works for me.