>那么,小企业主应该做什么?这就是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中文网其他相关文章!