いまC2Cのマッチングサービスを開発しており、そこでの決済機能としてStripe Elementsを採用することにしました。
開発環境は以下の通りです。
-PHP7.1
-Laravel5.5
-LAMP環境
Stripe Elementsは以下のドキュメントを参考に実装しています。
Card Element Quickstart
#質問したい内容
こちらのドキュメントの工程をすべて完了しました。
決済フォームにクレジットカード情報を入力し、formをsubmitするとstripeTokenが発行されるはずなのですが、僕の実装ではstripeTokenが発行されないといった状況に陥っています。
Stripeドキュメントからコピーして貼り付けたJavaScriptをデバッグしてみると、どうやら以下の箇所がうまく起動していないみたいです。
JavaScript
1// Handle form submission. 2 var form = document.getElementById('payment-form'); 3 form.addEventListener('submit', function(event) { 4 event.preventDefault(); 5 6 stripe.createToken(card).then(function(result) { 7 if (result.error) { 8 // Inform the user if there was an error. 9 var errorElement = document.getElementById('card-errors'); 10 errorElement.textContent = result.error.message; 11 } else { 12 // Send the token to your server. 13 stripeTokenHandler(result.token); 14 } 15 }); 16 }); 17 function stripeTokenHandler(token) { 18 // Insert the token ID into the form so it gets submitted to the server 19 var form = document.getElementById('payment-form'); 20 var hiddenInput = document.createElement('input'); 21 hiddenInput.setAttribute('type', 'hidden'); 22 hiddenInput.setAttribute('name', 'stripeToken'); 23 hiddenInput.setAttribute('value', token.id); 24 form.appendChild(hiddenInput); 25 // Submit the form 26 form.submit(); 27 }
上記のコードは、決済フォームをsubmitした際に発火し、stripeTokenが発行されるという処理だと思うのですが、こちらがどうやらうまく発火していないようです。
しかしながら、なぜこちらがsubmitしても発火されないのかがわからず、つまっております。
どなたか解決策または何か少しでもわかる方がいらっしゃいましたら、教えていただきたいです。
実際に問題が発生しているコードを以下に貼らせていただきます。
reserve.blade.php
PHP
1@extends('layouts.application') 2 3<script src="https://js.stripe.com/v3/"></script> 4 5@section('content') 6 <div class="container"> 7 <div class="row"> 8 <div class="col-md-8 col-md-offset-2"> 9 <form action="{{ route('experiences.complete', $model) }}" method="post" id="payment-form"> 10 {{ csrf_field() }} 11 <div class="form-row"> 12 13 <label for="card-element">お支払い</label> 14 15 <div id="card-element"> 16 <!-- A Stripe Element will be inserted here. --> 17 </div> 18 <!-- Used to display form errors. --> 19 <div id="card-errors" role="alert"></div> 20 21 </div> 22 23 <button class="btn btn-primary">支払う</button> 24 25 </form> 26 </div> 27 </div> 28 </div> 29 30 <script> 31 (function(){ 32 // Create a Stripe client. 33 var stripe = Stripe('{{ config('services.stripe.key')}}'); 34 35 // Create an instance of Elements. 36 var elements = stripe.elements(); 37 38 // Custom styling can be passed to options when creating an Element. 39 // (Note that this demo uses a wider set of styles than the guide below.) 40 var style = { 41 base: { 42 color: '#32325d', 43 lineHeight: '18px', 44 fontFamily: '"Helvetica Neue", Helvetica, sans-serif', 45 fontSmoothing: 'antialiased', 46 fontSize: '16px', 47 '::placeholder': { 48 color: '#aab7c4' 49 } 50 }, 51 invalid: { 52 color: '#fa755a', 53 iconColor: '#fa755a' 54 } 55 }; 56 57 // Create an instance of the card Element. 58 var card = elements.create('card', { 59 style: style, 60 hidePostalCode: true, 61 }); 62 63 // Add an instance of the card Element into the `card-element` <div>. 64 card.mount('#card-element'); 65 66 // Handle real-time validation errors from the card Element. 67 card.addEventListener('change', function(event) { 68 var displayError = document.getElementById('card-errors'); 69 if (event.error) { 70 displayError.textContent = event.error.message; 71 } else { 72 displayError.textContent = ''; 73 } 74 }); 75 76 // Handle form submission. 77 var form = document.getElementById('payment-form'); 78 form.addEventListener('submit', function(event) { 79 event.preventDefault(); 80 81 stripe.createToken(card).then(function(result) { 82 if (result.error) { 83 // Inform the user if there was an error. 84 var errorElement = document.getElementById('card-errors'); 85 errorElement.textContent = result.error.message; 86 } else { 87 // Send the token to your server. 88 stripeTokenHandler(result.token); 89 } 90 }); 91 }); 92 function stripeTokenHandler(token) { 93 // Insert the token ID into the form so it gets submitted to the server 94 var form = document.getElementById('payment-form'); 95 var hiddenInput = document.createElement('input'); 96 hiddenInput.setAttribute('type', 'hidden'); 97 hiddenInput.setAttribute('name', 'stripeToken'); 98 hiddenInput.setAttribute('value', token.id); 99 form.appendChild(hiddenInput); 100 // Submit the form 101 form.submit(); 102 } 103 })(); 104</script> 105@endsection
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。