symfony nusoap complextype

参考文章:
这里写链接内容
这里写链接内容

这里写图片描述

特此记录,备忘。


2017年1月21日13:59:58更新。
使用complextype,设置复杂数据
symfony nusoap server端

$server = new \soap_server();
        $server->soap_defencoding = 'UTF-8';
        $server->decode_utf8 = false;
        $server->xml_encoding = 'UTF-8';
        $server->configureWSDL('strings');

        $server->wsdl->addComplexType(
            'UploadData',
            'complexType',
            'struct',
            'all',
            '',
            array(
                'UploadData'=>array('name'=>'UploadData', 'type'=>'tns:ClinicData')
            ),
            array(
                array(
                    'ref'=>'SOAP-ENC:arrayType',
                    'wsdl:arrayType'=>'tns:ClinicData[]'
                )
            ),
            'tns:ClinicData'
        );

        $server->wsdl->addComplexType(
            'ClinicData',
            'complexType',
            'struct',
            'all',
            '',
            array(
                'Patient'=>array('name'=>'Patient', 'type'=>'tns:PatientItem'),
                'Study'=>array('name'=>'Study', 'type'=>'tns:StudyItem'),
                'StudyExtCode'=>array('name'=>'StudyExtCode', 'type'=>'tns:StudyExtCodeArray'),
                'StudyUid'=>array('name'=>'StudyUid', 'type'=>'tns:StudyUidItem'),
                'Result'=>array('name'=>'Result', 'type'=>'tns:ResultItem'),
                'StudyType'=>array('name'=>'StudyType', 'type'=>'tns:StudyTypeItem'),
                'Insti'=>array('name'=>'Insti', 'type'=>'tns:InstiItem'),
                'Doctor'=>array('name'=>'Doctor', 'type'=>'tns:DoctorItem'),
                'Department'=>array('name'=>'Patient', 'type'=>'tns:DepartmentItem'),
                'Modality'=>array('name'=>'Patient', 'type'=>'tns:ModalityItem'),
                'Medical'=>array('name'=>'Patient', 'type'=>'tns:MedicalItem')
            )
        );

        $server->wsdl->addComplexType(
            'PatientItem',
            'element',
            'struct',
            'all',
            '',
            array(
                'Name'=>array('name'=>'Name', 'type'=>'xsd:string'),
                'Gender'=>array('name'=>'Gender', 'type'=>'xsd:string'),
                'Nation'=>array('name'=>'Nation', 'type'=>'xsd:string'),
                'MaritalStatus'=>array('name'=>'MaritalStatus', 'type'=>'xsd:string'),
                'Birthday'=>array('name'=>'Birthday', 'type'=>'xsd:string'),
                'BirthAdr'=>array('name'=>'BirthAdr', 'type'=>'xsd:string'),
                'Tel'=>array('name'=>'Tel', 'type'=>'xsd:string'),
                'ICD'=>array('name'=>'ICD', 'type'=>'xsd:string'),
                'Job'=>array('name'=>'Job', 'type'=>'xsd:string'),
                'HomeAddr'=>array('name'=>'HomeAddr', 'type'=>'xsd:string'),
                'WorkAddr'=>array('name'=>'WorkAddr', 'type'=>'xsd:string'),
                'MedCard'=>array('name'=>'MedCard', 'type'=>'xsd:string'),
                'ExtIdty'=>array('name'=>'EMPI', 'type'=>'xsd:string')
            )
        );

        $server->wsdl->addComplexType(
            'StudyItem',
            'element',
            'struct',
            'all',
            '',
            array(
                'StudyId'=>array('name'=>'StudyId', 'type'=>'xsd:string'),
                'DocumentUid'=>array('name'=>'DocumentUniqueId', 'type'=>'xsd:string'),
                'AppliedDate'=>array('name'=>'AppliedDate', 'type'=>'xsd:string'),
                'ArrivedDate'=>array('name'=>'ArrivedDate', 'type'=>'xsd:string'),
                'ScanType'=>array('name'=>'ScanType', 'type'=>'xsd:string'),
                'BodyPart'=>array('name'=>'BodyPart', 'type'=>'xsd:string'),
                'StartTime'=>array('name'=>'StartTime', 'type'=>'xsd:string'),
                'FinishTime'=>array('name'=>'FinishTime', 'type'=>'xsd:string'),
                'StudyStatus'=>array('name'=>'StudyStatus', 'type'=>'xsd:string'),
                'RegisterDoctor'=>array('name'=>'RegisterDoctor', 'type'=>'xsd:string'),
                'PatientType'=>array('name'=>'PatientType', 'type'=>'xsd:string'),
                'ReportPublishTimes'=>array('name'=>'ReportPublishTimes', 'type'=>'xsd:int'),
                'BrowseLevel'=>array('name'=>'BrowseLevel', 'type'=>'xsd:int'),
                'PrintedTimes'=>array('name'=>'PrintedTimes', 'type'=>'xsd:int'),
                'StudyAge'=>array('name'=>'StudyAge', 'type'=>'xsd:string'),
                'YinYang'=>array('name'=>'YinYang', 'type'=>'xsd:int'),
                'CrisisLevel'=>array('name'=>'CrisisLevel', 'type'=>'xsd:int')
            )
        );

        $server->wsdl->addComplexType(
            'StudyExtCodeArray',
            'sequence',
            'array',
            'all',
            '',
            array(
                'ExtCodes' => array('name' => 'ExtCodes', 'type' => 'tns:StudyExtCodeItem')
            ),
            array(
                array(
                    'ref'=>'SOAP-ENC:arrayType',
                    'wsdl:arrayType'=>'tns:StudyExtCodeItem[]'
                )
            ),
            'tns:StudyExtCodeItem'
        );

        $server->wsdl->addComplexType(
            'StudyExtCodeItem',
            'element',
            'struct',
            'all',
            '',
            array(
                'CodeKey'=>array('name'=>'CodeKey', 'type'=>'xsd:string'),
                'CodeValue'=>array('name'=>'CodeValue', 'type'=>'xsd:string')
            )
        );

        $server->wsdl->addComplexType(
            'StudyUidItem',
            'element',
            'struct',
            'all',
            '',
            array(
                'StudyUid'=>array('name'=>'StudyUid', 'type'=>'xsd:string'),
                'SeriesUid'=>array('name'=>'SeriesUid', 'type'=>'xsd:string'),
                'IsConsult'=>array('name'=>'IsConsult', 'type'=>'xsd:int'),
                'GwModality'=>array('name'=>'GwModality', 'type'=>'xsd:string')
            )
        );

        $server->wsdl->addComplexType(
            'ResultItem',
            'element',
            'struct',
            'all',
            '',
            array(
                'Finding'=>array('name'=>'Finding', 'type'=>'xsd:string'),
                'Diagnose'=>array('name'=>'Diagnose', 'type'=>'xsd:string')
            )
        );

        $server->wsdl->addComplexType(
            'StudyTypeItem',
            'element',
            'struct',
            'all',
            '',
            array(
                'StudyType'=>array('name'=>'StudyType', 'type'=>'xsd:string')
            )
        );

        $server->wsdl->addComplexType(
            'InstiItem',
            'element',
            'struct',
            'all',
            '',
            array(
                'InstiCode'=>array('name'=>'InstiCode', 'type'=>'xsd:string'),
                'InstiName'=>array('name'=>'InstiName', 'type'=>'xsd:string'),
                'Disabled'=>array('name'=>'Disabled', 'type'=>'xsd:string')
            )
        );

        $server->wsdl->addComplexType(
            'DoctorItem',
            'element',
            'struct',
            'all',
            '',
            array(
                'AppliedDoctor'=>array('name'=>'AppliedDoctor', 'type'=>'xsd:string'),
                'ExamDoctor'=>array('name'=>'ExamDoctor', 'type'=>'xsd:string'),
                'Censor'=>array('name'=>'Censor', 'type'=>'xsd:string'),
                'AppliedDoctorType'=>array('name'=>'AppliedDoctorType', 'type'=>'xsd:string'),
                'ExamDoctorType'=>array('name'=>'ExamDoctorType', 'type'=>'xsd:string'),
                'CensorType'=>array('name'=>'CensorType', 'type'=>'xsd:string')
            )
        );

        $server->wsdl->addComplexType(
            'DepartmentItem',
            'element',
            'struct',
            'all',
            '',
            array(
                'AppliedDept'=>array('name'=>'Department', 'type'=>'xsd:string'),
                'ExamDept'=>array('name'=>'ExamDept', 'type'=>'xsd:string'),
                'AppliedDeptType'=>array('name'=>'AppliedDeptType', 'type'=>'xsd:string'),
                'ExamDeptType'=>array('name'=>'ExamDeptType', 'type'=>'xsd:string'),
                'AppliedDeptCode'=>array('name'=>'AppliedDeptCode', 'type'=>'xsd:string'),
                'ExamDeptCode'=>array('name'=>'ExamDeptCode', 'type'=>'xsd:string')
            )
        );

        $server->wsdl->addComplexType(
            'ModalityItem',
            'element',
            'struct',
            'all',
            '',
            array(
                'Modality'=>array('name'=>'Modality', 'type'=>'xsd:string'),
                'ModalityType'=>array('name'=>'ModalityType', 'type'=>'xsd:string')
            )
        );

        $server->wsdl->addComplexType(
            'MedicalItem',
            'element',
            'struct',
            'all',
            '',
            array(
                'VisitId'=>array('name'=>'VisitId', 'type'=>'xsd:int'),
                'EffectiveTime'=>array('name'=>'EffectiveTime', 'type'=>'xsd:string'),
                'DomainId'=>array('name'=>'DomainId', 'type'=>'xsd:string')
            )
        );

        $server->wsdl->addComplexType(
            'UploadResult',
            'complexType',
            'struct',
            'all',
            '',
            array(
                'code'=>array('name'=>'code', 'type'=>'xsd:string'),
                'info'=>array('name'=>'info', 'type'=>'xsd:string'),
                'count'=>array('name'=>'count', 'type'=>'xsd:int')
            )
        );

        // set our namespace
        // $server->wsdl->schemaTargetNamespace = $namespace;
        $server->register(
            'soap.strings',
            array('data'=>'tns:UploadData'),
            array('return'=>'tns:UploadResult'),
            false,
            'rpc',
            'encoded'
        );
        $response = new Response($server->service($request->getContent()));
        $response->headers->set('Content-Type', 'text/xml');
        return $response->send();

