Добавляю Заказы в miniShop из моб. приложения

Задача: из мобильного приложения на Android & iOS нужно создавать заказы,
но только не из браузера…
HTML5 тоже нельзя — клиент захотел довольно сложное приложение.
По документации не понял как это можно сделать, пришлось изучать исходники…
В общем первый вариант. Надеюсь кому-то будет интересно.
Код сокращенный, но рабочий.
В корне сайта лежит файл mobreq.php (код ниже)
API для отправки СМС отключил. (пока не публикую — хочу сделать дополнение для Российского оператора)
Обращаюсь просто запросом sitename.ru/mobreq.php?список_параметров
В мобильном приложении к базе лезу через MySQL напрямую к таблицам, но только по чтению.
На следующем шаге хочу сделать доступ и аутентификацию через RESTfull API — напрямую к таблицам не красиво…
Если кто хочет помочь с REST — буду благодарен. Много вариантов перекопал, но пока ни на чем не остановился.

Часть кода взял из плагина miniShop2. Спасибо Василию :)

<?php
define('MODX_API_MODE', true);
require 'index.php';
function logsms($msg='')
{
    echo $msg."\n";
    $open_file=fopen('insms.txt','a+');
    fwrite($open_file,  $msg."\n");
    fclose($open_file);    
}

// Включаем обработку ошибок
$is_debug=false;  //   true  для отладки. запускаем из браузера и все получаем на экране
$modx->getService('error','error.modError');
$modx->setLogLevel($is_debug ? modX::LOG_LEVEL_INFO : modX::LOG_LEVEL_ERROR);
$modx->setLogTarget(XPDO_CLI_MODE ? 'ECHO' : 'HTML');
$modx->error->message = null; // Обнуляем переменную

$modx->log(modX::LOG_LEVEL_INFO, 'Начали');

// Логинимся в moxd в контексте web                
$modx->initialize('web');

$pdo = $modx->getService('pdoTools');
$corePath = $modx->getOption('core_path');
//require_once $corePath.'components/sms/sms_api.php';

$id = isset($_POST['id']) ? $_POST['id'] : 'not defined';
$sms_id = isset($_POST['sms_id']) ? $_POST['sms_id'] : 'not defined';
$phone = isset($_POST['phone']) ? $_POST['phone'] : '+79210000000';
$mes = isset($_POST['mes']) ? $_POST['mes'] : 'zf: ,0,1,2,3,Адрес доставки,12.30,10.10.2014,1,1';
$to = isset($_POST['to']) ? $_POST['to'] : 'not defined';
$sent = isset($_POST['sent']) ? $_POST['sent'] : 'not defined';
$time = isset($_POST['time']) ? $_POST['time'] : 'not defined';
$md5 = isset($_POST['md5']) ? $_POST['md5'] : 'not defined';
// Проверяю  на $md5 == md5($phone.':'.$mes.':'......':'.$SecretToken); От шальных, залётных...
// Если нет - уходим...
$varDoc=implode('#',array($id,$sms_id,$mes,$to,$sent,$time,$md5));
logsms($varDoc);  // Сохраняю запрос в лог
$modx->log(modX::LOG_LEVEL_INFO, 'implode '.var_dump($varDoc));

$z=explode(',',$mes);           //  Распаковываем запрос
$did=isset($z[8]) ? $z[8]:'1';  //  Вид доставки для простоты 1 по умолчанию
$pid=isset($z[9]) ? $z[9]:'1';  //  Вид оплаты для простоты 1 по умолчанию
$scriptProperties =array('');
$miniShop2 = $modx->getService('minishop2','miniShop2',
    $corePath . 'components/minishop2/model/minishop2/', $scriptProperties);

if (!($miniShop2 instanceof miniShop2)) {
    $modx->log(modX::LOG_LEVEL_ERROR, 'not instanceof miniShop2');
    logsms('not instanceof miniShop2');
    return '';
}
// Инициализируем класс в текущий контекст

