Регистрация
Вход через соцсети
Восстановление пароля

РЕШЕНО! Ошибка при оформлении заказа после смены метода рассылки

Новый топик
Страницы: 1  |  2
31.03.2015, 21:33
Ответить | Цитировать
Alex

Зарегистрирован:
2015-03-16
Сообщений: 59

Народ, приветствую Вас!

Ситуация такова, если использовать в "Настройках системы"->"Вид транспорта: Автоматически", то оформление заказа проходит. НО, с этим пунктом не приходят письма после регистрации.

Если использовать "Вид транспорта: Использовать SMTP", то получаем ошибку "Ошибка кода в поле «Действие после добавления объекта» компонента.", сам код в компоненте "Заказ":
Код:

<?php

$order->set_id($msgID);
$order->offsetUnset('SignUp');
$email = $order['Email'];

if (!$AUTH_USER_ID) {
if (!isset($_SESSION['user_hash'])) {
$_SESSION['user_hash'] = md5((mt_rand(1, 1000) * mt_rand(1, 100) + mt_rand(1, 10000)) / mt_rand(1, 10));
}
$order->set('user_hash', $_SESSION['user_hash']);

if ($nc_core->input->fetch_post('f_SignUp')) {
$user_id = 0;

if ($nc_core->user->check_login($email) == NC_AUTH_LOGIN_OK) {
$alphabet = "abcdefghijklmnopqrstuvwxyz0123456789";
$length = strlen($alphabet);
$password = '';

for ($i = 0; $i < 8; $i++) {
$password .= $alphabet[mt_rand(0, $length - 1)];
}

$registration_code = md5(uniqid('', true));

try {
$user_id = $nc_core->user->add(array(
'Email' => $email,
'Login' => $email,
), 2, $password, array(
'Checked' => 0,
), $registration_code);
} catch (Exception $e) {

}
}

if ($user_id) {
$order->set('User_ID', $user_id);

$auth_settings = $nc_core->get_settings('', 'auth');
$system_settings = $nc_core->get_settings('', 'auth');
$mailer = new CMIMEMail();

$mailinfo = $nc_auth->get_confirm_mail($user_id, $password);
$mail_body = nc_mail_attachment_attach($mailer, $mailinfo['body'], 'auth_confirm_' . $catalogue);
$mailer->mailbody(strip_tags($mail_body), $mailinfo['html'] ? $mail_body : "");
$mailer->send($email, $system_settings['SpamFromEmail'], $system_settings['SpamFromEmail'], $mailinfo['subject'], $system_settings['SpamFromName']);
}
}
}

$netshop->place_order($order);

$payment_method = new nc_netshop_payment_method($order['PaymentMethod']);
$payment_system_id = $payment_method['handler_id'];

$invoice = null;
if ($payment_system_id) {
$invoice = new nc_payment_invoice(array(
"payment_system_id" => $payment_system_id,
"amount" => $order->get_totals(),
"description" => "Оплата заказа $msgID",
"currency" => $netshop->get_currency_code(),
"customer_id" => $AUTH_USER_ID,
"customer_name" => (string)$f_ContactName,
"customer_email" => (string)$f_Email,
"customer_phone" => (string)$f_Phone,
"order_source" => 'netshop',
"order_id" => $msgID,
));
$invoice->save();
}

while (ob_end_clean()) ;

if ($isNaked) {
echo 'OK';
} else {
// Переадресация
header("Location: {$nc_core->SUB_FOLDER}/orders/added" . ($invoice ? ("?invoice=" . $invoice->get('id')) : ""));
}

exit;


С данным пунктом письма после регистрации приходят, но заказ не оформляется из-за ошибки.

Как быть, как исправить так, чтобы с SMTP заказы оформлялись и не было ошибок?

Заранее благодарен.
02.04.2015, 03:07
Ответить | Цитировать
Alex

Зарегистрирован:
2015-03-16
Сообщений: 59

Народ, что у никого такого не было?
04.04.2015, 14:10
Ответить | Цитировать
Руслан Густокашин
Студия Вэлпис
Руслан Густокашин

Зарегистрирован:
2012-02-06
Сообщений: 869

Думаю, что вряд ли у кого-то такое было. Вероятнее всего, какая-то несовместимость с хостингом и нужно немного подправить либо приведенный вами код, либо задать индивидуальные настройки SMTP в настройках CMS.
Без отладки и просмотра error-log файлов сервера, думаю, вопрос разрешить не получится.
Какой, кстати, хостинг-то? С некоторыми хостерами мне пришлось серьезно пободаться с отправкой писем, и можно с уверенностью сказать, что проблема ваша решаемая, но без отладки и логов разобраться нереально. Если так и не разберетесь - пишите, что-нибудь сообразим.

04.04.2015, 14:21
Ответить | Цитировать
Alex

Зарегистрирован:
2015-03-16
Сообщений: 59

Цитата:
Думаю, что вряд ли у кого-то такое было. Вероятнее всего, какая-то несовместимость с хостингом и нужно немного подправить либо приведенный вами код, либо задать индивидуальные настройки SMTP в настройках CMS.
Без отладки и просмотра error-log файлов сервера, думаю, вопрос разрешить не получится.
Какой, кстати, хостинг-то? С некоторыми хостерами мне пришлось серьезно пободаться с отправкой писем, и можно с уверенностью сказать, что проблема ваша решаемая, но без отладки и логов разобраться нереально. Если так и не разберетесь - пишите, что-нибудь сообразим.


