如何在客户端 sdk 中提交带有 payload.nonce 的表单?我正在使用 Braintree 给出的示例?
How can I submit a form with payload.nonce in client sdk? I'm using an example given by the Braintree?
我现在卡在这一步了。我以前从未使用过 braintree API。问题是当我点击提交按钮时,它显示了带有 payment_method_nonce 的警告框。
这意味着我成功地从客户端获得了 payment_method_nonce,但问题是我不知道如何提交带有此 payment_method_nonce 的表单。
这个client sdk写在jquery。
我尝试了几种提交表单的方法,但我不知道如何在提交表单时得到 'payment_method_nonce'。
我厌倦了添加一个隐藏的类型字段。甚至那个隐藏的类型字段也不会出现。
请帮忙。这是 jquery 代码。
我只想知道如何使用 'payment_method_nonce'.
在 jquery 中提交表单
braintree.client.create({
authorization: '{{$clientToken}}'
}, function (err, clientInstance) {
if (err) {
console.error(err);
return;
}
braintree.hostedFields.create({
client: clientInstance,
styles: {
'input': {
'font-size': '14px',
'font-family': 'helvetica, tahoma, calibri, sans-serif',
'color': '#3a3a3a'
},
':focus': {
'color': 'black'
}
},
fields: {
number: {
selector: '#card-number',
placeholder: '4111 1111 1111 1111'
},
cvv: {
selector: '#cvv',
placeholder: '123'
},
expirationMonth: {
selector: '#expiration-month',
placeholder: 'MM'
},
expirationYear: {
selector: '#expiration-year',
placeholder: 'YY'
},
postalCode: {
selector: '#postal-code',
placeholder: '90210'
}
}
}, function (err, hostedFieldsInstance) {
if (err) {
console.error(err);
return;
}
hostedFieldsInstance.on('validityChange', function (event) {
var field = event.fields[event.emittedBy];
if (field.isValid) {
if (event.emittedBy === 'expirationMonth' || event.emittedBy === 'expirationYear') {
if (!event.fields.expirationMonth.isValid || !event.fields.expirationYear.isValid) {
return;
}
} else if (event.emittedBy === 'number') {
$('#card-number').next('span').text('');
}
// Remove any previously applied error or warning classes
$(field.container).parents('.form-group').removeClass('has-warning');
$(field.container).parents('.form-group').removeClass('has-success');
// Apply styling for a valid field
$(field.container).parents('.form-group').addClass('has-success');
} else if (field.isPotentiallyValid) {
// Remove styling from potentially valid fields
$(field.container).parents('.form-group').removeClass('has-warning');
$(field.container).parents('.form-group').removeClass('has-success');
if (event.emittedBy === 'number') {
$('#card-number').next('span').text('');
}
} else {
// Add styling to invalid fields
$(field.container).parents('.form-group').addClass('has-warning');
// Add helper text for an invalid card number
if (event.emittedBy === 'number') {
$('#card-number').next('span').text('Looks like this card number has an error.');
}
}
});
hostedFieldsInstance.on('cardTypeChange', function (event) {
// Handle a field's change, such as a change in validity or credit card type
if (event.cards.length === 1) {
$('#card-type').text(event.cards[0].niceType);
} else {
$('#card-type').text('Card');
}
});
$('.panel-body').submit(function (event) {
//event.preventDefault();
hostedFieldsInstance.tokenize(function (err, payload) {
if (err) {
console.error(err);
return;
}
// This is where you would submit payload.nonce to your server
alert('Submit your nonce to your server here!' + payload.nonce);
});
});
});
});
完全披露:我在 Braintree 工作。如果您有任何其他问题,请随时联系
support.
如果不包含表单或 HTML 代码,则很难知道您是否已将表单定义为变量。但本质上,您需要将该随机数值 (payload.nonce) 注入您的表单,然后将该表单提交到您的服务器。
例如,我已经定义了我的表单(在我的braintree.client.create上方)
var form = document.querySelector('#checkout-form');
然后,在您的提交事件中,您需要在成功标记化后将有效负载值注入您的表单(您似乎已根据警报值实现)
document.querySelector('input[name="payment_method_nonce"]').value = payload.nonce;
随后提交您的表单;
form.submit()
这将提交您的表单,其中包含一个名为 payment_method_nonce 的输入,然后您可以在您的服务器上请求该输入。
如果我可以进一步说明,请告诉我。乐于助人。
我现在卡在这一步了。我以前从未使用过 braintree API。问题是当我点击提交按钮时,它显示了带有 payment_method_nonce 的警告框。 这意味着我成功地从客户端获得了 payment_method_nonce,但问题是我不知道如何提交带有此 payment_method_nonce 的表单。 这个client sdk写在jquery。 我尝试了几种提交表单的方法,但我不知道如何在提交表单时得到 'payment_method_nonce'。 我厌倦了添加一个隐藏的类型字段。甚至那个隐藏的类型字段也不会出现。 请帮忙。这是 jquery 代码。 我只想知道如何使用 'payment_method_nonce'.
在 jquery 中提交表单 braintree.client.create({
authorization: '{{$clientToken}}'
}, function (err, clientInstance) {
if (err) {
console.error(err);
return;
}
braintree.hostedFields.create({
client: clientInstance,
styles: {
'input': {
'font-size': '14px',
'font-family': 'helvetica, tahoma, calibri, sans-serif',
'color': '#3a3a3a'
},
':focus': {
'color': 'black'
}
},
fields: {
number: {
selector: '#card-number',
placeholder: '4111 1111 1111 1111'
},
cvv: {
selector: '#cvv',
placeholder: '123'
},
expirationMonth: {
selector: '#expiration-month',
placeholder: 'MM'
},
expirationYear: {
selector: '#expiration-year',
placeholder: 'YY'
},
postalCode: {
selector: '#postal-code',
placeholder: '90210'
}
}
}, function (err, hostedFieldsInstance) {
if (err) {
console.error(err);
return;
}
hostedFieldsInstance.on('validityChange', function (event) {
var field = event.fields[event.emittedBy];
if (field.isValid) {
if (event.emittedBy === 'expirationMonth' || event.emittedBy === 'expirationYear') {
if (!event.fields.expirationMonth.isValid || !event.fields.expirationYear.isValid) {
return;
}
} else if (event.emittedBy === 'number') {
$('#card-number').next('span').text('');
}
// Remove any previously applied error or warning classes
$(field.container).parents('.form-group').removeClass('has-warning');
$(field.container).parents('.form-group').removeClass('has-success');
// Apply styling for a valid field
$(field.container).parents('.form-group').addClass('has-success');
} else if (field.isPotentiallyValid) {
// Remove styling from potentially valid fields
$(field.container).parents('.form-group').removeClass('has-warning');
$(field.container).parents('.form-group').removeClass('has-success');
if (event.emittedBy === 'number') {
$('#card-number').next('span').text('');
}
} else {
// Add styling to invalid fields
$(field.container).parents('.form-group').addClass('has-warning');
// Add helper text for an invalid card number
if (event.emittedBy === 'number') {
$('#card-number').next('span').text('Looks like this card number has an error.');
}
}
});
hostedFieldsInstance.on('cardTypeChange', function (event) {
// Handle a field's change, such as a change in validity or credit card type
if (event.cards.length === 1) {
$('#card-type').text(event.cards[0].niceType);
} else {
$('#card-type').text('Card');
}
});
$('.panel-body').submit(function (event) {
//event.preventDefault();
hostedFieldsInstance.tokenize(function (err, payload) {
if (err) {
console.error(err);
return;
}
// This is where you would submit payload.nonce to your server
alert('Submit your nonce to your server here!' + payload.nonce);
});
});
});
});
完全披露:我在 Braintree 工作。如果您有任何其他问题,请随时联系 support.
如果不包含表单或 HTML 代码,则很难知道您是否已将表单定义为变量。但本质上,您需要将该随机数值 (payload.nonce) 注入您的表单,然后将该表单提交到您的服务器。
例如,我已经定义了我的表单(在我的braintree.client.create上方)
var form = document.querySelector('#checkout-form');
然后,在您的提交事件中,您需要在成功标记化后将有效负载值注入您的表单(您似乎已根据警报值实现)
document.querySelector('input[name="payment_method_nonce"]').value = payload.nonce;
随后提交您的表单;
form.submit()
这将提交您的表单,其中包含一个名为 payment_method_nonce 的输入,然后您可以在您的服务器上请求该输入。
如果我可以进一步说明,请告诉我。乐于助人。