从给定的 WSDL 创建 PHP SOAP 服务

2024-04-11

这可能会被认为是一个非常懒惰的问题,但我向你保证事实并非如此。我已经尝试了好几天让它工作但我就是做不到。

我已经获得了一个 WSDL 文件,我需要用 PHP 为其创建一个 SOAP 服务。谁能告诉我正确的做法是什么?

服务的接收者期望在调用 getMember 方法时返回“User”对象。

这是 WSDL

<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:tns="http://tempuri.org/" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" targetNamespace="http://tempuri.org/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
    <wsdl:types>
        <s:schema elementFormDefault="qualified" targetNamespace="http://tempuri.org/">
            <s:element name="getMember">
                <s:complexType>
                    <s:sequence>
                        <s:element minOccurs="0" maxOccurs="1" name="memCode" type="s:string"/>
                    </s:sequence>
                </s:complexType>
            </s:element>
            <s:element name="getMemberResponse">
                <s:complexType>
                    <s:sequence>
                        <s:element minOccurs="0" maxOccurs="1" name="getMemberResult" type="s:string"/>
                    </s:sequence>
                </s:complexType>
            </s:element>
            <s:element name="getMemberByUsernameAndPassword">
                <s:complexType>
                    <s:sequence>
                        <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:element>
            <s:element name="getMemberByUsernameAndPasswordResponse">
                <s:complexType>
                    <s:sequence>
                        <s:element minOccurs="0" maxOccurs="1" name="getMemberByUsernameAndPasswordResult" type="s:string"/>
                    </s:sequence>
                </s:complexType>
            </s:element>
            <s:element name="insertMember">
                <s:complexType>
                    <s:sequence>
                        <s:element minOccurs="0" maxOccurs="1" name="insertStr" type="s:string"/>
                    </s:sequence>
                </s:complexType>
            </s:element>
            <s:element name="insertMemberResponse">
                <s:complexType/>
            </s:element>
            <s:element name="decodeID">
                <s:complexType>
                    <s:sequence>
                        <s:element minOccurs="0" maxOccurs="1" name="memCode" type="s:string"/>
                        <s:element minOccurs="0" maxOccurs="1" name="password" type="s:string"/>
                    </s:sequence>
                </s:complexType>
            </s:element>
            <s:element name="decodeIDResponse">
                <s:complexType>
                    <s:sequence>
                        <s:element minOccurs="0" maxOccurs="1" name="decodeIDResult" type="s:string"/>
                    </s:sequence>
                </s:complexType>
            </s:element>
            <s:element name="encodeID">
                <s:complexType>
                    <s:sequence>
                        <s:element minOccurs="0" maxOccurs="1" name="memCode" type="s:string"/>
                        <s:element minOccurs="0" maxOccurs="1" name="password" type="s:string"/>
                    </s:sequence>
                </s:complexType>
            </s:element>
            <s:element name="encodeIDResponse">
                <s:complexType>
                    <s:sequence>
                        <s:element minOccurs="0" maxOccurs="1" name="encodeIDResult" type="s:string"/>
                    </s:sequence>
                </s:complexType>
            </s:element>
            <s:element name="processPnrInfo">
                <s:complexType>
                    <s:sequence>
                        <s:element minOccurs="0" maxOccurs="1" name="pnrXml" type="s:string"/>
                        <s:element minOccurs="0" maxOccurs="1" name="UserXml" type="s:string"/>
                        <s:element minOccurs="0" maxOccurs="1" name="extraCosts" type="s:string"/>
                    </s:sequence>
                </s:complexType>
            </s:element>
            <s:element name="processPnrInfoResponse">
                <s:complexType/>
            </s:element>
            <s:element name="CancelPNR">
                <s:complexType>
                    <s:sequence>
                        <s:element minOccurs="0" maxOccurs="1" name="paxSurname" type="s:string"/>
                        <s:element minOccurs="0" maxOccurs="1" name="pnrNo" type="s:string"/>
                    </s:sequence>
                </s:complexType>
            </s:element>
            <s:element name="CancelPNRResponse">
                <s:complexType/>
            </s:element>
        </s:schema>
    </wsdl:types>
    <wsdl:message name="getMemberSoapIn">
        <wsdl:part name="parameters" element="tns:getMember"/>
    </wsdl:message>
    <wsdl:message name="getMemberSoapOut">
        <wsdl:part name="parameters" element="tns:getMemberResponse"/>
    </wsdl:message>
    <wsdl:message name="getMemberByUsernameAndPasswordSoapIn">
        <wsdl:part name="parameters" element="tns:getMemberByUsernameAndPassword"/>
    </wsdl:message>
    <wsdl:message name="getMemberByUsernameAndPasswordSoapOut">
        <wsdl:part name="parameters" element="tns:getMemberByUsernameAndPasswordResponse"/>
    </wsdl:message>
    <wsdl:message name="insertMemberSoapIn">
        <wsdl:part name="parameters" element="tns:insertMember"/>
    </wsdl:message>
    <wsdl:message name="insertMemberSoapOut">
        <wsdl:part name="parameters" element="tns:insertMemberResponse"/>
    </wsdl:message>
    <wsdl:message name="decodeIDSoapIn">
        <wsdl:part name="parameters" element="tns:decodeID"/>
    </wsdl:message>
    <wsdl:message name="decodeIDSoapOut">
        <wsdl:part name="parameters" element="tns:decodeIDResponse"/>
    </wsdl:message>
    <wsdl:message name="encodeIDSoapIn">
        <wsdl:part name="parameters" element="tns:encodeID"/>
    </wsdl:message>
    <wsdl:message name="encodeIDSoapOut">
        <wsdl:part name="parameters" element="tns:encodeIDResponse"/>
    </wsdl:message>
    <wsdl:message name="processPnrInfoSoapIn">
        <wsdl:part name="parameters" element="tns:processPnrInfo"/>
    </wsdl:message>
    <wsdl:message name="processPnrInfoSoapOut">
        <wsdl:part name="parameters" element="tns:processPnrInfoResponse"/>
    </wsdl:message>
    <wsdl:message name="CancelPNRSoapIn">
        <wsdl:part name="parameters" element="tns:CancelPNR"/>
    </wsdl:message>
    <wsdl:message name="CancelPNRSoapOut">
        <wsdl:part name="parameters" element="tns:CancelPNRResponse"/>
    </wsdl:message>
    <wsdl:portType name="ServiceSoap">
        <wsdl:operation name="getMember">
            <wsdl:input message="tns:getMemberSoapIn"/>
            <wsdl:output message="tns:getMemberSoapOut"/>
        </wsdl:operation>
        <wsdl:operation name="getMemberByUsernameAndPassword">
            <wsdl:input message="tns:getMemberByUsernameAndPasswordSoapIn"/>
            <wsdl:output message="tns:getMemberByUsernameAndPasswordSoapOut"/>
        </wsdl:operation>
        <wsdl:operation name="insertMember">
            <wsdl:input message="tns:insertMemberSoapIn"/>
            <wsdl:output message="tns:insertMemberSoapOut"/>
        </wsdl:operation>
        <wsdl:operation name="decodeID">
            <wsdl:input message="tns:decodeIDSoapIn"/>
            <wsdl:output message="tns:decodeIDSoapOut"/>
        </wsdl:operation>
        <wsdl:operation name="encodeID">
            <wsdl:input message="tns:encodeIDSoapIn"/>
            <wsdl:output message="tns:encodeIDSoapOut"/>
        </wsdl:operation>
        <wsdl:operation name="processPnrInfo">
            <wsdl:input message="tns:processPnrInfoSoapIn"/>
            <wsdl:output message="tns:processPnrInfoSoapOut"/>
        </wsdl:operation>
        <wsdl:operation name="CancelPNR">
            <wsdl:input message="tns:CancelPNRSoapIn"/>
            <wsdl:output message="tns:CancelPNRSoapOut"/>
        </wsdl:operation>
    </wsdl:portType>
    <wsdl:binding name="ServiceSoap" type="tns:ServiceSoap">
        <soap:binding transport="http://schemas.xmlsoap.org/soap/http"/>
        <wsdl:operation name="getMember">
            <soap:operation soapAction="http://tempuri.org/getMember" style="document"/>
            <wsdl:input>
                <soap:body use="literal"/>
            </wsdl:input>
            <wsdl:output>
                <soap:body use="literal"/>
            </wsdl:output>
        </wsdl:operation>
        <wsdl:operation name="getMemberByUsernameAndPassword">
            <soap:operation soapAction="http://tempuri.org/getMemberByUsernameAndPassword" style="document"/>
            <wsdl:input>
                <soap:body use="literal"/>
            </wsdl:input>
            <wsdl:output>
                <soap:body use="literal"/>
            </wsdl:output>
        </wsdl:operation>
        <wsdl:operation name="insertMember">
            <soap:operation soapAction="http://tempuri.org/insertMember" style="document"/>
            <wsdl:input>
                <soap:body use="literal"/>
            </wsdl:input>
            <wsdl:output>
                <soap:body use="literal"/>
            </wsdl:output>
        </wsdl:operation>
        <wsdl:operation name="decodeID">
            <soap:operation soapAction="http://tempuri.org/decodeID" style="document"/>
            <wsdl:input>
                <soap:body use="literal"/>
            </wsdl:input>
            <wsdl:output>
                <soap:body use="literal"/>
            </wsdl:output>
        </wsdl:operation>
        <wsdl:operation name="encodeID">
            <soap:operation soapAction="http://tempuri.org/encodeID" style="document"/>
            <wsdl:input>
                <soap:body use="literal"/>
            </wsdl:input>
            <wsdl:output>
                <soap:body use="literal"/>
            </wsdl:output>
        </wsdl:operation>
        <wsdl:operation name="processPnrInfo">
            <soap:operation soapAction="http://tempuri.org/processPnrInfo" style="document"/>
            <wsdl:input>
                <soap:body use="literal"/>
            </wsdl:input>
            <wsdl:output>
                <soap:body use="literal"/>
            </wsdl:output>
        </wsdl:operation>
        <wsdl:operation name="CancelPNR">
            <soap:operation soapAction="http://tempuri.org/CancelPNR" style="document"/>
            <wsdl:input>
                <soap:body use="literal"/>
            </wsdl:input>
            <wsdl:output>
                <soap:body use="literal"/>
            </wsdl:output>
        </wsdl:operation>
    </wsdl:binding>
    <wsdl:binding name="ServiceSoap12" type="tns:ServiceSoap">
        <soap12:binding transport="http://schemas.xmlsoap.org/soap/http"/>
        <wsdl:operation name="getMember">
            <soap12:operation soapAction="http://tempuri.org/getMember" style="document"/>
            <wsdl:input>
                <soap12:body use="literal"/>
            </wsdl:input>
            <wsdl:output>
                <soap12:body use="literal"/>
            </wsdl:output>
        </wsdl:operation>
        <wsdl:operation name="getMemberByUsernameAndPassword">
            <soap12:operation soapAction="http://tempuri.org/getMemberByUsernameAndPassword" style="document"/>
            <wsdl:input>
                <soap12:body use="literal"/>
            </wsdl:input>
            <wsdl:output>
                <soap12:body use="literal"/>
            </wsdl:output>
        </wsdl:operation>
        <wsdl:operation name="insertMember">
            <soap12:operation soapAction="http://tempuri.org/insertMember" style="document"/>
            <wsdl:input>
                <soap12:body use="literal"/>
            </wsdl:input>
            <wsdl:output>
                <soap12:body use="literal"/>
            </wsdl:output>
        </wsdl:operation>
        <wsdl:operation name="decodeID">
            <soap12:operation soapAction="http://tempuri.org/decodeID" style="document"/>
            <wsdl:input>
                <soap12:body use="literal"/>
            </wsdl:input>
            <wsdl:output>
                <soap12:body use="literal"/>
            </wsdl:output>
        </wsdl:operation>
        <wsdl:operation name="encodeID">
            <soap12:operation soapAction="http://tempuri.org/encodeID" style="document"/>
            <wsdl:input>
                <soap12:body use="literal"/>
            </wsdl:input>
            <wsdl:output>
                <soap12:body use="literal"/>
            </wsdl:output>
        </wsdl:operation>
        <wsdl:operation name="processPnrInfo">
            <soap12:operation soapAction="http://tempuri.org/processPnrInfo" style="document"/>
            <wsdl:input>
                <soap12:body use="literal"/>
            </wsdl:input>
            <wsdl:output>
                <soap12:body use="literal"/>
            </wsdl:output>
        </wsdl:operation>
        <wsdl:operation name="CancelPNR">
            <soap12:operation soapAction="http://tempuri.org/CancelPNR" style="document"/>
            <wsdl:input>
                <soap12:body use="literal"/>
            </wsdl:input>
            <wsdl:output>
                <soap12:body use="literal"/>
            </wsdl:output>
        </wsdl:operation>
    </wsdl:binding>
    <wsdl:service name="Service">
        <wsdl:port name="ServiceSoap" binding="tns:ServiceSoap">
            <soap:address location="[byng_wsdl_target]"/>
        </wsdl:port>
        <wsdl:port name="ServiceSoap12" binding="tns:ServiceSoap12">
            <soap12:address location="[byng_wsdl_target]"/>
        </wsdl:port>
    </wsdl:service>
