25.09.2017 10:56
В браузере - захожу в ЛК, авторизируюсь средствами браузера, потом спокойно получаю данные.
Но вот никак не получается авторизироваться "автоматически"!
В каком формате надо запихивать в POST логин/пароль?
SQL код:
https://MyLogin:MyParol@test-org.1-ofd.ru/api/kkms 
В таком виде не получилось
Как надо?
25.09.2017 10:59
И не должно получиться, это не FTP, где такой формат.
Где описание API есть?
25.09.2017 11:24
1-ofd API base_manual_10.03.2017_noauth.doc.7z
закачал в хранилище, но не нашел куда
Нашел!
/supermag/upload/2017/
25.09.2017 11:29
В этой доке нет ничего про авторизацию. А по URI выше никакой авторизации не требуется.
25.09.2017 11:43
Вот потому и вопросы задаю, что нету.
А по УРЛ указанному выше - тестовая площадка 1-ОФД. И оно требует авторизацию, так же, как и "боевая". Ввожу свои логин-пароль, вхожу в ЛК, далее в строке адреса прописываю запросы из документа - получаю данные.
А хочу из кода это сделать. Да хоть php, или на Дельфях через Indy. Что-бы получить чеки от ОФД и сравнить их с чеками в ukmserver.
Миниатюры
Нажмите на изображение для увеличения
Название: для OLEGON.jpg
Просмотров: 589
Размер:	15.6 Кб
ID:	8878  
25.09.2017 12:17
Дык
Цитата:
HTTP/1.1 401 Unauthorized
обычная HTTP-авторизация...
26.09.2017 12:47
Разобрался. И вправду все несложно.
Вероятно - слишком прямолинейно, но "шлифовать" позже буду.
Это в файл test.php
Потом в консоли запускаем c:\phpukm\php.exe test.php
SQL код:
<?php
   $url = "https://test-org.1-ofd.ru/api/user/login";
   $user=array('login'=>'МойЛогин', 'password'=>'МойПароль' );   
   $ch = curl_init();     
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  
   curl_setopt($ch, CURLOPT_URL, $url);  
   curl_setopt($ch, CURLOPT_HEADER, true);
   curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/json;charset=utf-8")); 
   curl_setopt($ch,CURLOPT_POSTFIELDS,json_encode($user));
   curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
   curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); 
   curl_setopt($ch,CURLOPT_CUSTOMREQUEST,'POST');
   curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt'); // записываем куки  в файл
   curl_setopt($ch, CURLOPT_COOKIEFILE,  'cookie.txt');
   $result = curl_exec($ch);  
   $code=curl_getinfo($ch,CURLINFO_HTTP_CODE);
   print $code;
   print "\n";
   $json=json_decode($result,true);
   print_r($json);  
   curl_close($ch);  
   //***************************************************
   //в эту строку вставляем что хотим от ОФД получить
   $newurl="https://test-org.1-ofd.ru/api/kkms";
   //***************************************************
   $ch1 = curl_init($newurl);
   curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);
   curl_setopt($ch1, CURLOPT_COOKIEFILE, 'cookie.txt');
   curl_setopt($ch,CURLOPT_CUSTOMREQUEST,'GET');   
   curl_setopt($ch1, CURLOPT_SSL_VERIFYPEER, false);
   curl_setopt($ch1, CURLOPT_SSL_VERIFYHOST, false);    
   $result = curl_exec($ch1);  
   $code=curl_getinfo($ch1,CURLINFO_HTTP_CODE);
   print $code;
   print "\n";
   //в этом массиве - чеки, кассы, точки - в зависимости от того, что хотели получить
   $json=json_decode($result,true);
   print_r($json);  
   curl_close($ch1);     
