【问题标题】:The basics of SOAP used with PHP与 PHP 一起使用的 SOAP 基础知识
【发布时间】:2011-06-14 07:42:25
【问题描述】:

我知道回答此类问题不是本网站的主要思想,但几天后我将有机会申请 PHP 程序员的初级(或者更准确地说是试用期)职位,并且这就是为什么我决定在这里发帖,希望结果会很好。 与这里的其他公司相比,这家公司有点大,所以众所周知,想要获得这个职位的人需要参加什么考试 - 要么是 - 编写分页脚本或某种 SOAP 服务。我对分页没有任何问题,但是从现在起我从来没有过多关注 SOAP,现在我需要学习与 PHP 一起使用时 SOAP 服务的基础知识。给出我申请的职位,没有人期望展示一些出色的东西,但我仍然需要基本的对 SOAP 客户端和服务器服务的理解,也许我现在甚至不会为 WSDL 烦恼,因为我认为我没有足够的时间去做所有事情。 所以我有一个示例代码,很可能是我需要编写和解释的如果我要编写 SOAP 服务:

客户端-

<?php

if (isset($_REQUEST["cname"]) && isset($_REQUEST["cpass"])) 
{
  $cname = $_REQUEST["cname"];
  $md5pass = md5( $_REQUEST["cpass"]);

  $client = new SoapClient(null, array(
      'location' => "http://localhost/test/BuildInSoapWithWSDL/server.php",
      'uri'      => "urn://localhost/test/BuildInSoapWithWSDL/",
      'trace'    => 1 ));
  try 
  {

        if ( $client->saveUserNameAndPass($cname, $md5pass)) 
           {echo "Data updated!";} 
    else 
      {echo "Error updating data!";}

        print "<pre>\n";
    print "Request :\n".htmlspecialchars($client->__getLastRequest()) ."\n";
    print "Response:\n".htmlspecialchars($client->__getLastResponse())."\n";
    print "</pre>";
  }
  catch (Exception $e) 
  {
      echo 'Exception: ',  $e->getMessage(), "\n";
  }
}
else
{ 
  echo "Error!"; 
}

?>

服务器端 -

<?php

$server = new SoapServer(null, array('uri' => 'urn://localhost/test/BuildInSoapWithoutWSDL/'));
$server->addFunction("saveUserNameAndPass");
$server->handle();

function database_connect($host, $account, $password, $dbname)
{
  $connect = mysql_connect($host, $account, $password);
  $connect = mysql_select_db($dbname, $connect);
  return $connect;
}

function saveUserNameAndPass($userName,$passWord) 
{
   try 
   {
      if (database_connect("localhost", "saveuser", "123456", "savetask") == 1)
      {
        $userName = mysql_real_escape_string($userName);
        $sql = "INSERT INTO accounts (name,passmd5) VALUES ('".$userName."','".$passWord."')";
        $result = mysql_query($sql);
        mysql_close();
        if ($result) 
          { return true;}
        else
          { return false;}
      }
      else
      { 
          return false; 
      }
   }
   catch (Exception $e) 
   {
     return false;
   }
}
?>

即使我有代码我仍然不知道做什么东西都是从初学者的角度来解释的。

谢谢

【问题讨论】:

    标签: php soap


    【解决方案1】:

    SOAP 的使用方式与您与 MySQL 数据库交互的方式相同。我可以给你一个真实的例子,连接到 Atlassian JIRA 网络应用程序。

    一开始,你只是建立联系。您将需要一个 WSDL 文件,其中包含所有内容,其中包含此特定 SOAP 服务器允许您执行的每个功能:

    try { $soapObject = new SoapClient('http://jira/rpc/soap/jirasoapservice-v2?wsdl'); }
    catch(Exception $ex) { die('SOAP connection failed: '$ex->getMessage()); }
    

    建立连接后,您只需使用它。如果需要,请登录:

    $authToken = $soapObject->login(JIRA_LOGIN, JIRA_PASS);
    

    然后向服务器发送请求:

    $jqlquery = "status not in (Closed,Resolved) and assignee = user");
    try { $issues = $soapObject->getIssuesFromJqlSearch($authToken, $jqlquery, 20); }
    catch(Exception $ex) { die('JIRA query failed: '$ex->getMessage()); }
    

    处理结果:

    foreach ($issues as $k => $v) { $users[$v->reporter] = array('fullname'=>$soapObject->getUser($authToken,$v->reporter)->fullname,'name'=>$v->reporter); }
    $project = $soapObject->getProjectByKey($authToken,"PROJECT");
    

    请注意,getIssuesFromJqlSearch、getUser、getProjectByKey 等是特定于应用程序的命令(在这种情况下,所有方法/函数都在JIRA RPC plugin documentation 中进行了描述)。

    就是这样。您不需要“断开连接”,加载完成时 afaik 会调用析构函数,它会自行关闭连接。

    【讨论】:

    • 嗯,谢谢,很高兴看到实践中不太复杂的东西
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-05
    • 1970-01-01
    • 2017-03-03
    • 1970-01-01
    • 2012-05-20
    • 1970-01-01
    相关资源
    最近更新 更多