2009-11-21 2 views
7

Я разрабатываю приложение в Rails и хочу, чтобы пользователь мог зарегистрироваться и предоставить свои данные о карте в одной форме. Я использую API-интерфейс Braintree и их прозрачную переадресацию, что означает, что данные формы отправляются непосредственно в Braintree.Регистрация формы с использованием Braintree Transparent Redirect

Как сохранить, а затем получить информацию о неплатеже, предоставленную пользователем из этой формы, например. имя учетной записи, имя пользователя? Эти значения не возвращаются в ответе, предоставленном Braintree.

Если вы посмотрите на процесс регистрации Basecamp, это результат, которого я хочу достичь.

Благодаря

Робин

+0

Подумайте, почему значения не возвращаются. Вы поняли это. Я подтвердил, отключив javascript, что действительно возможно вернуть их из BrainTree по вашему желанию. Мне нужно сделать то же самое и убедиться, что это возможно, прежде чем подписываться на эту услугу. возможно, вам нужно каким-то образом зарегистрировать «известные» параметры строки запроса. Вы поняли это? –

ответ

0

Я собираюсь использовать прозрачный редирект Брэйнтрите на проект я придумываю, и поразмыслив об этом самом, я думаю, что лучший вариант, чтобы сломать форму вверх на две страницы. Форма на первой странице добавляется в ваше приложение и включает имя учетной записи, имя пользователя и т. Д. Форма на второй странице является только платежной информацией и отправляется в Брейнтри.

Таким образом, вы можете проверить их информацию на первом шаге. Если окажется, что в их адресе электронной почты есть опечатка, и их невозможно достичь, или их имя пользователя уже принято, или их пароль и подтверждение пароля не совпадают или что-то еще, тогда они могут исправить это, прежде чем Braintree будет обвинять их карта. Вы определенно не хотите, чтобы кто-то заплатил вам, а затем узнал, что их учетная запись не была создана успешно, или у вас появятся очень недовольные клиенты.

Итак, две страницы кажутся мне самым чистым способом сделать это. Я не смотрел на процесс, который использует 37signals - я предполагаю, что они используют Javascript, чтобы поймать отправку формы, а затем отправить информацию об учетной записи в свое приложение для проверки и сохранения. Если это не так, отображается сообщение об ошибке. Если это так, они позволяют передать форму в Брейнтри. Это позволит им сохранить форму регистрации на одной странице, но похоже, что это было бы грязно для меня. Вы можете посмотреть javascript своего сайта и посмотреть, что вы можете видеть.

Редактировать - Да, похоже, это то, что они делают. Они используют Prototype, с которым я не очень хорошо знаком, но вы можете увидеть их код для себя at the bottom of this file. На самом деле это не так уж плохо, я мог бы попробовать это сам.

+0

Другими словами, они используют AJAX для отправки в BrainTree. не совсем уверен, что произойдет, если отключить Javascript! –

+0

проверено с помощью Fiddler, что вам не нужен поток двух страниц (если, конечно, это не имеет смысла для вашего бизнес-потока). Braintree отправит обратно любые данные POST во время обратного вызова, чтобы вы могли с этим справиться. не знаю, в чем проблема Робин, которая помешала этому –

10

OK, вот что произойдет, если JavaScript отключен. Похоже, BaseCamp решил отправить кредитную карту через AJAX, buto также справится с ситуацией, когда JavaScript отключен, и вся форма передается им, включая неплатежные поля.

Thanks Fiddler, and BaseCamp.

  • Пользователь заполняет форму, содержащую как данные об оплате и все, что вы могли бы хотеть на HTML форму регистрация, доставка, корзины и т.д.

  • Форма представляется https://secure.braintreepaymentgateway.com/api/transact.php

  • Брэйнтри делает свою магию и добавляет кредитную карту в хранилище и передает всю информацию на вашу страницу. it

Это делает это, фактически вызывая 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][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 

Предположительно код ответа 100 означает «плохой кредитной карту», ​​так как я положил в поддельном номере CC, чтобы проверить.

4) Вы можете повторно отобразить страницу, как хотите.

Непонятный вопрос: Надеемся, что последние 4 цифры карточки вернутся, если транзакция прошла успешно.

+0

Почему это было приостановлено? Это немного запутанно, но я думаю, что понимаю. Они передают всю информацию обратно в запрос получения URL-адреса перенаправления? – Josh

+0

@josh вы всегда можете вернуть его обратно :-) да, у вас в значительной степени есть идея, за исключением того, что она не обязательно перенаправляет URL-адрес, на который они отправляют его обратно. его просто URL-адрес, на который они направляют.это зависит от того, действительно ли этот URl на вашем сайте выполняет перенаправление. в конце концов мы пошли с CIM Authorize.NET, который дал нам немного большую гибкость, и у нас возникли личные отношения с нашим торговцем, и они не могли работать с Braintree. –

+0

Я действительно связался с Braintree, и они прислали мне руководство по API, в котором подробно описывается метод ответа. Вы указываете в вашей форме submit, и они используют этот url для отправки ответа в обратный вызов вам. Его сбивает с толку, что они используют слово «перенаправление», потому что это заставляет вас думать о его просто перенаправлении HTTP 302, однако, и о его обратном обратном вызове для ответа. – Josh

2

я имел тот же необходимость, и как я решил это было с небольшим Аякса:

У меня есть форма с двумя fieldsets один для пользовательских полей и других с кредитной карты

  • когда пользователь нажимает представить I поля пользователя получить сериализации и отправляются через AJAX в моем приложении
  • Если проверка для пользовательского полей проходит приложение отвечает с некоторой JSON, содержащей прозрачные данными перенаправления транзакций, ранее отсутствующими от форма
  • форма клонируется и добавляется новый вход, значение которого является прозрачной информацией о переадресации транзакций.
  • форму передают в braintree.
  • вуаля, зарегистрироваться и платить в то же время

возможно это JQuery фрагмент кода поможет уточнить: https://gist.github.com/742811

3

Это не могло быть частью API, когда вопрос был первоначально просил, но Braintree имеет Custom Fields, который вы можете определить для отправки вместе с данными клиента и кредитной карты. Каждое поле может быть либо «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) 
+0

Braintree имеют два API - старый оранжевый шлюз и более новый Blue gateway. Ответ Simon_Weaver на ссылки Braintree Orange и ваш ответ ссылаются на Braintree Blue (который включает настраиваемые поля). – davidsmalley

Смежные вопросы