【问题标题】:Soap requests with Curl PHP使用 Curl PHP 的 Soap 请求
【发布时间】:2019-03-07 06:47:43
【问题描述】:

如何通过使用以下soap 格式和url 使用Curl php 发出Soap 请求?我已经在网上尝试了可用的解决方案,但都没有成功。

$soap_request = '<?xml version="1.0" encoding="UTF-8"?>
        <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="urn:alisonwsdl" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
          <soap:Header>
            <credentials>
                <alisonOrgId>9ReXlYlpOThe24AWisE</alisonOrgId>
                <alisonOrgKey>C2owrOtRegikaroXaji</alisonOrgKey>
            </credentials>
          </soap:Header>
          <SOAP-ENV:Body>
            <q1:login xmlns:q1="urn:alisonwsdl">
                <email xsi:type="xsd:string">email</email>
                <firstname xsi:type="xsd:string">fname</firstname>
                <lastname xsi:type="xsd:string">lname</lastname>
                <city xsi:type="xsd:string">city</city>
                <country xsi:type="xsd:string">country</country>
                <external_id xsi:type="xsd:string"></external_id>
            </q1:login>
          </SOAP-ENV:Body>
        </SOAP-ENV:Envelope>';

 Url
https://alison.com/api/service.php?wsdl

【问题讨论】:

  • 您到底尝试了什么?为什么没有奏效?这是类似情况的另一个答案:stackoverflow.com/a/12222750/2173960。如果您仍然没有获得所需的输出,请发布您尝试过的内容。此外,如果您只是在寻找简单且免费的工具,请尝试 SoapUI。
  • 另请注意,PHP 有一个内置的SOAP Client,旨在帮助您连接到标准 SOAP 服务。
  • 哦,我真的希望这不是您刚刚发布到公共网站的真正身份验证密钥!
  • 这是真正的身份验证密钥@IMSoP
  • 由于某种原因,我尝试使用 SoapClient 并且虽然我启用了soap扩展,但返回了找不到类错误

标签: php curl soap


【解决方案1】:

假设您已经安装了 php_soap 扩展,您可以像这样访问 SOAP API:

<?php

$client = new SoapClient('https://alison.com/api/service.php?wsdl', array(
    'stream_context' => stream_context_create(array(
        'ssl' => array(
            'verify_peer' => false,
            'verify_peer_name' => false, 
            'allow_self_signed' => true
        )
    ))
));

您可能还想为身份验证定义标头

$auth = array(
    'alisonOrgId' => '9ReXlYlpOThe24AWisE',
    'alisonOrgKey' => 'C2owrOtRegikaroXaji'
);

$header = new SoapHeader('https://alison.com/api/service.php?wsdl', 'credentials', $auth, false);
$client->__setSoapHeaders($header);

然后你可以得到可用的功能列表

// Get function list
$functions = $client->__getFunctions ();
echo "<pre>";
var_dump ($functions);
echo "</pre>";
die;

或者马上调用一个函数,像这样:

// Run the function
$obj = $client->__soapCall("emailExists", array(
    "email" => "test@email.com"
));
echo "<pre>";
var_dump ($obj);
echo "</pre>";
die;

【讨论】:

  • 请注意,在大多数情况下,您不需要调用__soapCall;在你的例子中,你可以写$client-&gt;emailExists(array( "email" =&gt; "test@email.com"));
  • 我在标头上有该 API 的凭据,如何使用 SoapClient() 附加它们?
  • 非常感谢阿德兰,但现在出现此错误“身份验证错误”,我不知道为什么会这样,我已经正确配置了所有内容
  • 当我尝试使用此方法时,出现突出显示错误 $client->getUserId('t****@gmail.com');
  • 更改标题中的参数。 alisonOrgIdC2owrOtRegikaroXaji 只是一个示例
【解决方案2】:

经过一周的努力,我在 youtube https://www.youtube.com/watch?v=6V_myufS89A 上的本教程中找到了一些内容,并且我能够成功地向 API 发送请求,请先阅读上面的 xml 格式,然后再继续我的解决方案

     $options = array('trace'=> true, "exception" => 0);

    $client  = new \SoapClient('your url to wsdl',$options);

   //if you have Authorization parameters in your xml like mine above use SoapVar and SoapHeader as me below

    $params = new \stdClass();
    $params->alisonOrgId = 'value here';
    $params->alisonOrgKey = 'value here';

    $authentication_parameters = new \SoapVar($params,SOAP_ENC_OBJECT);

    $header = new \SoapHeader('your url to wsdl','credentials',$authentication_parameters);

    $client->__setSoapHeaders(array($header));


   print_r($client->__soapCall("Function here",'Function parameter here or left it as null if has no parameter'));

    //or call your function by

     print_r($client->yourFunction($function_parameters));

    }

希望这将帮助那些在包含身份验证信息的肥皂请求中苦苦挣扎的人

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-30
    • 1970-01-01
    • 2019-11-27
    • 2013-04-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多