2

私は現在、Authorize.net のテスト アカウントで作業しており、サーバー側の処理を追加せずに、ダイレクト ポスト メソッド フォームを利用してトランザクションをゲートウェイに直接送信しています。私のアプリケーションは、Apache Tomcat 7 の上にある基本的な jsp webapp です。

Java クイック スタート ガイドに記載されている手順に従って、1) ユーザー入力を取り込み、2) 応答を中継し、3) 出力を処理して表示する 3 つのファイルをセットアップしました。

正直なところ、出力をユーザーに表示する必要はありません。代わりに、Authorize.net からの応答を徹底的に処理したいと思います。彼らが提供するサンプル コードは、relay_response.jsp ファイルでこれを明示的に説明しています。

String receiptPageUrl = "http://MERCHANT_HOST/order_receipt.jsp";
...
net.authorize.sim.Result result = net.authorize.sim.Result.createResult(apiLoginId,
 MD5HashKey, request.getParameterMap());
// perform Java server side processing...
// ...
// build receipt url buffer
StringBuffer receiptUrlBuffer = new StringBuffer(receiptPageUrl);
...
...
document.location = "<%=receiptUrlBuffer.toString()%>";

ただし、Java サーブレットを使用してバックエンドでこの作業を実行したいのに対し、jsp で処理を実行するように求められているようです。私は2つの方法を使用してこれを達成しようとしましたが、どちらも私が望むようには機能しません。

試行 1)「order_receipt.jsp」タグを別の jsp への URL に置き換えました。これにより、フォームがサーブレットに送信され、すべての要求パラメーターが渡されます。

String receiptPageUrl = "http://<my_server's_ip_address>/another.jsp";

このアプローチの問題は、relay_response.jsp からの最初の転送で、すべてのパラメーターが GET 経由で渡され、URL に表示されることです。これは許可できません。

試行 2)結果を別の jsp に転送するのではなく、relay_response.jsp 内にフォームを作成し、リクエスト パラメータとして渡された結果を含むフォームを送信しようとしました。

<form id='myform' method='post' action="servlet_action" accept-charset='UTF-8'>
  <input id='params' type='hidden' name='params' value='<%= paramsMap %>'/>
</form>
<script type="text/javascript">
  document.getElementById("myform").submit();
</script>

ここでの問題は、ブラウザには私の Relay_response.jsp ファイルが表示されますが、document.location.hostname の値は test.authorize.net であるため、authorize.net ではなく私のサーバーに存在するため、私のアクションが認識されないことです。サーバ。

または、フォームのアクションをサーバーとサーブレット アクションの完全な URL に設定しようとしました。

<form id='myform' method='post' action="http://<my_server's_ip_address>/webapp/servlet_action" accept-charset='UTF-8'>

しかし、(少なくとも Firefox では) データが安全な接続を介して送信されていないという警告が表示されます。第三者。」

ユーザーに渡されるパラメーターを公開せずに、relay_response.jsp から Java サーブレットにトランザクションの結果を渡すにはどうすればよいですか? https を使用する必要がありますか? また、document.location.host が、relay_response.jsp ではなく、authorize.net を指しているのはなぜですか?

ありがとう!

4

1 に答える 1

2

私が最初に投稿した質問に対して友人が 2 つの解決策を提案してくれました。そのうちの 1 つを確認しました。

解決策 1: 初期フォームを、relay_response.jsp ではなくサーブレットにリダイレクトするだけです。その後、サーブレットは適切に別の jsp にリダイレクトできます。これが Authorize.net DPM で動作することを確認しました。

解決策 2: relay_response.jsp のスクリプトレット内で、ロジックを実際に処理する Java クラスを呼び出します。スクリプトレット内で Java コードを公開したり記述したりする必要はなく、クラスを呼び出していくつかのメソッドを呼び出すだけです。応答パラメーター マップを引数としてメソッドに渡すことができます。呼び出すクラスは適切なサーブレットでさえあると思いますが、これらを混同するのは良い形ではないかもしれません。

于 2013-11-05T17:40:19.763 に答える