-1

Paypal の IPN を PHP に統合するのに問題があります。次のスクリプトがあり、paypal サンドボックスで支払いが行われると、デフォルトのケースに陥り続けます。

どんな助けでも大歓迎です!

$request = "cmd=_notify-validate"; 
    foreach ($_POST as $varname => $varvalue){
        $email .= "$varname: $varvalue\n";  
        if(function_exists('get_magic_quotes_gpc') and get_magic_quotes_gpc()){  
            $varvalue = urlencode(stripslashes($varvalue)); 
        }
        else { 
            $value = urlencode($value); 
        } 
        $request .= "&$varname=$varvalue"; 
    } 
    $ch = curl_init();
    curl_setopt($ch,CURLOPT_URL,"https://www.sandbox.paypal.com/cgi-bin/webscr");
    //curl_setopt($ch,CURLOPT_URL,"https://www.paypal.com");
    curl_setopt($ch,CURLOPT_POST,true);
    curl_setopt($ch,CURLOPT_POSTFIELDS,$request);
    curl_setopt($ch,CURLOPT_FOLLOWLOCATION,false);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
    $result = curl_exec($ch);
    curl_close($ch);

    switch($result){
        case "VERIFIED":
                    mail('test@test.com','worked','worked');
            break;
        case "INVALID":
            mail('test@test.com','invaild','invaild');
            break;
        default:
            mail('test@test.com','failed','failed');
    }

自分に $result をメールで送信すると、空白になります。

編集: LAMP のサーバー側の問題であることがわかりましたが、修正方法がわかりません。

注: サーバーに curl がインストールされていますが、適切に構成されているかどうかはわかりません。

4

1 に答える 1

2

ここにある var_dump と Paypal のテスト ツールを使用してデバッグを行うことをお勧めします: https://developer.paypal.com/cgi-bin/devscr?cmd=_ipn-link-session

サード パーティ サービスを使用すると、作業が難しくなり、時間がかかることは理解できます。

POST データを取得してシリアル化し、変数に適用するだけで、PayPal がコールバックにヒットすることなくテストできるようにするだけの価値があるかもしれません。

PayPal POST を取得するために、最初にこのようなことを行います。

<?php
   file_put_contents(serialize($_POST), 'post.log');
   //Now you have the post request serialized we can grab the contents and apply it to a variable for fast testing.
?>

コードの開始:

<?php
    $_POST = unserialize(file_get_content('post.log'));
    //Now you can execute the script via command line or within your browser without requiring PayPal's testing tool. Use var_dump to investigate what's the issue.
    $request = "cmd=_notify-validate"; 
    foreach ($_POST as $varname => $varvalue){
        $email .= "$varname: $varvalue\n";  
        if(function_exists('get_magic_quotes_gpc') and get_magic_quotes_gpc()){  
            $varvalue = urlencode(stripslashes($varvalue)); 
        }
        else { 
            $value = urlencode($value); 
        } 
        $request .= "&$varname=$varvalue"; 
    }
?>

現在: テストに関しては、これはもう少し効果的で効率的です。あなたの例では、自分自身にメールを送信していましたが、メール関数の本文内のどこにも $result を含めていません。 http://php.net/manual/en/function.mail.php

PayPal の IPN の例では fsock を使用していますが、CURL の方が効果的で使いやすいです。また、PayPal のサンドボックスの変更に関する最近の問題もいくつかあります。https://www.paypal-community.com/t5/Selling-on-your-website/IPN-response-problem/mp/519862/message-uid/519862#U519862

また:あなたが言ったように、主な原因が何であるかを判断するには、LAMPスタックのようです。ログ ディレクトリ (通常は /var/log/) を確認すると、何が失敗しているかを特定できます。

于 2012-08-09T01:25:26.330 に答える