Не очищает корзину функция fn_order_placement_routines

Код обработчика

$response_service = ServiceProvider::getResponseService();
$receipt_service = ServiceProvider::getReceiptService();
$order_service = ServiceProvider::getOrderService();

if ($mode === ‘check_payment’) {
$response = file_get_contents(‘php://input’);
$metadata = $response_service->getMetadataFromNotification($response); // номер заказа
$status = $response_service->getStatusFromNotification($response); // статус платежа
$payment_id = $response_service->getPaymentIdFromNotification($response); // id платежа

if($status=‘succeeded’) {
fn_update_order_payment_info($metadata[‘order_id’], [‘payment_id’ => $payment_id ]); // делает id платежа в заказе
fn_update_order_payment_info($metadata[‘order_id’], [‘status’ => ‘Успешно’]); //статус платежа
fn_update_order_payment_info($metadata[‘order_id’], [‘yandex_checkout.notification_received’ => __(‘yes’)]); //ответ платёжной системы
fn_change_order_status($metadata[‘order_id’], ‘C’); // статус в обработке
$order_info = fn_get_order_info($metadata[‘order_id’]);
fn_order_placement_routines(‘route’, $order_info[‘order_id’], false); //завершение платежа

в конце функция должна очищать корзину, но не очищает
непонятно почему, кто нибудь может подсказать ?

Она у вас в коллбэке вызывается или при редиректе пользователя обратно в магазин?

редирект

Пользователя не разлогинивает при этом?

нет не разлогиниваются

Тогда пока идей нет. Надо на месте смотреть

P.S. А пользователь куда в итоге возвращается - на страницу оформления заказа или на детальную страницу заказа?

возвращается как положено на страницу завершения
dispatch=checkout.complete
после разбора полётов выяснилось, не убирается только товар который в корзине последний,
По дебагу при вызове функции fn_order_placement_routines, неправильно определяется session_id из за этого корзина не очищается

1 лайк

Дело в сессиях, после ответа юкассы номер сессии не возвращается

сделал простой костыль db_query(“DELETE FROM ?:user_session_products WHERE order_id=’”.$metadata[‘order_id’]."’");

fn_order_placement_routines убрал

теперь очищает без сессии по номеру заказа