SOAP与PHP到sapweb服务
因此,我在企业环境中试图做的是在wsdl模式下使用PHP类SoapClient连接到SAP Web服务 到目前为止,我完成的是得到“缺少属性”错误。在解决了所有丢失的属性错误后,我得到了可怕的http错误500,其主体是:soap env:Server 这是我的代码:SOAP与PHP到sapweb服务,php,web-services,soap,soap-client,Php,Web Services,Soap,Soap Client,因此,我在企业环境中试图做的是在wsdl模式下使用PHP类SoapClient连接到SAP Web服务 到目前为止,我完成的是得到“缺少属性”错误。在解决了所有丢失的属性错误后,我得到了可怕的http错误500,其主体是:soap env:Server 这是我的代码: class SapTest { const SAP_WSDL_URI = *wsdl_uri*; const SAP_USER = *username*; const SAP_PWD = *password*; pub
class SapTest {
const SAP_WSDL_URI = *wsdl_uri*;
const SAP_USER = *username*;
const SAP_PWD = *password*;
public function execute() {
$client = new SoapClient('http://'.urlencode(self::SAP_USER).':'.urldecode(self::SAP_PWD).'@'.self::SAP_WSDL_URI,
array("trace" => 1,
"exceptions" => 1,
"login" => self::SAP_USER,
"password" => self::SAP_PWD,
'features' => SOAP_SINGLE_ELEMENT_ARRAYS)
);
$method = '_-bic_-nf2';
$parameter = array('ETColumnDescription' => null,
'ETGridData' => null,
'ETMessageLog' => null,
'ETRowDescription' => null,
'ISVar_01xwerbet' => array('Sign' => 'I',
'Option' => 'LE',
'Low' => '3',
'High' => null));
try
{
$result = $client->$method($parameter);
print_r($result);
} catch(SoapFault $e) {
echo "REQUEST HEADER:\n" . $client->__getLastRequestHeaders() . "\n";
echo "REQUEST:\n" . $client->__getLastRequest() . "\n";
echo "RESPONSE HEADER:\n" . $client->__getLastResponseHeaders() . "\n";
echo "RESPONSE:\n" . $client->__getLastResponse() . "\n";
print_r($e);
}
}
}
$oSap = new SapTest();
$oSap->execute();
我的xml输出如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="urn:sap-com:document:sap:soap:functions:mc-style">
<SOAP-ENV:Body>
<ns1:_-bic_-nf2>
<ETColumnDescription/>
<ETGridData/>
<ETMessageLog/>
<ETRowDescription/>
<ISVar_01xwerbet>
<Sign>I</Sign>
<Option>LE</Option>
<Low>3</Low>
<High/>
</ISVar_01xwerbet>
</ns1:_-bic_-nf2>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:sap-com:document:sap:soap:functions:mc-style">
<soapenv:Body>
<urn:_-bic_-nf2>
<ETColumnDescription/>
<ETGridData/>
<ETMessageLog/>
<ETRowDescription/>
<ISVar_01xwerbet>
<Sign>I</Sign>
<Option>LE</Option>
<Low>3</Low>
<High/>
</ISVar_01xwerbet>
</urn:_-bic_-nf2>
</soapenv:Body>
</soapenv:Envelope>
我
乐
3.
预期的xml应如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="urn:sap-com:document:sap:soap:functions:mc-style">
<SOAP-ENV:Body>
<ns1:_-bic_-nf2>
<ETColumnDescription/>
<ETGridData/>
<ETMessageLog/>
<ETRowDescription/>
<ISVar_01xwerbet>
<Sign>I</Sign>
<Option>LE</Option>
<Low>3</Low>
<High/>
</ISVar_01xwerbet>
</ns1:_-bic_-nf2>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:sap-com:document:sap:soap:functions:mc-style">
<soapenv:Body>
<urn:_-bic_-nf2>
<ETColumnDescription/>
<ETGridData/>
<ETMessageLog/>
<ETRowDescription/>
<ISVar_01xwerbet>
<Sign>I</Sign>
<Option>LE</Option>
<Low>3</Low>
<High/>
</ISVar_01xwerbet>
</urn:_-bic_-nf2>
</soapenv:Body>
</soapenv:Envelope>
我
乐
3.
我不确定是否是缺少的空白标题标记,我似乎无法用基本PHP添加它(我可以添加标题,但添加空白标题似乎是困难的部分)。或者是不同的前缀(ns1/urn或soapenv/SOAP-ENV),但我开始为此发疯了。非常感谢您的帮助
提前谢谢 您的SOAP请求没有问题
ns1
/urn
和soapenv
/SOAP-ENV
只是表示名称空间的前缀。不同的Web服务引擎生成不同的名称空间前缀,Web服务必须期望它们
SOAP头对于Web服务来说不是必须的,但是如果您的服务需要它,您应该提供它
我建议您与服务提供商谈谈请求出现了什么问题,如果不可能,请使用SOAP测试工具,如
要创建空的SOAP头,请尝试
$header =new SoapHeader('urn:sap-com:document:sap:soap:functions:mc-style', null);
$client->__setSoapHeaders($header);
谢谢你的回答,有没有办法制作一个空白的SOAP头?我得到了一个致命的错误:-(不过,谢谢你,尝试了其他简单的解决方案来解决上述问题?我面临着同样的问题。我需要在wsdl中使用带有wsp策略标记的SAP Pi Webservice。任何帮助都将不胜感激。