2015-09-19 3 views
0

Я пытаюсь интегрировать решение для оплаты Braintree с помощью Javascript & Узел JS.Проблемы с интеграцией Javascript в Braintree - проблема с braintree.Environment.Sandbox undefined?

Согласно документации Braintree, я следующий в моем HTML:

  <div id="panel-payment"> 
       <div id="payment-form"></div> 
       <input id="btn-checkout" type="submit" value="Process Order"> 
      </div> 
      <script> 
      $(document).ready(function(){ 

       console.log(braintree); <---- defined AOK 
       console.log(braintree.Environment); <---- undefined 
       console.log(braintree.Environment.Sandbox); <---- undefined 

       var clientToken = "..."; 
       braintree.setup(clientToken, "dropin", { 
        container: $("#payment-form") 
       }); 
      }); 
      </script> 

Я не могу получить переменное окружение, но объект Брэйнтри кажется, инстанцирует штраф? У кого-нибудь есть идеи?

Объект Брэйнтри возвращается:

Object {api: Object, cse: Object, paypal: Object, dropin: Object, Form: Object…} 

Я также получить Страшный «Не удалось найти правильный контейнер», когда я вызываю функцию braintree.setup(), даже несмотря на стоимость контейнера $ ("# payment- form ") является допустимым значением, и я вызываю функцию настройки при загрузке HTML.

ответ

2

Переменная Environment доступна только в пакете NodeJS. См. here.

Для клиентской стороны в javascript вам нужен действующий токен, сгенерированный вашим сервером. Таким образом, вам нужен выделенный маршрут, доставляющий токен с пакетом узлов Braintree, как описано here.

И для проблемы с контейнером попробуйте передать только id div в braintree, а не элемент jQuery.

braintree.setup(clientToken, "dropin", { 
    container: "payment-form" 
}); 
+0

Большое спасибо за комментирование так быстро. Проблема для меня заключалась в том, что я использовал неправильный пакет nint Brintree, плюс я использовал серверный код в своей клиентской JS. Я не знал, что у Braintree есть несколько пакетов на npm, чтобы отдельно покрывать функциональность серверной и клиентской сторон. Установка пакета «braintree-web», а затем использование JS-кода на стороне клиента в клиентском приложении Backbone и добавление соответствующего кода на стороне сервера Braintree (в моем случае для фреймворка PHP Zend) исправили его для меня. –

1

Полное раскрытие: я работаю в Braintree. Если у вас есть дополнительные вопросы, не стесняйтесь contact support.

Ответ @ chambo_e правилен в отношении разницы между атрибутами, доступными в пакете узлов, по сравнению с Braintree.js. Атрибут окружения доступен только в модуле узла Braintree.

Я предполагаю, что ошибка, которую вы на самом деле видите, - «Невозможно найти недействительный FORM», и это связано с тем, что ваши формы оплаты не входят в элемент формы. По умолчанию Braintree.js looks for the nearest parent form.

<form id="checkout" method="post" action="/checkout"> 
    <div id="panel-payment"> 
     <div id="payment-form"></div> 
     <input id="btn-checkout" type="submit" value="Process Order"> 
    </div> 
</form> 

<script src="https://js.braintreegateway.com/v2/braintree.js"></script> 
<script> 
    $(document).ready(function(){ 
    var clientToken = "client token generated form server"; 
    braintree.setup(clientToken, "dropin", { 
     container: $("#payment-form") 
    }); 
    }); 
</script> 

Если вы хотите использовать его в другом формате, вы можете указать его в установочном вызове. См. these docs for more details

<div id="dropin-container"></div> 
<form id="checkout-form"> 
    <input type='submit' value='Pay'/> 
</form> 

<script> 
    braintree.setup("CLIENT-TOKEN-FROM-SERVER", "dropin", { 
    container: "dropin-container", 
    form: "checkout-form" 
    }); 
</script> 
+0

Большое спасибо за комментарий. У меня был элемент формы отлично, но то, что меня отключило, не использовало JS-код в правильной среде. Я не понял, что у Braintree есть несколько (запутанных!) Пакетов на npm. Один для серверной, а другой для клиентской стороны! В конце концов я установил библиотеку кодов web-страниц для использования в моем клиентском приложении Backbone и использовал библиотеку PHP-скриптов на стороне сервера в моей платформе Zend. Я отправлю более подробное объяснение в качестве ответа, чтобы оно помогало другим. –

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