Unisender экспорт контаков OpenCart 1.5.x, 2.0.x по крону

Сам модуль экспорта написан пользователем toporchillo и на момент написания статьи доступен на opencartforum.com

Клиентом была поставлена задача выполнять экспорт базы email в unisender не каждый раз при добавлении нового клиента, как делает указанный модуль, а по крону раз в неделю. Так как на клиентском сайте в принципе отсутствует регистрация пользователей, то такой подход вполне логичен. В общем был написан небольшой класс, который использует настройки модуля toporchillo и выполняет экспорт контактов из заказов за прошедшую неделю. Vqmod модуля был отключен за ненадобностью.Исходный код файла unisender.php (расположен в catalog/cron/unisender)

<?php

/**
 * Class ControllerCronUnisender
 * @author sfonclub@gmail.com
 * @date 15.10.2015
 * класс собирает по крону email адреса из заказов за последнюю неделю и отправляет их в unisender
 */
class ControllerCronUnisender extends Controller {

	public function index() {
		$orders = $this->getLastWeekOrders();

        $this->subscribe($orders);
        exit;
	}

    /**
     * @return mixed
     * метод получает список заказов за последнюю неделю
     */
    public function getLastWeekOrders() {
        $sql = "SELECT o.email, CONCAT(o.firstname, ' ', o.lastname) AS customer, o.ip FROM `" . DB_PREFIX . "order` o WHERE o.order_status_id > '-1' AND DATE(o.date_added) between date_sub(now(),INTERVAL 1 WEEK) and now() ORDER BY o.order_id DESC";

        $query = $this->db->query($sql);

        return $query->rows;
    }

    /**
     * @param $data
     * метод выполняет импорт контактов в unisender
     */
    public function subscribe($data) {
        $api_key = $this->config->get('unisender_key');
        if (!$this->config->get('unisender_status') || !$api_key) return;

        // Список, куда их добавить
        $list = $this->config->get('unisender_subscribtion');

        // Создаём POST-запрос
        $POST = array (
            'api_key' => $api_key,
            'double_optin' => 1,
            'field_names[0]' => 'email',
            'field_names[1]' => 'Name',
            'field_names[2]' => 'email_list_ids',
            'field_names[3]' => 'email_request_ip',
            'field_names[4]' => 'email_confirm_ip',
            'field_names[5]' => 'email_add_time',
            'field_names[6]' => 'email_confirm_time'
        );

        // Новые подписчики
        $i = 0;
        $emails = array();
        foreach($data as $d){
            if(empty($d['email']) or !(filter_var($d['email'], FILTER_VALIDATE_EMAIL)) or in_array($d['email'], $emails))
                continue;

            $POST['data[' . $i .'][0]'] = $d['email'];
            $POST['data[' . $i .'][1]'] =  $d['customer'];
            $POST['data[' . $i .'][2]'] = implode(',', $list);
            $POST['data[' . $i .'][3]'] =  $d['ip'];
            $POST['data[' . $i .'][4]'] =  $d['ip'];
            $POST['data[' . $i .'][5]'] =  gmdate('Y-m-d h:i:s', time()-200);
            $POST['data[' . $i .'][6]'] =  gmdate('Y-m-d h:i:s', time()-10);
            $emails[] = $d['email'];
            $i++;
        }

        // Устанавливаем соединение
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $POST);
        curl_setopt($ch, CURLOPT_TIMEOUT, 10);
        curl_setopt($ch, CURLOPT_URL,
            'http://api.unisender.com/ru/api/importContacts?format=json');
        $result = curl_exec($ch);

        if ($result) {
            // Раскодируем ответ API-сервера
            $jsonObj = json_decode($result);

            if(null===$jsonObj) {
                // Ошибка в полученном ответе
                echo "Invalid JSON";

            }
            elseif(!empty($jsonObj->error)) {
                // Ошибка импорта
                echo "An error occured: " . $jsonObj->error . "(code: " . $jsonObj->code . ")";

            } else {
                // Новые подписчики успешно добавлены
                echo "Success! Added " . $jsonObj->result->new_emails . " new e-mail addresses";

            }
        } else {
            // Ошибка соединения с API-сервером
            echo "API access error";
        }

    }

}

Запускается крон по ссылке вашсайт.ру/index.php?route=cron/unisender

На всякий случай архивы с оригинальным модулем прикладываю

P.s. мой класс написан для opencart 1.5, на версии 2 не проверял 😉

Cron Unisender
Cron Unisender
cron_unisender.zip
1.8 KiB
62 Downloads
Детали...
Unisender 1.0-oc1.5 X
Unisender 1.0-oc1.5 X
unisender_1.0-oc1.5.x.zip
12.1 KiB
63 Downloads
Детали...
Unisender 1.0-oc2.0 X
Unisender 1.0-oc2.0 X
unisender_1.0-oc2.0.x.zip
10.0 KiB
67 Downloads
Детали...
This entry was posted in Opencart and tagged , , . Bookmark the permalink.

2 комментария: Unisender экспорт контаков OpenCart 1.5.x, 2.0.x по крону

  1. Дмитрий:

    Добрый день! Пытаюсь приделать ваш скрипт для opencart 2.3
    но упёрся в первую же ошибку. уже на строке class ControllerCronUnisender extends Controller
    выдаётся error 500 PHP Fatal error: Class ‘Controller’ not found

    Ума не приложу что за ерунда!

Добавить комментарий для Дмитрий Отменить ответ

Ваш адрес email не будет опубликован.

*