За последние 24 часа нас посетили 129046 программистов и 5645 роботов. Сейчас ищут 1703 программиста ...

IPN Paypal

Тема в разделе "PHP для новичков", создана пользователем M Hugo, 19 дек 2016.

Метки:
  1. M Hugo

    M Hugo Новичок

    С нами с:
    31 мар 2016
    Сообщения:
    23
    Симпатии:
    0
    Здравствуйте! У меня почему-то не работает код-обработчик IPN
    PHP:
    1. <?php
    2. // STEP 1: Read POST data
    3.  
    4. // reading posted data from directly from $_POST causes serialization
    5. // issues with array data in POST
    6. // reading raw POST data from input stream instead.
    7. $raw_post_data = file_get_contents('php://input');
    8. $raw_post_array = explode('&', $raw_post_data);
    9. $myPost = array();
    10. foreach ($raw_post_array as $keyval) {
    11.   $keyval = explode ('=', $keyval);
    12.   if (count($keyval) == 2)
    13.      $myPost[$keyval[0]] = urldecode($keyval[1]);
    14. }
    15. // read the post from PayPal system and add 'cmd'
    16. $req = 'cmd=_notify-validate';
    17. if(function_exists('get_magic_quotes_gpc')) {
    18.    $get_magic_quotes_exists = true;
    19. }
    20. foreach ($myPost as $key => $value) {      
    21.    if($get_magic_quotes_exists == true && get_magic_quotes_gpc() == 1) {
    22.         $value = urlencode(stripslashes($value));
    23.    } else {
    24.         $value = urlencode($value);
    25.    }
    26.    $req .= "&$key=$value";
    27. }
    28.  
    29.  
    30. // STEP 2: Post IPN data back to paypal to validate
    31.  
    32. $ch = curl_init('https://www.paypal.com/cgi-bin/webscr'); // change to [...]sandbox.paypal[...] when using sandbox to test
    33. curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
    34. curl_setopt($ch, CURLOPT_POST, 1);
    35. curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
    36. curl_setopt($ch, CURLOPT_POSTFIELDS, $req);
    37. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
    38. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
    39. curl_setopt($ch, CURLOPT_FORBID_REUSE, 1);
    40. curl_setopt($ch, CURLOPT_HTTPHEADER, array('Connection: Close', 'User-Agent: Legal Consulting'));
    41.  
    42. // In wamp like environments that do not come bundled with root authority certificates,
    43. // please download 'cacert.pem' from "http://curl.haxx.se/docs/caextract.html" and set the directory path
    44. // of the certificate as shown below.
    45. // curl_setopt($ch, CURLOPT_CAINFO, dirname(__FILE__) . '/cacert.pem');
    46. if( !($res = curl_exec($ch)) ) {
    47.     error_log("Got " . curl_error($ch) . " when processing IPN data");
    48.     curl_close($ch);
    49.     exit;
    50. }
    51.  
    52.  
    53. // STEP 3: Inspect IPN validation result and act accordingly
    54.  
    55. if (strcmp ($res, "VERIFIED") == 0) {
    56.     echo "VERIFIED";
    57. }
    58.      else if (strcmp ($res, "INVALID") == 0) {
    59.      echo "INVALID";
    60.      }
    61. ?>
    если использую sandbox то var_dump($req) выдаст информацию типа:
    cmd=_notify-validate&mc_gross=37.50&protection_eligibility=Ineligible&payer_id=J86MHHMUDEHZU&tax=0.00&payment_date=07%3A04%3A48+Mar+30%2C+2015+PDT&payment_status=Completed&charset=windows-1252&first_name=test&mc_fee=1.39...
    в live же выводит просто :
    cmd=_notify-validate
    Уже кучу информации перечитал, перепробовал море методов, но ничего не получается.
     
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.213
    Симпатии:
    1.711
    Адрес:
    Молдова, г.Кишинёв
  3. M Hugo

    M Hugo Новичок

    С нами с:
    31 мар 2016
    Сообщения:
    23
    Симпатии:
    0
    Этим способом не получается. WordPress ругается что не знает что такое private и public
     
  4. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.213
    Симпатии:
    1.711
    Адрес:
    Молдова, г.Кишинёв
    а как это выглядит?
     
  5. M Hugo

    M Hugo Новичок

    С нами с:
    31 мар 2016
    Сообщения:
    23
    Симпатии:
    0
    класс добавил в function.php
    на странице пишу:
    PHP:
    1. <?php include_once('functions.php');
    2. use PaypalIPN;
    3. $ipn = new PaypalIPN();
    4. // Use the sandbox endpoint during testing.
    5. $ipn->useSandbox();
    6. $verified = $ipn->verifyIPN();
    7. if ($verified) {
    8.    
    9.     echo "VERIFIED";
    10. }
    11. else {
    12.     echo "INVALID";
    13. }
    14. // Reply with an empty 200 response to indicate to paypal the IPN was received correctly.
    15. header("HTTP/1.1 200 OK");
    16. ?>
    выводит ошибку
     

    Вложения:

  6. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.213
    Симпатии:
    1.711
    Адрес:
    Молдова, г.Кишинёв
    удали это, посмотрим что получится
    --- Добавлено ---
    как добавил? можно было и отдельно в файл положить
     
  7. M Hugo

    M Hugo Новичок

    С нами с:
    31 мар 2016
    Сообщения:
    23
    Симпатии:
    0
    добавил:
    Положил все в один файл:
     

    Вложения:

  8. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.213
    Симпатии:
    1.711
    Адрес:
    Молдова, г.Кишинёв
    что-то на скриншоте такой ошибки не вижу

    похоже всё работает нормально
     
  9. M Hugo

    M Hugo Новичок

    С нами с:
    31 мар 2016
    Сообщения:
    23
    Симпатии:
    0
    Почему тогда ошибка непонятная выходит?
    на скриншоте ошибка если я все в один файл закину, а текстом если только use уберу.
     
  10. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.213
    Симпатии:
    1.711
    Адрес:
    Молдова, г.Кишинёв
    мне она довольна понятна, скрипт видимо ожидает какие-то POST данные, ты их не предоставил, вот он и вызвал ошибку
     
  11. M Hugo

    M Hugo Новичок

    С нами с:
    31 мар 2016
    Сообщения:
    23
    Симпатии:
    0
    я их предоставил - результат тот же.
     
  12. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.213
    Симпатии:
    1.711
    Адрес:
    Молдова, г.Кишинёв
    вот это уже странно, пишет про POST missing?
     
  13. M Hugo

    M Hugo Новичок

    С нами с:
    31 мар 2016
    Сообщения:
    23
    Симпатии:
    0
    В общем, я делал проверку вардампом - получается, что пост-данные приходят, но после вызова класса $_POST масив очищается. По-этому постоянно исполняется
    PHP:
    1. if ( ! count($_POST)) {
    2.             throw new Exception("Missing POST Data");
    и я не понимаю почему
    --- Добавлено ---
    Я буду невероятно признателен, если поможете с этим разобраться.
     
  14. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.213
    Симпатии:
    1.711
    Адрес:
    Молдова, г.Кишинёв
    может wordpress это делает, тогда можно обойтись без него
     
  15. M Hugo

    M Hugo Новичок

    С нами с:
    31 мар 2016
    Сообщения:
    23
    Симпатии:
    0
    Без wordpress? К сожалению нельзя - весь сайт на нем и он практически готов - остался только этот paypal
     
  16. M Hugo

    M Hugo Новичок

    С нами с:
    31 мар 2016
    Сообщения:
    23
    Симпатии:
    0
    На форумах говорят, что wordpress не может очищать $_POST массив
     
  17. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.213
    Симпатии:
    1.711
    Адрес:
    Молдова, г.Кишинёв
    @M Hugo дай ссылку на страницу
     
  18. M Hugo

    M Hugo Новичок

    С нами с:
    31 мар 2016
    Сообщения:
    23
    Симпатии:
    0
  19. M Hugo

    M Hugo Новичок

    С нами с:
    31 мар 2016
    Сообщения:
    23
    Симпатии:
    0
    Вернул все как в примере - выдало ошибку
     
  20. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.213
    Симпатии:
    1.711
    Адрес:
    Молдова, г.Кишинёв
    так use нужно было удалить
     
  21. M Hugo

    M Hugo Новичок

    С нами с:
    31 мар 2016
    Сообщения:
    23
    Симпатии:
    0
    да я его убрал - все осталось по прежнему. Массив очищается.
     
  22. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.213
    Симпатии:
    1.711
    Адрес:
    Молдова, г.Кишинёв
    можешь сделать отдельно от wordpress и посмотреть если массив $_POST очищается?
     
  23. M Hugo

    M Hugo Новичок

    С нами с:
    31 мар 2016
    Сообщения:
    23
    Симпатии:
    0
    У меня не получается - IPN не работает на локалке.
     
  24. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.213
    Симпатии:
    1.711
    Адрес:
    Молдова, г.Кишинёв
    на хостинге сделай
     
  25. M Hugo

    M Hugo Новичок

    С нами с:
    31 мар 2016
    Сообщения:
    23
    Симпатии:
    0
    Сделал - тоже пусто