Как мне сделать этот точный мыльный звонок? - PullRequest
1 голос
/ 16 февраля 2012

Для начала я новичок в мыле.

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

Вывод из talend выглядит следующим образом (извлечено из HTTP-запроса)

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <root>
      <request>
        <username>a@a.com</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("a@a.com", "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-запросе через wireshark. Сервер просто не знает, что с этим делать и не отвечает. Я не уверен, что / куда мне нужно идти отсюда.

<?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>a@a.com</ns1:invokeInput>
    <password>md5sumish</password>
    <webservice>GetCust</webservice>
    <refid>1234321</refid>
    <message>reserv#123</message>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

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

1 Ответ

0 голосов
/ 20 февраля 2013

Вот небольшой рабочий скрипт, который я написал в 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, кажется, очень "базовый" в отношении того, как заданы параметры.С этим кодом все работало нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...