方法如下:

<?php
header('Content-Type: text/html; charset=UTF-8');
define('APP_ROOT', dirname(__FILE__) . DIRECTORY_SEPARATOR);
$wsdlurl = "http://uniplatform.essence.com.cn/UniIdentity.asmx?wsdl";
$domain = "http://tgfx.essence.com.cn";
$qydomain = "http://ep.essence.com.cn";
$scharset = "utf-8";
$qyuser = null;
session_start();
$logincert =(empty($_GET["logincert"])) ? false:trim( $_GET["logincert"]);
$loginsso =(empty($_GET["ssocert"])) ? false:trim( $_GET["ssocert"]);//F38531ADE7D5221BE0438C92070AC392 if($logincert){
//是否已经在本平台登录过
$qyuser = $_SESSION['loginQiYeUserInfo'];
if(isset($qyuser) && !empty($qyuser)){
if( $qyuser['loginCert'] && $qyuser['loginCert'] == $logincert ){
//已经登录 直接进入 系统
echo '<script>window.location.href="'. $domain .'"</script>';exit;
}else{
//清空session
$_SESSION['loginQiYeUserInfo'] = null; //可能是另一个用户进来
}
}else{
//取下COOKIE中是否有
/*if (isset($_COOKIE["loginQissocert"]))
$loginsso = trim($_COOKIE["loginQissocert"]);*/
}
$rest = checkIntoSystem ($wsdlurl ,$logincert,$loginsso , $scharset , $qyuser); //认证
if($rest) {
//把$loginsso 保存到Cookie
//setcookie("loginQissocert", $loginsso,time()+3600);
//去拿到 员工的ID 以及其它信息保存在Session中
echo '<script>window.location.href="'. $domain .'"</script>';exit;
}else{
echo '<script>window.location.href="'. $domain .'/fail.html"</script>';exit;
}
} /**
* 认证 登录人员
*/
function checkIntoSystem( $wsdlurl ,$logincert,$loginsso ="" ,$scharset="utf-8",& $qyuser =null ){
if(empty($logincert)) return false; $scoptions = array (
'trace' => true, 'soap_version' => SOAP_1_2,
'exceptions' => false, 'encoding' => $scharset
);
$checkparam = array (
'userIP' => getClientIP(), //IP地址
'loginCert' => @ $logincert ,'SSOCert' => $loginsso, //登录的信息
'target' => "1045"//机器编号
);
//print_r($checkparam);
//调用门户接口测试
try {
$client = new SoapClient($wsdlurl, $scoptions); //print_r($client->__getFunctions()); //print_r($client->__getTypes());
/**
* 验证用用户是否能够进入系统性
*/
$resultdata=null ;
$check_rt = $client->__soapCall("SSOAuthenticat", array($checkparam) );
if ( $check_rt ) { //SSOAuthenticatResult是认证返回值变量
$returnstr = $check_rt->SSOAuthenticatResult;
if ($returnstr) {
$resultdata = explode('|', $returnstr);
}
//print_r($resultdata);
$rcode = trim($resultdata[0]);
switch ($rcode){
case "100":
$logusername = @ trim($resultdata[1]);
$qyuser['loginCert'] = $_GET["logincert"];
$qyuser['ltype'] = "QAN";
$qyuser['loginuname'] = $logusername;
$_SESSION['loginQiYeUserInfo'] = $qyuser; return true;//认证通过 可以登录
break;
case "201": echo "认证结果:验证失败"; break;
case "101": echo "认证结果:没有权限"; break;
default:echo "未知错误"; break;
} } else {
echo "认证返回结果为NULL,请检查再试。";
}
} catch (SoapFault $soapFault) {
//echo $soapFault;
echo "<===>" . $soapFault->faultstring;
$file = APP_ROOT."logs/error/".date("Ymd_His").time()."log";
file_put_contents($file,$soapFault);//记录异常信息
}
return false;
} // 定义一个函数getIP()
function getClientIP(){
$ip = "";
if (getenv("HTTP_CLIENT_IP"))
$ip = getenv("HTTP_CLIENT_IP");
else if(getenv("HTTP_X_FORWARDED_FOR"))
$ip = getenv("HTTP_X_FORWARDED_FOR");
else if(getenv("REMOTE_ADDR"))
$ip = getenv("REMOTE_ADDR");
else $ip = "Unknow"; return $ip;
} //获取所有部门
function SoapAllDepar($wdsl, $options) {
$mms = $client->GetAllDepartment(NULL);
//$xmlstring = base64_decode($mms->GetAllDepartmentResult);
}

  

