PHP笔记-PHP中Web Service.

这几天工作需要.net站点免登陆访问PHP的Wiki站点。

PHP不熟,感觉很苦逼。任务下来了,必须搞定。准备用SSO,太麻烦了,要改写别人很多代码,这个是第三方CMS,封装的很厉害,不好改。最后我的解决方案是,采取我有把握的解决方案:

1) .net系统中用户,添加一个角色, WikiAdmin, 授权EPRG系统的外链。有这个角色的用户才能在ePRG系统上看到Wiki的链接。

2) 用户&角色名数据从Wellmed同步到Wiki数据库。[Wiki中需要提供添加用户的接口,手动写web service,.NET通过HTTP Web方式调用Web Service]

3)点击Wiki链接的时候,跳转到.net的页面eTools/Wiki,Controller的代码中去调用Wiki的service, 添加用户到Wiki系统,完成候reuturn view,在view中自动发post请求到wiki登录页面,登录之后,和之前一样,跳转到首页,整个过程用户看不到。

 

在配置PHP Service时候,花了很多时间。按照网上方法,做这个测试之前,要确认你的php配置文件中已经将soap扩展打开,即extension=php_soap.dll;发现php_soap.dll项目中都没有。要去下载一个可用的,问朋友说,要下载和当前php版本相同的,否则可能不能用。liense中是3.1,可是php官方都没有这个版本,怀疑liense中不代表php版本。最后通过搜索引擎知道Phpinfo();方法可用打印出PHP的环境变量信息,得知我的版本是是5.4.25。

在php.net官方下载php,复制php_soap.dll到\php\ext\文件夹。

修改\php\php.ini添加一行代码,extension=php_soap.dll,支持soap扩展。

写server.php的服务端代码,client端测试调用。成功。

 

尝试用.net调用。发现php自己调用自己不需要wsdl文件,.net调用必须有wsdl文件。想办法生成wsdl文件。

最后花了很久,用zend studio,参考网上wsdl格式,终于完成了。

发现.net中添加引用方式,也能成功调用。

 

然后完善具体的UserManager方法。数据保存在.php的源文件中。最后通过以下方法实现。

技术分享
<?php
class test {
    public function __construct()
    {
    }
    public function updateUser($userName,$pwd,$fullName,$email,$groups)
    {
        $file = ‘conf/users.auth.php‘;
        $content = file_get_contents($file);
        $array = explode("\n", $content);
        $newUserInfo=$userName.‘:‘.md5($pwd).‘:‘.$fullName.‘:‘.$email.‘:‘.$groups;
        $myfile = fopen("conf/users.auth.php", "w") or die("Unable to open file!");
        $isUserExists=false;
        
        for($i=0; $i<count($array); $i++)
        {
            if(strlen($array[$i])>5)
            {
                //foreach each user info
                $arrUserInfo = explode(":", $array[$i]);
                //user exists, update user; 
                $rs=strcasecmp($arrUserInfo[0],$userName);                     
                if($rs==0)
                {    
                    $isUserExists=true;
                    $content=str_replace($array[$i],$newUserInfo,$content);
                    break;
                }        
            }
        }
        //not exists, add user, append to last.
        if($isUserExists==false)
        {
            $content=$content."\n".$newUserInfo;
        }
        fwrite($myfile, $content);
        fclose($myfile);
        return "success";
    }
    public function getlist($type)
    {
        $result = array(
            array(‘name‘=>‘Zhangsan‘,‘age‘=>18),
            array(‘name‘=>‘Lisi‘,‘age‘=>20)
        );
        $result = json_encode($result);
        return $result;
    }
}

?>
View Code

 

还需要添加安全认证。

 

参考资料:http://www.cnblogs.com/mbailing/p/3998821.html

http://www.cnblogs.com/zzxbest/archive/2011/09/21/2184252.html

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。