首頁 > 後端開發 > php教程 > 透明的重定向與Braintree

透明的重定向與Braintree

Lisa Kudrow
發布: 2025-02-19 12:11:10
原創
610 人瀏覽過

透明的重定向與Braintree

鑰匙要點

  • > Braintree支付解決方案提供透明的重定向和braintree.js作為解決方案,以幫助最大程度地減少小型企業的PCI合規負擔。
  • >透明的重定向允許將信用卡數據直接傳輸到Braintree的服務器,繞過企業主的系統,從而降低了數據洩露的風險。
  • > Braintree PHP客戶端庫簡化了透明重定向的集成過程,但它可以使與客戶信用卡信息相同的形式的非付款相關信息的收集和驗證複雜化。
  • 要實施透明重定向,企業主必須將其網站與付款網關的API集成,設置一個表格,將客戶的付款信息直接發佈到網關,並處理髮送回其網站的響應。
  • >透明的重定向增強安全性並提高了網站性能,但它需要對網絡開發和支付網關API有更深入的了解,這可能是某些企業主的潛在缺陷。
  • >僅提及“ PCI合規性”通常會引起混亂的外觀和汗水的手掌的結合,這些企業主在線接受信用卡付款。但是這是什麼意思?
  • >
  • >這是一個複雜的話題,但簡短的版本是,主要信用卡公司在2006年成立了一個名為“支付卡行業安全標準委員會(PCI SSC)”的理事會,以創建一套標準化安全策略和程序的規則處理和存儲敏感信用卡信息時,商人應遵循(PCI DSS)。為了確定您的系統是否合規,您通常會從八個選項之一中選擇適當的自我評估問卷(SAQ),然後回答一系列問題以確定您是否確實合規。大型公司經常採用合格的安全評估師(QSA)的服務來幫助他們填寫SAQ D(SAQ中最重要的),這可能會花費數十萬美元。更糟的是:如果您的系統被妥協,並且確定它們在被違反時不合規,則您可能對每次事件的罰款最高$ 500,000。

    >那麼,小企業主應該做什麼?這就是Braintree支付解決方案的出現。他們提供了兩種解決方案,以最大程度地減少您的PCI合規負擔:透明重定向和Braintree.js。我應該提到,Braintree和任何其他符合PCI DSS的服務提供商都無法告訴您要填寫哪個SAQ,或者您的系統是否合規。但是,他們與安全指標(一個行業領先的QSA)配對,以提供無需成本的解決方案,以幫助所有客戶實現並維持PCI的合規性。根據他們的經驗,使用透明重定向或braintree.js的客戶通常能夠填寫SAQ A,這比SAQ D少得多(因此成本高得多)。您可以在這裡閱讀更多。

    ,但背景足夠;讓我們編寫一些代碼。

    入門

    本文將重點放在透明的重定向方法上。我們要做的第一件事就是前往Braintree獲取服務器端API鍵。對於那些沒有生產帳戶的人,請將瀏覽器指向Braintree Sandbox並註冊測試帳戶。登錄,然後單擊“帳戶 - > API密鑰”。然後,單擊“生成新的”按鈕,最後單擊新生成的API鍵的“私有密鑰”列下的“視圖”。您將被帶到以下屏幕上,其中包含配置Braintree客戶端庫所需的所有信息。

    透明的重定向與Braintree

    >您可以看到它甚至具有一種工具,可以用多種語言為您生成配置代碼。

    現在是時候安裝實際的Braintree PHP客戶庫庫了。我們可以通過運行以下命令來使用Composer來做到這一點:

    >
    composer require braintree/braintree:*
    登入後複製
    登入後複製
    登入後複製
    登入後複製

    透明的重定向

    >有助於確定您是否必須填寫SAQ D或SAQ A的主要因素之一是信用卡數據是否通過系統傳輸。在典型的服務器到服務器(S2S)模型的開頭,您的Web服務器將向客戶的瀏覽器發送付款表。填寫表格後,客戶將按提交提交,該提交將數據張貼回您的Web服務器,這反過來將這些數據轉發給Braintree進行驗證和處理。看起來像這樣:

    透明的重定向與Braintree

    但是,使用透明的重定向,設置了表單操作,以便將表單直接發佈到Braintree的服務器,並將響應發送回客戶端瀏覽器。然後,使用HTTP 303重定向將瀏覽器重定向到Web服務器上的腳本。最後,Web服務器腳本確認了通過Braintree的交易,並將結果呈現給客戶端瀏覽器。因此,該模型看起來更像是這樣:

    透明的重定向與Braintree

    >現在我們有了理論,讓我們繼續寫一些代碼。那些想看到完整版本的人可以在github上找到它。

    >

    >我們要做的第一件事就是創建一個非常基本的HTML表單,以便我們可以輸入一些數據以發送給Braintree進行處理。我將盡可能簡單,以便我們專注於功能。

    >
    composer require braintree/braintree:*
    登入後複製
    登入後複製
    登入後複製
    登入後複製

    >這裡沒有任何復雜的事情發生。您唯一會注意到的是輸入字段名稱為數組格式。您可以在此處看到有效字段名稱的完整列表。我從該頁面上指出的另一件事是,如果您使用的是在使用數組來輸入名稱的問題的框架(我在看著您,Zend Framework!),那麼您可以使用替代的雙重下劃線。句法。因此,您的到期日期輸入看起來像這樣:

    <span><span><!doctype html></span>
    </span>	<span><span><span><html</span> lang<span>="en"</span>></span>
    </span>		<span><span><span><body</span>></span>
    </span>		    <span><span><span><div</span> id<span>="wrap"</span>></span>
    </span>		        <span><span><span><form</span> method<span>="post"</span> action<span>=""</span> autocomplete<span>="off"</span>></span>
    </span>		            <span><span><span><label</span>></span>Name on Card: <span><span><input</span> type<span>="text"</span> name<span>="transaction[credit_card][cardholder_name]"</span>></span><span><span></label</span>></span>
    </span>					<span><span><span><label</span>></span>Card Number: <span><span><input</span> type<span>="text"</span> name<span>="transaction[credit_card][number]"</span>></span><span><span></label</span>></span>
    </span>					<span><span><span><label</span>></span>CVV: <span><span><input</span> type<span>="text"</span> name<span>="transaction[credit_card][cvv]"</span> class<span>="short"</span>></span><span><span></label</span>></span>
    </span>					<span><span><span><label</span>></span>Expiration Date (MM/YYYY): <span><span><input</span> type<span>="text"</span> name<span>="transaction[credit_card][expiration_date]"</span> class<span>="short"</span>></span><span><span></label</span>></span>
    </span>					<span><span><span><input</span> type<span>="submit"</span> value<span>="submit payment"</span>></span>
    </span>			    <span><span><span></form</span>></span>
    </span>		    <span><span><span></div</span>></span>
    </span>		<span><span><span></body</span>></span>
    </span>	<span><span><span></html</span>></span></span>
    登入後複製
    登入後複製

    >您可能會注意到的唯一另一件事是,我在我的表單中添加了一個“自動完成”屬性,並將其值設置為關閉。 Braintree建議這樣做,我希望這樣做的原因是顯而易見的……

    為了利用我們形式的透明重定向的魔力,我們還需要做其他一些事情。但是在這樣做之前,我們需要配置腳本以與Braintree的API合作。

    >在告訴您如何做到這一點之前,為了清楚起見,我只提到我將所有PHP和HTML都放在同一文件中。我希望不用說,在一個生產項目中,設置代碼將在我的項目的Bootstrap文件中進行,並且表單處理代碼將進入控制器操作或其他單獨的文件。好的,足夠道歉 - 讓我們設置此功能!

    >

    <span><span><span><input</span> type<span>="text"</span> name<span>="transaction__credit_card__expiration_date"</span>></span></span>
    登入後複製
    登入後複製
    >第一行只允許我們利用作曲家的自動加載器,並使用Braintree的庫,而無需明確包含任何其他文件。希望接下來的四行看起來很熟悉,因為它們是從我在上一節中介紹的Sandbox Control面板API密鑰工具中逐字複製的。顯然,您將用自己的控制面板帳戶中的代碼替換。

    >

    我要做的下一件事是設置表單操作,以便我們的客戶將其敏感數據直接發送給Braintree,這是使用TR的重點。幸運的是,通過提供輔助對象/方法,Braintree庫使這非常容易。因此,只需像這樣修改您的表單代碼:

    composer require braintree/braintree:*
    登入後複製
    登入後複製
    登入後複製
    登入後複製

    >我們唯一要做的是創建一個隱藏的輸入,其中包含您希望Braintree的URL表示的URL表示,將客戶重定向到他們提交表單後以及您不需要的任何信息他們能夠指定。例如,這是您可以放入交易金額的地方。就風格而言,我喜歡將返回URL設置為付款表格本身,以便我可以向用戶顯示任何錯誤,並給他們重新提交的機會。因此,這就是外觀:

    <span><span><!doctype html></span>
    </span>	<span><span><span><html</span> lang<span>="en"</span>></span>
    </span>		<span><span><span><body</span>></span>
    </span>		    <span><span><span><div</span> id<span>="wrap"</span>></span>
    </span>		        <span><span><span><form</span> method<span>="post"</span> action<span>=""</span> autocomplete<span>="off"</span>></span>
    </span>		            <span><span><span><label</span>></span>Name on Card: <span><span><input</span> type<span>="text"</span> name<span>="transaction[credit_card][cardholder_name]"</span>></span><span><span></label</span>></span>
    </span>					<span><span><span><label</span>></span>Card Number: <span><span><input</span> type<span>="text"</span> name<span>="transaction[credit_card][number]"</span>></span><span><span></label</span>></span>
    </span>					<span><span><span><label</span>></span>CVV: <span><span><input</span> type<span>="text"</span> name<span>="transaction[credit_card][cvv]"</span> class<span>="short"</span>></span><span><span></label</span>></span>
    </span>					<span><span><span><label</span>></span>Expiration Date (MM/YYYY): <span><span><input</span> type<span>="text"</span> name<span>="transaction[credit_card][expiration_date]"</span> class<span>="short"</span>></span><span><span></label</span>></span>
    </span>					<span><span><span><input</span> type<span>="submit"</span> value<span>="submit payment"</span>></span>
    </span>			    <span><span><span></form</span>></span>
    </span>		    <span><span><span></div</span>></span>
    </span>		<span><span><span></body</span>></span>
    </span>	<span><span><span></html</span>></span></span>
    登入後複製
    登入後複製

    顯然我在這裡進行核對數量,但是在生產應用程序中,您要么使用某些服務器端邏輯來生成此數字,要么在以未指定的總計捐贈表單的情況下生成它,您將創建一個表單字段並允許用戶提供一個。我通常還將“提交和解”選項設置為真。否則此交易將簡單

    現在,我只需要將其添加為隱藏字段,如我的形式:

    >

    <span><span><span><input</span> type<span>="text"</span> name<span>="transaction__credit_card__expiration_date"</span>></span></span>
    登入後複製
    登入後複製
    >現在我們準備將數據提交給Braintree,我們需要添加一些代碼來處理實際的透明重定向響應。

    <span><span><?php 
    </span></span><span>		<span>require('vendor/autoload.php');
    </span></span><span>
    </span><span>		<span>Braintree_Configuration<span>::</span>environment('sandbox');
    </span></span><span>	    <span>Braintree_Configuration<span>::</span>merchantId('YOUR_MERCHANT_ID');
    </span></span><span>	    <span>Braintree_Configuration<span>::</span>publicKey('YOUR_PUBLIC_KEY');
    </span></span><span>		<span>Braintree_Configuration<span>::</span>privateKey('YOUR_PRIVATE_KEY');
    </span></span><span>
    </span><span>	<span>?></span></span>
    登入後複製
    現在讓我們弄清楚我們剛剛做了什麼。當用戶按下提交按鈕時,表格直接發佈到Braintree,所有客戶的敏感信息都將安全存儲在其PCI CSS符合的服務器上。然後,將HTTP 303重定向發送到瀏覽器,該瀏覽器將用戶發送到生成$ TR_DATA變量時指定的URL,並將幾個參數附加到URL的查詢字符串。

    成功提交數據時,其中一個參數將是http_status,如果用Braintree的服務器順利運行所有內容,則將設置為200。顯然,在生產中,您還需要處理非2000響應代碼,,但是目前,如果我們成功地將我們的付款信息提交給他們的系統,我們只是確保僅在此內部執行此內部代碼。

    下一步發生的事情是,我們必須從透明的重定向中取出查詢字符串,然後將其發送回Braintree以完成交易。因此,我們運行另一個庫函數(BrainTree_transparentRedirect ::確認)並為其提供我們的URL查詢字符串,以便告訴Braintree繼續處理我們的付款。一旦發生這種情況,Braintree就會將我們的腳本發送回結果對象。在內部,該對象可以是braintree_result_error或braintree_result_successful,但是兩個對像都有布爾成功屬性,因此您可以查看交易是否成功。

    >您還可能注意到我將整個確認包裹在嘗試/捕獲塊中。使用同一頁面顯示表單和處理結果的一個缺點是您只能確認一次TR查詢字符串。這意味著,如果某人在交易失敗後鍵入重新加載按鈕,您的代碼將嘗試重新確認過期的查詢字符串,而Braintree將拋出異常。

    >現在,我們擁有所需的一切,我們可以繼續進行一些測試交易。可以在此處找到有關使用沙箱的完整文檔,但是如果您真的很興奮並且想立即進行成功的交易,請繼續並在“卡上的名稱”中輸入您的名字,4111111111111111(4個,其次是15個)作為“卡號”,CVV框中的123,將來的任何日期作為到期日期。如果一切順利,您應該能夠返回沙箱,單擊“高級搜索”下的“交易”,然後單擊“搜索”按鈕,請參閱您的第一個成功交易。

    >

    變得花哨

    透明的重定向是幫助最大程度地減少PCI合規負擔的好方法,但是它確實有一些怪癖,您需要習慣。首先,如果您想在付款表中包含任何與Braintree交易,客戶或信用卡對象之一相對應的數據,則必須使用其“自定義字段”功能。假設我想捕獲用戶喜歡的顏色。我要做的第一件事是轉到控制面板,然後單擊“設置 - >處理”。向下滾動到“自定義字段”部分,然後單擊“新”。您會發現自己在以下屏幕上:

    透明的重定向與Braintree

    API名稱是您將在表單輸入的名稱屬性中引用的。顯示名稱供您參考,您可以指定您是否要在交易中存儲自定義字段的價值,或者只需將其傳遞給服務器。

    >

    收集它只是將以下字段添加到您的表格中的問題。 >

    如果您嘗試執行此操作而不在Braintree Control面板中添加自定義字段,則會觸發驗證錯誤。
    composer require braintree/braintree:*
    登入後複製
    登入後複製
    登入後複製
    登入後複製

    說到驗證,TR會使您的付款表格的服務器端驗證複雜化。假設我想需要客戶的電子郵件地址。我不知道用戶直到交易已確認後才將其留空。我發現的解決方案是在TR腳本的成功塊中運行驗證,然後如果我的驗證未通過,則使交易失效。這樣就會改變我們的代碼:

    如您所見,如果我的本地驗證沒有通過,我使用客戶端庫使用我的braintree_result_success對象的事務ID。

    >最後,在我們的基本示例中,我不費心為用戶重新流動表單字段,因為我們所有的字段都包含Braintree隱藏在服務器中的敏感信用卡數據。但是,既然我們添加了一些客戶數據,我可以使用來自Braintree Rustem對象的數據預填充那些較不敏感的字段。您可以在我的github樣本中看到完整的代碼,但是了解發生的事情的訣竅是知道braintree_result_success對象將用戶取消的表單數據存儲在其交易屬性中,而braintree_result_error將其存儲在參數屬性中。因此,例如,當交易成功時,將在$ result-> tractaction-> customer ['firstName']中找到名字變量,而失敗的事務將其存儲在$ result-> params ['trassAction'] [''中。客戶'] ['firstName']。

    總結

    > Braintree的透明重定向是最大程度地減少應用程序對敏感客戶數據的接觸,從而減少您的PCI合規負擔的一種方法,其PHP客戶庫非常簡化了集成過程,但確實使收集和驗證變得更加困難與客戶的信用卡信息相同形式的付款相關信息。

    下次,我們將查看他們的另一個聰明的解決方案:braintree.js。

    經常詢問有關透明重定向的問題

    >在付款處理中使用透明重定向的主要目的是什麼?

    >

    透明的重定向用於付款處理以增強交易的安全性。它們允許客戶的敏感數據直接發送到付款網關,並繞過商人的服務器。這降低了數據洩露的風險,並幫助商家遵守支付卡行業數據安全標準(PCI DSS)。

    >在網站優化的背景下,透明的重定向如何工作?優化,透明的重定向可以幫助減少HTTP請求的數量,從而提高站點的加載速度。當用戶訪問網頁時,服務器將帶有狀態代碼的HTTP響應。如果狀態代碼指示重定向,則瀏覽器必須提出額外的HTTP請求,這可能會減慢加載時間。透明的重定向可以消除這一額外的步驟,使網站更快,更有效。

    >

    >透明重定向與傳統重定向之間有什麼區別?交易過程,可以將敏感的客戶數據暴露於潛在的安全風險中。另一方面,透明的重定向繞過商人的服務器,並將數據直接發送到付款網關,從而增強了交易的安全性。 >>>>>

    >如何在網站上實現透明的重定向?您需要將您的網站與付款網關的API集成。這涉及在您的網站上設置表格,該表格將客戶的付款信息直接發佈到網關。然後,網關處理交易並將響應發送回您的網站。

    >

    使用透明的重定向?

    >使用透明重定向的主要好處是提高安全性並提高了安全性的主要好處。網站性能。通過繞過商人的服務器,透明的重定向降低了數據洩露的風險。它還通過減少HTTP請求的數量來幫助提高網站的加載速度。

    >

    >是否有透明重定向?實施可能比傳統的重定向更為複雜。它需要更深入地了解Web開發和支付網關API。但是,增強的安全性和績效優勢通常超過了這個挑戰。

    >與所有付款網關兼容的透明重定向?

    >並非所有付款網關都支持透明的重定向。重要的是要與您的付款網關提供商聯繫,看看他們是否提供此功能。支持透明重定向的一些流行的支付網關包括Braintree,Bluefin和PayPal。

    >透明的重定向如何影響用戶體驗?

    從用戶的角度來看,透明的重定向是無縫的。用戶只需在商家網站上輸入其付款信息,然後單擊“提交”。重定向發生在背景中,因此用戶與傳統的交易過程相比沒有註意到任何區別。

    透明的重定向可以幫助PCI符合性嗎?

    是的,是的,透明的重定向可以幫助PCI合規性。通過將客戶的付款信息直接發送到付款網關,透明的重定向降低了PCI符合商家的範圍。這可以使商人更容易符合支付卡行業設定的嚴格的安全標準。

    >

    >如果透明的重定向失敗,會發生什麼?

    如果透明的重定向失敗,則交易將不會被處理。確切的響應將取決於付款網關的API。在大多數情況下,網關會將錯誤消息發送回商家的網站,然後將其顯示給用戶。優雅地處理這些錯誤以確保良好的用戶體驗很重要。

    >

以上是透明的重定向與Braintree的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板