dcarbone/soap-plus

PHP SoapClient包装类

2.1.0 2022-08-18 02:38 UTC

This package is auto-updated.

Last update: 2024-09-18 08:21:35 UTC


README

Tests

简而言之,这个类替换了PHP的SoapClient类所使用的内部查询机制。这个包装类的主要原因是使PHP应用程序能够消费NTLM认证的SharePoint SOAP服务。这不是一个数据映射器,它只是像正常的SoapClient一样返回数据,但所有的内部查询都由PHP CURL库处理。

安装

此库设计为与Composer一起使用

“需求”条目

{
    "dcarbone/soap-plus": "2.1.*"
}

构造函数

构造函数已被重载,以便允许使用一些新的酷炫功能。所有基本构造选项都是可用的。要查看内置可用选项的列表,请参阅此处https://php.ac.cn/manual/en/soapclient.soapclient.php

附加选项

auth_type

  • 基本
  • ntlm
  • 摘要
  • 任何
  • anysafe
  • NULL / 未定义

这些直接相关到内置的CURLAUTH_XXX选项(见此处,搜索“CURLAUTH”)。这是完全可选的,并且仅当您也定义了“login”和“password”选项时才应设置。

如果您定义了一个远程WSDL,相同的参数也将用于WSDL检索以及查询。

user_agent

此属性是可选的,允许您在请求中定义自定义的用户代理头值。

debug

通过在您的配置数组中将“debug”=> true设置,每个查询和结果都将存储在一个内部数组中,可以通过getDebugQueries()和getDebugResults()方法访问。您还可以通过enableDebug()和disableDebug()启用/禁用调试。

关于调试的一句忠告。SOAP结果通常很大,这意味着您可能会消耗大量内存来保存内部数组中保存的字符串。我建议不要在开发/本地开发环境之外启用此功能。我还提供了一个resetDebugValue()方法,该方法将清空数组。

wsdl_cache_path

此选项允许您指定生成WSDL缓存文件的目录。如果没有传递此选项的值,将使用sys_get_temp_dir值。

查询

PHP的SoapClient期望结果通常是以数组形式。由于来自SharePoint世界,其中大多数文档都概述了如何以XML构造查询,这可能会有些繁琐。因此,我在这个库中提供了一种简单的XML -> 数组转换功能。例如

SharePoint列表GetListItems

以下是一个针对SharePoint Lists WSDL上的GetListItems操作的示例XML SOAP查询。

<GetListItems xmlns='http://schemas.microsoft.com/sharepoint/soap/'>
  <listName>My List Name</listName>
  <rowLimit>150</rowLimit>
  <query>
    <any>
      <Query xmlns=''>
        <Where>
          <And>
            <Eq>
              <FieldRef Name='Column1' />
              <Value Type='Integer'>1</Value>
            </Eq>
            <And>
              <Neq>
                <FieldRef Name='Column3' />
                <Value Type='Text'>value i don't want</Value>
              </Neq>
              <IsNotNull>
                <FieldRef Name='Column3' />
              </IsNotNull>
            </And>
          </And>
        </Where>
        <OrderBy>
          <FieldRef Name='Column1' Ascending='True' />
          <FieldRef Name='Column2' Ascending='True' />
          <FieldRef Name='Column3' Ascending='True' />
        </OrderBy>
      </Query>
    </any>
  </query>
  <viewFields>
    <any>
      <ViewFields>
        <FieldRef Name='Column1' />
        <FieldRef Name='Column2' />
        <FieldRef Name='Column3' />
      </ViewFields>
    </any>
  </viewFields>
  <queryOptions>
    <any>
      <QueryOptions xmlns=''>
        <DateInUtc>TRUE</DateInUtc>
        <IncludeMandatoryColumns>FALSE</IncludeMandatoryColumns>
      </QueryOptions>
    </any>
  </queryOptions>
</GetListItems>

使用SoapClientPlus,这会转换为...

array (
  'GetListItems' =>
  array (
    'listName' => 'My List Name',
    'rowLimit' => '150',
    'query' =>
    array (
      'any' => '<Query xmlns=""><Where><And><Eq><FieldRef Name="Column1"/><Value Type="Integer">1</Value></Eq><And><Neq><FieldRef Name="Column3"/><Value Type="Text">value i don\'t want/Value></Neq><IsNotNull><FieldRef Name="Column3"/></IsNotNull></And></And></Where><OrderBy><FieldRef Name="Column1" Ascending="True"/><FieldRef Name="Column2" Ascending="True"/><FieldRef Name="Column3" Ascending="True"/></OrderBy></Query>',
    ),
    'viewFields' =>
    array (
      'any' => '<ViewFields><FieldRef Name="Column1"/><FieldRef Name="Column2"/><FieldRef Name="Column3"/></ViewFields>',
    ),
    'queryOptions' =>
    array (
      'any' => '<QueryOptions xmlns=""><DateInUtc>TRUE</DateInUtc><IncludeMandatoryColumns>FALSE</IncludeMandatoryColumns></QueryOptions>',
    ),
  ),
)

... 然后将其传递到标准SoapClient的自己的__soapCall方法。

注意 您不必使用XML,您可以传入一个数组。它只是在那里,因为有些人可能觉得这样更容易使用。我使用PHP的SimpleXMLElement实现来处理转换。

问题/评论

正如我在前言中所述,我创建这个库是为了帮助减轻在PHP中使用NTLM认证机制消费SharePoint服务时的痛苦。我总是欢迎社区的新特性想法,所以如果您正在使用这个库并且有建议,请告诉我。我总是喜欢接受挑战 :)