首页 > 代码库 > PHP笔记-PHP中Web Service.
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的源文件中。最后通过以下方法实现。
<?phpclass 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; }}?>
还需要添加安全认证。
参考资料:http://www.cnblogs.com/mbailing/p/3998821.html
http://www.cnblogs.com/zzxbest/archive/2011/09/21/2184252.html
PHP笔记-PHP中Web Service.