6

フォームを作りました。現在、このフォームは次の操作を行います。

  1. 顧客がフォームに記入する (注文を作成する)
  2. 「送信」ボタンをクリックします
  3. すべてのフォーム エントリがデータベースに入力されます。

次の操作を行うように変更したいと思います。

  1. 顧客がフォームに記入する
  2. フォームの最後には、この注文にかかる費用を示すテキスト ボックスがあります。
  3. 「送信」ボタンをクリックします(価格を受け入れる場合)
  4. ペイパルにリダイレクトされました
  5. 支払いが成功した場合 -> すべてのフォーム エントリがデータベースに入力されます。Else -> echo "transaction failed".

これが私がこれまでに行ったことです:

「form.php」の内容

<html><head><title>Title</title></head><body>
<form action="php-form-processor.php" method="post">
    <table border="0" cellspacing="5" width = "500">
        <tr>
            <td align="right" width="160">Choose an Item:</td>
            <td align="left">
            <select name="formItem" value="<?=$varItem;?>" class="input_full" >
                <option value="1">Cheese</option>
            </select>
            </td>
        </tr>
        <tr bgcolor="#D0E8F5">
            <td align="right" >Item count:</td>
            <td align="left">
                <input type="text" name="formItemCount" maxlength="50" value="<?=$varItemCount = 1;?>"  class="input_full" />
            </td>
        </tr>
    </table>
    <p align="center">
    <input type="submit" name="formSubmit" align = "center" value="Submit" />
    </p>
</form></body></html>

「php-form-processor.php」の内容

<?php
if($_POST['formSubmit'] == "Submit")
{
    $varItem = $_POST['formItem'];
    $varItemCount = $_POST['formItemCount'];

    //database stuff
    $username = "...";
    $password = "...";
    $hostname = "..."; 
 // connect and add to the database varItem and varItemCount
    mysql_query($sql);
    mysql_close($dbhandle);
}
?>

フォームははるかに大きいですが、stackoverflow のバージョンを単純化しました。注文の価格は、「varItem」と「varItemCount」の値に従って変更する必要があります。基本的に、注文をデータベースに書き込む前に「Pay with PayPal」オプションを追加したいと考えています。PS 私はすでにペイパル サンドボックス アカウントを登録し、「買い手」と「売り手」を追加しました。

次に何をすればいいですか?

編集:わかりました。ここに問題を解決するための小さなガイドがあります。ここにいくつかのアドバイスがあります:

  • 最初に、ペイパル IPN リスナー ラッパーをダウンロードします: https://github.com/Quixotix/PHP-PayPal-IPN
  • 次に、SandBox アカウントに加えて、1 つの買い手アカウントと 1 つの売り手アカウントを登録します。
  • 販売者としてログインし、フォームを作成します (ホストされていないボタンで!)
  • フォームをページに配置し、「カスタム」入力を介して ID またはその他の必要な情報を解析します (いくつかの役立つアドバイスがここにあります: http://www.devshed.com/c/a/PHP/Creating-a-Paypal -IPN-System-in-PHP-Part-Two/ )
  • フォーム送信後にこのページへのリダイレクトを配置するようになりました
  • PaypalセラーアカウントでIPNを有効にし、必要なアドレスフィールドにIPNlistenerリンクを入力することを忘れないでください
  • Paypal フォームを送信し、リスナーの応答を待ちます
  • 終わり

全体のプロセスは次のようになります。

  1. 顧客がフォームに記入する
  2. フォームを送信した後 - すべてのエントリがデータベースに書き込まれます + ID + 「支払済み」と呼ばれる 1 つの追加フィールド: 1 - 顧客が注文に対して支払った場合、0 - 支払っていない場合
  3. header("Location: URL") を使用して Form_Processing から Paypal_Form にリダイレクトします
  4. 「セッション」を使用してオーダー ID をセッションに書き込むか、POST メッセージを使用します
  5. PaypalForm を送信し、注文 ID のキャリアとして「カスタム」フィールドを使用します
  6. 次のようにデータベースを更新するようにリスナーを設定します。トランザクションが成功した場合 -> データベースの列「支払い済み」を 1 (完了) に更新します。「カスタム」フィールドの ID を使用して、必要な注文を選択します。

$sql = "UPDATE paypal_test SET payed = '1' WHERE id = '".$_POST['custom']."'";

これで、完成したフォームと未完成のフォームを含むデータベースができました。さらに、「古い」未完了の注文を削除するロジックを作成できます。このため、「日付」という追加の列を作成して比較することができます: if (current_date.days - old_date.days > 7) -> DB から削除します。それでおしまい!

4

3 に答える 3

2

さて、あなたは何をする必要があるかについてすでにほとんど説明しました:

  • 1 つ目: 値を合計して、必要な場所に投稿する onChange JavaScript を作成します。
  • 2番目:送信後に値のphpチェックを行います(インジェクションの問題も必ずチェックしてください)。
  • 3 番目: ペイパルにリダイレクトし、回答を待ちます。
  • 4番目:ペイパルの回答によると、結果がエコーアウトされます。

PS: 誰かが実際にスクリプト全体を書き直すのを待っていないことを願っています ;)

于 2012-08-06T12:50:16.617 に答える
1

私はPayPalのポストバックがあなたに与えるものを受け入れません、それはユーザーの認証をチェックするずさんな方法であり、ユーザーが「ウェブサイトに戻る」ボタンをクリックすることを期待します。代わりに、IPN(https://www.paypal.com/ipn/)を使用し、確認のために応答をPayPalに返送してください。

PayPalからこのPHPの例を確認してください:https ://cms.paypal.com/uk/cgi-bin/?cmd = _render-content&content_ID =developer / e_howto_admin_IPNImplementation

于 2012-08-06T13:05:49.367 に答える