PHP与SOAP一起使用的基本知识

问题描述

|| 我知道这不是回答此类问题的主要网站,但几天之内,我将有机会申请初级的(或可能是更正确的试用期)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,$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;
   }
}
?>
即使我有代码,我仍然不知道如何做。因此,在编写SOAP服务时我需要对基础知识进行一些解释,如果不能接受在此讨论的这一主题,我将不胜感激。事情是从初学者的角度讲的。 谢谢     

解决方法

        SOAP的用法与与MySQL数据库进行交互的用法相同。我可以举一个真实的例子,说明如何连接Atlassian JIRA Web应用程序。 首先,您只需建立连接。您将需要一个包含所有内容的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插件文档中描述了所有方法/功能)。 而已。您不需要\“断开连接\”,加载完成时afaik会被调用,析构函数会自动关闭连接。