0

struts2アクションメソッドがあります。別のサーバーから呼び出されます。つまり、私たちのアプリケーションでは、iciciペイメントゲートウェイを統合しています。私のアクションメソッドはiciciサーバーから呼び出されます。その方法では、私はいくつかのロジックを実行しています。ロジックに基づいて、他のアクションにリダイレクトされます。

<action name="iciciResponse" class="com.yatrasoft.yatratravel.agent.b2c.PaymentGateWayAction" method="iciciResponse">
<result name="buybusTicket" type="redirect">/tentativeBusbooking.action?searchKey=${getSearchKey()}</result>
</action>

私の予約ロジックはtentativeBusbooking()にあります。このメソッドを実行すると、結果がエンドユーザーに表示されます。これで、ブラウザのURLは次のようになります。

http://192.168.0.94:8080/travelyatra/tentativeBusbooking.action?searchKey=NDIwMTMzMDR8MTQ5OTA4MjF8bnVsbHxudWxsfG51bGx8bnVsbHxudWxsfG51bGx8bnVsbHxudWxsfHxud

ただし、問題は、ユーザーがブラウザーを更新すると、tentativeBusbooking()が再度実行されることです。

JSPページがある場合は、s:tokenを使用することで、二重フォームの送信を回避できます。しかし、私のアクションは他のサーバーから直接呼び出されます。したがって、このシナリオで二重送信を回避する方法。

このために独自のロジックを作成する必要がある場合は、私を助けてもらえますか。私は研修生のs/wエンジニアです(5か月の経験のみ)...

4

2 に答える 2

1

一般的に、支払いキャプチャ時の最も標準的な方法のページ更新はまったく提案されておらず、ほとんどの場合、支払いゲートウェイは、ダブルクリックしないようにユーザーに警告する傾向があります。ブラウザを更新すると、支払いが無効になります。

ほとんどすべてのそのような場合、トランザクションは常に無効なモードになります。そのようなユースケースを処理するために、それはアプリケーションではなく支払いゲートウェイの責任です。

この二重提出の問題を処理するメカニズムがあるかどうかにかかわらず、ICICIペイシール統合ドキュメントを参照することをお勧めします。

于 2012-07-27T10:30:32.813 に答える
0

私の提案は、tentativeBusbooking()の後にredirectActionを実行することです。このシナリオでは、SUCCESSを返す代わりに、redirectActionの結果タイプで「bookingComplete」などの結果を返します。

結果はjspのみの表示になり、ページが更新されると、元の送信ではなく結果のみが表示されます。

例えば:

@Results({
@Result(name = "success", location = "/WEB-INF/content/tentativeBusbooking.jsp"),
@Result(name = "bookingComplete", type="redirectAction" location = "booking")})
public class BoxController extends ActionSupport{

    public void execute(){
        return SUCCESS;
    }

    public void tentativeBusbooking(){
        //Do stuff...
        return "bookingComplete";
    }

上記の注釈付きの例では、bookingCompleteの結果タイプは、更新時にtentativeBusbooking()ではなくexecute()を呼び出した後、アクションをそれ自体にリダイレクトします。

于 2012-07-27T13:39:44.033 に答える