Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Torgsoft+Opencart3+Glovo


andreyegorov1987

Recommended Posts

Тему создал для себя, что бы не забыть наработки может кому и пригодится, синхронизация с торгсофтом, все нюансы которые мне приходится решать, может кто-то присоединится

Надіслати
Поділитися на інших сайтах


Инструкция автоматической выгрузки заказов в Torgsoft с Opencart.

-------------------------------------------------------------------------------------------------------------

orders.php (сохраняем выгруженный файл XML с форматом торгсофта по их спецификации)

-----------------------------------------------------------------------------------------------------------

<?php
// настройки подключения к базе данных
$db_hostname = 'localhost';
$db_username = 'пользователь';
$db_password = 'пароль к базе';
$db_database = 'база данных';
$db_prefix = 'oc_'; // префикс таблиц базы данных

// получаем данные о заказе из базы данных
$db = new mysqli($db_hostname, $db_username, $db_password, $db_database);
if ($db->connect_error) {
    die('Ошибка подключения к базе данных: ' . $db->connect_error);
}
$sql = "SELECT * FROM `" . $db_prefix . "order` ORDER BY `order_id` DESC LIMIT 1";
$result = $db->query($sql);

if (!$result) {
    die('Ошибка запроса к базе данных: ' . $db->error);
}

if ($result->num_rows == 0) {
    echo "Заказы не найдены в базе данных";
} else {
    // Обрабатываем все заказы, полученные из запроса SQL
      while ($order_data = $result->fetch_assoc()) {
        // Получаем данные о товарах из таблицы `oc_order_product`
        $sql = "SELECT * FROM `" . $db_prefix . "order_product` WHERE order_id = " . $order_data['order_id'];
        $product_result = $db->query($sql);

        // формируем XML-документ для каждого заказа
        $xml = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><Order></Order>');
        $client = $xml->addChild('Client');
        $client->addChild('Name', $order_data['firstname'] . ' ' . $order_data['lastname']);
        $client->addChild('MPhone', $order_data['telephone']);
        $client->addChild('CPhone', $order_data['fax']);
        $client->addChild('ZIP', $order_data['postcode']);
        $client->addChild('Country', $order_data['payment_country']);
        $client->addChild('Region', $order_data['payment_zone']);
        $client->addChild('City', $order_data['payment_city']);
        $client->addChild('Address', $order_data['payment_address_1'] . ' ' . $order_data['payment_address_2']);
        $client->addChild('EMail', $order_data['email']);

        $options = $xml->addChild('Options');
        $options->addChild('SaleType', 1);
        $options->addChild('Comment', $order_data['comment']);
        $options->addChild('OrderNumber', $order_data['order_id']);
        $options->addChild('DeliveryCondition', $order_data['shipping_method']);
        $options->addChild('ReserveDate', date('Ymd', strtotime($order_data['date_added'])));
        $options->addChild('BonusPay', $order_data['reward']);
        $options->addChild('OrderDate', $order_data['date_added']);
        $options->addChild('CurrencyInternationalCode', $order_data['currency_code']);

        $goods = $xml->addChild('Goods');
        while ($product_data = $product_result->fetch_assoc()) {
            $good = $goods->addChild('Good_' . ($product_data['product_id']));
            $good->addChild('GoodID', $product_data['model']);
            $good->addChild('Price', $product_data['price']);
            $good->addChild('Count', $product_data['quantity']);
        }
      
    

$xml_file = __DIR__ . '/order_' . $order_data['order_id'] . '.xml';
      }
$xml->asXML($xml_file);
$result->free_result();
$db->close();
      
 }

?>

------------------------------------------------------------------------------------------------------------------

/сайт.юа/image/catalog/torgsoft/
Копируем orders.php сюда, меняем внутри доступ

------------------------------------------------------------------------------------------------------------------

Дальше с модулем Simple меняем......

--------------------------------------------------------------------------------------------------------------

