Paypal incorrect item amount


  • Default avatar
    dave37    
     13 years ago
    0

    I'm getting the following error using AWO Coupon pro 1.5.2, joomla 1.5.26 and virtuemart 1.1.19 when a customer uses a coupon and pays using paypal:

    The link you have used to enter the PayPal system contains an incorrectly formatted item amount.

    Here is my paypal config:

    <?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_var['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_name = $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" => "0",//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>';
    }
    ?>
  • Your avatar
    seyi    
     13 years ago
    0

    Hello,

    In my experience that error usually indicates a problem with the currency code.

    Did you try an order to paypal without a discount? Does it work?