PHP - 发送带有方法参数的 SOAP Web 服务

Posted

技术标签:

【中文标题】PHP - 发送带有方法参数的 SOAP Web 服务【英文标题】:PHP - send SOAP web service with method parameters 【发布时间】:2017-05-30 02:27:53 【问题描述】:

我想编写一个 php 代码来将身份验证和数据发送到 Web 服务。 请参阅下面的 Web 服务 SOAP XML 结构:

这是访问 Web API 的 URL https://portal.xyzonline.com/API/ABCAPIServer.asmx?WSDL

如果您能帮助我编写基本代码,我将不胜感激。

这就是我想要做的:

PHP 代码

$client = new SoapClient("https://portal.xyzonline.com/API/ABCAPIServer.asmx?WSDL");
$params = array(
'addCaseReq' => array(
    'DlcpmCase' => array(
        'CaseID' => '1234',
        'CustomerID' => '222',
        'PatientFirst' => 'John'
        ),
     'Auth' => array(
        'AppName' => 'appname',
        'UserName' => 'username',
        'Password' => 'password'
        )
     )
   );
try  
    $responsetest = $client->AddCase(new SoapParam(array($params)));
 catch(SoapFault $fault)  
    print_r($fault); 

XML

<wsdl:types>
 <s:schema>
  <s:element name="AddCase">
   <s:complexType>
    <s:sequence>
     <s:element minOccurs="0" maxOccurs="1" name="addCaseReq" type="tns:ABCAPIAddCaseRequest"/>
    </s:sequence>
   </s:complexType>
  </s:element>
  <s:complexType name="ABCAPIAddCaseRequest">
   <s:complexContent mixed="false">
    <s:extension base="tns:ABCAPIRequest">
     <s:sequence>
      <s:element minOccurs="0" maxOccurs="1" name="AbcCase" type="tns:ABCCase"/>
     </s:sequence>
    </s:extension>
   </s:complexContent>
  </s:complexType>
  <s:complexType name="ABCAPIRequest" abstract="true">
   <s:sequence>
    <s:element minOccurs="0" maxOccurs="1" name="Auth" type="tns:ABCAPIAuthentication"/>
   </s:sequence>
  </s:complexType>
  <s:complexType name="ABCAPIAuthentication">
   <s:sequence>
    <s:element minOccurs="0" maxOccurs="1" name="AppName" type="s:string"/>
    <s:element minOccurs="0" maxOccurs="1" name="UserName" type="s:string"/>
    <s:element minOccurs="0" maxOccurs="1" name="Password" type="s:string"/>
   </s:sequence>
  </s:complexType>
  <s:complexType name="ABCCase">
   <s:sequence>
    <s:element minOccurs="0" maxOccurs="1" name="CaseID" type="s:string"/>
    <s:element minOccurs="1" maxOccurs="1" name="CaseNumber" type="s:int"/>
    <s:element minOccurs="0" maxOccurs="1" name="CustomerID" type="s:string"/>
    <s:element minOccurs="0" maxOccurs="1" name="PatientFirst" type="s:string"/>
   </s:sequence>
  </s:complexType>
 </s:schema>
</wsdl:types>

WCFStorm 截图

我正在使用 WCFStorm,一切正常。请看截图:

【问题讨论】:

你能说一个更具体的问题吗?您的问题中有一些代码 - 如果它不起作用,您能解释一下什么不起作用吗? @GrishaLevit,感谢您的回复。我正在尝试通过身份验证将数据发送到 Web 服务,您可以看到上面的屏幕截图,如果我通过身份验证和数据,我将成功发送数据,但在我上面的 PHP 代码中,没有提交信息。看来我的 PHP 代码并没有真正提交基于 XML 结构的数据 是否安装并启用了 php soap 扩展? ***.com/questions/22594582/… 【参考方案1】:

如果您需要编写 php 脚本来发送请求,我强烈建议您使用 WSDL 到 php 生成器,例如 PackageGenerator 项目。它将真正简化您要发送的数据的构造和响应的处理。您不必直接使用本机 SoapClient、SoapVar、SoapParam 类,因为您只需处理与所需参数匹配的 PHP 类。您将构建的 PHP 对象将被映射以通过 SoapClient 类生成 XML 请求。使用生成的包,您将需要一个良好的 IDE(例如 Eclipse PDT 或 PHP Storm)来了解自动完成所使用的参数和值。

【讨论】:

以上是关于PHP - 发送带有方法参数的 SOAP Web 服务的主要内容,如果未能解决你的问题,请参考以下文章

关于 php 调用 其他语言写的Web Service SOAP 接口的参数传递问题

需要了解PHP中的SOAP 1.2 Web服务数据调用/发送

使用 org.apache.http 发送带有 SOAP 操作的 HTTP Post 请求

为啥 SOAP 参数的顺序在 PHP SOAP 中很重要,以及如何解决它?

在 SOAP UI 请求中将 cookie 作为请求标头发送以获取 REST Web 服务

soapUI参数中文乱码问题解决方法&soap UI工具进行web接口测试