PHP 调用webService方式的更多相关文章

  1. 【Java EE 学习 80 下】【调用WebService服务的四种方式】【WebService中的注解】

    不考虑第三方框架,如果只使用JDK提供的API,那么可以使用三种方式调用WebService服务:另外还可以使用Ajax调用WebService服务. 预备工作:开启WebService服务,使用jd ...

  2. Atitit 动态调用webservice与客户端代理方式调用

    Atitit 动态调用webservice与客户端代理方式调用 方式1: 使用call.invoke  直接调用WSDL,缺点:麻烦,不推荐--特别是JAVA调用.NET的WS时,会有不少的问题需要解 ...

  3. C# 调用WebService的3种方式 :直接调用、根据wsdl生成webservice的.cs文件及生成dll调用、动态调用

    1.直接调用 已知webservice路径,则可以直接 添加服务引用--高级--添加web引用 直接输入webservice URL.这个比较常见也很简单 即有完整的webservice文件目录如下图 ...

  4. C# .NET 动态调用webservice的三种方式

    转载自 百度文库 http://wenku.baidu.com/link?url=Q2q50wohf5W6UX44zqotXFEe_XOMaib4UtI3BigaNwipOHKNETloMF4ax4W ...

  5. [转]Net 下采用GET/POST/SOAP方式动态调用WebService C#实现

    本文转自:http://www.cnblogs.com/splendidme/archive/2011/10/05/2199501.html 一直以来,我们都为动态调用WebService方法而烦恼. ...

  6. .Net 下采用GET/POST/SOAP方式动态调用WebService的简易灵活方法(C#) [轉]Redfox

    一直以来,我都为动态调用WebService方法而烦恼.在.Net环境下,最常用的方法就是采用代理类来调用WebService,可以通过改变代理类的Url属性来实现动态调用,但当xmlns改变时就会出 ...

  7. 使用ajax和urlconnection方式调用webservice服务

    <html> <head> <title>使用ajax方式调用webservice服务</title> <script> var xhr = ...

  8. axis2调用webService几种方式

    主要有三种方式: 第一RPC方式,不生成客户端代码 第二,document方式,不生成客户端代码 第三,用wsdl2java工具,生成客户端方式调用 java代码: package samples.q ...

  9. Java调用WebService方法总结(9,end)--Http方式调用WebService

    Http方式调用WebService,直接发送soap消息到服务端,然后自己解析服务端返回的结果,这种方式比较简单粗暴,也很好用:soap消息可以通过SoapUI来生成,也很方便.文中所使用到的软件版 ...

随机推荐

  1. 恋爱虽易,相处不易:当EntityFramework爱上AutoMapper

    剧情开始 为何相爱? 相处的问题? 女人的伟大? 剧情收尾? 有时候相识即是一种缘分,相爱也不需要太多的理由,一个眼神足矣,当EntityFramework遇上AutoMapper,就是如此,恋爱虽易 ...

  2. Vue + Webpack + Vue-loader 系列教程(2)相关配置篇

    原文地址:https://lvyongbo.gitbooks.io/vue-loader/content/ 使用预处理器 在 Webpack 中,所有的预处理器需要和一个相应的加载器一同使用.vue- ...

  3. Xamarin+Prism开发详解五:页面布局基础知识

    说实在的研究Xamarin到现在,自己就没设计出一款好的UI,基本都在研究后台逻辑之类的!作为Xamarin爱好者,一些简单的页面布局知识还是必备的. 布局常见标签: StackLayout Abso ...

  4. 破解SQLServer for Linux预览版的3.5GB内存限制 (RHEL篇)

    微软发布了SQLServer for Linux,但是安装竟然需要3.5GB内存,这让大部分云主机用户都没办法尝试这个新东西 这篇我将讲解如何破解这个内存限制 要看关键的可以直接跳到第6步,只需要替换 ...

  5. .NET Core 2016 回顾

    都在回顾自己的2016,今天我们来看看.NET Core的2016. 每一年的脚步的确是快,转眼间马上就2017.新的一年,带着理想和抱负继续出发. 1 月 ASP.NET 5 改名 ASP.NET ...

  6. FILE文件流的中fopen、fread、fseek、fclose的使用

    FILE文件流用于对文件的快速操作,主要的操作函数有fopen.fseek.fread.fclose,在对文件结构比较清楚时使用这几个函数会比较快捷的得到文件中具体位置的数据,提取对我们有用的信息,满 ...

  7. 嵌入式&iOS:回调函数(C)与block(OC)传 参/函数 对比

    C的回调函数: callBack.h 1).声明一个doSomeThingCount函数,参数为一个(无返回值,1个int参数的)函数. void DSTCount(void(*CallBack)(i ...

  8. 浅谈单片机中C语言与汇编语言的转换

    做了一单片机设计,要用C语言与汇编语言同时实现,现将这次设计的感受和收获,还有遇到的问题写下,欢迎感兴趣的朋友交流想法,提出建议. 单片机设计:基于51单片机的99码表设计 软件环境:Proteus8 ...

  9. SpringMVC入门

    Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求-响应模 ...

  10. MySql 死锁时的一种解决办法

    转自:http://blog.csdn.net/mchdba/article/details/38313881 之前也遇到一次,今天又遇到了这个问题,所以这次必须解决,网上找到这篇文章帮了大忙,方便以 ...