Добрый день.
Где лучше в плагине сделать/добавить наценку стоимости заказа. Пробовал добавить в интеграции к платёжной системе, но стоит также проверка платежа и на этом этапе выдаёт ошибку (якобы заказа не был оплачен, хотя все в норме, платеж прошёл, клиент получил билеты), скорее всего из за того что суммы разные получаются по итогам.
Интересует более правильный подход к данной проблеме. Думаю данный вопрос заинтересует многих пользователей данного плагина.
Заранее большое спасибо.
если вы уже внесли изменения в порядок формирования корзины и выводите эту информацию, то также сможете пересчитать общую стоимость прибавляя размер сбора и в момент сохранения данных заказа в БД соответственно потребуется увеличить стоимость заказа на эту сумму, тогда при проведении оплаты стоимость заказа будет биться с размером оплаты и проблем возникать не должно
Сделал вот так:
$percent = get_post_meta( $post_id, 'collection', true ); $args = apply_filters('evpl_pre_insert_order', array( 'user_data' => $this->user_data, 'order_price' => $this->cart->price*$percent, 'place_amount' => $this->cart->amount, 'order_details' => serialize($this->details), 'order_date' => current_time('mysql'), 'order_status' => $order_status, 'order_hash' => md5(current_time('mysql')) ));
На странице мероприятия, показывается значение из таблицы, но в сам фильтр не добавляется...
add_filter('evpl_pre_insert_order', 'my_evpl_pre_insert_order'); function my_evpl_pre_insert_order($data){ $post = get_post(); $percent = get_post_meta( $post_id, 'collection', true ); $data['order_price'] = $data['order_price'] *$percent; return $data; }
При оформлении заказа, получается сумма 0 рублей.
Заказ еще не создан, не понятно к какому именно мероприятию данные отнести, поэтому придется работать с данными корзины пользователей:
add_filter('evpl_pre_insert_order', 'my_evpl_pre_insert_order'); function my_evpl_pre_insert_order($data){ $cartData = evpl_get_cart_data(); if(!$cartData) return $data; foreach($this->cart->places as $event_id => $date_places){ if(!$date_places) continue; $percent = get_post_meta( $event_id, 'collection', 1 ); if(!$percent) continue; $data['order_price'] *= $percent; } return $data; }
не совсем уверен насчет порядка увеличения стоимости заказа, возможно вместо умножения надо использовать сложение, но это уже вам решать, логику можете изменить и сами
поправил код
add_filter('evpl_pre_insert_order', 'my_evpl_pre_insert_order'); function my_evpl_pre_insert_order($data){ $cartData = evpl_get_cart_data(); if(!$cartData) return $data; foreach($cartData->places as $event_id => $date_places){ if(!$date_places) continue; $percent = get_post_meta( $event_id, 'collection', 1 ); if(!$percent) continue; $data['order_price'] *= $percent; } return $data; }
потому что в каждом последующем мероприятии общая стоимость увеличивается на процент указанный для этого мероприятия, т.е. увеличение неравномерное. Допустим стоимость заказа 100р. первое мероприятие увеличит его на 10 процентов, станет 110, а второе уже 110 будет увеличивать на 10 процентов и станет 121 и так далее. Надо вносить коррективы в логику увеличения, а именно в строку
$data['order_price'] *= $percent;