</wsdl:definitions>

我将非常感谢任何可以提供帮助的人。

额外的

class User {
    public $GuestUserId;
    public $Username;
    public $FirstName;
    public $SurName;
    public $Email;
    public
    function getMember($uid) {
        $applicant = new Applicant($uid);
        $this->GuestUserId = $applicant->getIdentifier();
        $this->Username = $applicant->getEmail();
        $this->FirstName = $applicant->getFirstName();
        $this->SurName = $applicant->getLastName();
        $this->Email = $applicant->getEmail();
        return $this;
    }
}

在基本层面上,您应该能够使用如下内容进行 SOAP 调用(未经测试/伪代码):

$client = new SoapClient("http://somesite/service.wsdl");
$result = $client->getMember();
var_dump($result);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从给定的 WSDL 创建 PHP SOAP 服务 的相关文章

  • PHP 用星号替换所有字符

    假设我有一个字符串形式的密码 password thisisaplaintextpassword 我怎样才能把它变成下面的样子 password 我想通过电子邮件向用户发送他们的帐户详细信息 但不想发送整个内容 Use 字符串重复 http
  • Axis2 错误:要输出的文本中的空白字符 (0x4) 无效

    我创建了一个 Java 客户端 使用 Axis2 1 7 6 作为代码生成器与 SOAP Web 服务进行交互 问题在于客户端的某些输入抛出异常并显示以下消息 org apache axis2 AxisFault Invalid white
  • 无法以编程方式反序列化 SOAP 消息

    当我尝试反序列化肥皂消息时 出现以下异常 我这样做是因为我有想要在测试中重用的响应文件 我无法使用真正的服务等 因为它不适合我们拥有的测试框架的架构 Test MyUnitTestMethod failed System InvalidOp
  • 使用 PHP 对 ASP.NET 成员身份中的用户进行身份验证

    我在尝试使用 PHP 针对现有 ASP NET 成员资格数据库对用户进行身份验证时遇到一些问题 我在网上搜索过 发现现有的答案似乎对我不起作用 即 public static function Hash password salt deco
  • 运行 Composer 返回:“无法打开输入文件:composer.phar”

    我是 symfony2 和阅读新手symblog http tutorial symblog co uk tutorial parts 在第三章中 在尝试使用数据装置时 我尝试了以下命令 php composer phar update 但
  • strlen()==0 和empty()之间有区别吗?

    我正在查看其他人编写的一些表单验证代码 我看到了这个 strlen 0 当测试表单变量是否为空时 我使用empty 功能 一种方法比另一种方法更好吗 它们在功能上等效吗 strlen是获取字符串中的字符数 同时empty用于测试变量是否为空
  • Symfony2中如何获取所有post参数? [复制]

    这个问题在这里已经有答案了 我想获取a的所有post参数symfony http symfony com Form I used all parameter this gt get request gt getParameterHolder
  • TOMCAT 6 中的 PHP - 异常

    我一直在努力融入PHP in APACHE TOMCAT 6依照指示second answer为了QUESTION https stackoverflow com questions 779246 run a php app using t
  • php - 我应该加密电子邮件地址吗?

    当用户注册时 我应该将他们的电子邮件按原样存储在数据库中还是对其进行哈希处理 我希望稍后能够解密 那么我应该使用 md5 吗 谢谢你 No md5 is 单向哈希函数 http en wikipedia org wiki Cryptogra
  • 将函数中的会话变量传递给 codeigniter 中的助手

    这就是我正在尝试做的事情 这是控制器中的功能 public function get started if test login this gt session gt all userdata this gt load gt view te
  • PHP7构造函数类名

    我有一个 Laravel 4 2 应用程序 它可以与 PHP5 一起使用 没有任何问题 由于我安装了一个运行 PHP7 的新 vagrant box 一旦我运行一个模型 其中函数名称与类名称 关系函数 相同 就会出现错误 如下所示
  • 使用PHP套接字发送和接收数据

    我正在尝试通过 PHP 套接字发送和接收数据 一切正常 但是当我尝试发送数据时 PHP 不发送任何内容 Wireshark 告诉我发送的数据长度为 0 我正在使用这段代码
  • 如何用javascript正确读取php cookies

    考虑这个 php 和 javascript 代码 然后我在控制台中看到的是 utma 111872281 291759993 1444771465 1445374822 1445436904 4 utmz 111872281 1444771
  • 通过JS Laravel访问存储目录

    有没有办法访问storage目录 该目录已经链接到publicJS 中的目录 我正在尝试制作一个上传图片的表单 验证脚本 if request gt hasFile photos marker gt photos request gt ph
  • Azure 上的“phpcomposer.phar install”出现“无法终止进程”错误

    我正在尝试将我的 Symfony 2 应用程序部署到 Microsoft Azure 网站云 为此 我按照本指南中的步骤操作http symfony com doc current cookbook deployment azure web
  • 将数组拆分为特定数量的块

    我知道array chunk 允许将数组拆分为多个块 但块的数量根据元素的数量而变化 我需要的是始终将数组拆分为特定数量的数组 例如 4 个数组 以下代码将数组分为 3 个块 两个块各有 2 个元素 1 个块有 1 个元素 我想要的是将数组
  • 如何在html中制作多行类型的文本框?

  • 如何在 codeigniter 查询中使用 FIND_IN_SET?

    array array classesID gt 6 this gt db gt select gt from this gt table name gt where array gt order by this gt order by q
  • PHP cURL 在本地工作,在 AWS 服务器上出现错误 77

    最新更新 脚本作为管理员用户通过 SSH shell 作为 php script php 成功运行 当由 nginx 用户运行时 curl 命令无法执行 https 请求 所以我猜测这是nginx用户无法正确使用curl的问题 我已经检查了
  • 在 PHP 中模拟 jQuery.ajax 请求

    我必须在 PHP 中模拟 AJAX 请求 就像在 jQuery 中一样 我当前的代码在这里 原始 AJAX 调用 不得修改 ajax type POST url someFile php data data success function

