开发者

paypal ipn problem, url malformed (sandbox works, paypal doesn't)

开发者 https://www.devze.com 2023-04-06 22:58 出处:网络
I have an IPN file that works perfectly in sandbox. It returns valid or not and executes the code correctly. However if I try real live payments it tells me the url is malformed

I have an IPN file that works perfectly in sandbox. It returns valid or not and executes the code correctly. However if I try real live payments it tells me the url is malformed

This is the error with live payments:

bool(false) string(15) " malformed" 

this is the curl code I have:

if($testmode === true)
{
    $paypalaction = "https://www.sandbox.paypal.com/cgi-bin/webscr";
}
elseif($paypal == "paypal")
{
    $paypalaction = "https://www.paypal.com/cgi-bin/webscr";
}
// read the post from PayPal system and add 'cmd'
$req = 'cmd=_notify-validate';
foreach ($_POST开发者_如何学运维 as $key => $value)
{
   // If magic quotes is enabled strip slashes
   if (get_magic_quotes_gpc())
   {
       $_POST[$key] = stripslashes($value);
       $value = stripslashes($value);
   }
   $value = urlencode($value);
   // Add the value to the request parameter
   $req .= "&$key=$value";
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$paypalaction); 
curl_setopt($ch, CURLOPT_FAILONERROR, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_TIMEOUT, 3);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $req);
$res = curl_exec($ch);
var_dump($res);
var_dump(curl_error($ch));
curl_close($ch);


It sounds like you may be posting sandbox transactions to the live URL or the other way around. Make sure that when you try a live transaction, you are doing so with a real, live PayPal account. Double-check your code to ensure that your test for which PayPal URL is working correctly.


The problem wasn't with paypal or sandbox but just me being stupid. i had the following if statement:

if($testmode === true)
{
    $paypalaction = "https://www.sandbox.paypal.com/cgi-bin/webscr";
}
elseif($paypal == "paypal")
{
    $paypalaction = "https://www.paypal.com/cgi-bin/webscr";
}

But the $paypal variable wasn't used anymore so it never entered the elseif statement. I should have been only an if else:

if($testmode === true)
    {
        $paypalaction = "https://www.sandbox.paypal.com/cgi-bin/webscr";
    }
    else
    {
        $paypalaction = "https://www.paypal.com/cgi-bin/webscr";
    }
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号