2

私のホスティングではphp 5.0とSSLが有効になっていますが、オンラインフォーラムやブログを徹底的に調べた後、使用しようとしているPaypal IPNスクリプトを手ぶらで返す理由を一生理解できません. サンドボックス シミュレーターを使用してスクリプトをテストしているため、Post データの取得にダイスはありません。私の次のコードを参照してください -

$header = '';

$req = 'cmd=_notify-validate';

foreach($_POST as $key => $value) {
    //All PayPal reqs must be URL encoded
    $value = urlencode(stripslashes($value));
    //Append key => value pair to CMD string
    $req .= "&$key=$value";
} 


//Post info back to paypal for verification
$header .= "POST /cgi-bin/webscr HTTP/1.0\r\n";
// $header .= "Host: ssl://www.sandbox.paypal.com\r\n";
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
$header .= "Content-Length: " . strlen($req) . "\r\n\r\n";
//$header .= "Connection: Close\r\n";
$fp = fsockopen ('ssl://www.sandbox.paypal.com', 443, $errno, $errstr, 30);

$con=mysql_connect("localhost","quadsour_xswitch","xswitch");
mysql_select_db("quadsour_xswitch",$con);//$data="NULL"

if(!$fp) {
    //Process HTTP Error
     $filename = 'debug.txt';
    $filehandle=fopen($filename, 'w');
    fwrite($filehandle, $errstr.'('.$errno.')');
    fclose($filehandle);
    die();

 $message .= "\n HTTP ERROR. \n";

} else {
    fputs ($fp, $header . $req);
    while (!feof($fp)) {
        $res = stream_get_contents($fp, 1024);
        /* $data="INSERT INTO ipn SET
        complete='".$errstr."',invoice='".$errno."'";
        $query=mysql_query($data);
        */

        //VERIFIED TRANSACTION
        //PAYMENT
        if($_POST['payment_status'] == 'completed') {
            $data="INSERT INTO ipn SET
            complete='cond'";
            $query=mysql_query($data);

            $data="INSERT INTO ipn SET
            complete='true',
            invoice='".$_POST['invoice']."',
            email='".$_POST['payer_email']."'
            ";
            $query=mysql_query($data);

            //$subscription = //Do SQL to retrieve the subscription based on $_POST['invoice']


        } 

    }

    fclose ($fp);
}
4

1 に答える 1

1

PayPal IPN で動作する 2 つの PHP ライブラリ (以下の CodeIgniter と Symfony2 のもの) を作成した人として、あなたのスクリプトは PayPal IPN のすべての不測の事態を安全かつ堅牢な方法で処理するには不十分であると言わざるを得ません。

車輪を再発明するのではなく、PHP の設定に応じて、次のライブラリのいずれかをプラグインするだけです。

于 2012-05-08T23:41:38.700 に答える