Имя: Пароль:
1C
1С v8
Обращение к web сервисам 1С из PHP
0 Кондидат В
 
12.09.18
13:54
Ребят, подскажите, как передать параметры в SOAP метод 1С.
Когда вызываю без параметров, все ОК.

Обертка SOAP:
class TMSoap
{
    private $proxy;
    public $settings;
    public function __construct($wsdl_id){
        try{
            $this->settings = SoapSettings::where('id','=',$wsdl_id)->get();
            $wsdl = $this->settings[0]->wsdl;
            $this->proxy = new SoapClient($wsdl,[
                'trace' => true,
                'login' => $this->settings[0]->user,
                'password' => $this->settings[0]->password]);
        }catch (\Exception $exception){
            dd('Нет данных для выбранной настройки. ' . $exception->getMessage());
        }

    }

    public function call($method, $params){
       return $this->proxy->__soapCall($method, $params);
    }

    public function checkData($params){
        try{
            foreach($params as $method=>$params){
                /*if($method=='checkOrder')
                    dd($method);*/
                $result = $this->call($method,$params);
                if(!$result)
                    dd("Не удалось пройти проверку.".$method);
            }
        }catch(\Exception $exception){
            dd("Ошибка проверки данных.".$exception->getMessage());
        }
    }
}


Вызов с параметрами:
    public function createSurvey($wsdl_id, $order_id){

        $this->tmSoap = new TMSoap($wsdl_id);

        $this->tmSoap->checkData([
            'checkOrder'=>['uid'=>$order_id],
            'checkQuestionary'=>['code'=>$this->tmSoap->settings[0]->questionary_code]
        ]);

        dd("Проверки прошли %)");

    }
1 Buster007
 
12.09.18
13:58
хз как из пхп так делать, но достаточно вида ?твойпараметр="абырвалг"
2 0xFFFFFF
 
12.09.18
14:00
$client = new SoapClient("wsdl/1c.xml", array("login" => $login, "password" => $pass, "exceptions" => true));
$result = $client->GetOrderList(array('pos_start'=>$cache_start, 'pos_end'=>$cache_end, 'status'=>$status));
3 0xFFFFFF
 
12.09.18
14:03
(1) речь про SOAP а не про HTTP
4 Кондидат В
 
12.09.18
14:09
(2)
Примного благодарен :)
5 Кондидат В
 
12.09.18
14:15
В SOAP обертке обновил метод Call до вида

    public function call($method, $params){
       return $this->proxy->__soapCall($method, Array($params));
    }
6 Кондидат В
 
12.09.18
14:22
С простыми типами все понятно. А как туда отправить XDTO поделитесь пожалуйста примером
7 0xFFFFFF
 
12.09.18
14:50
(6) XDTO это выдумка от 1С.
В PHP можно составить дерево данных (массив в массиве и т.п.) и передавать.
8 0xFFFFFF
 
12.09.18
14:56
Ну и возвращаемый от 1С (так называемый XDTO) не вызывает никаких проблем.

Вот например получение реквизитов юл по ИНН через стандартный 1совый сервис

$client = new SoapClient("https://api.orgregister.1c.ru/orgregister/v7?wsdl",array("login"=>$login, "password"=>$pass, "exceptions"=>true));
$params = array("INN"=>$inn);

try{
        $result = $client->getCorporationRequisitesByINN($params);//=>, "configurationName"=>"БухгалтерияПредприятия"));
}
    catch(SoapFault $e){
        return array("result"=>false, "error" => $e->getMessage());
}

$attr = $result->РеквизитыЮрЛица->СвАдрес->Адрес->Состав->enc_value;//атрибуты адреса