0

私たちの側で注文を処理する必要があるチェックアウトを行うときに、支払いゲートウェイとの統合を行う必要があり、支払いゲートウェイの URL に投稿する必要があります。サーバー側で注文を処理した後、支払いゲートウェイプロバイダーにポスト経由でデータを送信する必要があるコントローラー b/c でリダイレクトを使用できないため、cshtml では、デフォルトのポストは、注文を処理するアクションになります。その後、コントローラー内でポストを行う必要があります。 URL を変更するペイメント ゲートウェイに再度アクセスすると、クレジット カード情報が取得され、プロバイダがクレジット カード情報を取得した後、制御が再び当社のサイトに戻ります。私の質問が明確であることを願っています

注文を保存した後、ブラウザーを PAYU ページに移動する必要があります。

private void PostFormToPayU()
    {
        string url = "https://secure.safeshop.co.za/SafePay/Lite/Index.asp";
        var webClient = new WebClient();

        try
        {
            NameValueCollection vals = new NameValueCollection();

            vals.Add("SafeKey", "{XXXX-XXX-XXX-XX-XXXXXX}");
            vals.Add("MerchantReferenceNumber", "Test2");
            vals.Add("TransactionAmount", "599");
            vals.Add("CurrencyCode", "ZAR");
            vals.Add("ReceiptURL", "http://localhost:47638/Home/About");
            vals.Add("FailURL", "http://localhost:47638/Home/New");
            vals.Add("TransactionType", "Auth");

            byte[] responseArray = webClient.UploadValues(url, vals);
            Stream s = new MemoryStream(responseArray);
            Redirect("https://secure.safeshop.co.za/SafePay/Lite/Index.asp");
            //return new System.Net.Response(responseArray, (int)HttpStatusCode.OK);
            Console.WriteLine("stop");
        }
        catch (WebException e)
        {
            var response = (HttpWebResponse)e.Response;
            //byte[] responseBytes = IOUtil.StreamToBytes(response.GetResponseStream());
            //return new Response(responseBytes, (int)response.StatusCode);
            Console.WriteLine("stop");
        } 
    }
4

2 に答える 2

0

これまでのところ、最善の解決策は

 var context = HttpContext.Current;
        context.Response.Clear();
        context.Response.Write("<html><head>");
        context.Response.Write(string.Format("</head><body onload=\"document.{0}.submit()\">", FormName));
        context.Response.Write(string.Format("<form name=\"{0}\" method=\"{1}\" action=\"{2}\" >", FormName, Method, Url));
        for (int i = 0; i < inputValues.Keys.Count; i++)
            context.Response.Write(string.Format("<input name=\"{0}\" type=\"hidden\" value=\"{1}\">", HttpUtility.HtmlEncode(inputValues.Keys[i]), HttpUtility.HtmlEncode(inputValues[inputValues.Keys[i]])));
        context.Response.Write("</form>");
        context.Response.Write("</body></html>");
        context.Response.End();

注文をデータベースに保存した後、html ページをレンダリングし、フォーム onload() を送信できます。inputValues は、支払いゲートウェイに渡す必要がある名前の値のコレクションです。

于 2012-11-14T06:35:46.923 に答える
0

HttpWebRequest を作成するには、Web 要求 (WebRequest.Create) をセットアップするだけでよいと思います。これは、投稿しようとしているシステムの URL で作成できます。

Web サイトからのデータを予想されるメッセージの形式にラップし、これを要求ストリームに書き込む必要があります。

これは一言で言えば、明らかにそれ以上の詳細があります。

また、この種の処理をコントローラーから何らかのサービスに移動することを検討することもできます。これはかなり関与しているためです。

于 2012-11-13T12:21:33.003 に答える