$miniShop2->initialize('web', $scriptProperties);
$response = $modx->runProcessor('security/login', array('username' => 'username', 'password' => 'password', 'login_context'=>'web'));
if ($response->isError()) {
    $modx->log(modX::LOG_LEVEL_ERROR, $response->getMessage());
    return;
}

//Сброс заказа
$tmp = $miniShop2->order->clean();

//Очистка корзины
$tmp = $miniShop2->cart->clean;

$miniShop2->cart->add(66,$z[2]); // Добавляем товар с id = 66  кол-во в $z[2]
$miniShop2->cart->add(67,$z[3]); // Добавляем товар с id = 67  кол-во в $z[3]
$miniShop2->cart->add(68,$z[4]); // Добавляем товар с id = 68  кол-во в $z[4]

if (!$modx->loadClass('pdofetch', $corePath . 'components/pdotools/model/pdotools/', false, true)) {return false;}

$pdoFetch = new pdoFetch($modx, $scriptProperties);
$modx->log(modX::LOG_LEVEL_INFO, 'pdoTools loaded.');  // А вдруг понадобится...

$cart = $miniShop2->cart->get();
$status = $miniShop2->cart->status();
$order = $miniShop2->order->get();

if (empty($status['total_count'])) {
    $modx->log(modX::LOG_LEVEL_INFO, 'Пусто в корзине - выходим');
    return '';
}
$miniShop2->order->add('delivery', $did);
$miniShop2->order->add('payment', $pid);
$order_cost = $miniShop2->order->getcost();

// Setting user fields
if ($isAuthenticated = $modx->user->isAuthenticated()) {
    $profile = $modx->user->Profile->toArray();
    $modx->log(modX::LOG_LEVEL_INFO,'user->Profile->toArray');
    // Несмотря на вход в MODX почему-то $isAuthenticated=false  !!!!!!!!!!!!
    // Придется разбираться...
}
$user_fields = array(
    'receiver' => 'fullname',
    'phone' => 'phone',
    'email' => 'email',
    'comment' => 'extended[comment]',
    'index' => 'zip',
    'country' => 'country',
    'region' => 'state',
    'city' => 'city',
    'street' => 'address',
    'building' => 'extended[building]',
    'room' => 'extended[room]',
);
$modx->log(modX::LOG_LEVEL_INFO,'Заполняем поля заказа');
foreach ($user_fields as $key => $value) {
    if (!empty($profile) && !empty($value)) {
        if (strpos($value, 'extended') !== false) {
            $tmp = substr($value, 9, -1);
            $value = !empty($profile['extended'][$tmp])
            ? $profile['extended'][$tmp]
            : '';
        }
        else {
            $value = $profile[$value];
        }
        $tmp = $miniShop2->order->add($key, $value);
        if ($tmp['success'] && !empty($tmp['data'][$key])) {
            $modx->log(modX::LOG_LEVEL_INFO,"success order/add $key : $value");
        }
    }
    if (!empty($order[$key])) {
        $modx->log(modX::LOG_LEVEL_INFO,"order $key = $value");
        //     unset($order[$key]);
    }
}
$tmp = $miniShop2->order->add('receiver', 'Дмитрий');
$tmp = $miniShop2->order->add('phone', $phone);
$tmp = $miniShop2->order->add('email', 'admin@dm64.ru');
$tmp = $miniShop2->order->add('street', $z[5]);
$tmp = $miniShop2->order->add('comment',  $z[6].' '.$z[7]);

//$varDoc="Заказ принят. 0.5:$z[2] 1.25:$z[3] 5:$z[4] адр:$z[5], время:$z[6], дата:$z[7]";
//$m=send_sms($phone,$varDoc,$z[1],0,0,0,'ZF');   СМС посылаем в plugin sendsms (на msOnChangeOrderStatus)
$miniShop2->order->submit();

// Получаю ошибку "Attempted to redirect to an empty URL."
// Разберусь потом
Дмитрий Мирошкин
10 октября 2014, 13:30
modx.pro
4
3 515
0

Комментарии: 1

Georgiy Trokovets
14 апреля 2016, 12:30
0
Интересно поработать в данном направлении :-)
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    1