概要
PAY.JP APIでのカード登録/変更/削除機能実装の覚書です。
今回は登録したカード情報を更新するための手順をまとめていきます。
※簡潔にするため実装のために必要な最低限のコードのみ書いています。
なにか間違い等あれば編集リクエストをいただけると幸いです。
ちなみにpayjp.jsはv1に関する記事は多いですが現行のv2とは異なる部分が多いので注意が必要です。
実装準備編
https://qiita.com/nissy7ok/items/9790ef5ee1dec2863a62
カード登録編
https://qiita.com/nissy7ok/items/cea6789fe3b99654e473
カード更新・削除編←今ここ
https://qiita.com/nissy7ok/items/0ed52954f8fdad772da3
環境
# OS Version
ProductName: Mac OS X
ProductVersion: 10.15.7
BuildVersion: 19H2
# Ruby Version
ruby: 2.6.5p114
Rails: 6.0.3.3
前提条件
PAY.JP APIを用いてカード登録をするところまでできている。
前回の記事参照。
手順
更新機能
API上で複数のカードを登録させることもできますが、
今回は既存のカード情報を削除し、再度登録するようにしています。
※最低限の記述に削っているので実際は条件分岐をしたほうが良いです。
def edit
@title = "カード情報変更"
@btn ="変更"
@card = Card.find(params[:id])
redirect_to "/"
end
def update
@card = Card.find(params[:id])
Payjp.api_key = ENV['PAYJP_SECRET_KEY']
customer = Payjp::Customer.retrieve(@card.customer_id)
# 既存のカード情報を削除
card = customer.cards.retrieve(@card.card_id)
card.delete
# カードを新しく登録
customer.cards.create(
card: params['payjp_token']
)
@card.update(card_id: params['card_token'])
redirect_to "/"
end
end
削除機能
私の場合条件分岐をすべて書き換えないといけなくなってしまうため、モデル内の情報も削除しています。
カード情報は一人一枚という仕様で割り切っています。
実際は一人で複数枚登録するケースはあるし、PAY.JP側で複数枚のカード情報を管理することも当然できます。
ここはもうちょっとうまくできたかも・・・。
def destroy
@card = Card.find_by(user_id: current_user.id)
Payjp.api_key = ENV['PAYJP_SECRET_KEY']
customer = Payjp::Customer.retrieve(@card.customer_id)
customer.delete
@card.destroy
redirect_back(fallback_location: root_path)
end
参考
結局の所公式APIとガイドが最強です。
ただ読み慣れないうちはQiita等で実際の実装手順を見ながら感覚を掴むと理解が早まると思います。
PAY.JP API リファレンス
https://pay.jp/docs/api/
PAY.JP API 利用ガイド | PAY.JP
https://pay.jp/docs/started
公式ブログも参考になりますが、情報が古くv1準拠で書かれている場合が多いので注意が必要です。
ごく基本的なPAY.JPの使い方(Ruby編) - PAY.JP Engineering Blog
https://payjp.hatenablog.com/entry/2017/11/21/191916
その他参考にした記事等
Railsで Payjp.js V2 でクレジットカード登録機能実装 フリマアプリ - Qiita
https://qiita.com/ta9301/items/6b736390c49c3f40edb6
[HowTo]Pay.jpを用いた商品購入機能実装から商品購入後の設定まで
https://qiita.com/Tatsu88/items/eb420e372077939a4627