2011-07-08 8 views
0

私はPDTを使用してPayPal支払いを実装しました。 PDTとIPNの組み合わせが推奨されていますが、私の目的ではPDTで十分です。PayPal PDTによるお支払いで商品が2回購入された後にブラウザを更新する

ユーザーをPayPalに誘導し、支払いを受け取り、ユーザーが自分のサイトに戻ったときにアクション(データベースのユーザーのアカウントクレジットを更新)を実行できます。 URLには次のような住所が表示されます。

http://www.domain.com/process_pdt?tx=45138128VH922173V&st=Completed&amt=1.99&cc=USD&cm=&item_number= 

私が持っている問題は、このURLでブラウザをリフレッシュすることで、ユーザーをPayPalにリダイレクトせずにもう一度支払いを受けることができます。

私は、トランザクションID(上記URLのtx)をuserテーブルに追加し、このtx idがまだ使用されていないことを確認する必要があることを読んだ。もしそうなら、私はエラーメッセージを表示すべきです。これは唯一の方法です。つまり、各tx idをuserテーブルに格納し、上記のprocess_pdt URLが(合法的にまたは不正に)ユーザによって呼び出されるたびにIDの存在を確認することですか?

答えて

0

ああ、はい:これは確かに唯一の方法です。簡単なサニティチェックでは、プロセスページからtxn_idを含まないURLにリダイレクトすることができます(カジュアルなリフレッシュでは問題は発生しませんが、戻るボタンを使用しても問題は発生しません) txn_idが自分で一度だけ使用されていることを確認する必要があります。

+0

さらに優れています。代わりにIPNを使用してください。 PDTはあなたのサイトに戻るバイヤーに依存します。確認メッセージには適していますが、取引の変更(たとえば、クレジットの追加/削除など)については絶対に知らされません。 IPNを使用すると、最初はこの問題は発生しません(ただし、複数のPOSTを正常に処理するばかばかしいIPNスクリプトを作成することをお勧めします)。 – Robert

関連する問題