客户端

<?php
require_once("lib/nusoap.php");

$proxyhost = isset($_POST['proxyhost']) ? $_POST['proxyhost'] : '';
$proxyport = isset($_POST['proxyport']) ? $_POST['proxyport'] : '';
$proxyusername = isset($_POST['proxyusername']) ? $_POST['proxyusername'] : '';
$proxypassword = isset($_POST['proxypassword']) ? $_POST['proxypassword'] : '';
$useCURL = isset($_POST['usecurl']) ? $_POST['usecurl'] : '0';
$client = new nusoap_client("http://www.bbb.com/app_dev.php/soap?wsdl", false,
                        $proxyhost, $proxyport, $proxyusername, $proxypassword);
$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();
}
$client->setUseCurl($useCURL);
// This is an archaic parameter list
$data = array(
            'UploadData'=>array(
                'Patient'=>array(
                    'Name'=>'胡一菲',
                    'Gender'=>'女',
                    'Nation'=>'中国',
                    'MaritalStatus'=>'未婚',
                    'Birthday'=>'1987-05-31 18:35:37',
                    'BirthAdr'=>'湖南衡阳',
                    'Tel'=>'15812138004',
                    'ICD'=>'431027198705311630',
                    'Job'=>'',
                    'HomeAddr'=>'',
                    'WorkAddr'=>'',
                    'MedCard'=>'',
                    'ExtIdty'=>''
                ),
                'Study'=>array(
                    'StudyId'=>'MR12138014',
                    'DocumentUid'=>'1.2.826.0.1.3680043.2.461.7666576.2129103229',
                    'AppliedDate'=>'2016-12-20 08:45:00',
                    'ArrivedDate'=>'2016-12-21 08:45:00',
                    'ScanType'=>'',
                    'BodyPart'=>'{脚踝}',
                    'StartTime'=>'',
                    'FinishTime'=>'',
                    'StudyStatus'=>'1300',
                    'RegisterDoctor'=>'黄辉冯',
                    'PatientType'=>'门诊',
                    'ReportPublishTimes'=>1,
                    'BrowseLevel'=>'1',
                    'PrintedTimes'=>0,
                    'StudyAge'=>'29',
                    'YinYang'=>0,
                    'CrisisLevel'=>0
                ),
                'StudyExtCode'=>array(
                    'ExtCodes' => array(
                        array(
                            'CodeKey' => 'HisCode1',
                            'CodeValue' => '1213801'
                        ),
                        array(
                            'CodeKey' => 'HisCode2',
                            'CodeValue' => '1122345'
                        ),
                        array(
                            'CodeKey' => 'VisitCode',
                            'CodeValue' => '123789'
                        )
                    )
                ),
                'StudyUid'=>array(
                    'StudyUid'=>'1.2.826.0.1.3680043.2.461.7666576.2129103229',
                    'SeriesUid'=>'1.2.826.0.1.3680043.2.461.7666576.2129103229',
                    'IsConsult'=>1,
                    'GwModality'=>'RIS'
                ),
                'Result'=>array(
                    'Finding'=>'以Topogram片为定位标志,行鼻咽部横断位平扫及增强扫描,层厚5mm,层距5mm。',
                    'Diagnose'=>'鼻咽部横断位平扫及增强扫描未见病变。'
                ),
                'StudyType'=>array(
                    'StudyType'=>'平诊'
                ),
                'Insti'=>array(
                    'InstiCode'=>'111235-4',
                    'InstiName'=>'郴州市第四人民医院',
                    'Disabled'=>0
                ),
                'Doctor'=>array(
                    'AppliedDoctor'=>'华佗',
                    'ExamDoctor'=>'张仲景',
                    'Censor'=>'孙思邈',
                    'AppliedDoctorType'=>'主治医生',
                    'ExamDoctorType'=>'主治医生',
                    'CensorType'=>'主任医生'
                ),
                'Department'=>array(
                    'AppliedDept'=>'放射一科',
                    'ExamDept'=>'放射二科',
                    'AppliedDeptType'=>'放射科',
                    'ExamDeptType'=>'放射科',
                    'AppliedDeptCode'=>'X0001',
                    'ExamDeptCode'=>'X0002'
                ),
                'Modality'=>array(
                    'Modality'=>'CT',
                    'ModalityType'=>'放射类'
                ),
                'Medical'=>array(
                    'VisitId'=>'30939967229998654',
                    'EffectiveTime'=>'2016-12-21 11:30:00',
                    'DomainId'=>'3001'
                )
            )
        );
$result = $client->call('soap.strings', $data);
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>';
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值