PayPal IPN INVALID резултат с помощта на cURL и PHP

Разгледах много, ако не и всички въпроси в Stackoverflow за отговор на това и не можах да го намеря.

Имам проблем с PayPal IPN. Тествам го с помощта на sanbox и IPN Simulator. Също така използвам PHP и cURL, за да проверя отговора, идващ от PayPal. Но получавам само НЕВАЛИДЕН резултат от отговора. Изглежда не мога да се ПРОВЕРЯ.

Мисля, че проблемът е, че не изпращам обратно ТОЧНИЯ URL към PayPal. Можете да видите моя код по-долу за IPN Listener:

<?php

require_once('../includes/main.php');

// Prepare the URL to send via cURL
$req = 'cmd=_notify-validate';
if(function_exists('get_magic_quotes_gpc')) {
    $get_magic_quotes_exists = true;
}
foreach ($_POST as $key => $value) {
    if($get_magic_quotes_exists == true && get_magic_quotes_gpc() == 1) {
        $value = urlencode(stripslashes($value));
    } else {
        $value = urlencode($value);
    }
    $req .= "&$key=$value";
}

// Initial cURL
$ch = curl_init();

// Set opt
curl_setopt($ch,CURLOPT_URL,"https://www.sandbox.paypal.com/cgi-bin/webscr");

//curl_setopt($ch,CURLOPT_URL,"https://www.paypal.com");
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);

// Return result
$result = curl_exec($ch);

// Close cURL connection
curl_close($ch);

// If condition
if(strpos($result, "VERIFIED") != false){
    mysql_query("INSERT INTO paypal_ipn (ipn_message, verification) VALUES ('{$request}', '{$result}')");
}else{
    mysql_query("INSERT INTO paypal_ipn (ipn_message, verification) VALUES ('{$request}', '{$result}')");
}?> 

person FarrisFahad    schedule 21.05.2016    source източник
comment
Може да разреша проблема, ако знам как да сравнявам URL адреси. Но не знам как да получа URL адреса.   -  person FarrisFahad    schedule 21.05.2016
comment
Имате ли var_dump($result) и вижте ли какво има в него?   -  person frz3993    schedule 21.05.2016
comment
@frz3993 Току-що направих това и var_dump беше равно на NULL. и резултатът все още е НЕВАЛИДЕН   -  person FarrisFahad    schedule 22.05.2016
comment
@frz3993 Може би нещо не е наред с urlencoding. Как мога да съпоставя отговора със стойностите на низа на paypal?   -  person FarrisFahad    schedule 22.05.2016
comment
@frz3993 Вижте отговора ми по-долу. Намерих решение, но има друг проблем. Ако можете да ми помогнете с него ще съм ви благодарен.   -  person FarrisFahad    schedule 22.05.2016


Отговори (1)


Най-накрая го разбрах. Проблемът INVALID беше, защото изпратеното TIME е равно на GMT + 3, което го направи невалиден. След като го промених на GMT без + 3, той проработи, върна се VERIFIED.

Но въпросът е защо върна INVALID, когато използвах GMT+3, как мога да го накарам да работи с GMT+3?

person FarrisFahad    schedule 22.05.2016
comment
Не мога да повярвам, че това работи. Това ми отне 2 дни на постоянно разочарование, промяна на опциите на cUrl и т.н. и накрая на симулатора току-що премахнах GMT+0100 и той проработи. Paypal?!! - person Andy; 14.08.2016
comment
@Andy Радвам се да чуя, че си намерил отговора. Тогава също ми отне два дни. Вие сте добре дошъл. - person FarrisFahad; 20.08.2016