/мой_сайт.юа/catalog/controller/checkout/success.php
/storage/modification/catalog/controller/checkout/success.php

Вставляем 
require_once(DIR_IMAGE . 'catalog/torgsoft/orders.php');    
перед
$this->response->setOutput($this->load->view('common/success', $data));
В конце файла

------------------------------------------------------------------------------------------------------------

 

В итоге имеем после оформления заказа сораняется файл с заказом в каталоге с файлом импорта товаров. Заказы забираются торгсофтом после синхронизации и появляются в заказе удаленного клиента. В тогсофте обязательно не забыть выставить XML для заказов. После синхронизации торгсофт удаляет файлы заказов (безопасно)

Змінено користувачем andreyegorov1987
Надіслати
Поділитися на інших сайтах


Glovo (процесс наработки, получилось выгрузить пока на свой сфтп, на их еще не пробовал), torgsoft не может формировать первую колонку в c заданным значением, в нашем случае id  который дает GLOVO. Значит настраиваем выгрузку для каждой точки продаж по ftp к нам на сайт и пишем скрипт который будет добавлять нужный id по спецификации Glovo и отправлять на их SFTP по запросу из Torgsoft после выгрузки.

магазин.php

-----------------------------------------------------------------------------------------

<?php
// выполняем код
// путь к файлу CSV
$file_path = '/sites/мой_сайт.юа/image/catalog/torgsoft/glovo-lyst.csv';

// определение кодировки и разделителя
$handle = fopen($file_path, 'r');
$first_line = fgets($handle);
fclose($handle);
$delimiter = ','; // задайте нужный разделитель
$encoding = mb_detect_encoding($first_line, 'UTF-8, Windows-1251'); // задайте подходящую кодировку

// чтение файла и изменение содержимого
$data = array();
$row = 0;
if (($handle = fopen($file_path, 'r')) !== false) {
    while (($csv_data = fgetcsv($handle, 1000, ";")) !== false) {
        $num = count($csv_data);
        for ($c = 0; $c < $num; $c++) {
            $csv_data[$c] = mb_convert_encoding($csv_data[$c], 'UTF-8', $encoding);
        }
        if ($row == 0) { // изменение заголовка первой колонки
            $csv_data[0] = 'Новый заголовок';
        } else { // изменение значения первой колонки
            $csv_data[0] = 'Новое значение';
        }
        // замена запятой на точку в числовых значениях
        for ($c = 0; $c < $num; $c++) {
            if (is_numeric($csv_data[$c])) {
                $csv_data[$c] = str_replace(',', '.', $csv_data[$c]);
            }
        }
        $data[] = $csv_data;
        $row++;
    }
    fclose($handle);
}

// сохранение файла с новым разделителем
$file_name = 'new_file_'.date('Ymd_Hi_s').'.csv';
$file_path = '/sites/мой_сайт.юа/image/catalog/torgsoft/'.$file_name;
$handle = fopen($file_path, 'w');
foreach ($data as $csv_data) {
    $line = implode($delimiter, $csv_data) . "\n";
    fwrite($handle, $line);
}
fclose($handle);

// отправка файла по SFTP
$sftp_server = 'глово_сфтп';
$sftp_username = 'логин';
$sftp_password = 'пароль';
$sftp_path = 'путь_кототый они дают' . $file_name;
$local_path = $file_path;

$connection = ssh2_connect($sftp_server);
ssh2_auth_password($connection, $sftp_username, $sftp_password);
$sftp = ssh2_sftp($connection);

$stream = fopen("ssh2.sftp://{$sftp}{$sftp_path}", 'w');

if ($stream) {
    $contents = file_get_contents($local_path);
    fwrite($stream, $contents);
    fclose($stream);
    echo "Файл успешно загружен на SFTP сервер\n";
    unlink($local_path);
}
else {
    echo "Ошибка загрузки файла на SFTP сервер\n";
}
 

Змінено користувачем andreyegorov1987
Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.