В настоящее время у нас возникают проблемы с оплатой через Braintree PayPal в сочетании с обычным банковским переводом через IBAN. По сути, мы представляем посетителю два варианта подписки: PayPal (через Braintree) и транзакция IBAN.
Метод PayPal работает нормально, но когда мы выбираем не PayPal, а банковский перевод IBAN, мы получаем следующую консольную ошибку:
Мы понимаем, что это правильное поведение, поскольку поля PayPal не заполняются, но как можно использовать PayPal в качестве дополнительного метода оплаты без выдачи ошибки, если поля не заполнены?
Мы используем базовую реализацию js через DropUI.
<div class="bt-drop-in-wrapper" id="showpaypalfields">
<div id="bt-dropin" class="paypaldiv"></div>
</div>
<script src="https://js.braintreegateway.com/js/braintree-2.27.0.min.js"></script>
<script>
var client_token = "123TOKEN";
braintree.setup(client_token, "dropin", {
container: "bt-dropin"
});
</script>
ОБНОВЛЕНИЕ: Обе формы видны на странице мгновенно, они не загружаются впоследствии через Ajax или какой-либо другой. Таким образом, опция PayPal через Braintree должна проверяться, только если, например, установлен флажок. Например, флажок на скриншоте ниже (переключает видимость обоих наборов полей).
ОБНОВЛЕНИЕ №2: Для всех, кто интересуется окончательным решением:
var btInstance;
$('input#paymentmethod-1').change(function(){
if ( $(this).is(':checked') == true ) {
teardown();
}
});
$('input#paymentmethod-2').change(function(){
if ( $(this).is(':checked') == true ) {
setup();
}
});
function setup() {
if (btInstance) {
return;
} else {
var client_token = "<ps:braintreetoken />";
braintree.setup(client_token, "dropin", {
container: "bt-dropin",
onReady: function (bt) {
btInstance = bt;
}
});
}
}
function teardown() {
if (!btInstance) {
return;
}
btInstance.teardown(function () {
btInstance = null;
});
}