要素タイプ「カード」を使用する代わりに、要素を分離する必要がありました。ドキュメントの例では、「カード」のみを使用しているため、トークンを作成する場合、カードオブジェクトをトークン作成パラメーターに渡します。
stripe.createToken(card).then(function(result) {
});
これらの複数のオブジェクトを渡してトークンを作成するにはどうすればよいですか?
var cardNumber = elements.create('cardNumber');
cardNumber.mount('#card-number');
var cardExpiry = elements.create('cardExpiry');
cardExpiry.mount('#card-expiry');
var cardCvc = elements.create('cardCvc');
cardCvc.mount('#card-cvc');
var cardPostalCode = elements.create('postalCode');
cardPostalCode.mount('#card-postal-code');
Elements
参照から。
element:データのトークン化元の要素。要素は、要素の同じインスタンスで作成した他の要素からデータを取得して、トークン化します。
https://stripe.com/docs/elements/reference#stripe-create-token
したがって、要素を初期化できます
var elements = stripe.elements();
そして、フィールドを定義/マウントします
var cardNumber = elements.create('cardNumber');
cardNumber.mount('#card-number');
var cardExpiry = elements.create('cardExpiry');
cardExpiry.mount('#card-expiry');
var cardCvc = elements.create('cardCvc');
cardCvc.mount('#card-cvc');
// creating a postal code element is deprecated
// var cardPostalCode = elements.create('postalCode');
// cardPostalCode.mount('#card-postal-code');
次に、elements
の一部であるため、これらをすべて取り込む必要があります。
stripe.createToken(cardNumber).then(doSomething);
Edit:郵便番号要素は廃止されたため、例から削除しました。個別のフィールドを使用しており、郵便番号(または他の住所データ)を収集する場合は、<input>
を使用してこれを行い、stripe.createToken
を呼び出すときにオプションのcardData
オブジェクトに渡す必要があります。
https://stripe.com/docs/stripe-js/reference#elements-create
// <input id="postal-code" name="postal_code" class="field" placeholder="90210" />
var cardData = {
address_Zip: document.getElementById('postal-code').value
}
stripe.createToken(cardNumber,cardData).then(doSomething);
以下は、Stripeチームの誰かがまとめたjsfiddleで、異なるアプローチを取ります。
https://jsfiddle.net/ywain/o2n3js2r/
var stripe = Stripe('XYZ');
var elements = stripe.elements();
var style = {
base: {
iconColor: '#666EE8',
color: '#31325F',
lineHeight: '40px',
fontWeight: 300,
fontFamily: 'Helvetica Neue',
fontSize: '15px',
'::placeholder': {
color: '#CFD7E0',
},
},
};
var cardNumberElement = elements.create('cardNumber', {
style: style
});
cardNumberElement.mount('#card-number-element');
var cardExpiryElement = elements.create('cardExpiry', {
style: style
});
cardExpiryElement.mount('#card-expiry-element');
var cardCvcElement = elements.create('cardCvc', {
style: style
});
cardCvcElement.mount('#card-cvc-element');
var postalCodeElement = elements.create('postalCode', {
style: style
});
postalCodeElement.mount('#postal-code-element');
function setOutcome(result) {
var successElement = document.querySelector('.success');
var errorElement = document.querySelector('.error');
successElement.classList.remove('visible');
errorElement.classList.remove('visible');
if (result.token) {
// In this example, we're simply displaying the token
successElement.querySelector('.token').textContent = result.token.id;
successElement.classList.add('visible');
// In a real integration, you'd submit the form with the token to your backend server
//var form = document.querySelector('form');
//form.querySelector('input[name="token"]').setAttribute('value', result.token.id);
//form.submit();
} else if (result.error) {
errorElement.textContent = result.error.message;
errorElement.classList.add('visible');
}
}
cardNumberElement.on('change', function(event) {
setOutcome(event);
});
document.querySelector('form').addEventListener('submit', function(e) {
e.preventDefault();
stripe.createToken(cardNumberElement).then(setOutcome);
});