我在PHP 5.2.6上使用NuSOAP,我发现最大消息大小只有1000个字节(这使得很难做任何有意义的事情).这是在端点的WSDL中设置的还是我可以在NuSOAP中配置的东西?
我使用ASP.NET编写了一个Web服务(在C#中),我正在尝试使用NuSOAP编写一个示例PHP客户端.我绊倒的地方是如何做到这一点的例子; 一些显示soapval正在使用(我不太了解参数-比如通过false为string类型等),而另一些则只是采用了直板array秒.假设我所报告的Web服务的WSDL http://localhost:3333/Service.asmx?wsdl看起来像:
POST /Service.asmx HTTP/1.1
Host: localhost
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://tempuri.org/webservices/DoSomething"
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<DoSomething xmlns="http://tempuri.org/webservices">
<anId>int</anId>
<action>string</action>
<parameters>
<Param>
<Value>string</Value>
<Name>string</Name>
</Param>
<Param>
<Value>string</Value>
<Name>string</Name>
</Param>
</parameters>
</DoSomething>
</soap:Body>
</soap:Envelope>
Run Code Online (Sandbox Code Playgroud)
我的第一次PHP尝试看起来像:
<?php
require_once('lib/nusoap.php');
$client = new nusoap_client('http://localhost:3333/Service.asmx?wsdl');
$params = array(
'anId' => 3, //new soapval('anId', 'int', 3),
'action' => 'OMNOMNOMNOM',
'parameters' => array(
'firstName' => 'Scott',
'lastName' => 'Smith'
)
); …Run Code Online (Sandbox Code Playgroud) 我一直在使用nuSOAP在PHP中编写一个演示Web服务.
我想知道nuSOAP对SOAP PHP5类的优势是什么.
此外,这是一个用作模型的测试Web服务.
我想知道哪些是典型的场景(一般来说是Webservices,而不仅仅是PHP)我应该测试一下,例如提供一个web方法,从服务器返回一个返回项目列表的对象.
在尝试实例化我的nuSoap方法时authenticateUser,它说:
致命错误:未捕获的SoapFault异常:[Client]函数("authenticateUser")不是/Applications/MAMP/htdocs/projo/dev/home.php:14中此服务的有效方法
但是,当我替换已经有效的方法名称时,一切正常.所以我认为实例化语法没有错.
/*-----------
Authenticate User
------------*/
$server->register(
// method name
'authenticateUser',
// input parameters
array('sessionUserName' => 'xsd:string', 'sessionHash' => 'xsd:string', 'user' => 'xsd:string', 'pass' => 'xsd:string'),
// output parameters
array('return' => 'xsd:string'),
// namespace
$namespace,
// soapaction
$namespace . '#authenticateUser',
// style
'rpc',
// use
'encoded',
// documentation
'authenticates a user and returns a json array of the user info'
);
function authenticateUser($sessionUserName, $sessionHash, $user, $pass)
{
//Check to see if a countryCode was provided …Run Code Online (Sandbox Code Playgroud) 如何从SOAP回复信封中读取error_code?我的PHP版本是:5.2.0.
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
<soap:Body>
<Response xmlns="http://xxx.gateway.xxx.abcd.com">
<return>
<transaction_id>1234567</transaction_id>
<error_code>109</error_code>
</return>
</Response>
</soap:Body>
</soap:Envelope>
Run Code Online (Sandbox Code Playgroud)
我只需要读取error_code tag的值.其值为:109
我正在使用nusoap.我使用下面的代码但没有正常工作:
$response=htmlspecialchars($client->response, ENT_QUOTES);
$xml = simplexml_load_string($response);
$ns = $xml->getNamespaces(true);
$soap = $xml->children($ns['soap']);
$error_code = $soap->body->children($ns['error_code']);
Run Code Online (Sandbox Code Playgroud) 我有一些问题从PHP消耗wsHttpBinding WCF.我最初尝试使用SOAP1.2,但无法指定WS Action.
我下载了nusoap库.我最初收到一个错误,说由于类型不匹配(text/xml而不是预期的application/soap + xml),webservice不会接受数据.我设法对nusoap.php进行了更改,以将数据作为application/soap + xml发送.现在,这不会引发错误,我从服务器得到400错误的请求错误.
我可以从WCFTestClient和SOAPUI中使用服务而不会有任何麻烦,但是无法让它从PHP中传播.我甚至从SOAPUI复制了整个soap信封,并将nusoap.php中的$ soapmsg设置为完全相同,但它仍然失败.
所以任何人都想提供一些指导.
编辑 这是我在SOAP 1.2中尝试的代码
$params = array("soap_version"=> SOAP_1_2,
"trace"=>1,
"exceptions"=>0,
);
$client = @new SoapClient('https://localhost/wcftest/Service.svc?wsdl',$params);
$retval = $client->GetData(array('value'=>'stuff'));
if (is_soap_fault($retval)) {
trigger_error("SOAP Fault: (faultcode: {$retval->faultcode}, faultstring: {$retval->faultstring})", E_USER_ERROR);
}
Run Code Online (Sandbox Code Playgroud)
编辑#2这是用于SOAPUI的代码
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:tem="http://tempuri.org/">
<soap:Header xmlns:wsa="http://www.w3.org/2005/08/addressing"><wsa:Action>http://tempuri.org/IService/GetData</wsa:Action></soap:Header>
<soap:Body>
<tem:GetData>
<!--Optional:-->
<tem:value>stuff</tem:value>
</tem:GetData>
</soap:Body>
</soap:Envelope>
Run Code Online (Sandbox Code Playgroud)
在按照下面的Gords链接提到的手动添加SoapHeaders后,我在使用netbeans进行调试时将其作为__last_request并仍然出现相同的错误
"<?xml version="1.0" encoding="UTF-8"?>
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://tempuri.org/">
<env:Header>
<ns1:Action>http://tempuri.org/IService/GetData</ns1:Action>
</env:Header>
<env:Body><ns1:GetData><ns1:value>stuff</ns1:value></ns1:GetData></env:Body></env:Envelope>
Run Code Online (Sandbox Code Playgroud)
任何建议?
谢谢!安迪
我们正在运行PHP 5.3.18,由于一些奇怪的原因我无法安装php-soap,因此我无法使用SoapClient类...
我现在使用的最后的NuSOAP(应该是用PHP 5.3.18兼容)和翻译从SoapClient的代码nusoap_client.
此代码使用SoapClient并且工作正常
$s_WSPROTOCOL = 'https';
$s_WSHOSTNAME = 'xxxxxxxx.yyyyyy.tdl';
$s_WSPORT = '';
$s_WSPATHNAME = 'webservices/service.asp?WSDL';
$s_WSTIPOOP = 'MyFunction';
$parameters['Username'] = '999';
$parameters['Login'] = 'Master';
$parameters['Password'] = 'universe';
$parameters['IdServ'] = '5';
$parameters['IdCard'] = '555';
$parameters['Controllo'] = '';
echo $s_WSTIPOOP."<br />";
echo $s_WSPROTOCOL."://".$s_WSHOSTNAME.$s_WSPORT."/".$s_WSPATHNAME."<br /><br /><br />";
try
{
$SOAP = new SoapClient($s_WSPROTOCOL."://".$s_WSHOSTNAME.$s_WSPORT."/".$s_WSPATHNAME, array('trace' => 1));
$result = $SOAP->__soapCall($s_WSTIPOOP, array("parameters" => $parameters), null);
foreach ($result as $key => $value)
{
echo "<b>".$key."</b><br />";
print_r($value);
echo "<br />";
}
} …Run Code Online (Sandbox Code Playgroud) 我正在尝试重新编写一个Drupal模块,该模块落后于它所连接的网关的API.
我认为导致问题的代码的剥离版本如下:
$namespace = ($this->testing) ? 'https://api.sandbox.ewaypayments.com/' : 'https://api.ewaypayments.com/';
$endpoint = $this->url;
$httpUsername = $this->user_name;
$httpPassword = $this->password;
$client = new nusoap_client($endpoint, TRUE);
$client->setCredentials($httpUsername, $httpPassword, 'basic');
$client->response_timeout = 50;
$result = $client->call($operation, array('request' => $params), $namespace);
Run Code Online (Sandbox Code Playgroud)
该$result是一致的假.如果我把这样的东西放到我的代码中,它也会一直返回empty:
$error = $client->getError();
watchdog('connection_message', $error);
Run Code Online (Sandbox Code Playgroud)
我有点超出我的深度,在我的Apache日志或Drupal看门狗中没有任何错误消息我看不到前进的方向.
我正在从PHP NuSoap实现中检索数据,它正在返回如下数据:
<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<ns1:getHashCodeAllTablesResponse xmlns:ns1="urn:getSchemaForRhythms">
<return xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType=":[121]">
<item xsi:type="xsd:">
<md5Hash xsi:type="xsd:string">e294967afe9834bf8477252ac0c3686e</md5Hash>
<tableName xsi:type="xsd:string">SYSCONGLOMERATES</tableName>
<isView xsi:type="xsd:string">false</isView>
<viewDefinition xsi:type="xsd:string">null</viewDefinition>
</item>
Run Code Online (Sandbox Code Playgroud)
我认为这是问题所在: <return xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType=":[121]">
当我将Axis2 soap客户端指向服务时,我收到此错误:
org.apache.axis2.AxisFault: org.apache.axis2.databinding.ADBException: Unsupported type http://schemas.xmlsoap.org/soap/encoding/ Array
这是我正在尝试做的一个非常简单的java示例:
public static void main(String[] args) {
// TODO code application logic here
try{
GetSchemaForRhythmsStub stub = new GetSchemaForRhythmsStub(null,"http://test.test.com/sqlSchemaService/schemaBuilder.php" );
GetSchemaForRhythmsStub.GetHashCodeAllTablesE response2= new GetSchemaForRhythmsStub.GetHashCodeAllTablesE();
stub.getHashCodeAllTables(response2);
}catch(Exception ex)
{
System.out.println(ex.toString());
}
}
Run Code Online (Sandbox Code Playgroud)
我找不到任何与Array数据类型和Axis相关的文档.我错过了什么吗?
谢谢,
除了此错误消息外,这里没有什么要写的:
SoapFault对象([消息:受保护] =>版本错误[string:Exception:private] => [code:protected] => 0 [file:protected] => C:\ wamp \ www \ nsoap \ phpclient.php [line :protected] => 10 [trace:Exception:private] => Array([0] => Array([file] => C:\ wamp \ www \ nsoap \ phpclient.php [line] => 10 [function] => __call [class] => SoapClient [type] =>-> [args] => Array([0] => getIMIPremium [1] => Array([0] => Array([imiPolicy] => Array( [expiryDate] => 23-09-2013 [imiInsured] => Array([item] => Array([item] => Array([age] => 23 [basicSumInsured] => 33233 [coverRageType] => 12 [ dateOfBirth] => 26-09-1986 …