2013-11-17 4 views
0

Я тестирую IP-адрес Paypal с помощью песочницы, и он не работает. Результат всегда показывает INVALID, и я понятия не имею, почему. Пожалуйста, помогите мне проверить, есть ли какая-либо ошибка в кодировании.Paypal IPN не работает, не могу подтвердить

(Everytime я отправить IPN, нет никаких данных, записанных в истории IPN.)

<?php 

class Paypal_IPN 
{ 
    /** @var string $_url The paypal url to go to through cURL; 

/** 
* @param string $mode 'live' or 'sandbox' 
*/ 

public function __construct($mode = 'live') 
{ 
    if ($mode == 'live') 
    $this->_url = 'https://www.paypal.com/cgi-bin/webscr'; 
    else 
    $this->_url = 'https://www.sandbox.paypal.com/cgi-bin/webscr'; 

} 

public function run() 
{ 
    $postFields = 'cmd=_notify-validate'; 

    foreach($_POST as $key => $value) 
    { 
     $postFields .= "&$key=".urlencode($value); 
    } 

    $ch = curl_init(); 

    curl_setopt_array($ch, array(
    CURLOPT_URL => $this->_url, 
    CURLOPT_RETURNTRANSFER => true, 
    CURLOPT_SSL_VERIFYPEER => false, 
    CURLOPT_POST => true, 
    CURLOPT_POSTFIELDS => $postFields 
    )); 

    $result = curl_exec($ch);echo curl_error($ch); 
    curl_close($ch); 

    $fh = fopen('result.txt', 'w'); 
    fwrite($fh, $result . ' -- ' . $postFields); 
    fclose($fh); 
    echo $result; 
    } 
} 
?> 




    <?php 
require 'Paypal_IPN.php'; 
$paypal = new Paypal_IPN('sandbox'); 
$paypal->run(); 
?> 

ответ

0

Вот моя петля для заселив строку. На протяжении многих лет я настраивал его, чтобы справиться с странностями. Кроме того, помните, что конечная строка должна кодироваться UTF8

foreach ($_POST as $key => $value) { 
    $value = urlencode(stripslashes($value)); 
    //Fixes some special characters Paypal sends 
    $value = preg_replace('/(.*[^%^0^D])(%0A)(.*)/i','${1}%0D%0A${3}', $value); 
    $req .= '&' . $key . '=' . $value; 
} 
Смежные вопросы