首页 > 后端开发 > 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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板