Получите полную стоимость регистрации, чтобы правильно использовать эту общую стоимость при оплате кредитной картой. - PullRequest
0 голосов
/ 27 мая 2018

У меня есть 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();
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...