7

我正在 Rails 中开发一个应用程序,并希望用户能够在一个表单上注册并提供他们的卡详细信息。我正在使用 Braintree API 及其透明重定向,这意味着表单数据直接发布到 Braintree。

我如何存储并稍后从该表单中检索用户提供的非付款相关信息,例如帐户名、用户名?Braintree 提供的响应中不会返回这些值。

如果你看一下 Basecamp 的注册过程,这就是我想要达到的结果。

谢谢

罗宾

4

4 回答 4

10

好的,如果 JavaScript 被关闭,会发生这种情况。看起来 BaseCamp 选择通过 AJAX 发送信用卡,但也处理禁用 JavaScript 并将整个表单传输给他们的情况 - 包括非付款字段。

感谢Fiddler和 BaseCamp。

  • 用户在 HTML 表单上填写包含支付数据和您可能想要的任何其他内容的表单,用于注册、运输、购物车等。

  • 表单提交到https://secure.braintreepaymentgateway.com/api/transact.php

  • BrainTree 发挥作用,将信用卡添加到保险库,并将所有信息传回您的页面。它

它通过实际调用一个 URL 来做到这一点,然后你必须处理它,但是你正在处理它。

https://signup.37signals.com/basecamp/plus/signup?transparent_redirect_complete=1
&signup[page]=
&signup[source]=basecamphq.com
&signup[data][first_name]=FRED
&signup[data][last_name]=FLINTSTONE
&signup[data][email_address]=FRED@BEDROCK.COM
&signup[data][name]=FRED
&signup[data][time_zone_id]=Eastern%20Time%20%28US%20%26%20Canada%29
&signup[data][identity_url]=
&signup[data][user_name]=BAMBAM
&signup[data][password]=pebbles123
&signup[data][confirm_password]=pebbles123
&signup[data][subdomain]=bedrock.com
&signup[referrer_code]=
&signup[coupon_code]=
&signup[accepts_eula]=1
&response=1
&responsetext=Customer+Added
&authcode=
&transactionid=
&avsresponse=
&cvvresponse=
&orderid=
&type=
&response_code=100
&customer_vault_id=1253608313
&username=865251
&time=20091129014038
&amount=
&hash=63209ad25560f9a961525d65b63e31be

大概响应代码 100 表示“信用卡不良”,因为我输入了一个假的 CC 号码进行测试。

4) 您可以随意重新显示页面。

悬而未决的问题:如果交易成功,希望卡的最后 4 位数字回来。

于 2009-11-29T01:51:18.547 回答
3

最初提出问题时,这可能不是 API 的一部分,但 Braintree 具有自定义字段,您可以定义这些字段与客户和信用卡数据一起发送。每个字段可以是“Pass Thru”或“Store and Pass Thru”

如果您不需要存储在 Braintree 保险库中的其他数据,请将字段设置为“Pass Thru”,然后将您的表单输入命名为:

transaction[custom_fields][name_that_was_configured_in_control_panel]

或者,如果方括号是一个问题:

transaction__custom_fields__name_that_was_configured_in_control_panel

如果你这样做,那么当你调用时,数据将被传回你的应用程序:

result = Braintree::TransparentRedirect.confirm(query_string)
于 2011-03-22T16:33:45.760 回答
2

我也有同样的需求,我解决它的方法是使用一些 ajax:

我有一个包含两个字段集的表单,一个用于用户字段,另一个用于信用卡详细信息

  • 当用户按下提交时,用户字段被序列化并通过 ajax 发送到我的应用程序
  • 如果用户字段的验证通过,应用程序会响应一些包含透明重定向事务数据的 json,这些数据以前从表单中丢失
  • 表单被克隆并附加一个新输入,其值是透明重定向事务数据。
  • 表单提交给braintree。
  • 瞧,同时注册和付款

也许这个 jQuery 片段将有助于澄清: https ://gist.github.com/742811

于 2010-12-16T00:08:54.123 回答
0

我将在我即将提出的项目中使用 Braintree 的透明重定向,并且我自己考虑过这一点,我认为最好的选择是将表单分成两页。第一个页面的表单是 POST 到您的应用程序,包括帐户名称、用户名等。第二个页面上的表单只是支付信息,并且是 POST 到 Braintree。

这样您就可以在第一步中验证他们的信息。如果事实证明他们的电子邮件地址有错误并且无法联系到他们,或者他们的用户名已经被占用,或者他们的密码和密码确认不匹配,或者其他什么,那么他们可以在 Braintree 向他们收费之前更正它卡片。您绝对不希望有人付钱给您,然后发现他们的帐户没有成功创建,否则您会有一些非常不满意的客户。

所以,在我看来,两页是最干净的方式。我没有看过 37signals 使用的流程——我猜他们使用 Javascript 来捕获表单的提交,然后将帐户信息发送到他们的应用程序进行验证和保存。如果不是,它们会显示错误消息。如果是,他们让提交给 Braintree 的表单通过。这会让他们将注册表单保留在一页上,但听起来对我来说会很乱。不过,您可能会查看他们网站的 javascript,看看您能看到什么。

编辑- 是的,看起来他们就是这么做的。他们正在使用我不太熟悉的 Prototype,但您可以在此文件的底部看到他们自己的代码。实际上,它看起来并没有那么糟糕 - 我可以自己尝试一下。

于 2009-11-21T20:56:45.137 回答