2016-09-23 2 views
0

У меня есть следующие HTML:Брэйнтрите оплатой nodejs не работает

<form id="payment-form" method="post" submit="/checkout"> 
    <input type="submit" value="Pay $10"> 
    <input type="hidden" name="payment_method_nonce" value="0fgg1679-75e2-43e0-bc1f-94faee177877"> 
    <iframe src="https://assets.braintreegateway.com/dropin/2.28.0/inline-frame.html#3a713953-3106-4fd5-8714-b0ada1723284" frameborder="0" allowtransparency="true" scrolling="no" name="braintree-dropin-frame" width="100%" height="68" id="braintree-dropin-frame" style="transition: height 210ms cubic-bezier(0.39, 0.575, 0.565, 1); border: 0px; z-index: 9999; height: 70px;"></iframe> 
</form> 

HTML, изначально была только input type=submit и payment-form, но мой Javascript имеет следующий код, который преобразует элементы в том, что мы видели выше:

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

BT_CLIENT_TOKEN успешно создан на стороне сервера на стороне клиента. Когда я открываю сайт, я могу войти в песочнице и видим следующее:

enter image description here

Когда я нажимаю «платить», однако, форма не будет представлен через мой app.post("/checkout") на стороне nodejs сервера, но вместо того, чтобы через маршрут по умолчанию app.post("/"). Кроме того, тело запроса всегда приходит пустым req.body: {} (и не должно, насколько я знаю, должно приходить с nounce как минимум).

Есть ли у кого-нибудь идеи о том, что происходит? Большое спасибо.

ответ

1

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

У меня есть несколько предложений. Во-первых, обязательно укажите атрибут action в <form>.

<form id="payment-form" method="post" action="/checkout"> 

Во-вторых, Брейнтри падения в requires a container элемента, чтобы быть вложенными в пределах<form>. Именно этот контейнерный элемент должен быть нацелен на braintree.setup().

HTML

<form id="payment-form" method="post" action="/checkout"> 
    <div id="dropin-container"></div> 
</form> 

JavaScript

braintree.setup('BT_CLIENT_TOKEN', 'dropin', { 
    container: 'dropin-container' 
}); 

Что касается req.body: {}, то трудно копать глубже, не более всесторонний взгляд на свой код, и я бы предпочел, чтобы избежать гадать, без этот контекст. Если приведенные выше предложения не решают проблему, возможно, вы можете отредактировать свой вопрос и предоставить дополнительные фрагменты кода, чтобы помочь сообществу более внимательно изучить это.

+0

Helo Shea, вы правы, действительно, это было действие, я заметил, что почти после публикации этого вопроса! :) Однако, я столкнулся с другой проблемой. Я изменил идентификатор формы, в который вводился набор символов, и по какой-то причине после входа в мозговое дерево не генерируется nonce (в то время как оно использовалось в примере выше). Есть идеи по этому поводу? Tyvm! – Fane

+0

Привет, Fane. Пожалуйста, не стесняйтесь обращаться в Braintree Support для последующих вопросов: https://support.braintreepayments.com/. – Shea

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