フォームを作りました。現在、このフォームは次の操作を行います。
- 顧客がフォームに記入する (注文を作成する)
- 「送信」ボタンをクリックします
- すべてのフォーム エントリがデータベースに入力されます。
次の操作を行うように変更したいと思います。
- 顧客がフォームに記入する
- フォームの最後には、この注文にかかる費用を示すテキスト ボックスがあります。
- 「送信」ボタンをクリックします(価格を受け入れる場合)
- ペイパルにリダイレクトされました
- 支払いが成功した場合 -> すべてのフォーム エントリがデータベースに入力されます。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 フォームを送信し、リスナーの応答を待ちます
- 終わり
全体のプロセスは次のようになります。
- 顧客がフォームに記入する
- フォームを送信した後 - すべてのエントリがデータベースに書き込まれます + ID + 「支払済み」と呼ばれる 1 つの追加フィールド: 1 - 顧客が注文に対して支払った場合、0 - 支払っていない場合
- header("Location: URL") を使用して Form_Processing から Paypal_Form にリダイレクトします
- 「セッション」を使用してオーダー ID をセッションに書き込むか、POST メッセージを使用します
- PaypalForm を送信し、注文 ID のキャリアとして「カスタム」フィールドを使用します
- 次のようにデータベースを更新するようにリスナーを設定します。トランザクションが成功した場合 -> データベースの列「支払い済み」を 1 (完了) に更新します。「カスタム」フィールドの ID を使用して、必要な注文を選択します。
$sql = "UPDATE paypal_test SET payed = '1' WHERE id = '".$_POST['custom']."'";
これで、完成したフォームと未完成のフォームを含むデータベースができました。さらに、「古い」未完了の注文を削除するロジックを作成できます。このため、「日付」という追加の列を作成して比較することができます: if (current_date.days - old_date.days > 7) -> DB から削除します。それでおしまい!