ino-akiのブログ

ITエンジニアを目指して学習したことをアウトプットするブログ

クレジットカード情報のトークン化 手順3~5

決済機能のクライアントサイド実装(クレジットカード情報のトークン化)

クレジットカード情報のトークン化手順3~5

1. クライアントサイドでPAY.JPのAPIを使用するために必要なJavaScriptを読み込む
2. 実際にトークン化を行うJavaScriptファイルを作成する
3. PAY.JPのテスト公開鍵を取得し設定する
4. フォームにクレジットカード情報の入力欄を追加する
5. トークン化の処理を行う

 

PAY.JPアカウントを作成

PAY.JPのテスト公開鍵を取得し設定
公開鍵の情報は、PAY.JPにログイン後、ページの左側の「API」をクリックすると確認できる

公開鍵を設定
app/javascript/card.js
const pay = () => {
  const payjp = Payjp('pk_test_***********************')// PAY.JPテスト公開鍵
  const form = document.getElementById('charge-form')
  form.addEventListener("submit", (e) => {
    console.log("フォーム送信時にイベント発火")
    e.preventDefault();
  });
};

window.addEventListener("load", pay);
鍵情報はGitHubにPushするなどして公開してはいけない
 鍵の情報は後で環境変数に設定する


フォームにクレジットカード情報の入力欄を追加

フォームのもととなるHTML要素を用意
app/views/orders/index.html.erb
  <div class='form-wrap'>
    <p>カード番号</p>
    <div id="number-form" class="input-default"></div>
  </div>
  <div class='form-wrap'>
    <p>期限</p>
    <div id="expiry-form" class="input-default"></div>
  </div>
  <div class='form-wrap'>
    <p>カード背面4桁もしくは3桁の番号</p>
    <div id="cvc-form" class="input-default"></div>
  </div>


PAY.JPのライブラリを使い、1で用意したHTML要素をフォームと置き換え
elementsインスタンスのメソッドで入力フォームを作成    
const hogeElement = elements.create('指定したいフォームのtype')

mountメソッドでsampleというid属性の要素とフォームを置き換える
hogeElement.mount('#sample')


card.jsを編集
app/javascript/card.js
const pay = () => {
  const payjp = Payjp('pk_test_***********************')// PAY.JPテスト公開鍵
  const elements = payjp.elements();
  const numberElement = elements.create('cardNumber');
  const expiryElement = elements.create('cardExpiry');
  const cvcElement = elements.create('cardCvc');

  numberElement.mount('#number-form');
  expiryElement.mount('#expiry-form');
  cvcElement.mount('#cvc-form');
  const form = document.getElementById('charge-form')
  form.addEventListener("submit", (e) => {
    console.log("フォーム送信時にイベント発火")
    e.preventDefault();
  });
};

window.addEventListener("load", pay);

 

フォームに入力されたカードの情報を、JavaScriptで取得してトークン化する作業
createToken(element: Element, options?: object)メソッド
このメソッドを使うと、戻り値としてカード情報のトークンを取得できる

app/javascript/card.js form.addEventListener("submit", (e) => {}内に追記
form.addEventListener("submit", (e) => {
    payjp.createToken(numberElement).then(function (response) {
      if (response.error) {
      } else {
        const token = response.id;
        console.log(token)
      }
    });
    e.preventDefault();
  });
createTokenメソッドの第一引数には、カード番号入力フォームとなっているelementインスタンスであるnumberElementが入る
then以降に、レスポンスを受け取ったあとの処理を記述
変数responseには、PAY.JP側からのレスポンスとステータスコードが含まれる
response.idとすることでトークンの値を取得

 

クレジットカード情報を送信してトークンが生成されるか確かめる

今回はPAY.JPのテストモードなので、テストカードを使う
console.log(token)の記述通り
コンソール上にトークンの値が表示されるか確かめる