2012-03-31 9 views
1

PayPal IPN and a listenerという小さな「お支払い」ボタンを作成しました。ボタン自体はウィザードで生成されます。PayPal:返信/「ありがとうございました」ページにメールアドレスを渡します

支払い後、ユーザーは自分のホストの返品/「ありがとう」ページにリダイレクトされます。

すべては期待通りに機能しますが、「ありがとう」ページでも顧客の電子メールを受け取る必要があります。どうすればいいですか?

答えて

1

あなたのリダイレクトURLにtxという名前のGET変数を送信する支払いデータ転送(PDT)を使用して、ユーザーのメールを受け取ることができます。

tx変数には、Paypalのサーバーへのポストリクエストに送信して取引情報を取得するために使用できる取引番号が含まれています。

私がPDTを最後に使ったのは1年前ですが、Paypalアカウントに、これを有効にしてリダイレクトURLを設定する必要があると考えています。ここで

は、さらに詳細にPDTを説明し、いくつかのリンクです:ここでは

ペイパルへのPOSTリクエストを送信解析し、データを解析する方法の例です。 。私は古いファイルからこれを掘り出しただけです。したがって、それが動作する保証はありません。これは、PHPの例としてPaypalが使用するスクリプトに基づいています。代わりにカールを使うことができます。これがおそらく良い選択でしょう。私は、fsockopenの使用には何らかのセキュリティ問題があると思います。

//Paypal will give you a token to use once you enable PDT 
$auth_token = 'token'; 

//Transaction number 
$tx_token = $_GET['tx']; 

$payPalUrl = ($dev === true) ? 'ssl://www.sandbox.paypal.com' : 'ssl://www.paypal.com'; 

$req = 'cmd=_notify-synch'; 
$req .= "&tx=$tx_token&at=$auth_token"; 


$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 ($payPalUrl, 443, $errno, $errstr, 30); 

$keyarray = false; 

if ($fp) { 
    fputs ($fp, $header . $req); 

    $res = ''; 
    $headerdone = false; 
    while (!feof($fp)) { 
     $line = fgets ($fp, 1024); 
     if (strcmp($line, "\r\n") == 0) { 
      $headerdone = true; 
     } 
     else if ($headerdone) { 
      $res .= $line; 
     } 
    } 

    $lines = explode("\n", $res); 

    if (strcmp ($lines[0], "SUCCESS") == 0) { 
      //If successful we can now get the data returned in an associative array 
     $keyarray = array(); 
     for ($i=1; $i<count($lines);$i++){ 
      list($key,$val) = explode("=", $lines[$i]); 
      $keyarray[urldecode($key)] = urldecode($val); 
     } 
    } 
} 
fclose ($fp); 
return $keyarray;