Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP SoapClient调用Web服务-如何?_Php_Web Services_Soap - Fatal编程技术网

使用PHP SoapClient调用Web服务-如何?

使用PHP SoapClient调用Web服务-如何?,php,web-services,soap,Php,Web Services,Soap,从Web服务开始,我就快疯了。我尝试使用PHP调用以下WSDL,但一直没有结果: 我在网上找到了下面一段代码,来自有类似问题的人,但我也无法让它工作: $soap=新的SoapClient(“”, 数组( 'trace'=>true, “soap_版本”=>soap_1_2, “例外情况”=>0) $eb=新的EbXmlMessage() $sec=新安全性() $scrq=新会话创建器() 试试{ $omg=$soap->SessionCreateRQ($scrq,$sec,$eb); }

从Web服务开始,我就快疯了。我尝试使用PHP调用以下WSDL,但一直没有结果:

我在网上找到了下面一段代码,来自有类似问题的人,但我也无法让它工作:


$soap=新的SoapClient(“”,
数组(
'trace'=>true,
“soap_版本”=>soap_1_2,
“例外情况”=>0)

$eb=新的EbXmlMessage()
$sec=新安全性()
$scrq=新会话创建器()

试试{
$omg=$soap->SessionCreateRQ($scrq,$sec,$eb);
}
捕获(例外$e)
{
打印($e);
}
//调试
打印“请求:\n”
htmlspecialchars($soap->\u getLastRequestHeaders())。“\n”
打印“请求:\n”
htmlspecialchars($soap->\uu getLastRequest())。“\n”
打印“响应:\n”
$soap->\u getLastResponseHeaders()。“\n”
打印“响应:\n”
$soap->\uu getLastResponse()。“\n”

打印(omg)
//第一个信封标题
类EbXmlMessage
{
public$From=array('PartyId'=>'mysite.com');
public$To=array('PartyId'=>'myprovider.com');
public$CPAId='ZZZZ';
public$ConversationId=myconv@id.com“;
public$Service='Session';//或SessionCreate?
public$Action='SessionCreateRQ';
public$MessageData=array( 'MessageId'=>'MessageId', “时间戳”=>“2009-04-18T15:15:00Z”);


}
//安全令牌
类安全性{
公共$Username=“xxxxx”
公共$Password=“yyyy”;
公共$Organization=“ZZZZ”
public$Domain=“默认值”
}
//这是支持的有效负载,或我需要在末尾发送的xml
类SessionCreateRQ
{
公共$POS=数组(
“源”=>数组(
“'=>”,
“伪城市代码”=>“ZZZZ”
));
}


我不断得到以下错误:

答复: HTTP/1.1500内部服务器错误 SOAPAction:“ 内容类型:text/xml;字符集=utf-8 日期:2009年4月19日星期日22:21:34 GMT 连接:关闭 服务器:SWS

答复:

soap环境:Client.invalideBxmlMessage无法内部化 messagejavax.xml.soap.SOAPException:无法在内部化消息 com.sun.xml.messaging.saaj.soap.MessageImpl.(MessageImpl.java:135) 在 com.sun.xml.messagin.soap.MessageFactoryImpl.createMessage(MessageFactoryImpl.java:32) 在 com.sabre.universalservices.gateway.control.SoapProcessor.getRequest(SoapProcessor.java:263) 在 com.sabre.universalservices.gateway.control.WSGateway.handleRequest(WSGateway.java:380) 在 com.sabre.universalservices.gateway.control.WSGateway.doPost(WSGateway.java:306) 位于javax.servlet.http.HttpServlet.service(HttpServlet.java:710) http.HttpServlet.service(HttpServlet.java:803)位于 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) 在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 在 org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:563) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263) 在 org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:852) 在 org.apache.coyote.http11.http11aprotocol$Http11ConnectionHandler.process(http11aprotocol.java:584) 在 org.apache.tomcat.util.net.aprenpoint$Worker.run(aprenpoint.java:1508) 在java.lang.Thread.run(Thread.java:595)处,由以下原因引起: javax.xml.soap.SOAPException:无效 内容类型:应用程序/soap+xml com.sun.xml.messaging.saaj.soap.MessageImpl.verify(MessageImpl.java:159) 在 com.sun.xml.messaging.saaj.soap.MessageImpl.(MessageImpl.java:91) ... 还有19个

SoapFault对象( [消息:受保护]=>无法内部化消息 [string:private]=>

该服务应该在系统上验证我,并返回一个安全对象,以便在以后的调用中使用-一个字符串(?),然后我可以将该字符串存储在会话变量中,用于以下调用


非常感谢您的帮助!!!

我注意到SoapFault对象中有一个faultcode值:

[faultcode] => soap-env:Client.InvalidEbXmlMessage
因此,这可能是开始调试的有用途径


我尝试将EbXmlMessage的结构与和进行比较,但我看不出它被宣布无效的任何明显原因。

我注意到的一件事是SoapFault对象中有一个faultcode值:

[faultcode] => soap-env:Client.InvalidEbXmlMessage
因此,这可能是开始调试的有用途径


我尝试将您的EbXmlMessage的结构与和进行比较,但我看不出它被宣布无效的任何明显原因。

您尝试过将内容类型头更改为text/xml吗?

您尝试过将内容类型头更改为text/xml吗?

尝试使用WSDL2HP。它使php类脱离了wsdl文件。它使用php的SoapClient发送数据

下面是一篇很好的帖子,解释如何做到这一点:


尝试使用WSDL2HP。它从wsdl文件生成php类。它使用php的SoapCl
<?php
// Pull in the NuSOAP code
require_once('nuSOAP/lib/nusoap.php');

// Create the client instance

$client = new nusoap_client('http://pathtourl/sample_webservice.php?wsdl', true);

// Check for an error
$err = $client->getError();
if ($err) {
    // Display the error
    echo '<h2>Constructor error</h2><pre>' . $err . '</pre>';
    // At this point, you know the call that follows will fail
}

// Call the SOAP method
$result = $client->call('Hello', array('name' => 'Scott')); // Call function name, parameters;

// Check for a fault
if ($client->fault) {
    echo '<h2>Fault</h2><pre>';
    print_r($result);
    echo '</pre>';
} else {
    // Check for errors
    $err = $client->getError();
    if ($err) {
        // Display the error
        echo '<h2>Error</h2><pre>' . $err . '</pre>';
    } else {
        // Display the result
        echo '<h2>Result</h2><pre>';
        print_r($result);
    echo '</pre>';
    }
}
// Display the request and response
echo '<h2>Request</h2>';
echo '<pre>' . htmlspecialchars($client->request, ENT_QUOTES) . '</pre>';
echo '<h2>Response</h2>';
echo '<pre>' . htmlspecialchars($client->response, ENT_QUOTES) . '</pre>';
// Display the debug messages
echo '<h2>Debug</h2>';
echo '<pre>' . htmlspecialchars($client->debug_str, ENT_QUOTES) . '</pre>';
?>