php - 条带函数一次又一次地调用,令牌反复变化?
问题描述
帮我找到条带支付中的错误,其中令牌在检查元素中反复更改似乎函数一次又一次地调用?谁能告诉我问题出在哪里?帮我找到条带支付中的错误,其中令牌在检查元素中反复更改似乎函数一次又一次地调用?谁能告诉我问题出在哪里?
**stripe.blade.php**
@extends('layouts.user')
@section('title', 'Stripe Payment')
@section('content')
<div class="container my-5">
<div class="row my-5">
<div class="col-md-6 col-md-offset-3 my-5">
<div class="panel panel-default credit-card-box">
<div class="panel-heading display-table" >
<div class="row display-tr" >
<h3 class="panel-title display-td" >Payment Details</h3>
<div class="display-td" >
<a href="{{url('user/stripe')}}"><img src="{{url('assets/user/img/payment.png')}}" alt=""></a>
</div>
</div>
</div>
<div class="panel-body">
@if (Session::has('success'))
<div class="alert alert-success text-center">
<a href="#" class="close" data-dismiss="alert" aria-label="close">×</a>
<p>{{ Session::get('success') }}</p>
</div>
@endif
<form role="form" action="{{url('user/stripe')}}" method="post" class="require-validation" data-cc-on-file="false"
data-stripe-publishable-key="{{ env('STRIPE_KEY') }}" id="payment-form">
@csrf
<input type="hidden" name="stripeToken" id="stripeToken" value="">
<input type="hidden" name="user_id" value="{{ Auth::user()->id }}">
<div class='form-row row'>
<div class='col-xs-12 form-group required'>
<label class='control-label'>Name on Card</label> <input
class='form-control' name='card_name' size='4' type='text'>
</div>
</div>
<div class='form-row row'>
<div class='col-xs-12 form-group card required'>
<label class='control-label'>Card Number</label> <input
autocomplete='off' name='card_number' class='form-control card-number' size='20'
type='text'>
</div>
</div>
<div class='form-row row'>
<div class='col-xs-12 col-md-4 form-group cvc required'>
<label class='control-label'>CVC</label> <input autocomplete='off'
class='form-control card-cvc' name='cvc' placeholder='ex. 311' size='4'
type='text'>
</div>
<div class='col-xs-12 col-md-4 form-group expiration required'>
<label class='control-label'>Expiration Month</label> <input
class='form-control card-expiry-month' name='exp_month' placeholder='MM' size='2'
type='text'>
</div>
<div class='col-xs-12 col-md-4 form-group expiration required'>
<label class='control-label'>Expiration Year</label> <input
class='form-control card-expiry-year' name='exp_year' placeholder='YYYY' size='4'
type='text'>
</div>
</div>
<div class='form-row row'>
<div class='col-md-12 error form-group hide'>
<div class='alert-danger alert'>Please correct the errors and try
again.</div>
</div>
</div>
<div class="row">
<div class="col-xs-12">
<button class="btn btn-success btn-lg btn-block" type="submit">Pay Now ($100)</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</body>
@endsection
@section('user_specific_js')
<script type="text/javascript">
$(function() {
var $form = $(".require-validation");
$('form.require-validation').bind('submit', function(e) {
var $form = $(".require-validation"),
inputSelector = ['input[type=email]', 'input[type=password]',
'input[type=text]', 'input[type=file]',
'textarea'].join(', '),
$inputs = $form.find('.required').find(inputSelector),
$errorMessage = $form.find('div.error'),
valid = true;
$errorMessage.addClass('hide');
$('.has-error').removeClass('has-error');
$inputs.each(function(i, el) {
var $input = $(el);
if ($input.val() === '') {
$input.parent().addClass('has-error');
$errorMessage.removeClass('hide');
e.preventDefault();
}
});
if (!$form.data('cc-on-file')) {
e.preventDefault();
Stripe.setPublishableKey($form.data('stripe-publishable-key'));
Stripe.createToken({
number: $('.card-number').val(),
cvc: $('.card-cvc').val(),
exp_month: $('.card-expiry-month').val(),
exp_year: $('.card-expiry-year').val()
}, stripeResponseHandler);
}
});
function stripeResponseHandler(status, response) {
if (response.error) {
$('.error')
.removeClass('hide')
.find('.alert')
.text(response.error.message);
} else {
// token contains id, last4, and card type
var token = response['id'];
// insert the token into the form so it gets submitted to the server
$form.find('input[type=text]').empty();
$('#stripeToken').val(token);
$('#payment-form').submit();
}
}
});
</script>
@endsection
**CheckoutController**
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Stripe;
class CheckoutController extends Controller
{
/**
* success response method.
*
* @return \Illuminate\Http\Response
*/
public function stripe()
{
return view('user.stripe');
}
/**
* success response method.
*
* @return \Illuminate\Http\Response
*/
public function stripePost(Request $request)
{
Log::info(print_r($request->all, true));
Stripe\Stripe::setApiKey(env('STRIPE_SECRET'));
$customer = \Stripe\Customer::create([
'email' => $request->user()->email,
'payment_method' => $request->input('stripeToken'),
'invoice_settings' => [
'default_payment_method' => $request->input('stripeToken'),
],
]);
Log::info("Create Customer Response");
Log::info(print_r($customer, true));
Session::flash('success', 'Payment successful!');
return back();
}
}
解决方案
您需要通过禁用代码来缩小问题的范围,直到您隔离错误。
看起来你有一个循环触发,$('#payment-form').submit();
因为你还绑定了submit
动作form.require-validation
:
$('form.require-validation').bind('submit'...
然后在里面调用stripeResponseHandler
which 再次触发$('#payment-form').submit()
。
你需要打破这个循环。
推荐阅读
- c# - 一次更新多个 xaml 绑定
- android - 在 Android 上实现随机森林的方法
- bash - POSIX shell (sh) 将 stderr 重定向到 stdout 并将 stderr 和 stdout 捕获到变量中
- kubernetes - 使用 Istio 在 Kubernetes 集群上访问 Prometheus GUI
- javascript - 电子 - 无法生成 .exe
- amazon-web-services - 必须匹配查询在 Elasticsearch 中未按预期工作
- python - 如何将列表转换为字符串,以便将其保存在 txt 文件中?
- kubernetes - Kubernetes Pod 无法启动 - 1 个节点发生卷关联冲突
- css - fa class loads, fab class does not, the result is missing icons
- selenium - 如何使用从硒中检索到的元素?