10

Paypal を使用して、電子的に表示されたデータの支払いを収集するサイトを持っています。Paypal を介して変数を URL と共に渡すことができない (または変数を機能させることができない) ため、Cookie を使用してアイテム番号を渡しました。しかし、巧妙なユーザーは、Cookie の書き込み部分の後で、paypal のリダイレクト URL をアドレス バーに直接入力して、無料で電子データを取得することができます。ペイパルをバイパスします。どうすればこれを回避できますか?

コードの一部を次に示します。Cookie の書き込み (pre_contact.php) とペイパルのリダイレクト URL (step.php) を直接通過することで、ユーザーにとって困難なものにしようとしていることがわかります。

//pre_contact.php
<?PHP
global $id;
setcookie("property", $id, time()+1800);
echo "<META HTTP-EQUIV=Refresh CONTENT=\"0; URL=contact.php\">";
?>

//contact.php - paypal pay button
echo "<form action='https://www.paypal.com/cgi-bin/webscr' method='post'>";
echo "<input type='hidden' name='cmd' value='_s-xclick'>";
echo "<input type='hidden' name='hosted_button_id' value='156320'>";
echo "<input type='image'
src='https://www.paypal.com/en_GB/i/btn/btn_paynowCC_LG.gif' border='0' name='submit' 
alt='Click to pay'>";
echo "<img alt='' border='0' src='https://www.paypal.com/en_GB/i/scr/pixel.gif'  width='1' height='1'>";
echo "</form>";

//step.php - paypal redirect on successful payment
<?PHP
require("generate_url.php");
?>

//generate_url.php - This generates a unique URL so the info can only be accessed once
<?PHP
if (eregi("generate_url.php", $_SERVER['SCRIPT_NAME'])) {
Header("Location: index.php"); die();
}
$token = md5(uniqid(rand(),1));
setcookie("token", $token, time()+4);
$cwd = substr($_SERVER['PHP_SELF'],0,strrpos($_SERVER['PHP_SELF'],"/"));
Header("Location: $cwd/get_file.php?q=$token"); die();
?>

//get_file.php - displays the file after payment
$qtoken = $_GET['q'];
if ($qtoken===$_COOKIE["token"]){
$id=$_COOKIE["property"];
DISPLAY FILE HERE!!

前もって感謝します

4

3 に答える 3

12

おそらくあなたが探しているのは、Paypal IPN (即時支払い通知) と呼ばれるものです.. 基本的に誰かがあなたから製品を購入します.. Paypal は指定したスクリプト/URL にデータを投稿します (あなたと彼らだけがそれを知っています).彼らが送信した投稿が本物であり、誰かによってシミュレート/偽造されていないことを確認するために、データをペイパルに送り返します..この時点で、トランザクションが有効であることがわかります.

有効な支払いの通知を受け取ったら、電子メールでダウンロード URL を送信したり、HTACCESS 認証のような単純なものを使用してそれらすべてを小さなログイン/パスワード システムにラップしたりできます。

幸運を。

于 2008-10-27T20:09:15.110 に答える
11

コードには、トランザクションが実際に正常に終了したかどうかを知る方法がないため、あなたが取っているアプローチを使用して、1 つのステップでやりたいことを実行できるとは思いません。

上記のアプローチが機能する唯一の方法は、彼らが支払ったファイルに自動的に送信しない場合だと思います.

代わりに、Paypal を通じてトランザクションを確認するのを待ってから、ダウンロード リンクを電子メールで送信する必要があります。


おそらく、Paypal APIを使用してすべて自動的に行うことができます。私は Paypal API にあまり詳しくありませんが、次のように動作するはずです。

  1. ユーザーがあなたから何かを購入することにしました
  2. ユーザーを Paypal に送信するトランザクションを開始し、おそらく何らかのトランザクション ID を生成します。
  3. ユーザーが支払う (または、キャンセルおよび/または支払わないことを決定する)
  4. ユーザーがサイトに戻ってくる
  5. 取引IDを取得し、支払いが成功したことを確認します
  6. 支払いが成功した場合は、ユーザーが支払ったものをユーザーに渡します。

Paypal API リファレンス

于 2008-10-27T19:07:04.223 に答える