我正在 Rails 中开发一个应用程序,并希望用户能够在一个表单上注册并提供他们的卡详细信息。我正在使用 Braintree API 及其透明重定向,这意味着表单数据直接发布到 Braintree。
我如何存储并稍后从该表单中检索用户提供的非付款相关信息,例如帐户名、用户名?Braintree 提供的响应中不会返回这些值。
如果你看一下 Basecamp 的注册过程,这就是我想要达到的结果。
谢谢
罗宾
我正在 Rails 中开发一个应用程序,并希望用户能够在一个表单上注册并提供他们的卡详细信息。我正在使用 Braintree API 及其透明重定向,这意味着表单数据直接发布到 Braintree。
我如何存储并稍后从该表单中检索用户提供的非付款相关信息,例如帐户名、用户名?Braintree 提供的响应中不会返回这些值。
如果你看一下 Basecamp 的注册过程,这就是我想要达到的结果。
谢谢
罗宾
好的,如果 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 位数字回来。
最初提出问题时,这可能不是 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)
我也有同样的需求,我解决它的方法是使用一些 ajax:
我有一个包含两个字段集的表单,一个用于用户字段,另一个用于信用卡详细信息
也许这个 jQuery 片段将有助于澄清: https ://gist.github.com/742811
我将在我即将提出的项目中使用 Braintree 的透明重定向,并且我自己考虑过这一点,我认为最好的选择是将表单分成两页。第一个页面的表单是 POST 到您的应用程序,包括帐户名称、用户名等。第二个页面上的表单只是支付信息,并且是 POST 到 Braintree。
这样您就可以在第一步中验证他们的信息。如果事实证明他们的电子邮件地址有错误并且无法联系到他们,或者他们的用户名已经被占用,或者他们的密码和密码确认不匹配,或者其他什么,那么他们可以在 Braintree 向他们收费之前更正它卡片。您绝对不希望有人付钱给您,然后发现他们的帐户没有成功创建,否则您会有一些非常不满意的客户。
所以,在我看来,两页是最干净的方式。我没有看过 37signals 使用的流程——我猜他们使用 Javascript 来捕获表单的提交,然后将帐户信息发送到他们的应用程序进行验证和保存。如果不是,它们会显示错误消息。如果是,他们让提交给 Braintree 的表单通过。这会让他们将注册表单保留在一页上,但听起来对我来说会很乱。不过,您可能会查看他们网站的 javascript,看看您能看到什么。
编辑- 是的,看起来他们就是这么做的。他们正在使用我不太熟悉的 Prototype,但您可以在此文件的底部看到他们自己的代码。实际上,它看起来并没有那么糟糕 - 我可以自己尝试一下。