2015-02-06 58 views
0

我想提交數據到WorldPay的支付網關。我目前正在通過建立一個查詢字符串(付款編號,金額,客戶信息等),並將它們串聯到WorldPay工作的基本URL,像這樣這樣(成功):重定向與發佈數據 - 無查詢字符串

https://secure-test.worldpay.com/wcc/purchase?instId=12345&testMode=100&amount=999

...和做一個標準的Res​​ponse.Redirect([above_url])。

這可以按預期工作,但我擔心在查詢字符串中公開此信息可能會鼓勵人們攻擊它(例如,將「金額」鍵更改爲「1」!)。

WorldPay的例子只是提供一個基本的HTML表單,但由於數據是使用這種方法發佈的,所以上述問題從來都不是問題。不幸的是,我需要做一些預處理(訂單狀態更新等)在將用戶重定向到WorldPay以完成付款之前,我還想知道這是否可以通過編程完成?

我懷疑我試圖做的完全一樣this問題:以編程方式將用戶重定向到WorldPay的網站,傳遞所有必要的付款細節 - 而不公開查詢字符串值。

這可能嗎?

+0

您可以使用method ='post'和所有參數作爲隱藏字段動態創建表單。並提交表格 – 2015-02-06 10:30:24

+0

@NickH根據我的理解,這取決於外部服務(您的案例中的WorldPay)可以理解的內容。如果它能夠從表單發佈值讀取,那麼您絕對可以準備POST數據和重定向。 – 2015-02-06 10:56:34

回答

0

WorldPay支持爲我提供了一個解決方案。通過挖掘它們的來源,我可以看到他們正在做的[我懷疑]什麼是husnain_sys提示:

  var formBuilder = new StringBuilder(); 
     formBuilder.AppendLine("<html><head>"); 
     formBuilder.AppendLineFormat("</head><body onload=\"document.{0}.submit()\">", formName); 
     formBuilder.AppendLineFormat("<form name=\"{0}\" method=\"{1}\" action=\"{2}\" >", formName, Method.ToString(), Url); 
     for (int i = 0; i < _inputValues.Keys.Count; i++) { 
      formBuilder.AppendLineFormat("<input name=\"{0}\" type=\"hidden\" value=\"{1}\">", 
       HttpUtility.HtmlEncode(_inputValues.Keys[i]), HttpUtility.HtmlEncode(_inputValues[_inputValues.Keys[i]])); 
     } 
     formBuilder.AppendLine("</form>"); 
     formBuilder.AppendLine("</body></html>"); 

     _httpContext.Response.Clear(); 
     _httpContext.Response.Write(formBuilder.ToString()); 
     _httpContext.Response.End(); 

這仍然看起來像一個黑客對我來說(當然重定向不必經由JS做什麼? ),但很好 - 它的工作原理!多謝你們。希望這可以幫助別人。