PHP SOAP Web サービスは wsdl ファイルを使用しますデモ:
================================================ === =============
サーバー:
wsdl の SOAP Web サービス デモを使用する前に、まず cw.php ファイルを使用して wsdl ファイルを生成します。コードは次のとおりです。
cw.php:リーリー
service.php:
リーリー
soapHandle.class.php :
リーリー
SoapDiscovery.class.php コードは次のとおりです:
================================================ === ==========
php /** * 著作権 (c) 2005、Braulio Jos?Solano Rojas * 無断転載を禁じます。 * * 改変の有無にかかわらず、ソースおよびバイナリ形式での再配布および使用は禁止されています。 * 以下の条件が満たされる場合に許可されます。 * * ソース コードを再配布する場合は、上記の著作権表示、このリストを保持する必要があります。 ※条件および以下の免責事項がございます。 * バイナリ形式で再配布する場合は、上記の著作権表示、このリストを複製する必要があります。 * ドキュメントおよび/またはその他の資料における条件および以下の免責事項 * ディストリビューションに同梱されています。 * Solsoft de Costa Rica S.A. の名前もその貢献者の名前も掲載することはできません。 * このソフトウェアから派生した製品を、具体的な内容を明示せずに推奨または宣伝するために使用されます。 * 事前の書面による許可。 * ※このソフトウェアは著作権者によって提供されており、 * 寄稿者は「現状のまま」で、明示的または黙示的な保証を行います。 * 黙示の保証を含みますが、これに限定されません。 *商品性と特定の目的への適合性は、 * 免責事項。いかなる場合も、著作権所有者または * 貢献者は、あらゆる直接的、間接的、偶発的、 * 特別損害、例示的損害、または結果的損害(以下を含む) * 代替品またはサービスの調達に限定されません。 * 使用、データ、または利益の損失。または業務中断) * 原因がどのようなものであっても、責任理論に基づくものであっても、 * 契約、厳格責任、または不法行為 (過失または過失を含む) *そうでない場合) このソフトウェアの使用から何らかの形で生じた場合、 * たとえそのような損害の可能性について知らされていた場合でも。 * * * @version $Id$ * @copyright 2005 */ /** * SoapDiscovery Web サービス定義言語 (WSDL) を提供するクラス。 * * @パッケージSoapDiscovery * @author Braulio Jos?Solano Rojas * @copyright Copyright (c) 2005 Braulio Jos?Solano Rojas * @version $Id$ * @アクセスパブリック **/ クラス SoapDiscovery { プライベート $class_name = ''; プライベート $サービス名 = ''; /** * SoapDiscovery::__construct() SoapDiscovery クラスのコンストラクター。 * * @param string $class_name * @param string $service_name **/ public function __construct($class_name = '', $service_name = '') { $this->クラス名 = $クラス名; $this->サービス名 = $サービス名; } /** * SoapDiscovery::getWSDL() クラスがインスタンス化可能な場合は、クラスの WSDL を返します。 * * @戻り文字列 **/ パブリック 関数 getWSDL() { if (空($this->service_name)) { throw new Exception('サービス名がありません。'); } $headerWSDL = "0fceb78a3d7fd36b54d62f54d08f5d68n"; $headerWSDL.= "c1629cc4fdfe1774a4e1a46f6cb92d78service_name" targetNamespace="urn:$this->service_name" xmlns:wsdl="http://schemas.xmlsoap. org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="urn:$this->サービス名" xmlns:xsd="http:// www.w3.org/2001/XMLSchema" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns="http://schemas.xmlsoap.org/wsdl/">ん」; $headerWSDL.= "3616e775a87de808d245184907eb6a7fn"; if (空($this->class_name)) { throw new Exception('クラス名がありません。'); } $class = new ReflectionClass($this->class_name); if (!$class->isInstantiable()) { throw new Exception('クラスはインスタンス化できません。'); }$methods = $class->getMethods(); $portTypeWSDL = '02efcd21d425f2cbeee316dfae276254service_name.'Port">'; $bindingWSDL = '723f2f1f58775f0b790acf9a446d80dfservice_name.'Binding" type="tns:'.$this->service_name."ポート">n2cba0e2446160b371557812e1679d129n"; $serviceWSDL = 'cf392d2cdaaa4c1a5379583f8d24bbc2service_name."">n485ef56516706e5ab4070bec1d3ebcc3n8bb03def261172c43c3bcb5cfec86687service_name .'ポート" バインディング="tns:'.$this->service_name."バインディング">b117fe1a440a84e0e4c61c23dbdb8e57nb99adf09bba1702852b32782733b87e1n07aad2482592b0629b89dc8fa8f9c2a7n"; $messageWSDL = ''; foreach ($methods as $method) { if ($method->isPublic() && !$method->isConstructor()) { $portTypeWSDL.= '81765bcca7e802df621a0a6a4227cc2dgetName()."">n".'73cd84f1122f4af5e6efe17f1d4437bbgetName()."Request" />n25e2b82317dcab4b7e6bc466ab2c1b4agetName()."Response" />n1ad87f86f8fa8a96626cc7ccfa3a84c1n"; $bindingWSDL.= '71d757a30493f0169e5e15d0825905ebgetName()."">n".'87281cf9fa831954ef238fb22e3c0fabservice_name.'#'.$this->class_name.'#'.$method->getName()."" />nd5fd7aea971a85678ba271703566ebfd4b6e4ce24ae6533bba1cd6ceb1c1a47fservice_name" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />n96ac42c95369ad8c9dbbd274b6bcc83anbe6d67dae90cc1ad6469079e163d0939ncaab73023442c4925f73d3ae3d88d724service_name" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />nd76c8de0b204cd1b17c9571b0bbcceb6n4d70fdfb9064e2fba2b8b660869f5511getName()."リクエスト">n"; $parameters = $method->getParameters(); foreach ($parameters as $parameter) { $messageWSDL.= '450ec9ce891aa7ba89b4a18c9fdc56b5getName()."" type="xsd:string" />n"; } $messageWSDL.= "dc97c94abba54b3574a1f2a9fcb1679bn"; $messageWSDL.= 'cb80c38ddf9c0d454b757ab32d9e781cgetName()."Response">n"; $messageWSDL.= 'c33bd57d944a491bb9e1bab73962e059getName()."" type="xsd:string" />n"; $messageWSDL.= "dc97c94abba54b3574a1f2a9fcb1679bn"; } } $portTypeWSDL.= "97278d25c52bca40c2a550f0377f36cd'); $fso = fopen($this->class_name . ".wsdl", "w"); fwrite($fso, sprintf('%s%s%s%s%s%s', $headerWSDL, $portTypeWSDL, $bindingWSDL, $serviceWSDL, $messageWSDL, '480990378d171194a612ccf5e01f8dcc')); } /** * SoapDiscovery::getDiscovery() WSDL の検出を返します。 * * @戻り文字列 **/ パブリック 関数 getDiscovery() { return "0fceb78a3d7fd36b54d62f54d08f5d68nc498079d39efd6acf2348ad520fd4287nf2fb844adfc32abf52fc1db94fc947ban6f4e04d14d894b590db95b28e2c72d22"; } } ?> コードを表示
客户端:
client.php 代码:
=============================================================
<?<span>php </span><span>ini_set</span>('soap.wsdl_cache_enabled', "0"); <span>//</span><span>关闭wsdl缓存</span> <span>$soap</span> = <span>new</span> SoapClient('http://localhost/soap/service.php?wsdl'<span>); </span><span>echo</span> <span>$soap</span>->strtolink('http://www.baidu.com')."<br/>"<span>; </span><span>echo</span> <span>$soap</span>->add(28, 100)."<br/>"<span>; </span><span>echo</span> <span>$soap</span>->__soapCall('add',<span>array</span>(28,200))."<br/>"<span>; </span><span>//</span><span>或这样调用</span> <span>echo</span> <span>$soap</span>->__Call('add',<span>array</span>(28,300))."<br/>"<span>; </span><span>echo</span> <span>date</span>('Y-m-d H:i:s', <span>time</span><span>()); </span>?>
================ END====================