【フリマアプリ】PAY.JPでのクレジットカード決済機能について（第１回）　〜導入編〜

　某スクールにおいて、チーム開発で、フリーマーケットアプリを作成中であり、使用した技術について公開しています。
※初学者のため、ミスや認識違いが多々あると思いますがご了承ください。

# フリマアプリにおいて、PAY.JPを用いたクレジットカード決済機能を実装しました！！

    |内容             |                  url   |
|:-----------------|------------------:|:-----------------------------:|
| 第１回             |導入編 | https://qiita.com/sho_U/items/ee0831844a0afd6e976f|
| 第２回         |運用編（クレジットカード登録）    | https://qiita.com/sho_U/items/0a127e6f0904e3e9132b  |
| 第３回|　運用編（購入）|https://qiita.com/sho_U/items/64ca57b7a1f72bf7079f|


〜コード全文〜 https://qiita.com/sho_U/items/fa964c72fbbd87bb7bd7

**動作イメージ**(クレジットカード登録）![3ebe793f32fa223980fe009ee75f653b.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547556/3e2377f8-84cf-62c5-07f2-301862bc6b06.gif)

**動作イメージ**(表示・削除）
![7a6b795e78b489339ad7334c957a41b3.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547556/5c07dd52-2ba2-ecd1-eee1-54a50f10b110.gif)

**動作イメージ**(購入）
![ec0a41c35df6f960dcc1e3cdb4546586.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547556/89c518a9-9ebc-b4bd-a054-9f509e96017a.gif)

##PAY.JPについて
>BASEが開始する「PAY.JP（ペイドットジェーピー）」は、開発者向けの決済サービスとなり、RESTのAPIもしくはPHP、Rubyなど、開発言語ごとに提供しているライブラリを使用して、簡易に決済機能を追加することができる。
「PAY.JP」は、加盟店のサイトにAPIを組み込むが、加盟店がクレジットカード情報を処理するリスクを軽減するため、代替となるトークンを採用している。利用者が入力したクレジットカード番号はトークン化され、別の乱数に置き換えられるため、加盟店は「伝送」「処理」「保存」のすべてで、カード情報の管理を回避できる。

参考　https://paymentnavi.com/paymentnews/51558.html

つまり、顧客のクレジットカード情報をpay.jpに保存し、アプリ側のデーターベースには保存せず、必要に応じて乱数化されたトークンで認証し、顧客とクレジットカードを紐づけて処理することにより、安全にクレジットカードの決済が行えるAPIとなります。

フリーマーケットアプリを開発する上で購入機能については、このpay.jpを利用し、クレジットカードで決済を行う実装としました。

##PAY.JPの導入
###①新規登録
https://pay.jp/
↑ こちらのページに遷移し、新規登録します。

ログインすると、メニュー画面が現れます。
<img width="918" alt="e050593f9029ba6c40e5d201bbc066d3.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547556/d7e3d12f-bc44-053d-ccd4-df1744588b15.png">

開発段階で購入テストを繰り返していたら、いつの間にか売り上げが２００万円を超えていました笑
決して悪どい商売をした訳ではありません。むしろ良心的だと思います。商品一例↓  
<img width="400" alt="f1219fdfdeade98896959d9297a6025c.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547556/452f33e2-87d6-dc0c-1a69-41e732f5be5a.png">

メニュー画面の左側のリストの「API」という欄をクリックすると、APIキーの情報を確認することができます。
<img width="1202" alt="76903d3c88b4652953c46d121ffd68b7.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547556/46b962f2-901a-4436-0054-4efc6718379e.png">

###②gemのインストール

```ruby:Gemfile
gem 'payjp'
```
本番環境でも開発環境でも必要ですので、

```ruby:Gemfile
group :development do
group :test do
group :production do
```
の外に記載します。bundleインストールしましょう。

###③payjp.jsを読み込めるようにします

    %script{src: "https://js.pay.jp/", type: "text/javascript"}
を追記します。

```haml:/views/layouts/application.html.haml
%html
  %head
    %meta{content: "text/html; charset=UTF-8", "http-equiv": "Content-Type"}
    %title FleamarketAppTeamA

    %script{src: "https://js.pay.jp/", type: "text/javascript"}
    -# ⬆️　この1行を追記

    = 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
    = render 'layouts/notifications'
    = yield
```
この記載をheadに記載することにより、ページを読み込むことでで、トークン取得などのメソッドを使用できるようになります。
###④環境変数を設定します。

環境変数は　credentials.yml.enc　に設定します。
ターミナルで　$ EDITOR='code --wait' rails credentials:edit　と打ち込むとvscodeで編集が可能です。

```:credentials.yml
payjp:
  PAYJP_PRIVATE_KEY: sk_test_*******************
```
セットするのは、秘密鍵のみでオッケーです。yamlファイルはインデントが崩れると読み込めなくなるのでご注意ください。
※環境変数の設定は、環境により異なります。

##導入編は以上となります。次回は運用編（クレジットカード登録）です。
https://qiita.com/sho_U/items/0a127e6f0904e3e9132b