【发布时间】:2019-06-19 14:06:38
【问题描述】:
我曾尝试将 Braintree 托管字段与 Polymer 一起使用,但它不起作用(显然 Braintree 表示尚不支持)所以我决定在 Polymer 中嵌入一个 iframe,它将指向将呈现付款的 nodejs 服务器后端页面,但是当我直接访问该 URL 时,我得到: 错误=空
但是当我将页面嵌入聚合物中时,我得到:{name: "BraintreeError", code: "HOSTED_FIELDS_TIMEOUT", message: "Hosted Fields timed out when trying to setup.", type: "UNKNOWN", details:未定义}。
尝试使用 https://codepen.io/braintree/pen/NbqPVO 使其在聚合物中工作,但它似乎不适用于 Polymer 3。 // 设置阴影 dom var btfields = document.querySelector('#braintree-fields') var shadow = btfields.createShadowRoot() var template = document.querySelector('#braintree-fields-template')
shadow.appendChild(template.content)
template.remove()
// setup bt
braintree.client.create({
authorization: 'sandbox_g42y39zw_348pk9cgf3bgyw2b'
}, function (clientErr, clientInstance) {
if (clientErr) {
// Handle error in client creation
return;
}
var options = {
client: clientInstance,
styles: {
'input': {
'font-size': '14px'
},
'input.invalid': {
'color': 'red'
},
'input.valid': {
'color': 'green'
}
},
fields: {
number: {
selector: '#card-number',
placeholder: '4111 1111 1111 1111'
},
cvv: {
selector: '#cvv',
placeholder: '123'
},
expirationDate: {
selector: '#expiration-date',
placeholder: '10/2019'
}
}
};
braintree.hostedFields.create(options, function (hostedFieldsErr, hostedFieldsInstance) {
if (hostedFieldsErr) {
// Handle error in Hosted Fields creation
return;
}
var btn = shadow.querySelector('#submit')
btn.addEventListener('click', function (event) {
event.preventDefault()
hostedFieldsInstance.tokenize(function (tokenizeError, payload) {
if (tokenizeError) {
console.error(tokenizeError)
} else {
alert('Send payload.nonce to server: ' + payload.nonce)
}
})
})
});
});
braintree.hostedFields.create 方法失败
【问题讨论】: