クレジットカード決済導入 2
序論
みなさんお疲れ様です。
プログラミングスクールの最終課題で
フリーマケットアプリを作成しています。
そして、クレジットカード支払い機能の導入を今回任され
実装が完了したので、復習と備忘録をかねてここに残そうと思います。
前回(クレジットカード決済導入 - 薬剤師のプログラミング学習)
の続きを書いていきますので、
見てない方はそちらをまずご覧ください。
今回は
クレジットカードテーブルの作成を行おうと思います。
クレジットカードテーブルの作成
クレジットカードモデルを作っていきます。
1. ターミナルで以下を入力。
$ rails g model credit_card
カラムや型などのは以下になっております。
DB設計
column | type | options |
---|---|---|
user_id | references | null: false, foreign_key: true |
customer_id | string | null: false |
card_id | string | null: false |
モデルを作成したら DB 設計に合わせてマイグレーションファイルに記述していきましょう。
class CreateCreditCards < ActiveRecord::Migration[5.2] def change create_table :credit_cards do |t| t.references :user, null: false, foreign_key: true t.string :customer_id, null: false t.string :card_id, null: false t.timestamps end end end
その後はターミナルで
$ rails db:migrate
を入力してください。
躓いた点
ここでまず躓きました。
なぜかと言うと、クレジットカードテーブルのカラムを改めなければいけなくなったからです。
最初のカラムは、 DB に直接クレジットカードの番号だったり期限だったりを登録するものにしていました。
ですがそれは絶対にやってはいけません。
なぜならば法律に違反してしまう可能性があるからです
その詳しい内容が PAY.JP Announcement
カード情報非通過化対応のお願い - PAY.JP Announcement
というところに書かれています。
下に一部抜粋したものを載せておきます。
2018年6月頃に施行予定の改正割賦販売法 によりクレジットカード番号の適切な管理と不正利用の防止が加盟店さまに義務付けられます。
これに伴い、一般社団法人日本クレジット協会および経済産業省により「クレジットカード取引におけるセキュリティ対策の強化に向けた実行計画」*2 (以下「実行計画」)が策定され、 改正割賦販売法の施行時期 2018年6月頃 を目安に、後述するクレジットカード番号の非通過対応が加盟店さま側で求められております。 非通過対応がされていない場合、加盟店さま側で別途「PCI DSS」*3 の準拠が必要となります。
上をすっっっごく雑に解説するなら、
安全にクレジットカードを使うため法律を改訂しました。
(PAY.JP が提供しているような)非通過対応の方法か、
非通過対応をしないんだったらセキュリティをものすごく高めた PCI DSS と言う基準をクリアしてね。
と言うことになります(主観と偏見大いにあり)。
非通過対応と言うのは、加盟店(この場合アプリ開発してる我々)の DB を通過(登録)せず、
直接 PAY.JP の DB にクレジットカードの情報を送信することです。
上の PAY.JP Announcement にわかりやすい図があったので、それを観るとよりわかりやすいと思います。
つまり、
DB に直接クレジットカードの情報を入れようとすると、
"PDI DSS" といういかにも面倒臭そうな基準をクリアしなければいけません。
さすがにそれは大変なので、メンバーと相談をして
クレジットカードテーブルのカラムを変更しました。
ちなみに customer_id, card_id は PAY.JP 側のクレジットカード情報と結びつけるためにあります。
これにてクレジットカードテーブルの作成が終わりました。
ここまで読んでいただきありがとうございました。
次回はいよいよクレジットカードの登録を行いたいと思います。
商品一覧表示で画像が表示されない!?
最終課題のフリマアプリ作成中で
商品一覧表示を任されました。
rails の index 表示なら結構早く実装できるかなと思っていました。
しかし、やはりプログラミングはそんな簡単に行ってくれません。
商品の画像が全く表示されない!!
焦りに急ながらやっと表示されたので、
備忘録と、誰かの役に立てばいいなということでここに残します。
修正前コード
表示されない時点のコードが以下の通りです。
.productlists - @products.each do |product| .productlists__productlist =link_to product_path(product.id) do .productlist--img - first_image = product.images.first = image_tag /first_image, :size =>'220', class: "img" 以下略
クレジットカード決済導入
序論
プログラミングスクールの最終課題で
フリーマケットアプリを作成しています。
そして、クレジットカード支払い機能の導入を今回任され
実装が完了したので、復習と備忘録をかねてここに残そうと思います。
長くなるので何部かに分けて投稿する予定です。
今回はとりあえず実装前の準備までにします。
PAY.JP の API を取得
1. Pay.jp のアカウント作成
PAY.JP - 決済手数料2.59% クレジットカード決済代行サービス
↑こちらアカウントを作成してください。
2. 赤線の部分のところをクリック
3. API を確認
テスト用の API があることを確認してください。
後ほど使います。
テスト用の下に本番用がありますが、使いません。
gem "payjp" を導入
Gemfile に以下のコードを記載
gem 'payjp'
その後、ターミナルで bundle install を行う。
環境変数を使って API キーを導入
いろいろやり方はあると思いますが、
私は credentials.yml.enc に入力しました。
credentials.yml.enc は特殊なもので、VScode などから直接入力できないそうです。
そのため、 vim を用いて編集します。
以下のコードを打ち込んでください。
EDITOR="vi" bin/rails credentials:edit
すると vim が開かれるので、 " i " を押して挿入モードにし、
payjp: PAYJP_SECRET_KEY: sk_test_ ご自身の秘密鍵
を入力します。
私の場合ならば
payjp: PAYJP_SECRET_KEY: sk_test_f6ff52ef496c9dbfe5101cca
となります。(テスト用の秘密鍵なので載せていますが、秘密鍵は本当に秘密ですので公開してはいけません!!)
また、インデントも重要になるそうなのでご注意ください。
躓いたところ
credentials.yml.enc は config/master.key にあるマスターキーを使って暗号化しています。
この master.key は rails new で新しくアプリケーションを立ち上げた時に生成されます。
また .gitignore により github にプッシュされないように設定されています(当然と言えば当然)。
そのため、 git clone によってアプリケーションをクローンした方は rails new をした方から master.key を教えて貰わなければなりません。
master.key がないと vim が開けず泣きそうになりますのでご注意ください!
application.html.haml にスクリプトを記載
%script{src: "https://js.pay.jp/", type: "text/javascript"}
上記を application.html.haml に記載する。(haml を導入しているためこのような書き方になっています)
私の場合このように追記しています
!!! %html %head %meta{:content => "text/html; charset=UTF-8", "http-equiv": "Content-Type"}/ %title FleamarketSample73a %script{src: "https://js.pay.jp/", type: "text/javascript"} = csrf_meta_tags = csp_meta_tag = stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' = javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %body
以上で準備段階終了です。
次から実装を行っていきます。
次はこちら
クレジットカード決済導入 2 - 薬剤師のプログラミング学習
参考:
https://qiita.com/Shunsuke_i_21/items/19c8326282510ae30eab
薬剤師からエンジニアへ!
Introduction
初めまして。
渋谷にあるプログラミングスクールに通い
エンジニアになるため日々勉強中の tsubasa と申します。
薬剤師からエンジニアへジョブチェンジするため、
日々の勉強の記録を残すためブログを立ち上げました。
最初の投稿は、どうしてエンジニアを目指すのか、将来どうしたいのかという現時点の私の考えを備忘録として残そうと思います。
現職
東京23区内で薬剤師をしており、
内科、循環器内科、糖尿専門外来、消化器、皮膚科、整形外科、形成外科、脳神経外科
などのいろいろな分野を受けている薬局です。
地域に愛されるかかりつけ薬剤師になれるよう日々働いています。
エンジニアを目指したきっかけ
エンジニアを目指したきっかけは
今後、薬剤師の他に何か新しい「スキル」が必要になると考えたためです。
現在高齢化のため、医療費が年々増加しており、国も医療費削減に力を入れています。
我々はその医療費をいただいているため、結果的に営業が苦しくなってきています。
そうすると薬剤師の中で生き残りをかけて競争が激化していくと考えられます。
この衰退していく業界の中、「薬剤師」だけに固執していることはリスクでしかないので、新たなスキルを身につけようと思いました。
何を身につけようかと悩んだ結果、
「プログラミング」に行き着きました。
元々プログラミングには全く興味がなかったのですが、
プログラミングの義務教育化が決まった時に、知らなければいけなくなる時代が来ると思いました。
また、YouTuber 「まこなり社長」の動画で「プログラミングは必須スキル」という言葉に共感し、学ぼうと決意し、プログラミングスクールに入りました。
今後の展望
スクール卒業までの目標は、胸を張って「エンジニアです」と言えるようになることです。
恥ずかしい話、今の段階ではコードの意味を完全に理解していません。
「動いてるから、とりあえずヨシッ!」というところもあります。
こういった部分を無くしていき、処理がどうなっているのか、なぜこのコードになっているかを説明できるようにならなければいけないと思います。
その後は副業でスキルを磨きつつ、最終的には今の本業が副業になればいいと思っております。
ただ、薬剤師になった根底として、「患者さんの役に立つ」というものがあり、それは今も将来もブレないと思いますので、薬剤師を完全にやめる気は今のところないです!