Stripe Elementsはカード情報を入力するシンプルなフォームを実装するのにとても重宝します。
デフォルトで用意されているフォームを柔軟にカスタマイズできるので、見た目を変えたいときにも使い勝手が良い機能です。
そこで今回は、Elementsのカスタマイズの方法についてご紹介します。
カードオブジェクトは分割可能
Elementsのカードタイプ(キャプチャの赤枠部分)はそれぞれカード番号、有効期限、CVCに分割できます。
ショーケースが用意されていますので、さっと見ておくとかなり参考になります。
例えば入力欄を3行に分けたいとしましょう。
<div class="field"> <div id="card-number"></div> </div> <div class="field"> <div id="card-expiry"></div> </div> <div class="field"> <div id="card-cvc"></div> </div>
JavaScriptコードは次のようになります。
const stripe = Stripe('pk_test_*******************'); const elements = stripe.elements(); const elementStyles = { ... }; const elementClasses = { ... }; // カード番号 const cardNumber = elements.create('cardNumber', { style: elementStyles, classes: elementClasses, }); cardNumber.mount('#card-number'); // カードの有効期限 const cardExpiry = elements.create('cardExpiry', { style: elementStyles, classes: elementClasses, }); cardExpiry.mount('#card-expiry'); // カードのCVC入力 const cardCvc = elements.create('cardCvc', { style: elementStyles, classes: elementClasses, }); cardCvc.mount('#card-cvc'); // トークンを作成 // cardNumberのみを指定する stripe.createToken(cardNumber, {}).then(function(result) { ... });
DOMのID属性にmountメソッドで紐づけていきます。引数にはDOMセレクタを指定できます。
プレースホルダーテキストなども指定可能です。
最終的にカスタマーを作成するためのトークンを作成すると思います。
その際、createTokenメソッドの第一引数はcardNumberを指定します。
有効期限・CVCの値は自動的にカードナンバーエレメントに紐付けられるので、createTokenには指定しなくて大丈夫です。
elements.create(type, options) – Stipe docs
キャプチャのように独立させることができました。
レイアウトの調整はCSSで行ってください。
またデフォルトのバリデーションは行われないので自前で実装する必要があります。
Elementのchangeイベントを監視してerrorオブジェクトを参照します。