Почему я не могу получить доступ к своим переменным $ _POST в форме прослушивателя PayPal в PHP - PullRequest
0 голосов
/ 27 марта 2020

Мне интересно, где мои переменные $ _POST, если я не могу получить к ним доступ в моем файле прослушивателя. php и как я могу правильно отправить эти переменные в этот файл.

код формы:

<form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_top">
<input type="hidden" name="cmd" value="_s-xclick">
<input type="hidden" name="hosted_button_id" value="TTTTJP9E36G6W">
<input type="hidden" name="hosted_button_id" value="TTTTJP9E36G6W">
<input type="hidden" name="osoba" value="<?=$query?>">
<input type="hidden" name="login" value="<?=$_SESSION['zalogowany']?>">
<input type="hidden" name="idmecz" value="<?=$x?>">
<input type="hidden" name="notify_url" value="http://xxxxxx/listener">
<input type="submit" value="Zapłać" class="butonek" border="0" name="submit" alt="PayPal – Płać wygodnie i bezpiecznie">
<img alt="" border="0" src="https://www.paypalobjects.com/pl_PL/i/scr/pixel.gif" width="1" height="1">

</form>

код слушателя:

<?php
    session_start();



    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, 'https://www.paypal.com/cgi-bin/webscr');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, "cmd=_notify-validate&" . http_build_query($_POST));
    $response = curl_exec($ch);
    curl_close($ch);

    if ($response == "VERIFIED" && $_POST['receiver_email'] == "jxxxxm@.....") {

        $paymentStatus = $_POST['payment_status'];

        if ($paymentStatus == "Completed") {
            $id = $_POST['idmecz'];
            file_put_contents("file.txt",$id);


        }
    }

Этот файл не имеет доступа ни к одной из переменных, даже к переменным $ _SESSION.

Ответы [ 2 ]

1 голос
/ 27 марта 2020

В моем случае помогла вход с именем «custom» -> он отправляет переменную post моему слушателю, мы можем получить к нему доступ с помощью простого $ _POST или, если он содержит более 1 слова, я разделяю его пробелом в первом файле, затем создал список с помощью функции разнесения в слушателе и затем вставил в базу данных. Надеюсь, что это может помочь другим.

1 голос
/ 27 марта 2020

Слушатели IPN получают прямой POST от PayPal, когда появляется сообщение о событии IPN. Таким образом, $ _SESSION не будет иметь значения - это одноразовая публикация, сеанс отсутствует.

Если вы ожидаете появления $ _SESSION клиента, вы ищете неправильную вещь в неправильном место, так как браузер клиента не связывается с вашим слушателем IPN.

Если вы хотите, чтобы дополнительные данные были доступны вам как часть сообщения PayPal IPN, вы можете включить эти данные как часть транзакции PayPal, используя поля INVNUM (номер счета-фактуры, который должен быть уникальным, никогда ранее не использовавшийся для транзакции на вашем счете) и CUSTOM, которые могут содержать что-либо. Эти значения данных появятся где-то в данных IPN $ _POST (распечатайте массив, чтобы найти имя параметра)

Просмотр вашего слушателя. php, проблема может заключаться в том, что шаг проверки не пройден. Вы должны отладить вызов curl - log curl_error ( $ch ) в файл, а также log $response и дамп оригинала $_POST, полученный, чтобы вы могли просмотреть, что на самом деле происходит.

(Если сертификат не может быть проверен, вам, вероятно, нужно скачать обновленный файл .pem пакета центра сертификации и передать путь к этому файлу в CURLOPT_CAINFO)

...