私は authorize.net 支払いシステムに取り組んでいます。私が直面している問題は次のとおりです。あるユーザーがトランザクションを 1 回完了し、リロード ページまたはリロード タブをクリックすると、お金が 2 回カットされます。
したがって、最初からトランザクションを実行するまで、このリロードとトランザクションを複数回回避したいと考えています。
また、これの最後の値を回避する方法に問題があります。
私は authorize.net 支払いシステムに取り組んでいます。私が直面している問題は次のとおりです。あるユーザーがトランザクションを 1 回完了し、リロード ページまたはリロード タブをクリックすると、お金が 2 回カットされます。
したがって、最初からトランザクションを実行するまで、このリロードとトランザクションを複数回回避したいと考えています。
また、これの最後の値を回避する方法に問題があります。
トランザクションにasp.netC#を使用している場合は、支払いを行った後も同じページに留まらないでください。これは良い習慣ではありません。サーバーから成功応答を受け取ったら、すぐに成功した支払いページにリダイレクトします。
成功の応答が得られなかったり、トランザクションが失敗した場合でも、ページにとどまらず、トランザクションの失敗について説明しているページにリダイレクトしてください。
また、トランザクションページにデータ(ビューステート)を保存したり、!IsPostBackブロックを必要とするようなコードを記述したりしないでください。
以下を含む、authorize.netで利用可能なさまざまなベストプラクティスをお読みください。
https://developer.authorize.net/integration/fifteenminutes/csharp
http://www.authorize.net/files/developerbestpractices.pdf
最高のコードを書いてください。
簡単なトリックの 1 つは、ajax 呼び出しを使用することです。そのため、ページをリロードしても、支払い後に新しいステータスしか表示されません。
あなたがすることは、支払いの現在のステータスを表示するページがあります。ユーザーが支払うボタンをクリックすると、ajax呼び出しでリクエストが送信されます-同時に、ボタンは終了後にウェイメッセージを表示します支払いの新しい情報でページをリロードします。
一般に、トランザクションごとに一意の番号と、このトランザクションの状態フラグが必要です。トランザクションごとに 1 つのアクションのみを許可します。ユーザーがキーを押してすぐに支払いに移動すると、このトランザクションのステータスを変更し (ミューテックスを使用して、その時点でも二重送信を回避します)、その後、同じリクエスト (ページのリロード) を許可しません。
支払いの全プロセスは、停止して戻る (またはステップを繰り返す) ことができないステップで行われます。戻る必要がある場合は、新しい ID で新しいプロセスを作成し、最初からすべての手順を繰り返す必要があります。この方法は、PayPal、Amazon、Google によって行われます。
古典的な解決策はそれです
したがって、彼がリフレッシュしても、page2.aspx のリロードになり、トランザクションはコピーされません。
PS。ユーザーがボタンを 2 回クリックできないように、Page1.aspx onclientclick の保存ボタンを無効/非表示にすることができます。
一度だけ発生するように、コードを(!Page.IsPostback)
ブロックに配置します。