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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Cookie

HTTPにおけるCookieとは、クライアントのウェブブラウザ上に保存された一時的なデータを指します。クライアント側のJavaScriptでも、サーバー側のHTTPヘッダーでもクッキーの読み書き・修正・削除が可能です。

Ruby

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

Q&A

0回答

482閲覧

ruby カード情報が保存できなくなった

filma

総合スコア4

Cookie

HTTPにおけるCookieとは、クライアントのウェブブラウザ上に保存された一時的なデータを指します。クライアント側のJavaScriptでも、サーバー側のHTTPヘッダーでもクッキーの読み書き・修正・削除が可能です。

Ruby

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

0グッド

0クリップ

投稿2020/11/14 04:08

編集2022/01/12 10:55

プログラミング初心者です。どうしても解決できず困っています。
これまで普通に保存できていたユーザーカード情報が保存できなくなりました。登録が完了しましたというアラートが表示されるのでステータスコードは200で返ってきているのですが、データベースに保存されていない状態です。
親切な方いらっしゃいましたら是非コメントよろしくお願い致します。

**Indicate whether to send a cookie in a cross-site request by specifying its SameSite attribute

Because a cookie's SameSite attribute was not set or is invalid, it defaults to SameSite=Lax, which prevents the cookie from being sent in a cross-site request. This behavior protects user data from accidentally leaking to third parties and cross-site request forgery.

Resolve this issue by updating the attributes of the cookie:
Specify SameSite=None and Secure if the cookie should be sent in cross-site requests. This enables third-party use.
Specify SameSite=Strict or SameSite=Lax if the cookie should not be sent in cross-site requests

1 cookie
Name Domain & Path
_ga .pay.jp/
2 requests
**
ブラウザの検証で確認すると、このようなエラーが出ています。

ruby

1cards.controller.rb 2 3def create 4 5 # 環境変数を読み込む 6 Payjp.api_key = ENV["PAYJP_SECRET_KEY"] 7 8 customer = Payjp::Customer.create( 9 description: 'test', # テストカードであることを説明 10 card: params[:card_token] # 登録しようとしているカード情報 11 ) 12 13 @card = Card.new( # トークン化されたカード情報を保存する 14 card_token: params[:card_token], # カードトークン 15 customer_token: customer.id, # 顧客トークン 16 user_id: current_user.id # ログインしているユーザー 17 ) 18 19 redirect_to user_path(current_user.id) 20 21 end

ruby

1 2card.js 3 4if (document.URL.match( /card/ ) && document.URL.match( /new/ )) { 5 document.addEventListener('DOMContentLoaded', function(){ 6 7 // 環境変数を読み込む 8 Payjp.setPublicKey(process.env.PAYJP_PUBLIC_KEY); 9 const form = document.getElementById("charge-form"); 10 form.addEventListener("submit", (e) => { 11 e.preventDefault(); 12 13 // カード情報の取得先 14 const formResult = document.getElementById("charge-form"); 15 const formData = new FormData(formResult); 16 17 const card = { 18 number: formData.get("number"), // カード番号 19 cvc: formData.get("cvc"), // カード裏面の3桁の数字 20 exp_month: formData.get("exp_month"), // 有効期限の月 21 exp_year: `20${formData.get("exp_year")}`, // 有効期限の年 22 }; 23 24 Payjp.createToken(card, (status, response) => { 25 if (status === 200) { 26 const token = response.id; 27 const renderDom = document.getElementById("charge-form"); 28 29 //paramsの中にトークンを含める 30 const tokenObj = `<input value=${token} type="hidden" name='card_token'>`; 31 32 //フォームの一番最後に要素を追加 33 renderDom.insertAdjacentHTML("beforeend", tokenObj); 34 35 document.getElementById("number").removeAttribute("name"); 36 document.getElementById("cvc").removeAttribute("name"); 37 document.getElementById("exp_month").removeAttribute("name"); 38 document.getElementById("exp_year").removeAttribute("name"); 39 40 document.getElementById("charge-form").submit(); 41 document.getElementById("charge-form").reset(); 42 alert("登録が完了しました") 43 } else { 44 alert("カード情報が正しくありません") 45 } 46 }); 47 }); 48 }); 49} 50 51

追記

pay.jpを使用したクレジット決済機能です。
データベースに保存しようとしているカラムは、card_token, customer_token, user_idです。

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

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

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

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

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

miyabi_takatsuk

2020/11/14 05:14 編集

カード情報の何を保存しようとしているのでしょうか? またカード会社によってルールが違うので、 カード会社がどこなのかわからないと、回答しようがなくなるかもしれません。 (会社によっては、カード番号関連の処理は、バックエンドでやってはいけない + DBに保存してはいけない) というわけで、カード会社に問い合わせた方がいいかもしれませんよ。
miyabi_takatsuk

2020/11/14 05:38

質問編集ありがとうございます。 その情報なら、DBに保存してもよさそうな感じですが・・・、 ですが、エラー文を翻訳してみてください。 少し原因がわかるかと。 (データ保持の仕方がいけない、みたいな内容) あとは、クレジット決済機能の元会社に問い合わせるしかないかもしれません。
filma

2020/11/14 05:49

ご返信ありがとうございます。元々できていたのに何が原因でできなくなったのかよくわからないですね‥ もう少し調べてみます!
miyabi_takatsuk

2020/11/14 05:53

なるほど・・・。 「元々エラーコードはでてきてました」、の旨も質問文に書いておいた方がよさそうです。 となると、カード決済システム側のアップデートなども関係してるかもしれません。 サーバーのアップデートや、ブラウザの更新も、もしかしたらあるかもしれません。 (ソースコード同じなのに突然できなくなったのなら) Rubyは門外漢のため、回答はできかねますが、 解決されるよう祈っております。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問