>那麼,小企業主應該做什麼?這就是Braintree支付解決方案的出現。他們提供了兩種解決方案,以最大程度地減少您的PCI合規負擔:透明重定向和Braintree.js。我應該提到,Braintree和任何其他符合PCI DSS的服務提供商都無法告訴您要填寫哪個SAQ,或者您的系統是否合規。但是,他們與安全指標(一個行業領先的QSA)配對,以提供無需成本的解決方案,以幫助所有客戶實現並維持PCI的合規性。根據他們的經驗,使用透明重定向或braintree.js的客戶通常能夠填寫SAQ A,這比SAQ D少得多(因此成本高得多)。您可以在這裡閱讀更多。
,但背景足夠;讓我們編寫一些代碼。
本文將重點放在透明的重定向方法上。我們要做的第一件事就是前往Braintree獲取服務器端API鍵。對於那些沒有生產帳戶的人,請將瀏覽器指向Braintree Sandbox並註冊測試帳戶。登錄,然後單擊“帳戶 - > API密鑰”。然後,單擊“生成新的”按鈕,最後單擊新生成的API鍵的“私有密鑰”列下的“視圖”。您將被帶到以下屏幕上,其中包含配置Braintree客戶端庫所需的所有信息。
>您可以看到它甚至具有一種工具,可以用多種語言為您生成配置代碼。
現在是時候安裝實際的Braintree PHP客戶庫庫了。我們可以通過運行以下命令來使用Composer來做到這一點:
>composer require braintree/braintree:*
>有助於確定您是否必須填寫SAQ D或SAQ A的主要因素之一是信用卡數據是否通過系統傳輸。在典型的服務器到服務器(S2S)模型的開頭,您的Web服務器將向客戶的瀏覽器發送付款表。填寫表格後,客戶將按提交提交,該提交將數據張貼回您的Web服務器,這反過來將這些數據轉發給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建議這樣做,我希望這樣做的原因是顯而易見的……
>在告訴您如何做到這一點之前,為了清楚起見,我只提到我將所有PHP和HTML都放在同一文件中。我希望不用說,在一個生產項目中,設置代碼將在我的項目的Bootstrap文件中進行,並且表單處理代碼將進入控制器操作或其他單獨的文件。好的,足夠道歉 - 讓我們設置此功能!
>
<span><span><span><input</span> type<span>="text"</span> name<span>="transaction__credit_card__expiration_date"</span>></span></span>
>
我要做的下一件事是設置表單操作,以便我們的客戶將其敏感數據直接發送給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>
<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>
成功提交數據時,其中一個參數將是http_status,如果用Braintree的服務器順利運行所有內容,則將設置為200。顯然,在生產中,您還需要處理非2000響應代碼,,但是目前,如果我們成功地將我們的付款信息提交給他們的系統,我們只是確保僅在此內部執行此內部代碼。
下一步發生的事情是,我們必須從透明的重定向中取出查詢字符串,然後將其發送回Braintree以完成交易。因此,我們運行另一個庫函數(BrainTree_transparentRedirect ::確認)並為其提供我們的URL查詢字符串,以便告訴Braintree繼續處理我們的付款。一旦發生這種情況,Braintree就會將我們的腳本發送回結果對象。在內部,該對象可以是braintree_result_error或braintree_result_successful,但是兩個對像都有布爾成功屬性,因此您可以查看交易是否成功。
>您還可能注意到我將整個確認包裹在嘗試/捕獲塊中。使用同一頁面顯示表單和處理結果的一個缺點是您只能確認一次TR查詢字符串。這意味著,如果某人在交易失敗後鍵入重新加載按鈕,您的代碼將嘗試重新確認過期的查詢字符串,而Braintree將拋出異常。
>現在,我們擁有所需的一切,我們可以繼續進行一些測試交易。可以在此處找到有關使用沙箱的完整文檔,但是如果您真的很興奮並且想立即進行成功的交易,請繼續並在“卡上的名稱”中輸入您的名字,4111111111111111(4個,其次是15個)作為“卡號”,CVV框中的123,將來的任何日期作為到期日期。如果一切順利,您應該能夠返回沙箱,單擊“高級搜索”下的“交易”,然後單擊“搜索”按鈕,請參閱您的第一個成功交易。>
變得花哨
>
收集它只是將以下字段添加到您的表格中的問題。如果您嘗試執行此操作而不在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)。>透明重定向與傳統重定向之間有什麼區別?交易過程,可以將敏感的客戶數據暴露於潛在的安全風險中。另一方面,透明的重定向繞過商人的服務器,並將數據直接發送到付款網關,從而增強了交易的安全性。 使用透明的重定向? >透明的重定向如何影響用戶體驗? 是的,是的,透明的重定向可以幫助PCI合規性。通過將客戶的付款信息直接發送到付款網關,透明的重定向降低了PCI符合商家的範圍。這可以使商人更容易符合支付卡行業設定的嚴格的安全標準。 如果透明的重定向失敗,則交易將不會被處理。確切的響應將取決於付款網關的API。在大多數情況下,網關會將錯誤消息發送回商家的網站,然後將其顯示給用戶。優雅地處理這些錯誤以確保良好的用戶體驗很重要。 >如何在網站上實現透明的重定向?您需要將您的網站與付款網關的API集成。這涉及在您的網站上設置表格,該表格將客戶的付款信息直接發佈到網關。然後,網關處理交易並將響應發送回您的網站。
>>
>是否有透明重定向?實施可能比傳統的重定向更為複雜。它需要更深入地了解Web開發和支付網關API。但是,增強的安全性和績效優勢通常超過了這個挑戰。 >與所有付款網關兼容的透明重定向? >並非所有付款網關都支持透明的重定向。重要的是要與您的付款網關提供商聯繫,看看他們是否提供此功能。支持透明重定向的一些流行的支付網關包括Braintree,Bluefin和PayPal。
>如果透明的重定向失敗,會發生什麼?
以上是透明的重定向與Braintree的詳細內容。更多資訊請關注PHP中文網其他相關文章!