我该怎么做这个精确的肥皂电话?

时间:2012-02-15 20:18:40

标签: php xml soap talend

首先,我是肥皂的初学者。

我正在尝试对服务进行肥皂调用,并获得了来自talend的工作样本。我需要的是在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); 
    }   

?>

我最终通过wireshark在HTTP请求中看到以下内容。服务器只是不知道如何处理这个并且没有响应。我不确定我需要从这里去哪里/哪里。

<?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 :(得分:0)

这是一个工作的小脚本我在php中用来调用导出为soap的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似乎非常基本&#34;关于如何给出参数。 使用此代码,它工作正常。