scss:
form {
margin: auto;
max-width: 40em;
text-align: center;
fieldset {
max-width: 25em;
margin: 2em auto;
label {
display: block;
}
input[type=number] { max-width: 3em; }
}
button {
display: block;
width: 10em;
margin: auto;
}
}
form method="post" action=""
#braintree
| Unfortunately, our credit card processor requires JavaScript.
fieldset
legend Auto top-up when account balance is low?
label
| When balance drops below $5, add $
input type="number" name="auto_top_up_amount" min="15" value=auto_top_up
small Leave blank for no auto top-up.
input type="hidden" name="customer_id" value=customer_id
input type="hidden" name="braintree_nonce"
script src="https://js.braintreegateway.com/web/dropin/1.26.0/js/dropin.min.js"
javascript:
document.querySelector("#braintree").innerHTML = "";
var button = document.createElement("button");
button.innerHTML = "Save";
document.querySelector("form").appendChild(button);
braintree.dropin.create({
authorization: #{{token.to_json}},
container: "#braintree",
vaultManager: true,
translations: {
payWithCard: "Add a Card",
payingWith: "Default payment source",
chooseAnotherWayToPay: "Add a different payment source"
}
}, function (createErr, instance) {
if(createErr) console.log(createErr);
document.querySelector("form").addEventListener("submit", function(e) {
e.preventDefault();
instance._mainView.hideSheetError();
instance._mainView.showLoadingIndicator();
instance.requestPaymentMethod(function(err, payload) {
if(err) {
console.log(err);
instance._mainView.hideLoadingIndicator();
instance._mainView.showSheetError();
} else {
e.target.braintree_nonce.value = payload.nonce;
fetch("", {
"method": "POST",
"body": new FormData(e.target)
}).then(function(response) {
instance._mainView.hideLoadingIndicator();
if(response.status !== 200) {
return Promise.reject(response);
}
}).catch(function(err) {
console.log(err);
instance._mainView.hideLoadingIndicator();
instance._mainView.showSheetError();
});
}
});
});
});