Paypal - через curl работает, через fsockopen - нет

yantar

Новичок
Paypal - через curl работает, через fsockopen - нет

Если делаю через curl - все отлично,
если через fsockopen - Paypal возвращает ни verified, ни invalid, а HTTP/1.1 200 OK.

Здесь написано, что такое случается, если скрипт редиректит на другой скрипт, но у меня нет никакого редиректа.
Код стандартный
PHP:
		$req = 'cmd=_notify-validate';
                foreach ($_POST as $key => $value) {
		  $value = urlencode(stripslashes($value));
		  $req .= "&$key=$value";
		}

                $header = '';
		$header .= "POST sandbox.paypal.com HTTP/1.0\r\n";
		$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
		$header .= "Content-Length: " . strlen($req) . "\r\n\r\n";

		$fp = fsockopen ($this->host, 80, $errno, $errstr, 30);
		if (!$fp) {
			return 0;
		} else {
			fputs ($fp, $header . $req);
			while (!feof($fp)) {
				$res = fgets ($fp, 1024);
				file_put_contents('test.txt', $res);
			}
			fclose ($fp);
		}
	}
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
yantar если написать без www. вначале - то не будет преобразовывать :)

-~{}~ 07.04.09 22:09:

не надо отправлять на PayPal данные из POST
это и небезопасно, и бесмысленно
надо сформировать данные в скрипте и отправить

если хочешь - выложи здесь полный лог того, что отправляется на PP и что получается от него
может, кто захочет вникнуть

а вообще, скажи хостеру, чтоб поставил cURL - это плохой хостинг, если его нет
 

DiMA

php.spb.ru
Команда форума
туфта... в жизни курл не юзал, у меня есть собственный более продвинутый и удобный аналог =)
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
DiMA
мы все снимаем шляпу и прикрываем ей свои ... :)
но ... что бог не дал - в аптеке не купишь, поэтому используем курл и ждем, когда ты покажешь свой аналог :)
 

yantar

Новичок
Автор оригинала: grigori
не надо отправлять на PayPal данные из POST
Так об этом всюду пишут, даже на форуме поддержки пейпела, чтобы именно так проверять инфу, которую пейпел передал, но там рекомендуют использовать https (но в моем случае и с ним, или без него результат одинаков)
Да и во многих движках магазинов именно так через пост идет проверка.

Автор оригинала: grigori
если хочешь - выложи здесь полный лог того, что отправляется на PP и что получается от него
может, кто захочет вникнуть
POST /cgi-bin/webscr HTTP/1.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 896

cmd=_notify-validate
&mc_gross=6.00
&protection_eligibility=Ineligible
&item_number1=
&payer_id=B3LP8JDPJLZXG
&tax=0.00
&payment_date=12%3A54%3A02+Apr+07%2C+2009+PDT
&payment_status=Completed
&charset=windows-1252
&mc_shipping=0.00
&mc_handling=2.00
&first_name=Test
&mc_fee=0.46
&notify_version=2.7
&custom=5ff4306a00097f1ef23accac743514d4
&payer_status=unverified
&business=s_1213342666_biz%40gmail.com
&num_cart_items=1
&mc_handling1=0.00
&verify_sign=ABj5JroNpckgBMj7OObtr85pGD3NAGVGRmSfMT.aQpRoLAX6aSYPRu5B
&payer_email=ss_1238406408_pre%40gmail.com
&mc_shipping1=0.00
&tax1=0.00
&txn_id=6L737520FJ7734636
&payment_type=instant
&last_name=User
&item_name1=prod+1
&receiver_email=s_1213342666_biz%40gmail.com
&payment_fee=
&quantity1=2
&receiver_id=NADTHL7TBNPDY
&txn_type=cart
&mc_gross_1=4.00
&mc_currency=EUR
&residence_country=DE
&test_ipn=1
&transaction_subject=5ff4306a00097f1ef23accac743514d4
&payment_gross=
Переносов строк реально нет, только здесь их поставил.

От пейпела приходит строка HTTP/1.1 200 OK вместо ожидаемых VERIFIED или INVALID.


Автор оригинала: grigori а вообще, скажи хостеру, чтоб поставил cURL - это плохой хостинг, если его нет
На одном хостинге есть cURL, а на втором - нет, Ну и я хочу разобраться, почему через fsockopen не работает.
 

dimagolov

Новичок
yantar, HTTP/1.1 200 OK это статус ответа. а VERIFIED или INVALID это его содержимое может быть, но никак не статус
 

DiMA

php.spb.ru
Команда форума
fputs ($fp, $header . $req);
while (!feof($fp)) {
$res = fgets ($fp, 1024);
file_put_contents('test.txt', $res);
}

Ну вот же бред сивой кобылы!
file_put_contents нужно вызывать один раз, а не в цикле.
 

yantar

Новичок
2 dimagolov Сорри
HTTP/1.1 200 OK
Date: Tue, 07 Apr 2009 20:29:38 GMT
Server: Apache/1.3.33 (Unix) mod_fastcgi/2.4.2 mod_gzip/1.3.26.1a mod_ssl/2.8.22 OpenSSL/0.9.7e
Set-Cookie: c9MWDuvPtT9GIMyPc3jwol1VSlO=p7iS36mqQg1snI4aDBnNL6mXQ7TB79xtArPU9ajvfSO2CoYXyF6IdQcaBp33O0CQS-2-URSYtb2dSndLrBur34RshVLCo7xdN-hIxrJ5npA0DsbI29zAWYk4fOEebjGuVHSpUm%7caak1CETtpfFu6HKD9sn2k49sjUstUUV6N7icjW-Ck9xH96QWJrv0Ga-OujtT4pCZ2bDimW%7coHRcrUzG-YpDP8H2MTVtPC-PhI7KESiB5C6BFsm6nNerbh248ToVOJ44N2aQOPgV4FBA7W%7c1239136179; domain=.paypal.com; path=/
Set-Cookie: cookie_check=yes; expires=Fri, 05-Apr-2019 20:29:39 GMT; domain=.paypal.com; path=/
Set-Cookie: navcmd=_notify-validate; domain=.paypal.com; path=/
Set-Cookie: navlns=0; expires=Mon, 02-Apr-2029 20:29:39 GMT; domain=.paypal.com; path=/
Set-Cookie: Apache=10.191.196.11.13501239136178701; path=/; expires=Mon, 23-Feb-03 14:01:22 GMT
Connection: close
Content-Type: text/html; charset=UTF-8

VERIFIED

-~{}~ 08.04.09 00:28:

2 DiMA
Все я понял, где был баг, я не там закрыл скобку и у меня при проверки первой строки срабатывал return.

Всем спасибо и извините за мою невнимательность.
 

iceman

говнокодер
всетаки file_put_contents замени на fwrite, либо убери с цикла...

если не убрать: в test.txt у тебя будут данные считанные за последнию итерацию, а не все!
 

yantar

Новичок
Автор оригинала: iceman
всетаки file_put_contents замени на fwrite, либо убери с цикла...

если не убрать: в test.txt у тебя будут данные считанные за последнию итерацию, а не все!
Да понял я свою ошибку и в реальном скрипте у меня писалось только первая строка, так как у меня после этого стояла првоверка строки и returnом выбивало с цикла.
 
Сверху