Если закомментировать в коде строку "$netshop->place_order($order);", то заказ проходит, письма о заказе не отправляется,в корзине как был товар так и остался, не удалился после оформления и в "Моих заказах" пустые данные.
04.04.2015, 14:38
Ответить | Цитировать
Руслан Густокашин
Студия Вэлпис
Руслан Густокашин

Зарегистрирован:
2012-02-06
Сообщений: 869

Тогда код компонента не виноват. То, что вы описали - это совершенно правильное поведение системы, если закомментировать place_order, так как именно этот метод перекидывает заказанные товары из корзины в базу данных и отправляет письмо менеджера и покупателю.
Версий остается тогда две:
1. Некорректный емайл либо в настройках системы (меню Настройки - настройки системы), либо в настройках модуля "Интернет-магазин" (емайл, с которого отправляются письма и емайл для оповещения менеджеров), либо в самой форме заказа указываете какой-то "левый" емайл, приводящий систему в ступор.
Постарайтесь обойтись без перечисления нескольких емайлов в одном емайл-поле, тк. некоторые версии netcat падали, если вместо одного адреса "для оповещений" указать несколько адресов через запятую.
2. Возможно, хостеру не нравятся используемая неткатом методика отправки писем, тогда вам надо переключить систему на использование sendmail, указав какие-то параметры, которые понравятся именно вашему хостеру. Например, если у вас хостер Infobox, то мне удалось заставить отправляться письма вот с такими параметрами:
/usr/sbin/sendmail -t -i -f почта@вашейфирмы.ru
Некоторые хостеры требуют и вовсе smtp-авторизацию. Она предусмотрена только в новых версиях netcat.

04.04.2015, 14:51
Ответить | Цитировать
Alex

Зарегистрирован:
2015-03-16
Сообщений: 59

Оставил вариант "Автоматически", выставил везде и в настройках системы и в модуле магазина правильные email, в модуле установил при каких действиях отправлять письма. Письмо о заказе приходит, о регистрации нет.
При оформлении заказа, если юзер не зарегестрирован, нажимаем галочку зарегистрироваться, но после оформления заказа, письмо не приходит. Из-за чего письмо о регистрации не доходит? Если письмо о заказе доходит.
Сам пользователь после оформления заказа создается в системе, но письмо не приходит.

Кстати после простой регистрации письмо приходит.
04.04.2015, 15:08
Ответить | Цитировать
Руслан Густокашин
Студия Вэлпис
Руслан Густокашин

Зарегистрирован:
2012-02-06
Сообщений: 869

Вероятнее всего, вы не настроили должным образом письмо о заказе с регистрацией, вот здесь: http://prntscr.com/6peqx9

04.04.2015, 15:13
Ответить | Цитировать
Alex

Зарегистрирован:
2015-03-16
Сообщений: 59

Цитата:
Вероятнее всего, вы не настроили должным образом письмо о заказе с регистрацией, вот здесь: http://prntscr.com/6peqx9


Как раз здесь я и произвел настройку и нажал на галочку и сохранил, а письмо так и не пришло.
04.04.2015, 15:31
Ответить | Цитировать
Руслан Густокашин
Студия Вэлпис
Руслан Густокашин

Зарегистрирован:
2012-02-06
Сообщений: 869

А в список пользователей новый юзер добавляется?
Есть вероятность, что вы пытаетесь добавить "нового" юзера, а такой в системе уже есть, вот и не отправляется письмо.

04.04.2015, 15:41
Ответить | Цитировать
Alex

Зарегистрирован:
2015-03-16
Сообщений: 59

Цитата:
А в список пользователей новый юзер добавляется?
Есть вероятность, что вы пытаетесь добавить "нового" юзера, а такой в системе уже есть, вот и не отправляется письмо.

В список пользователей новый юзер добавляется, а письмо не приходит.
Юзер новый абсолютно со всеми данными.
04.04.2015, 17:06
Ответить | Цитировать
Руслан Густокашин
Студия Вэлпис
Руслан Густокашин

Зарегистрирован:
2012-02-06
Сообщений: 869

Тогда проверьте непосредственно перед send'ом в действии после добавления заказа значение переменной $mail_body - оно должно содержать текст письма в html-формате.
Если с телом письма все ОК, тогда попробуйте в $mailer->send в скобках указать не переменные, а конкретные строковые значения в соответствии с документацией: http://netcat.ru/developers/docs/tools/cmimemail/
Заодно узнаете, доходит ли у вас вообще дело до секции "if ($user_id) {".

Пожалуйста, попробуйте сами поэкспериментировать - выводите в разных местах отладочную информацию, содержимое переменных на экран или в лог-файл, проверяйте error-log апачи, и так далее.
Иначе так можно очень долго переписываться и строить предположения о том, что является причиной сбоя.
В случае, если задача отладки php-кода затруднительна для Вас, эффективнее будет обратиться за помощью либо в техподдержку Неткэт (если время позволяет и техподдержка лицензии оплачена), либо к какому-либо Netcat-программисту (если время поджимает и есть возможность оплатить его услуги).

198 196 2015-04-05 13:27:08 14089
Страницы: 1  |  2
Описание проекта