Объект msOrderAddress содержит некорректные данные покупателя
Здравствуйте!
Дано:
MODX Revo 2.7.1
Minishop2 обновленный с версии 2.4.18 до 4.3.0 без промежуточных обновлений. Старые handler'ы удалены.
Модуль оплаты PayKeeper из репозитория modx.com
Как таковой регистрации на сайте нет. При оформлении заказа в корзине есть поля ФИО, email, телефон.
Проблема: при формировании линка на оплату в качестве ФИО передаются какие-то рандомные данные, которые вытягиваются из БД пользователей. Не то, что введено в соответствующее поле.
Пробовал заполнять и авторизованным и в качестве гостя. Указывал каждый раз разные разные данные — новый пользователь нормально создаются, но в линк передается какой-то другое имя.
Фрагмент кода из модуля:
Дано:
MODX Revo 2.7.1
Minishop2 обновленный с версии 2.4.18 до 4.3.0 без промежуточных обновлений. Старые handler'ы удалены.
Модуль оплаты PayKeeper из репозитория modx.com
Как таковой регистрации на сайте нет. При оформлении заказа в корзине есть поля ФИО, email, телефон.
Проблема: при формировании линка на оплату в качестве ФИО передаются какие-то рандомные данные, которые вытягиваются из БД пользователей. Не то, что введено в соответствующее поле.
Пробовал заполнять и авторизованным и в качестве гостя. Указывал каждый раз разные разные данные — новый пользователь нормально создаются, но в линк передается какой-то другое имя.
Фрагмент кода из модуля:
private function setOrder(msOrder $order) {
$order_id = $order->get('id');
$order_total = floatval($order->get('cost'));
$user = $this->modx->getObject('msOrderAddress', $order_id);
$user_id = $order->user_id;
$objProfile = $this->modx->getObject('modUserProfile', $user_id);
$client_email = '';
if ($objProfile) {
$client_email = $objProfile->get('email');
}
$this->order = array(
'order' => $order,
'clientid' => $user->receiver,
'orderid' => $order_id,
'service_name' => '',
'order_total' => $order_total,
'client_id' => $user->user_id,
'client_email' => $client_email,
'client_phone' => $user->phone,
);
}Если я отправляю в логи содержимое объекта $user, то там:array (
'id' => 510, // ID заказа
'order_id' => 502, // не знаю что за ID
'user_id' => 200, // существующий юзер, но связи с введенными данными нет, далее данные этого юзера, а не покупателя
'createdon' => '2024-07-21 01:00:44',
'updatedon' => NULL,
'receiver' => 'Asdaasd',
'phone' => '+7123123-12-31',
'email' => 'email@email.email',
'country' => NULL,
'index' => '',
'region' => '',
'city' => '',
'metro' => NULL,
'street' => '',
'building' => '',
'entrance' => NULL,
'floor' => NULL,
'room' => '',
'comment' => '',
'text_address' => NULL,
'properties' => NULL,
), Комментарии: 21
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Идеи есть, куда копать, как разобраться?
Кстати, в объекте $user если смотреть данные вложенных объектов (modRequest, msProductRemains), то там данные покупателя корректные.
При этом в админке если проверять заказ, то там данные верны (имя записывает то, что указано, если почта уникальный — создается новый пользователь, если почта уже есть в базе, то цепляется к существующему пользователю).
Как так происходит не понимаю…
В логах проскакивают ошибки и notice, но они связаны с другими страницами, модулями и возникают совершенно в другие временные эпизоды.
проверил эти два метода — там всё ок.
Отложил процесс покупки, проблема именно в получении объекта
Проверил на заранее уже существующем заказе в консоли и получил вообще другие заказ.
То есть я запросил данные заказа 523, а мне вернулся заказ 515.
Что за id и order_id?
id — идентификатор адреса
идентификатор адреса — что-то странное, не очень понял где и как он используется… Но получается, что проблема в модуле, неправильно там написан запрос, оттуда и вся возня на два дня… (
было
сделал
Сам нарывался на это, нужно было в файле минишопа закомментить пару строк, но в каком — сейчас не вспомню. Может, опытные товарищи подскажут?
Возможно, этот момент уже пофиксил в новых версиях минишопа, не знаю… но раньше точно была такая проблема
Бывает, что уникальным полем для регистрации пользователя служит телефон, для этого случая — как вариант — можно добавить в настройки минишопа опцию, которая включает поиск зарегистрированного юзера по номеру телефона из формы заказа.
Добавь. miniShop2 это проект с открытым исходным кодом. Пришли PR и всё появится.