2009-11-21 30 views
7

Tôi đang phát triển một ứng dụng trong Rails và muốn người dùng có thể đăng ký và cung cấp chi tiết thẻ của họ trên một biểu mẫu. Tôi đang sử dụng API Braintree và chuyển hướng trong suốt của họ, có nghĩa là dữ liệu biểu mẫu được đăng trực tiếp lên Braintree.Mẫu đăng ký sử dụng Chuyển hướng Trong suốt Braintree

Làm cách nào để lưu trữ và sau đó truy xuất thông tin không liên quan đến thanh toán được cung cấp bởi người dùng từ biểu mẫu đó, ví dụ: tên tài khoản, tên người dùng? Các giá trị này không được trả về trong phản hồi do Braintree cung cấp.

Nếu bạn xem quy trình đăng ký Basecamp, đây là kết quả tôi muốn đạt được.

Cảm ơn

Robin

+0

Tự hỏi tại sao các giá trị không được trả lại. Bạn có hình dung điều này. Tôi đã xác nhận bằng cách vô hiệu hóa javascript rằng nó thực sự có thể trả lại chúng từ BrainTree như bạn mong muốn. Tôi cần phải làm chính xác như vậy và cần thiết để xác minh nó có thể trước khi đăng ký dịch vụ. có lẽ bạn cần phải đăng ký tham số chuỗi truy vấn 'đã biết' bằng cách nào đó. Bạn có hình dung điều này? –

Trả lời

0

tôi sẽ được sử dụng chuyển hướng minh bạch Braintree về một dự án tôi đã sắp tới, và đã nghĩ về điều này bản thân mình, tôi nghĩ là lựa chọn tốt nhất là để phá vỡ hình thức lên thành hai trang. Biểu mẫu trên trang đầu tiên được đăng lên ứng dụng của bạn và bao gồm tên tài khoản, tên người dùng, v.v. Biểu mẫu trên trang thứ hai chỉ là thông tin thanh toán và được đăng lên Braintree.

Bằng cách này bạn có thể xác thực thông tin của họ trong bước đầu tiên. Nếu hóa ra có lỗi đánh máy trong địa chỉ email của họ và không thể liên lạc được với họ hoặc tên người dùng của họ đã được thực hiện hoặc xác nhận mật khẩu và mật khẩu của họ không khớp hoặc bất kỳ điều gì thì họ có thể sửa lỗi đó trước khi Braintree tính phí Thẻ. Bạn chắc chắn không muốn ai đó trả tiền cho bạn và sau đó phát hiện ra rằng tài khoản của họ không được tạo thành công, hoặc bạn sẽ có một số khách hàng rất không hài lòng.

Vì vậy, hai trang dường như với tôi là cách sạch nhất để làm điều đó. Tôi đã không xem xét quá trình mà 37signals sử dụng - tôi đoán là họ sử dụng Javascript để nắm bắt việc gửi biểu mẫu, sau đó gửi thông tin tài khoản đến ứng dụng của họ để được xác thực và lưu. Nếu không, chúng sẽ hiển thị thông báo lỗi. Nếu có, họ cho phép gửi mẫu đơn đến Braintree. Điều này sẽ cho phép họ giữ hình thức đăng ký vào một trang, nhưng có vẻ như nó sẽ lộn xộn với tôi. Bạn có thể xem javascript của trang web của họ và xem những gì bạn có thể thấy, mặc dù.

Chỉnh sửa - Vâng, có vẻ như đó là những gì họ làm. Họ đang sử dụng Prototype, điều mà tôi không quen thuộc lắm, nhưng bạn có thể xem mã của họ cho chính mình at the bottom of this file. Nó không có vẻ xấu, thực sự - tôi có thể thử điều này bản thân mình.

+0

nói cách khác họ sử dụng AJAX để gửi cho BrainTree. không hoàn toàn chắc chắn những gì sẽ xảy ra nếu Javascript bị tắt! –

+0

xác minh bằng cách sử dụng Fiddler rằng bạn không cần một luồng hai trang (trừ khi tất nhiên điều đó có ý nghĩa đối với luồng kinh doanh của bạn). Braintree sẽ gửi lại bất kỳ dữ liệu POST nào trong khi gọi lại để bạn có thể thực hiện với những gì bạn muốn. không chắc chắn vấn đề gì Robin đã ngăn cản điều này –

10

OK đây là những gì sẽ xảy ra nếu JavaScript bị tắt. Có vẻ như BaseCamp đã chọn gửi thẻ tín dụng qua AJAX, nhưng cũng xử lý tình huống mà JavaScript bị tắt và toàn bộ biểu mẫu được truyền cho họ - bao gồm cả các trường không thanh toán.

