Ok, I see whats going wrong.
this code for express checkout uses the currant page submit trigger:
<?php
$WA_PP_ECO_SetResult = WA_PP_ECO_SOAPObject();
if (isset($_GET['ExpressCheckout']) || ($_SERVER["REQUEST_METHOD"] == "POST") && (isset($_SERVER["HTTP_REFERER"]) && strpos(urldecode($_SERVER["HTTP_REFERER"]), urldecode($_SERVER["SERVER_NAME"].$_SERVER["PHP_SELF"])) > 0) && isset($_POST)) {
$WA_PP_ECO_Set_params = array();
$WA_PP_ECO_Set_params[0] = array();
$WA_PP_ECO_Set_params[1] = array();
$nextIndex = count($WA_PP_ECO_Set_params[0]);
$WA_PP_ECO_Set_params[0][$nextIndex] = "Username";
$WA_PP_ECO_Set_params[1][$nextIndex] = "".$WAGLOBAL_Paypal_User ."";
$nextIndex = count($WA_PP_ECO_Set_params[0]);
$WA_PP_ECO_Set_params[0][$nextIndex] = "Password";
$WA_PP_ECO_Set_params[1][$nextIndex] = "".$WAGLOBAL_Paypal_Password ."";
$nextIndex = count($WA_PP_ECO_Set_params[0]);
$WA_PP_ECO_Set_params[0][$nextIndex] = "Signature";
$WA_PP_ECO_Set_params[1][$nextIndex] = "".$WAGLOBAL_Paypal_Signature ."";
$nextIndex = count($WA_PP_ECO_Set_params[0]);
$WA_PP_ECO_Set_params[0][$nextIndex] = "System";
$WA_PP_ECO_Set_params[1][$nextIndex] = "US";
$nextIndex = count($WA_PP_ECO_Set_params[0]);
$WA_PP_ECO_Set_params[0][$nextIndex] = "Currency";
$WA_PP_ECO_Set_params[1][$nextIndex] = "USD";
$nextIndex = count($WA_PP_ECO_Set_params[0]);
$WA_PP_ECO_Set_params[0][$nextIndex] = "OrderTotal";
$WA_PP_ECO_Set_params[1][$nextIndex] = "".$WA_Store_Cart->GrandTotal() ."";
$nextIndex = count($WA_PP_ECO_Set_params[0]);
$WA_PP_ECO_Set_params[0][$nextIndex] = "ReturnURL";
$WA_PP_ECO_Set_params[1][$nextIndex] = "".$WAGLOBAL_Root_URL ."pp_confirm.php";
$nextIndex = count($WA_PP_ECO_Set_params[0]);
$WA_PP_ECO_Set_params[0][$nextIndex] = "CancelURL";
$WA_PP_ECO_Set_params[1][$nextIndex] = "".$WAGLOBAL_Root_URL ."pp_cancel.php";
$nextIndex = count($WA_PP_ECO_Set_params[0]);
$WA_PP_ECO_Set_params[0][$nextIndex] = "PaymentAction";
$WA_PP_ECO_Set_params[1][$nextIndex] = "Authorization";
$nextIndex = count($WA_PP_ECO_Set_params[0]);
$WA_PP_ECO_Set_params[0][$nextIndex] = "UseSandbox";
$WA_PP_ECO_Set_params[1][$nextIndex] = "".($WAGLOBAL_Paypal_Sandbox == 1)?"true":"false" ."";
$WA_PP_ECO_SetResult = WA_PP_ECO_Set_Post($WA_PP_ECO_Set_params);
if ($WA_PP_ECO_SetResult->isError) {
if ("pp_checkout_failure.php" != "") {
header("Location: ". "pp_checkout_failure.php"); exit;
}
}
else {
$WA_Store_Cart->redirStr = $WA_PP_ECO_SetResult->ECOServer;
}
}
?>
it's being executed when you set your shipping. change that to:
<?php if((!isset($_POST['grpshipping'])) || $_POST['grpshipping'] == "") { ?>
<?php
$WA_PP_ECO_SetResult = WA_PP_ECO_SOAPObject();
if (isset($_GET['ExpressCheckout']) || ($_SERVER["REQUEST_METHOD"] == "POST") && (isset($_SERVER["HTTP_REFERER"]) && strpos(urldecode($_SERVER["HTTP_REFERER"]), urldecode($_SERVER["SERVER_NAME"].$_SERVER["PHP_SELF"])) > 0) && isset($_POST)) {
$WA_PP_ECO_Set_params = array();
$WA_PP_ECO_Set_params[0] = array();
$WA_PP_ECO_Set_params[1] = array();
$nextIndex = count($WA_PP_ECO_Set_params[0]);
$WA_PP_ECO_Set_params[0][$nextIndex] = "Username";
$WA_PP_ECO_Set_params[1][$nextIndex] = "".$WAGLOBAL_Paypal_User ."";
$nextIndex = count($WA_PP_ECO_Set_params[0]);
$WA_PP_ECO_Set_params[0][$nextIndex] = "Password";
$WA_PP_ECO_Set_params[1][$nextIndex] = "".$WAGLOBAL_Paypal_Password ."";
$nextIndex = count($WA_PP_ECO_Set_params[0]);
$WA_PP_ECO_Set_params[0][$nextIndex] = "Signature";
$WA_PP_ECO_Set_params[1][$nextIndex] = "".$WAGLOBAL_Paypal_Signature ."";
$nextIndex = count($WA_PP_ECO_Set_params[0]);
$WA_PP_ECO_Set_params[0][$nextIndex] = "System";
$WA_PP_ECO_Set_params[1][$nextIndex] = "US";
$nextIndex = count($WA_PP_ECO_Set_params[0]);
$WA_PP_ECO_Set_params[0][$nextIndex] = "Currency";
$WA_PP_ECO_Set_params[1][$nextIndex] = "USD";
$nextIndex = count($WA_PP_ECO_Set_params[0]);
$WA_PP_ECO_Set_params[0][$nextIndex] = "OrderTotal";
$WA_PP_ECO_Set_params[1][$nextIndex] = "".$WA_Store_Cart->GrandTotal() ."";
$nextIndex = count($WA_PP_ECO_Set_params[0]);
$WA_PP_ECO_Set_params[0][$nextIndex] = "ReturnURL";
$WA_PP_ECO_Set_params[1][$nextIndex] = "".$WAGLOBAL_Root_URL ."pp_confirm.php";
$nextIndex = count($WA_PP_ECO_Set_params[0]);
$WA_PP_ECO_Set_params[0][$nextIndex] = "CancelURL";
$WA_PP_ECO_Set_params[1][$nextIndex] = "".$WAGLOBAL_Root_URL ."pp_cancel.php";
$nextIndex = count($WA_PP_ECO_Set_params[0]);
$WA_PP_ECO_Set_params[0][$nextIndex] = "PaymentAction";
$WA_PP_ECO_Set_params[1][$nextIndex] = "Authorization";
$nextIndex = count($WA_PP_ECO_Set_params[0]);
$WA_PP_ECO_Set_params[0][$nextIndex] = "UseSandbox";
$WA_PP_ECO_Set_params[1][$nextIndex] = "".($WAGLOBAL_Paypal_Sandbox == 1)?"true":"false" ."";
$WA_PP_ECO_SetResult = WA_PP_ECO_Set_Post($WA_PP_ECO_Set_params);
if ($WA_PP_ECO_SetResult->isError) {
if ("pp_checkout_failure.php" != "") {
header("Location: ". "pp_checkout_failure.php"); exit;
}
}
else {
$WA_Store_Cart->redirStr = $WA_PP_ECO_SetResult->ECOServer;
}
}
?>
<?php } ?>
so it will only execute if the shipping radio button is not set.