?>
28.09.2017 13:01
Версия 0.9 - поставил в 2 магазина для тестов. Вывод в документ ОпенОфисКалк. Есть и в консоль, но закоментировал...
Осталось "прикрутить" междумордие по выбору кассы/номера смены, и как-то придумать, что-бы пароль был неявный...
А может вообще - на СГО в вебку этот код запихнуть, и с него раздавать по точкам полученные файлы (тогда отпадет проблема хранения логинов/паролей на точке, да и ай-дишники касс тоже можно в БД прописать и из нее брать). Но то все "свистели и п..лки".
SQL код:
<?php
   print "PODKLYUCHAYUS... \n";   
   $url = "https://org.1-ofd.ru/api/user/login";
   $user=array('login'=>'[COLOR="red"][B]МойЛогин[/B][/COLOR]', 'password'=>'[COLOR="red"][B]МойПароль[/B][/COLOR]' );   
   $ch = curl_init();     
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  
   curl_setopt($ch, CURLOPT_URL, $url);  
   curl_setopt($ch, CURLOPT_HEADER, true);
   curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/json;charset=utf-8")); 
   curl_setopt($ch,CURLOPT_POSTFIELDS,json_encode($user));
   curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
   curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); 
   curl_setopt($ch,CURLOPT_CUSTOMREQUEST,'POST');
   curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt'); // записываем куки  в файл
   curl_setopt($ch, CURLOPT_COOKIEFILE,  'cookie.txt');
   $result = curl_exec($ch);  
   print "PODKLYUCHILIS \n";
   $json=json_decode($result,true);
   //print_r($json);  
   curl_close($ch); 
   print "\n **************************************** \n";   
   $newurl="https://org.1-ofd.ru/api/kkms/[COLOR="Red"][B]АйДиКассы[/B][/COLOR]/transactions?shiftNumber=[COLOR="red"][B]НОМЕР_СМЕНЫ[/B][/COLOR]";
   print "Poluchaem cheki... \n"; 
   $ch1 = curl_init($newurl);
   curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);
   curl_setopt($ch1, CURLOPT_COOKIEFILE, 'cookie.txt');
   curl_setopt($ch1, CURLOPT_SSL_VERIFYPEER, false);
   curl_setopt($ch1, CURLOPT_SSL_VERIFYHOST, false);    
   $result = curl_exec($ch1);  
   print "Cheki ok\n";
   $obj=json_decode($result,true);
   curl_close($ch1); 
   $KolvoClose=0;
   $KolvoOpen=0;
   $KolvoProd=0;
   $KolvoProdNal=0;
   $KolvoProdKarta=0;
   $KolvoVz=0;
   $KolvoVzNal=0;
   $KolvoVzKarta=0;
   $SummaPr=0;
   $SummaPrNal=0;
   $SummaPrKarta=0;
   $SummaVz=0;
   $SummaVzNal=0;
   $SummaVzKarta=0;
   print "Proverka chekov...\n";
   foreach($obj as $item) 
   {
        if ($item["transactionType"]=="CLOSE_SHIFT")
            {$KolvoClose = $KolvoClose+1;}
        elseif ($item["transactionType"]=="OPEN_SHIFT")
            {$KolvoOpen = $KolvoOpen+1;}
        else
        { 
            if ($item["operationType"]==2)
            {
                $KolvoProd = $KolvoProd + 1;
                $SummaPr = $SummaPr + $item["sum"];
                $SummaPrNal = $SummaPrNal + $item["payments"][0]["sum"];            
                $SummaPrKarta = $SummaPrKarta + $item["payments"][1]["sum"];            
            }
            else 
            {
                $KolvoVz=$KolvoVz+1;
                $SummaVz = $SummaVz + $item["sum"];
                $SummaVzNal = $SummaVzNal + $item["payments"][0]["sum"];            
                $SummaVzKarta = $SummaVzKarta + $item["payments"][1]["sum"];                        
            }              
        };
    }
    /*print "KolvoClose= " . $KolvoClose . "\n";
    print "KolvoOpen= " . $KolvoOpen . "\n";
    print "KolvoProd= " . $KolvoProd . "\n";
    print "SummaPr= " . $SummaPr . "\n";
    print "KolvoVz= " . $KolvoVz . "\n";
    print "SummaVz= " . $SummaVz . "\n";
    print "\n********************************************\n";
    //     123456789012345678901234567890123456789012345678901234567890
    print "*   Oper      *   Nalom      *     Karta    *\n";
    print "*   Prod      *" . sprintf("%14.2f", $SummaPrNal) . "*" . sprintf("%14.2f", $SummaPrKarta) . "*\n" ;
    print "*   Vzvr      *" . sprintf("%14.2f", $SummaVzNal) . "*" . sprintf("%14.2f", $SummaVzKarta) . "*\n" ;
    print "**********************************************\n";*/

    $varArr = array();
    $oo = new COM("com.sun.star.ServiceManager");
    $desk = $oo->CreateInstance("com.sun.star.frame.Desktop");  
    $oodoc = $desk->LoadComponentFromURL('private:factory/scalc','_blank',0,$varArr); 
    $Sheets = $oodoc->getSheets();
    $Sheet=$Sheets->GetByIndex(0);       
    $Cell=$Sheet->getCellByPosition(1,0);         
    $Cell->SetString("Наличные");      
    $Cell=$Sheet->getCellByPosition(2,0);         
    $Cell->SetString("По карте");      
    $Cell=$Sheet->getCellByPosition(3,0);         
    $Cell->SetString("Колво чеков"); 
    $Cell=$Sheet->getCellByPosition(4,0);         
    $Cell->SetString("Итого");    
    $Cell=$Sheet->getCellByPosition(0,1);
    $Cell->SetString("Продажи");      
    $Cell=$Sheet->getCellByPosition(0,2);
    $Cell->SetString("Возвраты");          
    $Cell=$Sheet->getCellByPosition(1,1);          
    $Cell->SetString(sprintf("%14.2f", $SummaPrNal));     
    $Cell=$Sheet->getCellByPosition(2,1);          
    $Cell->SetString(sprintf("%14.2f", $SummaPrKarta));     
    $Cell=$Sheet->getCellByPosition(3,1);          
    $Cell->SetString(sprintf("%14.2f", $KolvoProd));     
    $Cell=$Sheet->getCellByPosition(4,1);
    $Cell->SetString(sprintf("%14.2f", $SummaPr)); 
    $Cell=$Sheet->getCellByPosition(1,2);          
    $Cell->SetString(sprintf("%14.2f", $SummaVzNal));     
    $Cell=$Sheet->getCellByPosition(2,2);          
    $Cell->SetString(sprintf("%14.2f", $SummaVzKarta)); 
    $Cell=$Sheet->getCellByPosition(3,2);          
    $Cell->SetString(sprintf("%14.2f", $KolvoVz));     
    $Cell=$Sheet->getCellByPosition(4,2);
    $Cell->SetString(sprintf("%14.2f", $SummaVz));     
    $oodoc = Null;
    $desk = Null;
    echo "Ok";
?>
28.09.2017 18:16
Скрытый текст (вы должны войти под своим логином или зарегистрироваться и иметь 21 сообщение(ий)):
У вас нет прав чтобы видеть скрытый текст, содержащийся здесь.

Хочу почитать, что бы в следующий раз не искать.
29.09.2017 08:07
Закачал посвежее описание API (от 17 августа 2017).
https://storage.olegon.ru/supermag/u... 17-08-2017.7z
Часовой пояс GMT +3, время: 05:01.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.