У меня есть FrontendController, у которого есть метод show (), который возвращает пользователя на страницу сведений о конференции с доступными билетами на конференцию:
class FrontEndController extends Controller
public function show($id, $slug){
$conf = Conference::where('id', $id)->first();
$ticketTypes = TicketType::where('conference_id', $conf->id)->get();
...
return view('conferences.show')->with('conference',$conf)->with('ticket_types', $ticketTypes);
}
}
Затем на странице сведений о конференции (show.blade.php) пользователь может выбрать нужные ему билеты:
<ul class="list-group list-group-flush">
{{ csrf_field() }}
@foreach($ticket_types as $ttype)
<li class="list-group-item d-flex align-items-center justify-content-between">
<div class="w-100 text-truncate">
<span>{{$ttype->name}}</span>
</div>
<select class="custom-select form-control" name="ttypes[{{ $ttype->name }}]">
<option selected></option>
@for ($i = $ttype->min_participants; $i <= $ttype-> max_participants; $i++)
<option value="{{ $i }}">{{ $i }}</option>
@endfor
</select>
</li>
@endforeach
</ul>
<input type="submit" class="float-right btn btn-primary" value="Next" />
Затем, когда пользователь нажимает кнопку «Далее», запрос переходит к методу RegistrationController storeQuantities (), в котором информация о выбранных билетах сохраняетсяпользователь в сеансе и перенаправляет пользователя на страницу регистрации (registration.blade.php):
class RegistrationController extends Controller
{
public function storeQuantities(Request $request, $id, $slug = null){
$ttypeQuantities = $request->get('ttypes');
...
$selectedRtypes[$ttype->name]['quantity'] = $quantity;
$selectedRtypes[$ttype->name]['price'] = $price;
$selectedRtypes[$ttype->name]['subtotal'] = $price * $quantity;
$total+= $selectedRtypes[$ttype->name]['subtotal'];
$selectedRtypes[$ttype->name]['total'] = $total;
...
Session::put('selectedRtypes', $selectedRtypes);
...
return redirect(route('conferences.registration',['id' => $id, 'slug' => $slug]));
}
}
В registration.blade.php у меня есть многошаговая форма с 3 шагами.Все шаги на одной странице.Шаг 1 предназначен для сбора информации о пользователе, который выполняет регистрацию, шаг 2 - для пользователя, выберите способ оплаты, шаг 3 - платеж.
Таким образом, шаг 1 имеет форму, подобную:
<div>
<form method="post" id="step1form" action="">
{{csrf_field()}}
<!-- fields of the step 1-->
<input type="submit" href="#step2" id="goToStep2" class="btn next-step" value="Go to step 2"/>
</form>
</div>
Когда нажата кнопка «перейти к шагу 2», код переходит к RegistrationController storeUserInfo () с помощью ajax-запроса, если storeUserInfo () возвращает код 200, пользователь переходит к шагу 2 с помощью jQuery.
Итак, если возвращен код 200, пользователь находится в форме step2:
<div>
<form method="post" id="step2form" action="">
{{csrf_field()}}
<!-- fields of the step 2-->
<input type="submit" href="#step3" id="goToStep3" class="btn next-step" value="Go to step 3"/>
</form>
</div>
На шаге 3 пользователь выбирает способ оплаты и нажимает «перейти к шагу 3», код проходит через ajax-запрос к RegistrationController storePaymentMethods()
для проверки информации, введенной пользователем на шаге 2, если возвращается код 200, пользователь переходит на шаг 3.
Шаг 3 имеет эту форму ниже, в которой есть кнопка «Оплатить», которая показывает полосумодальный:
<form action="{{ route('registration.charge') }}" method="post" id="paymentForm">
{{csrf_field()}}
<input type="hidden" name="stripeToken" id="stripeToken"/>
<input type="submit" href="" id="payment" class="btn btn-primary float-right"
value="Pay"/>
</form>
Метод начисления для обработки заряда Stripe:
public function charge(Request $request)
{
Stripe::setApiKey(config('services.stripe.secret'));
$source = $request->stripeToken;
Charge::create([
'currency' => 'eur',
'description' => 'Example charge',
'amount' => 2500,
'source' => $source,
]);
}
Я сомневаюсь, как установить сумму вместо статического значения '2500', введите правильное значениеОбщая стоимость регистрации.А также, когда появляется модальная полоса, я хочу показать общую стоимость регистрации в модальной полосе.Знаете ли вы, как этого достичь?
Внутри charge()
может быть, правильный подход может быть таким, как получить значение из сеанса, например:
$selectedRtypes = Session::get('selectedRtypes');
$amount = (collect($selectedRtypes)->first()['total']) * 100;
Но знаете ли вы, как установитьобщее значение также в кнопке полосы?В размере stripe.open
.
Код полосы:
let stripe = StripeCheckout.configure({
key: "{{config('services.stripe.key')}}",
image: "",
locale: "auto",
token: (token) => {
document.querySelector('#stripeToken').value = token.id;
document.querySelector('#paymentForm').submit();
}
});
document.getElementById('payment').addEventListener('click', function(e){
stripe.open({
name: 'test',
description: 'test',
amount: 1000
});
e.preventDefault();
});