1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[PAYJP-NODEJS] 支払い機能の実装

Last updated at Posted at 2021-05-22

PAY.JP

Ảnh chụp Màn hình 2021-05-22 lúc 22.39.05.png

  • 導入簡単
  • 決済手数料 2.59%~
  • 定期課金、Apple Pay対応
  • シンプルなAPI

Pay.jpの管理画面

Ảnh chụp Màn hình 2021-05-22 lúc 22.45.48.png

実装

1. API Key取得

テストと本番のAPIキーがあります。
Ảnh chụp Màn hình 2021-05-22 lúc 22.50.47.png

2. UI作成

デザインされた決済フォームを使う(この記事使う方法)

<script> タグを1行で、 デザインされた決済フォーム、カード情報のバリデーション、カード情報のトークン化を行うフォームを生成することができます。

<script
  type="text/javascript"
  src="https://checkout.pay.jp/"
  class="payjp-button"
  data-key=PUBLIC_KEY
  data-submit-text="トークンを作成する"
  data-on-created="onCreated"
  data-partial="true">
</script>

以下のボタンが作成されます。
※onCreatedはカードトークン作成したあと、実行されるアクションです。(window.onCreated = funtion() {}

Ảnh chụp Màn hình 2021-05-22 lúc 22.57.20.png
クリックすると、カード情報の入力フォームがモーダルで開きます。

Ảnh chụp Màn hình 2021-05-22 lúc 22.57.43.png

カード情報のバリデーションは問題なければ、カードトークン(tok_ec73...)が作成されます。

Ảnh chụp Màn hình 2021-05-23 lúc 00.01.11.png

デザインされた決済フォームを使う参考

Ảnh chụp Màn hình 2021-05-22 lúc 23.13.01.png

3. 裏側実装

SDKインストールAPI Doc

npm install --save payjp

利用の時

import pay from 'payjp'
const payjp = pay(PRIVATE_KEY);

決済

const pay = await payjp.charges.create({
  amount: 1000,
  currency: 'jpy',
  card: 'tok_ec73...' // カードトークン
})

Ảnh chụp Màn hình 2021-05-22 lúc 23.53.06.png

カード登録

顧客作成することが必要です。API

const customer = await payjp.customers.create({
  description: 'テスト',
  email: "test@gmail.com"
})

// カード情報を取得する時、このユーザーの情報が必要ですので、Userモデルなどにcustomer.idを保存することが必要です。

カードを登録

const card = await payjp.customers.cards.create(customer.id, {
  dcard: 'tok_ec73...', // カードトークン
  default: true,
})

登録済カードの情報取得

顧客からカードの情報を取得します。

const cards = await payjp.customers.cards.list(customer.id)

Ảnh chụp Màn hình 2021-05-22 lúc 23.51.56.png
※ CardUIはreact-credit-cardsを使って作成します。

定期課金

プラン作成が必要です

const plan = await payjp.plans.create({
  amount: 1000,
  currency: 'jpy',
  interval: 'month',
  trial_days: 30
});

Ảnh chụp Màn hình 2021-05-22 lúc 23.49.39.png

const subscription = await payjp.subscriptions.create({
  plan: plan.id,
  customer: customer.id
});

Ảnh chụp Màn hình 2021-05-22 lúc 23.55.48.png

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?