質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

2回答

3822閲覧

PAY.JP カード情報と紐づいた顧客の作成

kennyyasumura

総合スコア15

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2018/12/10 09:42

編集2018/12/10 09:43

###前提・実現したいこと

学習用に作成しているWEBサービス(コピーサイト)にPAY.JPを利用して決済機能をつけようとしています。オリジナルがユーザー登録時にクレジットカード情報を登録する形式なので、本サービスも同じ仕様にしたいです。

しかし、カードトークンの生成はできるのですが、
payjp側の顧客と生成されたカードトークンが結び付けられずに困っています。

###発生している問題・エラーメッセージ

Railsで実装しようとするとセキュリティ周りのエラーが出る。
payjp.jsを利用するとカードトークンは作成できるが、顧客と結びつかない。

###該当のソースコード

必要があれば記載します。

###試したこと

####① railsのcreateメソッド内で作成してみる。

Railsで実装しようとすると下記のエラーが出ます。

エラー文:
Sending credit card numbers directly to the API is generally unsafe. Use Checkout or payjp.js.

参考:http://payjp-announce.hatenablog.com/entry/2017/11/10/182738http://payjp

####② エラー文に言われた通りpayjp.jsを利用し、実装してみる。

カードトークンの生成はできますが、顧客の作成ができませんでした。
payjp.jsでカードトークンを生成後、json形式でレスポンスが返ってきます。
その中のid情報を使って、railsからcreateすればカード情報の紐づいた顧客が作成できるのですが、
javascriptからrailsに渡し方がわかりませんでした。
(非同期で入手したデータはそもそも無理でしょうか)

####③先に顧客を作成し、後からカード情報を紐付ける。

クライアントがカード情報を入力する前のVIEWで空の顧客を作成し、
その顧客のIDを利用してカードトークンを作成すればできるのではと思ったのですが、
何を以ってそのID指定できるのか、、、となりました。

####④JavaScriptで顧客を作成する。
非同期に非同期を重ねるというのは、そもそもできるのでしょうか。
レスポンスで返ってきたjsonの中のidを使ってcreateできればできると思ったのですが、
payjp.jsの関数内で顧客登録もできるのでしょうか。

###補足情報(FW/ツールのバージョンなど)
初心者なので、スペック等どこまで記述すれば良いのかわからないのですが、
取り急ぎ下記の環境で作業しております。

macOS Mojave 10.14
Rails 5.1.6
ruby 2.3.1
rbenv 1.1.1
mysql 5.6.42

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

だいたいそうゆう認識で大丈夫です。ただカードに関しては実際はtoken IDを指定しますので、顧客objectを作成する時に指定する"card:xxxxx"はtoken IDになります。

ruby

1require 'payjp' 2Payjp.api_key = 'sk_xxxxxxxx' 3Payjp::Customer.create( 4 id: 'hogehoge', #ユニークな顧客id 5 card:'tok_xxxxxxx', #checkoutからPOSTされたtoken ID 6 description: 'test' 7)

token IDは顧客objectに直接紐付けますので、サーバ側に別途カードobjectを作成する必要はないです。

投稿2018/12/10 12:44

tomonish

総合スコア19

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kennyyasumura

2018/12/11 04:13

ご回答ありがとうございました! スッキリしました!!
guest

0

質問者さんがいくつか思い違いをしていますので、基本的な流れを下記に書きますので流れを把握してください。


1.tokenの取得

非通過によりサーバサイドでtoken取得は出来なくなりました。また、非通過とは関係ないですがシークレットキーでのtoken取得も出来ないようになっています。そのため、フロント(エンドユーザーに見える部分)でcheckoutを使用してtoken取得を行い、当該tokenをサーバ側にPOSTする必要があります。
なおcheckoutにはパブリックキーを使用してください。

2.顧客の作成

PAYJPの顧客objectの作成はシークレットキーを使用してサーバ側で行う必要があります。
checkoutはあくまでtoken取得のためだけのJSライブラリになります。
顧客とカード情報を結び付けたいのであれば、まずは顧客情報を入力できるフォームを用意して当該データをサーバ側にPOSTしてから、サーバ側でPAYJPのAPIを利用して作成する顧客objectと紐付けを考慮する必要があります。
このPAYJPの顧客object作成の時に1で取得したtokenを利用して紐付けをしてください。


流れ的に一般的なフォームで入力されたデータをサーバ側にPOSTして、そのデータを利用してサーバ側で処理することと違いはないかと思います。

投稿2018/12/10 10:38

tomonish

総合スコア19

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kennyyasumura

2018/12/10 10:54

ご回答いただきありがとうございます! 顧客は顧客で作成し、カードはカードで作成。 生成されたトークンのうち必要なデータを保存しておき、 それぞれのトークンIDで以って紐付けを行うという事でしょうか。 トンチンカンな事を言っていたら、すみません。。 require 'payjp' Payjp.api_key = 'sk_test_XXXXX' customer = Payjp::Customer.retrieve('cus_XXXXX') customer.cards.create( card: 'tok_XXXXX' )
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問