2016-10-05 7 views
0

저는이 문제를 디버깅하거나 온라인에서 답을 찾기 위해 지난 5 시간 동안 노력했습니다. 샌드 박스에서 테스트 중이지만 동일한 문제가 라이브 서버에 존재합니다. 샌드 박스가 아닌 코드에 문제가 있음을 나타내지 만 그게 무엇인지 파악할 수 없습니다. 내 코드는 기본적으로 PayPal 예 here에서 직접 복사됩니다. PayPal IPN 응답이 비어 있습니다.

// Step 2: POST IPN data back to PayPal to validate 
$ch = curl_init(); 
$url = 'https://www.sandbox.paypal.com/cgi-bin/webscr'; 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $req); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); 
curl_setopt($ch, CURLOPT_FORBID_REUSE, 1); 
curl_setopt($ch, CURLOPT_CAINFO, dirname(__FILE__) . '/cacert.pem'); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Connection: Close')); 

if(!($res = curl_exec($ch))) { 
    error_log("Got " . curl_error($ch) . " when processing IPN data"); 
    mail($notifyemail,'CURL error on IPN',"Got " . curl_error($ch) . " when processing IPN data"); 
    curl_close($ch); 
    exit; 
} 
curl_close($ch); 

는 (나는 간결이 코드 위의 모든 것을 왼쪽하지만,이 전에 모든 코드가. 내가 $req 모두 문자열과 배열을 테스트 한 테스트하고 올바르게 작동 확인 안심)

샌드 박스에서 테스트 할 때(포트 443이 열려 있음을 나에게 제안 함)이라고 말합니다. 그러나 $ res는 항상 비어 있습니다. 낯선 사람이라도, 디버깅하는 동안 내 코드가 내 단계 전후의 curl_getinfo($ch) 단계의 내용을 이메일로 보내고 두 경우 모두 URL을 제외한 모든 항목이 비어있는 단계를 추가했습니다. 옵션이없는 것처럼 요청에 전혀 추가되지 않았습니다. 나는 그것이 정상인지 여부를 알기에 충분한 경험이 없습니다.

페이팔은 IPN의 말한다 :

HTTP response code: 200 
Delivery status: Sent 
No. of retries: 0 
IPN type: Transaction made 

내가 https://github.com/Quixotix/PHP-PayPal-IPN에서 라이브러리에 교환하고 대신에를 사용하여, 그것이 나에게 어떤 이해가되지 않는 (연결할 수 없습니다) cURL error: [7]를 기록했는데, 이후 악수가 다시 확인되었습니다. $listener->getTextReport()의 내용을 나에게 이메일로 보내었지만 오류 정보는 전혀 포함되어 있지 않습니다. use_ssluse_curl

시도 다양한 조합 내 오류 로그는 다음과 같습니다

[05-Oct-2016 16:40:13 America/Toronto] cURL error: [7] 
[05-Oct-2016 16:47:22 America/Toronto] PHP Warning: fsockopen(): unable to connect to ssl://www.sandbox.paypal.com:443 (Operation not permitted) in /home/[stuff]/public_html/[stuff]/ipnlistener.php on line 144 
[05-Oct-2016 16:47:22 America/Toronto] fsockopen error: [1] Operation not permitted 
[05-Oct-2016 16:50:39 America/Toronto] cURL error: [7] 
[05-Oct-2016 16:51:55 America/Toronto] PHP Warning: fsockopen(): unable to connect to www.sandbox.paypal.com:80 (Operation not permitted) in /home/[stuff]/public_html/[stuff]/ipnlistener.php on line 144 
[05-Oct-2016 16:51:55 America/Toronto] fsockopen error: [1] Operation not permitted 

내가 잘못 얻거나 내려다 보이는 해요 뭔가가 있어야하지만 내 인생 내가 무엇을 알아낼 수 없습니다 될 수 있습니다. 어떤 도움이라도 대단히 감사 할 것입니다.

답변

0

글쎄, 웹 호스트가 www.sandbox.paypal.com을 허용하지 않았 음이 문제였습니다. 그래서,이 문제를 겪고있는 다른 모든 사람들에게 교훈을주기 바랍니다 : 당신이해야 할 일을하도록 모든 것이 실제로 이루어 졌는지 웹 호스트에 확인하십시오.

Sidenote : 이제는 경험이 있으므로, 끝나면 사용하기 시작한 IPN 라이브러리를 사용하는 것이 좋습니다. 테스트 환경과 실제 환경, 그리고 cURL과 소켓간에 신속하게 전환 할 수있는 기능은 매우 유용하고 유익하며, 하루가 끝날 즈음에 테스트가 훨씬 빨라졌습니다.