2012-02-15 3 views
1

Для начала, я новичок в мыле.Как сделать этот точный вызов?

Я пытаюсь сделать призыв к сервису и получил рабочий образец, который исходит от таланта. Мне нужно сделать аналогичный вызов в PHP.

Выход из Talend выглядит следующим образом (извлекается из запроса HTTP)

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soap:Body> 
    <root> 
     <request> 
     <username>[email protected]</username> 
     <password>md5sumlookalike</password> 
     <webservice>GetCust</webservice> 
     <refid>12343321</refid> 
     <message>reserv#123</message> 
     </request> 
    </root> 
    </soap:Body> 
</soap:Envelope> 

Так что я написал немного PHP, как это работает как язык сценариев, а также для того, где он будет вызываться из , Попытка понять, как сделать мыльный звонок, я придумал этот бит.

<?php 
// Yes I know about the diffrent port issue here. So I wgeted and stored it for use next to script 
# $soapClient = new SoapClient("http://123.123.123.123:8088/services", array("trace" => true)); 
    $soapClient = new SoapClient("wsdl", array("trace" => true)); 

    $error = 0; 
    try { 
     $info = $soapClient->__soapCall("invoke", 
      array 
      (
      new SoapParam("[email protected]", "username"), 
      new SoapParam("md5sumish", "password"), 
      new SoapParam("GetCust", "webservice"), 
      new SoapParam("1234321", "refid"), 
      new SoapParam("reserv#123", "message") 

      ) 
     ); 
    } catch (SoapFault $fault) { 
     $error = 1; 
     echo 'ERROR: '.$fault->faultcode.'-'.$fault->faultstring; 
    } 

    if ($error == 0) { 
     print_r($output_headers); 
     echo 'maybe it worked\n'; 
     unset($soapClient); 
    } 

?> 

В конце концов я вижу следующее в запросе HTTP через wirehark. Сервер просто не знает, что с этим делать и не отвечает. Я не уверен, что/где мне нужно идти отсюда.

<?xml version="1.0" encoding="UTF-8"?> 
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://talend.org/esb/service/job"> 
    <SOAP-ENV:Body> 
    <ns1:invokeInput>[email protected]</ns1:invokeInput> 
    <password>md5sumish</password> 
    <webservice>GetCust</webservice> 
    <refid>1234321</refid> 
    <message>reserv#123</message> 
    </SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 

Так что я должен спросить, как избавиться от ns1: invokeInput и сделать его имя пользователя. Наряду с переносом остальной части формата в строку, чтобы запрос выглядел как результат из таланта?

ответ

0

Вот работает небольшой скрипт я сделал в PHP, чтобы вызвать Talend учебник услуги экспортируемого как мыло:

//.... 
if (sizeof($_POST) > 0) { 
    $name = $_POST['name']; 
    $city = $_POST['city']; 
    $client = new SoapClient("http://192.168.32.205:8080/DirectoryService/services/DirectoryService?wsdl", array('trace' => 1)); 

    $result = $client->runJob(array(
     '--context_param', 
     'Name=' . $_POST['name'], 
     '--context_param', 
     'City=' . $_POST['city'] 
    )); 
} 
//... 

Talend, кажется, очень «основной» относительно того, как параметры приведены. С помощью этого кода он работал нормально.