Всем привет, есть сайт с вебинарами, пользователь добавляет их в корзину, в корзине вводит свои данные и нажимает оплатить, мы его регистрируем и после его перенаправляет на liqpay для оплаты, после оплаты мне приходит ответ, и здесь мне нужно определить от какого пользователя положительный ответ об оплате.
использую livewire, пытался в форме liqpay передавать ид пользователя, но всегда передается нулл
#[On('formOrder')]
public function store($formData)
{
$this->name = $formData['name'];
$this->phone = $formData['phone'];
$this->email = $formData['email'];
$this->surname = $formData['surname'];
// Валидация входных данных
$this->validate([
'name' => 'required|string',
'phone' => 'required|string',
'email' => 'required|string',
'surname' => 'required|string',
]);
// Предположим, что $this->email уже заполнен
$this->user = User::where('email', $this->email)->first();
if (!$this->user) {
// Пользователь не найден, создаем нового
$this->user = User::create([
'name' => $this->name,
'surname' => $this->surname,
'phone' => $this->phone,
'email' => $this->email,
'password' => Hash::make('vYjDsM7kkZ'), // Установите безопасный пароль
]);
try {
event(new SendRegisterEmailUser($this->user, 'vYjDsM7kkZ'));
} catch (\Symfony\Component\Mailer\Exception\TransportException $e) {
Log::error("Ошибка отправки почты: " . $e->getMessage());
}
} else {
// Пользователь найден, проверяем наличие фамилии и телефона
if (!$this->user->surname) {
$this->user->surname = $this->surname;
}
if (!$this->user->phone) {
$this->user->phone = $this->phone;
}
$this->user->save();
}
$this->dispatch('cartUpdated');
$this->dispatch('redirectToPayment');
}
public function render()
{
$webinarNames = [];
foreach (\Gloudemans\Shoppingcart\Facades\Cart::instance(session()->getId())->content() as $item) {
$webinarNames[] = $item->name;
}
$webinarsString = "Оплата вебинара - " . implode(', ', $webinarNames) . '.';
$data = [
'version' => 3,
'public_key' => env('LIQPAY_PUBLIC_KEY'),
'action' => 'pay',
'amount' => \Gloudemans\Shoppingcart\Facades\Cart::instance(session()->getId())->subtotal(),
'currency' => 'UAH',
'description' => $webinarsString,
'order_id' => session()->getId() . '__user_id=' . ($this->user ? $this->user->id : null) . '__' . date('YmdHis'),
'result_url' => 'https://stomatwebinar.com/',
'server_url' => 'https://stomatwebinar.com/api/getdata'
];
$dataEncoded = base64_encode(json_encode($data));
$signature = base64_encode(sha1(env('LIQPAY_PRIVATE_KEY') . $dataEncoded . env('LIQPAY_PRIVATE_KEY'), true));
return view('livewire.components.cart', compact('dataEncoded', 'signature'));
}
<div class="modal-body">
<!-- Form for order -->
<form class="order-form" action="https://www.liqpay.ua/api/3/checkout">
<input type="hidden" name="data" value="{{$dataEncoded}}"/>
<input type="hidden" name="signature" value="{{$signature}}"/>
<div class="mb-4">
<!-- Input for customer name -->
<input placeholder="Ваше імя" type="text" class="form-control" id="name" name="name" required>
</div>
<div class="mb-4">
<!-- Input for customer name -->
<input placeholder="Ваше прiзвище" type="text" class="form-control" id="surname" name="name" required>
</div>
<div class="mb-4">
<!-- Input for customer email -->
<input placeholder="Ваша пошта" type="email" class="form-control" id="email" name="email" required>
</div>
<div class="mb-4">
<!-- Input for customer phone -->
<input placeholder="Ваш телефон" type="tel" class="form-control" id="phone" name="phone" required>
</div>
<!-- Add more product details if needed -->
<button type="submit" class="btn btn-success">Замовити</button>
<div class="form-check mt-2">
<input type="checkbox" class="form-check-input" id="termsCheckbox" required>
<label class="form-check-label" for="termsCheckbox">Підтверджую, що Я уважно ознайомився(лася) з даною інструкцією з накладеними на ній правилами вебінару - *обов'язкове поле
</label>
</div>
</form>
</div>
<script>
document.addEventListener('livewire:init', () => {
Livewire.on('cartUpdated', (event) => {
window.initPhoneMasks();
});
const form = document.querySelector('.order-form');
form.addEventListener('submit', function (event) {
event.preventDefault();
// Сбор данных из формы
const formData = {
name: form.querySelector('#name').value,
surname: form.querySelector('#surname').value,
phone: form.querySelector('#phone').value,
email: form.querySelector('#email').value,
};
// Отправка данных через Livewire
@this.dispatch('formOrder', { formData: formData });
});
Livewire.on('redirectToPayment', () => {
form.submit(); // Исправлено для вызова как функции
});
})
</script>