随机推荐

  • numpy.where() 究竟如何选择本例中的元素?

    来自 numpydocs https www numpy org devdocs reference generated numpy where html gt gt gt np where True False True True 1 2
  • Spark DAG 的“withColumn”与“select”不同

    Context 在最近的一次SO post https stackoverflow com questions 59788837 chained spark column expressions with distinct windows
  • MatTabNavBar 不显示箭头

    我注意到 如果容器对于选项卡来说太小 MatTabNavBar 在显示箭头时的行为与常规 MatTabGroup 不同 我使用官方文档构建了MatTabNavBar和MatTabGroup 但是您可以在这里看到MatTabGroup显示了箭
  • ngtable:对嵌套对象进行排序和过滤

    我有一个对象列表要在 ngTable 的表格上显示 我的对象看起来像 obj label string nestObj nestLabel string 在我的控制器中 我想允许对字段 label 和 nestObject label 进行
  • 尝试 Azure 与 Unity 连接时出现“NotImplementedException”(c#)

    我使用的是Unity 2019 3 6f1 我创建了一个简单的 DLL 用于连接到 Azure 并上传文件 但是 当我调用此 DLL 来尝试连接到 Azure blob 存储时 我得到以下堆栈跟踪 NotImplementedExcepti
  • 在PHP中计算两种颜色之间的平均颜色,使用索引号作为参考值

    在 PHP 中 我试图计算不同十六进制颜色之间的平均颜色 以十六进制表示 但是 我还需要能够提供 0 0 到 1 0 之间的索引号 例如 I have color1 ffffff color2 0066CC 如果我编写一个函数来获取平均颜色
  • 如何在Elastic Search 5.6中对分析字段进行字母排序?

    我在弹性搜索中面临字母排序问题 我有一个 Index indexlive 和一个具有以下映射的 users 类型 liveindex mappings users properties user Confirmed type boolean
  • pty 和管道之间的区别

    我一直在从本页的示例中阅读有关 ptys 的内容 http www roucha fr tech corner pty pdip html http www rkoucha fr tech corner pty pdip html 我有两个
  • 计算 3D 平面多边形的质心

    这是一个与此类似的问题one here https stackoverflow com questions 2350604 get the area of a 3d surface 给定定义表面的 3D 坐标列表 Point3D1 Poin
  • Android Material Design 中的“触摸目标尺寸”到底是什么

    参考有关 Material Design 的 Android 文档 我经常发现我们被引导将按钮的 触摸目标 设置为高度 例如 48dp https www google com design spec components buttons
  • Android:align_left居中对齐

    我有一个包含谷歌地图的片段
  • JSONObject 不是字符串错误

    query count 1 created 2015 07 28T05 19 01Z lang en US results quote symbol GITANJALI NS Ask null AverageDailyVolume null
  • Javascript-从 JSON 对象中检索特定键值

    我想从 Json 对象中仅检索某些键值对 在以唯一 id 作为键的用户列表下方 var user 987654321 displayName Wayne profilepic https test1 com fullName Bruce W
  • 如果启用 SSL 代理,为什么 https 请求在 Charles 代理上失败

    我已经在我的 Mac 上安装并配置了 Charles 代理 我可以浏览所有 http 站点并查看 Charles 中的请求 但无法浏览无法连接的 https 站点 Safari 无法打开该页面 因为它无法建立安全 联系 我已经安装了 Cha
  • 使用最短路径计算连接概率

    我想知道 igraph 中是否有一个函数可以计算加权图中顶点之间的连接概率 其中边的权重是相邻顶点的连接概率 我基于这样的邻接矩阵构建了一个图 其中相邻连接概率形成权重 这是针对河流网络 因此图的每个节点仅连接到单个下游节点 我本来希望使用
  • 检查 iOS 互联网连接是否缓慢

    我添加了苹果提供的可达性类 它可以很好地检查互联网连接 如果互联网关闭 我的应用程序会显示消息 但如果互联网很慢 它就会继续加载 我正在使用 wi fi 当 iPhone 通知栏中只有一个可见的点表示 wifi 信号时 我遇到了这个问题 所
  • 我如何知道主屏幕是否已对焦?

    我有一个在 Android 上运行的服务 我需要知道是否有任何应用程序处于焦点状态 或者 桌面 主屏幕 是否处于焦点状态 我不知道这个词是否适合指手机的主屏幕 我如何知道这是焦点还是其他应用程序 在服务内部 我有以下代码来获取正在运行的任务
  • 我可以在播种时将我的所有产品更新给特定用户吗?

    如何更新所有产品以为其分配特定用户 admin User create name gt Admin password gt password walmart Store create name gt Walmart address gt S
  • 用于存储过程的 SQL 表和列解析器

    是否有一个应用程序可以解析一组给定的存储过程 SQL Server 2000 并获取其中使用的所有表和关联列 存储过程可以包含来自不同数据库的表 输出应该是这样的 表AU 列A 列B 列S 表 列 列 列 我用Database Editio
  • 从给定的 WSDL 创建 PHP SOAP 服务

    这可能会被认为是一个非常懒惰的问题 但我向你保证事实并非如此 我已经尝试了好几天让它工作但我就是做不到 我已经获得了一个 WSDL 文件 我需要用 PHP 为其创建一个 SOAP 服务 谁能告诉我正确的做法是什么 服务的接收者期望在调用 g