首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WSDL中不存在的NuSoap操作

WSDL中不存在的NuSoap操作
EN

Stack Overflow用户
提问于 2012-12-05 17:24:30
回答 1查看 8.8K关注 0票数 3

我必须使用用NuSoap制作的webservice​​,我测试了我找到的所有​​示例,但是都没有工作,我得到的错误是:

GetMsisdnPortabilityInfoRequest操作不存在于WSDL中

GetMsisdnPortabilityInfoRequest是我必须调用的操作的名称,请求必须如下所示:

代码语言:javascript
复制
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:v1="http://www.tigo.com/GetMsisdnPortabilityInfoRequest/V1" xmlns:v11="http://www.tigo.com/Core/Common/Header/Request/V1" xmlns:v12="http://www.tigo.com/ParameterType/V1">
   <soapenv:Header/>
   <soapenv:Body>
      <v1:GetMsisdnPortabilityInfoRequest>
         <v11:RequestHeader>
            <v11:Consumer code="WEBTIGO" name="WEBTIGO">
            </v11:Consumer>
            <v11:Transport code="WS" name="WS">
               <v11:communicationType>SYN</v11:communicationType>
            </v11:Transport>
            <v11:Service code="1" name="1">
            </v11:Service>
            <v11:Message messageId="1" messageIdCorrelation="1" conversationId="1">
            </v11:Message>
            <v11:Country name="PY" isoCode="600"/>
         </v11:RequestHeader>
         <v1:requestBody>
            <v1:msisdn>0961123456</v1:msisdn>
         </v1:requestBody>
      </v1:GetMsisdnPortabilityInfoRequest>
   </soapenv:Body>
</soapenv:Envelope>

我必须发送的唯一参数是msindn,我的代码如下所示:

代码语言:javascript
复制
require_once('lib/nusoap.php');

$url = "http://10.16.210.128/sbresource?PROXY/Portability/Gateway/PS/PS_GetMsisdnPortabilityInfo";  
$headers_raw = '<v11:RequestHeader>
        <v11:Consumer code="WEBTIGO" name="WEBTIGO">
        </v11:Consumer>
        <v11:Transport code="WS" name="WS">
           <v11:communicationType>SYN</v11:communicationType>
        </v11:Transport>
        <v11:Service code="1" name="1">
        </v11:Service>
        <v11:Message messageId="1" messageIdCorrelation="1" conversationId="1">
        </v11:Message>
        <v11:Country name="PY" isoCode="600"/>
     </v11:RequestHeader>';

$body_raw_xml = '<v1:msisdn>0961123456</v1:msisdn>';

$client = new nusoap_client($url, true);


$err = $client->getError();
if ($err) {
  echo '<h2>Constructor error</h2><pre>' . $err . '</pre>';
  echo '<h2>Debug</h2><pre>' . $client->getDebug() . '</pre>';
  exit();
}            

$result = $client->call('GetMsisdnPortabilityInfoRequest', $body_raw_xml, '', '',  $headers_raw, null);

if ($client->fault) {
  echo '<h2>Fault (Expect - The request contains an invalid SOAP body)</h2><pre>'; print_r($result); echo '</pre>';
} else {
  $err = $client->getError();
  if ($err) {
    echo '<h2>Error</h2><pre>' . $err . '</pre>';
  } else {
    echo '<h2>Result</h2><pre>'; print_r($result); echo '</pre>';
  }
}

echo '<h2>Request</h2><pre>' . $client->request . '</pre>';
echo '<h2>Response</h2><pre>' . $client->response . '</pre>';
echo '<h2>Debug</h2><pre>' . $client->getDebug() . '</pre>';

完整的WSDL在https://gist.github.com/f55472fe9181856b30de中( webservice在本地网络上,不能在外部访问,我已经更改了“示例”和"example2“的原始域,以保护无辜的服务器)

我也尝试过这样做,但总是说WSDL中不存在GetMsisdnPortabilityInfoRequest操作。

代码语言:javascript
复制
$params = array('v1:msisdn' => $number);

$result = $client->call('V1:GetMsisdnPortabilityInfoRequest', $params, '', '', $headers_raw);

我做错什么了?我想知道我该如何发送这个请求。

提前感谢!

编辑

正确的操作名称是"process“,最后的代码如下所示:

代码语言:javascript
复制
$raw_xml = '<v1:GetMsisdnPortabilityInfoRequest>
       <v11:RequestHeader>
          <v11:Consumer code="WEBTIGO" name="WEBTIGO">
          </v11:Consumer>
          <v11:Transport code="WS" name="WS">
             <v11:communicationType>SYN</v11:communicationType>
          </v11:Transport>
          <v11:Service code="1" name="1">
          </v11:Service>
          <v11:Message messageId="1" messageIdCorrelation="1" conversationId="1">
          </v11:Message>
          <v11:Country name="PY" isoCode="600"/>
       </v11:RequestHeader>
       <v1:requestBody>
          <v1:msisdn>' . $full_number . '</v1:msisdn>
       </v1:requestBody>
    </v1:GetMsisdnPortabilityInfoRequest>';    

// cliente del soap
$client = new nusoap_client($url, true);  

$err = $client->getError();
if ($err) {
  echo json_encode(array('status' => $err));
  exit();
}            

// realizamos la consulta al webservice, nombre método consultado = process
$result = $client->call('process', $raw_xml);  
EN

回答 1

Stack Overflow用户

发布于 2012-12-11 14:57:49

尝试只调用GetMsisdnPortabilityInfo而不调用GetMsisdnPortabilityInfo__Request或GetMsisdnPortabilityInfo__Response

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13728892

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档