Подробное объяснение операции PHP SOAP

PHP

В основном записывайте, как PHP работает с SOAP, базовые знания можно передать через«Подробное объяснение SOAP и WSDL»Поймите, здесь реализовано официальное расширение SOAP

Готов к работе

Открытое расширение php.ini

extension=soap.so
extension=openssl.so
extension=curl.so
 

Настройте параметры, связанные с мылом

[soap]
; Enables or disables WSDL caching feature. 开启或禁用WSDL缓存特性
soap.wsdl_cache_enabled=1
; Sets the directory name where SOAP extension will put cache files.设置SOAP扩展放置缓存文件的目录
soap.wsdl_cache_dir="/tmp"
; (time to live) Sets the number of second while cached file will be used 设置缓存生效时间(秒)
; instead of original one.
soap.wsdl_cache_ttl=86400
 

Знакомство с базовыми классами

класс SoapClient

Как клиент данной веб-службы, две формы работы

  • Конструктор схемы WSDL может принимать имя файла WSDL в качестве параметра и извлекать информацию, используемую службой, из WSDL.
  • В режиме, отличном от WSDL, для передачи используемой информации используются параметры.

Класс SOAPServer

Используется для предоставления веб-сервисов, две формы работы

  • Служба схемы WSDL реализует интерфейс, предоставляемый WSDL.
  • параметры схемы, отличные от WSDL, используются для управления поведением службы.

Пример сервера

<?php
Class RobotInfo
{
    public function sayHello(){
        return "Say Hello!";
    }
}
 
//wsdl方式
//$s = new SoapServer('RobotInfo.wsdl');
 
//在non-wsdl方式中option服务端的location是选择性的,可以不提供  
$s = new SoapServer(null, array("location" => "http://localhost/server.php", "uri" => "server.php"));
$s->setClass("RobotInfo");
$s->handle();
 

Пример клиента

<?php
try {
    //wsdl方式
    //$soap = new SoapClient("http://localhost/RobotInfo.wsdl");
 
    //在non-wsdl方式中option location系必须提供的
    $soap = new SoapClient(null, array('location' => "http://localhost/server.php", 'uri' => 'server.php'));
 
    //两种调用方式:直接调用方法和用__soapCall简接调用
    $result = $soap->sayHello(); // $soap->__soapCall("sayHello", array());
    echo $result;
} catch (SoapFault $e) {
    echo $e->getMessage();
} catch (Exception $e) {
    echo $e->getMessage();
}
 

Статьи по Теме