为什么我无法使用PHP中的PayPal侦听器形式访问$ _POST变量

问题描述 投票:1回答:2

我想知道如果我无法在我的listener.php文件中访问它们,则$ _POST变量在哪里,然后如何将这些变量正确发送到该文件。

表单代码:

<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变量。

php post paypal payment
2个回答
1
投票

IPN侦听器在收到IPN事件消息时会直接从PayPal接收POST。因此,$ _ SESSION将无关紧要-它是一次性的帖子,没有会话。

如果您期望客户的$ _SESSION出现,那么您正在错误的位置寻找错误的东西,因为客户的浏览器未与您的IPN侦听器通信。

如果您希望将其他数据作为PayPal IPN消息的一部分提供给您,则可以使用INVNUM(发票编号,该字段必须是唯一的,以前从未用于交易),将该数据作为PayPal交易的一部分包含在内。在您的帐户上)和CUSTOM(可能包含任何内容)。这些数据值将出现在IPN $ _POST数据中的某处(打印出数组以查找参数名称)]

查看您的listener.php,问题可能是验证步骤失败。您应该调试curl调用-将curl_error ( $ch )记录到文件中,还要记录$response和收到的原始$_POST的转储,以便可以查看实际发生的情况。

(如果无法验证证书,您可能需要下载更新的证书颁发机构捆绑包.pem文件,并在CURLOPT_CAINFO中将路径传递到该文件,]


0
投票

在我的案例中,它帮助名为“ custom”的输入->它将post变量发送给我的侦听器,我们可以通过简单的$ _POST来访问它,或者如果它包含多个单词,我会在第一个文件中用空格分隔它,然后在侦听器中通过爆炸功能创建一个列表,然后将其插入数据库。希望这可以帮助其他人。

© www.soinside.com 2019 - 2024. All rights reserved.