【问题标题】:Getting an error trying to pass data to web service method using PHP尝试使用 PHP 将数据传递给 Web 服务方法时出错
【发布时间】:2015-05-08 00:29:59
【问题描述】:

我正在尝试使用 PHP 将提交的表单字段传递给将在我们的数据库中创建用户记录的 Web 服务。我知道 Web 服务正在运行,因为我有 ColdFusion 代码,它能够成功地创建一个用户帐户,并从我的本地计算机提交参数。但是,由于我们的网站是在 Drupal (php) 中构建的,因此我需要在 php 中使用它。我也尝试了 wsclient(drupal 模块),但无济于事。

我遇到了这个帖子 (How to make a PHP SOAP call using the SoapClient class),这与我正在尝试做的事情相似,但我不断收到错误消息。这是我正在使用的代码。另外,我需要通过安全密码才能使用网络服务才能使用它。

  class Create {
    function Create($securityPassword) 
    {
        $this->securityPassword = $securityPassword;
    }
}

$client = new SoapClient("https://isgweb.entnet.org/iservices/Account.asmx?WSDL");

$create = new Create("XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"); //web service password

$params = array(        
      "Create" => $create,
      "Prefix" => "Mr", 
      "FirstName" => "John", 
      "LastName" => "Doe",
    );

//print_r($params);

$response = $client->__soapCall('Create', array($params));

var_dump($response);

这是我得到的错误:

致命错误:未捕获的 SoapFault 异常:[soap:Server] 服务器无法处理请求。 ---> 对象引用未设置为对象的实例。在 C:\wamp\www\sandbox\webservice2.php:23 堆栈跟踪:#0 C:\wamp\www\sandbox\webservice2.php(23): SoapClient->__soapCall('Create', Array) #1 { main} 在第 23 行的 C:\wamp\www\sandbox\webservice2.php 中抛出

我试图调用的方法是“创建”方法。你可以看到它存在于wsdl url中

如果帮助我尝试通过 php 使用网络服务成功创建记录,我将不胜感激。

【问题讨论】:

    标签: php web-services


    【解决方案1】:

    这应该可以让它工作。

    XML

    <Create xmlns="http://ibridge.isgsolutions.com/Account/">
      <securityPassword>string</securityPassword>
      <account>
        <Id>string</Id>
        <Status>string</Status>
        <MemberType>string</MemberType>
        <JoinDate>string</JoinDate>
        <Prefix>string</Prefix>
        <FirstName>string</FirstName>
        <MiddleName>string</MiddleName>
        <LastName>string</LastName>
        <Suffix>string</Suffix>
        <Designation>string</Designation>
        <InformalName>string</InformalName>
        <MajorKey>string</MajorKey>
        <Title>string</Title>
        <ExcludeFromDirectory>string</ExcludeFromDirectory>
        <WebSite>string</WebSite>
        <Company>string</Company>
        <CompanyID>string</CompanyID>
        <OrgCode>string</OrgCode>
        <SourceCode>string</SourceCode>
        <ExcludeFromMail>string</ExcludeFromMail>
        <Category>string</Category>
        <Gender>string</Gender>
        <BirthDate>string</BirthDate>
        <WorkPhone>string</WorkPhone>
        <Fax>string</Fax>
        <TollFree>string</TollFree>
        <HomePhone>string</HomePhone>
        <Email>string</Email>
        <Chapter>string</Chapter>
        <FunctionalTitle>string</FunctionalTitle>
        <PaidThru>string</PaidThru>
        <WebLogin>string</WebLogin>
        <Password>string</Password>
        <SecurityGroup>string</SecurityGroup>
        <ExpirationDate>string</ExpirationDate>
        <StaffUser>string</StaffUser>
        <WebUser>string</WebUser>
        <Demographics>
          <Demographic>
            <Id>string</Id>
            <SequenceNumber>string</SequenceNumber>
            <WindowName>string</WindowName>
            <FieldName>string</FieldName>
            <FieldValue>string</FieldValue>
            <MultiInstance>string</MultiInstance>
          </Demographic>
          <Demographic>
            <Id>string</Id>
            <SequenceNumber>string</SequenceNumber>
            <WindowName>string</WindowName>
            <FieldName>string</FieldName>
            <FieldValue>string</FieldValue>
            <MultiInstance>string</MultiInstance>
          </Demographic>
        </Demographics>
      </account>
    </Create>
    

    代码

    $client = new SoapClient("https://isgweb.entnet.org/iservices/Account.asmx?WSDL");
    
    $params = [
        "Create" => [
            'securityPassword' => 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX',
            'account' => [
                'Prefix' => 'Mr',
                'FirstName' => 'John',
                'LastName' => 'Doe'
            ]
        ]
    ];
    
    $response = $client->__soapCall('Create', $params)->CreateResult;
    
    var_dump($response);
    

    【讨论】:

    • 希望你和我一样有肥皂请求:)
    • 我有一个后续问题。我如何将其转换为在 Drupal 中工作?我以为我可以将这段代码直接插入到 Drupal 中的函数中,但是由于括号它会引发错误,并且还可能由于 SoapClient 引发错误。
    • 这应该可以。您具体遇到的错误是什么?
    • 我想通了。该数组语法是在 PHP 5.4 中引入的,我的 Drupal 环境运行的是 5.3.29。我尝试了旧样式的数组语法“array()”与“[]”,它奏效了。谢谢。
    猜你喜欢
    • 2013-12-04
    • 2014-12-17
    • 1970-01-01
    • 2016-10-27
    • 2012-10-15
    • 1970-01-01
    • 2011-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多