Cảm ơn Fiddler và BaseCamp.

  • tài điền vào mẫu đơn có chứa cả dữ liệu thanh toán và bất cứ điều gì khác mà bạn có thể muốn trên một hình thức HTML cho đăng ký, vận chuyển, giỏ mua hàng, vv

  • Mẫu được nộp cho https://secure.braintreepaymentgateway.com/api/transact.php

  • Braintree làm phép thuật của nó và thêm thẻ tín dụng vào hầm, và trả lại tất cả thông tin cho trang của bạn. it

Thực hiện điều này bằng cách thực sự gọi URL mà bạn phải xử lý tuy nhiên bạn đang xử lý.

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][email protected] 
&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 

Có lẽ mã phản hồi 100 có nghĩa là 'thẻ tín dụng xấu' vì tôi đã nhập số CC giả để kiểm tra.

4) Bạn được tự do hiển thị lại trang theo bất kỳ cách nào bạn muốn.

Câu hỏi nổi bật: Hy vọng 4 số cuối của thẻ sẽ xuất hiện trở lại nếu giao dịch thành công.

+0

Tại sao điều này lại bị bỏ phiếu? Hơi khó hiểu một chút, nhưng tôi nghĩ tôi hiểu. Họ chuyển tất cả thông tin trở lại trong yêu cầu nhận được tới url chuyển hướng? – Josh

+0

@ josh bạn luôn có thể upvote nó trở lại :-) có bạn khá nhiều có ý tưởng, ngoại trừ nó không nhất thiết phải là một url chuyển hướng mà họ gửi nó trở lại. nó chỉ là một URL mà họ đang chuyển hướng đến.tùy thuộc vào bạn liệu URl này trên trang web của bạn có chuyển hướng hay không. cuối cùng chúng tôi đã đi với CIM của Authorize.NET cho chúng tôi một chút linh hoạt hơn và chúng tôi đã xảy ra mối quan hệ cá nhân với người bán của chúng tôi và họ không thể làm việc với braintree. –

+0

Tôi thực sự đã liên lạc với Braintree và họ đã gửi cho tôi hướng dẫn API chi tiết phương thức phản hồi. Bạn chỉ định trong gửi biểu mẫu của bạn và họ sử dụng url đó để gửi phản hồi trong gọi lại cho bạn. Điều khó hiểu là họ sử dụng từ "chuyển hướng", bởi vì nó khiến bạn nghĩ đó chỉ là một chuyển hướng HTTP 302, tuy nhiên, url gọi lại thực sự của nó cho phản hồi, là tốt. – Josh

2

Tôi có nhu cầu rất giống nhau, và cách tôi giải quyết nó với một chút ajax:

Tôi có một mẫu với hai fieldsets một cho các lĩnh vực sử dụng và khác với các chi tiết thẻ tín dụng

  • khi ép sử dụng gửi tôi các lĩnh vực sử dụng được tuần tự và được gửi qua ajax để ứng dụng của tôi
  • Nếu xác nhận cho các lĩnh vực sử dụng qua ứng dụng phản ứng với một số json chứa dữ liệu giao dịch chuyển hướng trong suốt mà trước đây đã mất tích từ biểu mẫu
  • biểu mẫu được nhân bản và được nối thêm đầu vào mới có giá trị là dữ liệu giao dịch chuyển hướng trong suốt.
  • biểu mẫu được gửi tới braintree.
  • thì đấy, đăng ký và nộp cùng lúc

có lẽ đoạn jQuery này sẽ giúp làm rõ: https://gist.github.com/742811

3

Điều này có thể không có được một phần của API khi câu hỏi được hỏi ban đầu, nhưng Braintree có Custom Fields mà bạn có thể xác định để gửi cùng với dữ liệu khách hàng và thẻ tín dụng. Mỗi trường có thể là "Chỉ truyền qua" hoặc "Lưu trữ và truyền Thru"

Nếu bạn không cần dữ liệu bổ sung được lưu trữ trong hầm Braintree, hãy đặt trường lên dưới dạng "Truyền Thru" rồi đặt tên cho biểu mẫu của bạn đầu vào:

transaction[custom_fields][name_that_was_configured_in_control_panel] 

hoặc, nếu dấu ngoặc vuông là một vấn đề:

transaction__custom_fields__name_that_was_configured_in_control_panel 

Nếu bạn làm điều đó, sau đó dữ liệu sẽ được chuyển trở lại ứng dụng của bạn khi bạn gọi:

result = Braintree::TransparentRedirect.confirm(query_string) 
+0

Braintree có hai API - cổng cam cũ hơn và cổng Blue mới hơn. Câu trả lời của Simon_Weaver tham khảo Braintree Orange và câu trả lời của bạn là tham chiếu đến Braintree Blue (bao gồm các trường tùy chỉnh). – davidsmalley

Các vấn đề liên quan