PayPal возвращает "invalid"

Oleg_46

Новичок
Столкнулся с такой проблемой.
PayPal в песочнице и на боевом сервере возвращает "invalid".
Может кто чего посоветует

Форма.
PHP:
<form action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" value="UTF-8" name="charset">
<input type="hidden" value="_xclick" name="cmd">
<input type="hidden" value="2" name="rm">
<input type="hidden" value="[email protected]" name="business">
<input type="hidden" value="Oplata zakaza" name="item_name">
<input type="hidden" value="23025" name="item_number">
<input type="hidden" value="1" name="amount">
<input type="hidden" value="http://host.ru/user/basket/payment_success.php" name="return">
<input type="hidden" value="1" name="no_shipping">
<input type="hidden" value="RUB" name="currency_code">
<input type="hidden" value="http://host/user/basket/paypalcheck.php" name="notify_url">
<input type="submit" value="Оплатить через PayPal">
</form>

Код


PHP:
header('HTTP/1.1 200 OK');    
    

//read the post from PayPal system and add 'cmd'
$req = "cmd=_notify-validate";

foreach ($_POST as $key => $value) {
    $value = urlencode(stripslashes($value));

    $req .= "&$key=$value";
}
debug_output($req, 'a+', SB_BASEDIR.'/debug.txt');


$header = "POST /cgi-bin/webscr HTTP/1.1\r\n";
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
$header .= "Host: www.sandbox.paypal.com\r\n"; 
$header .= "Content-Length: " . strlen($req) . "\r\n";
$header .= "Connection: close\r\n\r\n";


$fp = fsockopen ('ssl://www.sandbox.paypal.com', 443, $errno, $errstr, 30);


    
//successful connection    
if ($fp) {
    fputs ($fp, $header . $req);
    
    while (!feof($fp)) {

        $res = fgets ($fp, 1024);
        $res = trim($res); //NEW & IMPORTANT

        if (strcmp($res, 'VERIFIED') == 0) {
            //insert order into database

	    debug_output("Прошли проверку", 'a+', SB_BASEDIR.'/debug.txt');


	} 
    
        else if (strcmp ($res, 'INVALID') == 0) {
	    debug_output("Не прошли проверку", 'a+', SB_BASEDIR.'/debug.txt');
	   
        }
    }

    fclose($fp);
 

WMix

герр M:)ller
Партнер клуба
значит плохо изучили, если не можете собрать URL верификации, проблемы могут быть где угодно, даже в кодировке.
кстати это левак на мой взгляд,
PHP:
$value = urlencode(stripslashes($value));
я это так писал
PHP:
$post['cmd'] = "_notify-validate";
$postdata = http_build_query($post);
без всяких urlencode и stripslashes
кстати еслиб внимательно читали бы, то выудили бы https://github.com/paypal/codesamples-php этот линк
 
Последнее редактирование:

WMix

герр M:)ller
Партнер клуба
PHP:
		$curl = curl_init( "https://www.sandbox.paypal.com/cgi-bin/webscr" );
		curl_setopt ( $curl, CURLOPT_HEADER, false);
		curl_setopt ( $curl, CURLOPT_POST, true);
		curl_setopt ( $curl, CURLOPT_POSTFIELDS, $postdata);
		curl_setopt ( $curl, CURLOPT_SSL_VERIFYPEER, false);
		curl_setopt ( $curl, CURLOPT_RETURNTRANSFER, true);
		curl_setopt ( $curl, CURLOPT_SSL_VERIFYHOST, true);
		$response = curl_exec ($curl);
		$info = curl_getinfo( $curl );
в песочнице не забыть залогиниться
и кажись в самом pp можно глядеть messages
https://developer.paypal.com/webapps/developer/docs/classic/ipn/integration-guide/IPNOperations/
 

Oleg_46

Новичок
Возвращаясь к теме. Ситуация следующая. Я со своего реального акккаунта при оплате реальными деньгами прохожу проверку, а другие нет. Это может быть связано с настройками аккаунта. Типа бизнес или не бизнес аккаунт. Кстати на сандбоксе, я проверку по прежнему не прохожу. Код выглядит как в первом посте.
 
Сверху