1

これは、PayPal の通知を解釈するための私のコードです。Paypal から「INVALID」というメッセージが何度も届きます。この質問は本質的に単なるコード スニペットであることを申し訳ありませんが、私は長い間取り組んできたので、何の進展もないようです。

誰かが何かアイデアを持っていて、デバッグ情報を確認する必要がある場合、私がそれを取得する方法は、php の mail() 関数を使用することです。

<?php
    $debugmessage = "";

    require($_SERVER['DOCUMENT_ROOT'] . '/xxxx.php');
    mysql_connect("$server", "$user", "$password") or die(mysql_error());
    mysql_select_db("$database") or die(mysql_error());

    // read the post from PayPal system and add 'cmd'
    $req = 'cmd=_notify-validate';
    foreach ($_POST as $key => $value) {
        $value = urlencode(stripslashes($value));
        $req .= "&$key=$value";
    }

    // post back to PayPal system to validate
    $header = "POST /cgi-bin/webscr HTTP/1.0\r\n";
    $header .= "Content-Type: application/x-www-form-urlencoded\r\n";
    $header .= "Content-Length: " . strlen($req) . "\r\n\r\n";
    $fp = fsockopen ('ssl://www.paypal.com', 443, $errno, $errstr, 30);

    if (!$fp) {
        // HTTP ERROR
        echo "http error";
    } else {
        fputs ($fp, $header . $req);
        while (!feof($fp)) {
            $res = fgets ($fp, 1024);
            $debugmessage .= "|".$res;
            $debugmessage .= "|".strlen($req);
            if (strcmp ($res, "VERIFIED") == 0) {
                // PAYMENT VALIDATED & VERIFIED!
                $debugmessage .= "|"+"payment VALID";

                $email = $_POST['payer_email'];
                $password = mt_rand(100000, 999999);
                mysql_query("INSERT INTO users (email, password) VALUES('". mysql_escape_string($email) ."', '".md5($password)."' ) ") or die(mysql_error());
                $to      = $email;
                $subject = 'Download Area | Login Credentials';
                $message = '
                Thank you for your purchase!
                Your account information
                -------------------------
                Email: '.$email.'
                Password: '.$password.'
                -------------------------
                You can now login at xxxxxxxxxxxx';
                $headers = 'From:xxxxxxx@xxxxxxx.com' . "\r\n";
                mail($to, $subject, $message, $headers);
            }
            else if (strcmp ($res, "INVALID") == 0) {
                $debugmessage .= "|"."payment INvalid";
                // PAYMENT INVALID & INVESTIGATE MANUALY!
                $to      = 'xxxxxx@xxxxxxx.com';
                $subject = 'Download Area | Invalid Payment';
                $message = '
                Dear Administrator,
                A payment has been made but is flagged as INVALID.
                Please verify the payment manualy and contact the buyer.
                Buyer Email: '.$email.'
                ';
                $headers = 'From:xxxxxx@xxxxxxx.com' . "\r\n";
                mail($to, $subject, $message, $headers);

            }
        }
        fclose ($fp);
    }
    mail("xxxxxxx@gmail.com",$debugmessage,"");
?>

誰かがその恐ろしい混乱を理解している場合に備え$debugmessageて、スクリプトが実行されたらこれを含めます。

|HTTP/1.0 200 OK |840|X-Frame-Options: SAMEORIGIN |840|Strict-Transport-Security: max-age=14400 |840|Strict-Transport-Security: max-age=14400 |840|Content-Type: text/html; charset=UTF-8 |840|Date: Tue, 05 Mar 2013 04:42:09 GMT |840|Content-Length: 7 |840|Connection: close |840| |840|INVALID|840|payment INvalid

「CURL」と呼ばれるものを使用しないことと使用することについて読んだことがありますが、これについてfsockopenはあまり自信がありません。

どんな助けでも本当にありがたいです。

4

3 に答える 3

1

5時間後...私の解決策は、このチュートリアルを使用してコードをチャックし、やり直すことでした。

強くお勧めします。

于 2013-03-05T09:18:14.370 に答える
0

多くの人にとっては明白に思えるかもしれませんが、私はそれを理解するのに少し時間を費やしました. IPN シミュレーターのリクエストは確認されましたが、履歴からの IPN は無効でした。実際、Sim はサンドボックスでのみ機能し、履歴は通常の URL でのみ機能します。サンドボックスで過去の IPN メッセージをテストすることはできません。

于 2015-10-02T12:25:41.423 に答える
-1

PayPal Sandbox テスト ツール (Instant Payment Notification (IPN) Simulator) を試して、IPN をテストできます。IPN ファイルでは、POST データを含むファイルを書き込み、何が問題なのかを確認できます。

于 2013-03-05T06:58:50.310 に答える