[英]Laravel app.js stops Stripe payment form from showing
我正在尝试使用 Stripe 接受付款。 我从Stripe 文档中获取了代码并将其添加到视图中。 当我单击按钮时,它不会显示表单,而是转到表单操作页面(付款)。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- CSRF Token -->
<meta name="csrf-token" content="9HgWQfTsUXQ0RmIPQPLbhNoujOobjHn5PL9en8jx">
<title>Staff</title>
<!-- Styles -->
<link href="https://localhost/staff/public/css/app.css" rel="stylesheet">
<link href="https://localhost/staff/public/css/style.css" rel="stylesheet">
</head>
<body>
<div id="app">
<form action="payments/" method="POST">
<script
src="https://checkout.stripe.com/checkout.js" class="stripe-button"
data-key="pk_test_xxx"
data-amount="999"
data-name="Demo Site"
data-description="Widget"
data-image="https://stripe.com/img/documentation/checkout/marketplace.png"
data-locale="auto">
</script>
</form>
</div>
<!-- Scripts -->
<script src="https://localhost/staff/public/js/app.js"></script>
</body>
</html>
我把所有东西都去掉以消除只剩下按钮的所有东西,但仍然没有用。 最后要删除的一件事......
<script src="https://localhost/staff/public/js/app.js"></script>
这就是阻止表格显示的原因....
所以我的问题是:为什么这会导致 Stripe 无法显示表单,我该怎么做才能修复它? 我是不是忘了正确设置一些东西? 我是 Laravel 的新手,这是我使用该框架的第一个项目,我的安装非常接近 vanilla,因为我刚刚开始......
我运行composer require "laravel/cashier":"~7.0"
然后将服务提供者添加到 config/app.php:
'providers' => [
...
Laravel\Cashier\CashierServiceProvider::class,
],
然后迁移了数据库。
这是我的一些文件...
网页.php:
...
Route::post('/payments', 'PaymentsController@subscribe')->name('payments');
Route::get('/payments', 'PaymentsController@index')->name('payments');
PaymentsController.php:
<?php
namespace Staff\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
class PaymentsController extends Controller
{
//private $states;
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth');
}
public function index() {
return view('payments/payment');
}
public function subscribe() {
echo "huhh";
}
}
支付.blade.php:
@extends('layouts.app')
@section('content')
<form action="" method="POST">
<script
src="https://checkout.stripe.com/checkout.js" class="stripe-button"
data-key="pk_test_fCM9Fr1e33JYW6t17ZoSyXRf"
data-amount="999"
data-name="Demo Site"
data-description="Widget"
data-image="https://stripe.com/img/documentation/checkout/marketplace.png"
data-locale="auto">
</script>
</form>
@endsection
服务.php:
<?php
return [
...
'stripe' => [
'model' => Staff\User::class,
'key' => env('pk_test_xxx'),
'secret' => env('sk_test_zzz'),
],
];
发现问题。 这是登出表格。 如果我删除它,条纹形式就可以工作。
<form id="logout-form" action="{{ route('logout') }}" method="POST" style="display: none;">{{ csrf_field() }}</form>
所以,这意味着这两种形式是冲突的。 我在 Stripe 表单中添加了一个名称stripe-form
,并更新了 javascript
document.querySelector("form[name='stripe-form']").addEventListener('submit', function(e) {
e.preventDefault();
var form = document.querySelector("form[name='stripe-form']");
var extraDetails = {
name: form.querySelector('input[name=cardholder-name]').value,
};
stripe.createToken(card, extraDetails).then(setOutcome);
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.