加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

在PHP中将多维数组传递给soap complexType

发布时间:2020-12-13 16:13:26 所属栏目:PHP教程 来源:网络整理
导读:我从邮件服务器上发了一些电子邮件.有一个函数应该拉这些电子邮件并返回一个多维数组.我在客户端Web服务器中使用此数组来为我完成这项工作.我不知道如何将此数组传递给soap complexType.我写了以下代码: $server-wsdl-addComplexType('MailTicket','complex
我从邮件服务器上发了一些电子邮件.有一个函数应该拉这些电子邮件并返回一个多维数组.我在客户端Web服务器中使用此数组来为我完成这项工作.我不知道如何将此数组传递给soap complexType.我写了以下代码:

$server->wsdl->addComplexType(
'MailTicket','complexType','struct','all','',array(
    'attachment' => array('name' => 'attachment','type' => 'xsd:string'),'body' => array('name' => 'body','accountID' => array('name' => 'accountID','type' => 'xsd:string')
 )
);

$server->wsdl->addComplexType(
 'MailTicketReturn',array(
    'Done' => array('name' => 'result','type' => 'xsd:string')
 )
);

   // Register the method to expose
   $server->register('createMailTicket',// method name
 array('mailTicketData' => 'tns:MailTicket'),// input parameters
 array('return' => 'tns:MailTicketReturn'),// output parameters
 'urn:eticketing',// namespace
 'urn:eticketing#createMailTicket',// soapaction
 'rpc',// style
 'encoded',// use
 'create a ticket by mail'        // documentation
);

在客户端,我写道:

require_once('nusoap.php');
$wsdlURL="http://127.0.0.1/eticket/ETKWS.php?wsdl";
$client = new nusoap_client($wsdlURL,true);
$client->soap_defencoding = 'UTF-8';
$client->decode_utf8 = false;


$finalArray=Array
(
  [attachment] => Array
    (
        [0] => Array
            (
                [0] => file1
                [1] => file2
            )

        [1] => Array
            (
                [0] => file1x
            )

    )
[body]=>Array
            (
                [0] => some text
                [1] => some other text
            )

[accountID] => Array
    (
        [0] => 5464654
        [1] => 4654664
    )

)

if(is_array($finalArray)) // creat new tickets
{
 $result=$client->call('createMailTicket',$finalArray);
}

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

我收到了这个错误:

构造函数错误

在第1行解析SOAP有效负载的XML错误:格式不正确(无效令牌)

解决方法

NuSOAP支持返回多维数组(xsd:Array)

$server= new nusoap_server();

            $namespace = "http://localhost/webservice/";
           // create a new soap server
           $server = new nusoap_server();
           // configure our WSDL
           $server->configureWSDL("WebServices212");
           // set our namespace
           $server->wsdl->schemaTargetNamespace = $namespace;          

           $server->register(
            // method name:
            'test',// parameter list:
            array('id'=>'xsd:int'),// return value(array()):
            array('return'=>'xsd:Array'),// namespace:
            $namespace,// soapaction: (use default)
            false,// style: rpc or document
            'rpc',// use: encoded or literal
            'encoded',// description: documentation for the method
            'documentation');

             $POST_DATA = isset($GLOBALS['HTTP_RAW_POST_DATA']) 
            ? $GLOBALS['HTTP_RAW_POST_DATA'] : '';

            // pass our posted data (or nothing) to the soap   service                    
             $server->service($POST_DATA);

客户

client=new nusoap_client("http://localhost/webservice /webservices.php?wsdl");
          $client->setCredentials("webadmin","****");

           $err = $client->getError();
          if ($err) {

               echo '<h2>Constructor error</h2><pre>' . $err . '</pre>';

            }

            $result = $client->call('test',array('id' => '1'));
            print_r($result);

如果您从PHP使用Web服务没问题,但在其他语言中存在兼容性问题

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读