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

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

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

Stripeとは、米国のオンライン決済システム提供企業、及び同社が提供する決裁システムを指します。Webサイトやモバイルアプリにコードを組み込むことでクレジットカードなどの決済サービスが簡潔に追加できます。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Blade

Bladeとは、 PHPフレームワークのLaravelで使用することができるテンプレートエンジンです。テンプレートの継承とエスケープ機能を提供します。

Q&A

0回答

852閲覧

LaravelでStripeのカード番号を入力できない

asahio

総合スコア2

Stripe

Stripeとは、米国のオンライン決済システム提供企業、及び同社が提供する決裁システムを指します。Webサイトやモバイルアプリにコードを組み込むことでクレジットカードなどの決済サービスが簡潔に追加できます。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Blade

Bladeとは、 PHPフレームワークのLaravelで使用することができるテンプレートエンジンです。テンプレートの継承とエスケープ機能を提供します。

0グッド

0クリップ

投稿2022/01/15 13:50

LaravelでつくったCRUDアプリにStripeでサブスクリプションを導入したいのですが、決済の画面でカード情報を入力できず、困っています。

イメージ説明

↑のように、カードエレメントを入力する場所で入力ができない状態です。
もし同じようなケースを改善した方、原因が推測できる方がいらっしゃれば、お力を貸していただけないでしょうか。よろしくお願いいたします。下にコードを提示いたします。

blade.php

1<form action="{{route('stripe.afterpay')}}" method="post" id="payment-form"> 2 @csrf 3 4 <label for="exampleInputEmail1">お名前</label> 5 <input type="test" class="form-control col-sm-5" id="card-holder-name" required> 6 7 <label for="exampleInputPassword1">カード番号</label> 8 <div class="form-group MyCardElement col-sm-5" id="card-element"></div> 9 10 <div id="card-errors" role="alert" style='color:red'></div> 11 12 <button class="btn btn-primary" id="card-button" data-secret="{{ $intent->client_secret }}">送信する</button> 13 14</form> 15</div> 16 17<script> 18 19 // HTMLの読み込み完了後に実行するようにする 20 window.onload = my_init; 21 function my_init() { 22 23 // Configに設定したStripeのAPIキーを読み込む 24 const stripe = Stripe("{{ config('services.stripe.pb_key') }}"); 25 const elements = stripe.elements(); 26 27 const cardElement = elements.create('card', {style: style, hidePostalCode: true}); 28 cardElement.mount('#card-element'); 29 30 const cardHolderName = document.getElementById('card-holder-name'); 31 const cardButton = document.getElementById('card-button'); 32 const clientSecret = cardButton.dataset.secret; 33 34 cardButton.addEventListener('click', async (e) => { 35 // formのsubmitボタンのデフォルト動作を無効にする 36 e.preventDefault(); 37 const { setupIntent, error } = await stripe.confirmCardSetup( 38 clientSecret, { 39 payment_method: { 40 card: cardElement, 41 billing_details: { name: cardHolderName.value } 42 } 43 } 44 ); 45 46 if (error) { 47 // エラー処理 48 console.log('error'); 49 50 } else { 51 // 問題なければ、stripePaymentHandlerへ 52 stripePaymentHandler(setupIntent); 53 } 54 }); 55 } 56 57 function stripePaymentHandler(setupIntent) { 58 var form = document.getElementById('payment-form'); 59 var hiddenInput = document.createElement('input'); 60 hiddenInput.setAttribute('type', 'hidden'); 61 hiddenInput.setAttribute('name', 'stripePaymentMethod'); 62 hiddenInput.setAttribute('value', setupIntent.payment_method); 63 form.appendChild(hiddenInput); 64 // フォームを送信 65 form.submit(); 66 } 67</script>

StripeController.php

php

1<?php 2 3namespace App\Http\Controllers; 4use Illuminate\Support\Facades\Auth; 5use Illuminate\Http\Request; 6use Laravel\Cashier\Cashier; 7use Stripe\Stripe; 8use Stripe\Charge; 9use App\Models\User; 10 11class StripeController extends Controller 12{ 13 public function subscription(Request $request){ 14 $user=Auth::user(); 15 return view('story.subscription', [ 16 'intent' => $user->createSetupIntent() 17 ]); 18 } 19 20 21 22 23 public function afterpay(Request $request){ 24 // ログインユーザーを$userとする 25 $user=Auth::user(); 26 27 // またStripe顧客でなければ、新規顧客にする 28 $stripeCustomer = $user->createOrGetStripeCustomer(); 29 30 // フォーム送信の情報から$paymentMethodを作成する 31 $paymentMethod=$request->input('stripePaymentMethod'); 32 33 // プランはconfigに設定したbasic_plan_idとする 34 $plan=config('services.stripe.basic_plan_id'); 35 36 // 上記のプランと支払方法で、サブスクを新規作成する 37 $user->newSubscription('default', $plan) 38 ->create($paymentMethod); 39 40 // 処理後に'ルート設定'にページ移行 41 return back(); 42 } 43}

追記等ありましたら遠慮なくおっしゃってください。よろしくお願いいたします。

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問