2009-09-01 48 views
0

這個問題真的讓我的大腦陷入困境: 我需要將非敏感數據發佈到第三方支付網關。我想使用內置的cakephp表單驗證工作正常。在發佈遠程表單之前cakephp數據驗證

我在做什麼是提交表單到一個本地的行動,如何處理數據並輸出任何錯誤。如果沒有驗證錯誤,我卡在哪裏試圖重新提交該數據到遠程URL。問題是,瀏覽器必須重定向到外部網址與發佈數據...我想我失去了它在這裏我知道這可能是不可能的... 我的計劃B只是使用JavaScript進行表單驗證和發佈直接到外部網址..我看着使用捲曲,但我需要瀏覽器重定向/打開extrernal網址。發佈到網址時,我有辦法讓curl重定向瀏覽器嗎?

+0

東西告訴我,我冒險超出了HTTP協議的範圍 – brndnmg

回答

0

我知道的唯一選擇是使用JavaScript。

如果你想發送數據,會有很多選項。但重定向用戶是另一回事。

最好的辦法可能是重新考慮爲什麼要將用戶發送到其他網站。

2

根據您的能力和其他與業務有關的決定,您可以選擇多種路線。

我的建議是讓您使用AJAX驗證方法來驗證您的數據。然後,您的服務器將用於驗證(您可以存儲相關詳細信息,例如發票號碼,客戶信息等)。驗證後,您可以讓該頁面將表單數據提交給第三方網站。請注意,您可能會遇到一些與安全相關的問題,具體取決於您的安全證書(針對SSL)的設置方式。

另一種選擇(我認爲更安全一點)是讓您的網站接受數據。如果它不驗證,請求客戶端的修復程序(這裏是非常基本的Cake的東西)。如果確實有效,您可以使用libcurl將數據發送到第三方處理器,並在請求中的POST數據中正確地形成每個變量。

您無法使用POST有效負載重定向客戶端。以上兩種選擇都可以幫助您完成工作。我會親自使用第二種方法,原因如下:1)更簡單的審計/調試(它已經在您的服務器環境等)2)更安全 - 您可以比客戶端系統更好地鎖定您的服務器,3)看起來好像對客戶來說更清潔(客戶端看不到連接遍佈整個地方等)4)您可以在請求通過您的系統時修改和跟蹤請求(當處理器報告錯誤時對客戶端進行適當的響應等)

總而言之,這是一個可行的事情。你的第三方提供API嗎?你也可以考慮一下。

0

使用CURL重定向有點複雜,但它是可能的,而不是非常困難。如果您明確瞭解要重定向到的URL,或者您可以構建重定向網址,則更容易。下面是一個例子捲曲電話:

/usr/bin/curl -D "/tmp/0001" -H "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)" -H "Cookie: key=value; key2=value2;" -H "Content-length: 89" -d "this=is&the=post&data=true" http://url.com/application.php 

讓我們通過下面的命令:

  1. 的-D將任何回報頭存儲到文件「/ tmp目錄/ 0001」。從這裏你可以解析出你需要找到的任何重定向。只需運行諸如grep Location /tmp/0001之類的東西即可獲取位置重定向標題。這是如果應用程序本身重定向。這也是解析出任何cookie的地方。
  2. -H是要發送到服務器的標題。如果頁面需要cookie,您可以發佈Cookie:標頭。您可能還需要根據您發佈的數據生成內容長度。
  3. -d是您發佈到應用程序的數據這是針對實際的「POST」。

一旦你做了你的第一篇文章,並得到那個工作,你只需再次調用/ usr/bin /捲曲與第二個網址。只需按照它應該查找第二頁的方式構建標題,以及它發送給您的任何cookie,並且它應該像瀏覽器一樣發佈。

curl命令的結果將成爲實際頁面,您可以登錄某個數據庫進行驗證。

我希望這會有所幫助。

+0

我有這個我曾經建立了一箇舊的捲曲類。它應該給你一個好的開始。 http://bin.cakephp.org/saved/50278 – Dooltaz

1

如果一個額外的步驟是在你的應用程序流沒關係,你可以很容易地做到這樣的,沒有所需的JavaScript:

  1. 用戶填寫表單如常。
  2. 表單按照慣例提交給Cake操作並進行驗證。
  3. 如果驗證成功,您將顯示一個中間頁面,其隱藏或只讀表單元素中的所有值。
  4. 提交將隱藏表單發送到外部網站。

爲了您可以呈現頁面中間點菜用戶「請確認您的數據是最後一次,請點擊‘返回’來更改數據或點擊‘提交’將其提交給外部網站。」

+0

絕妙的主意,很橫向的思考! – brndnmg