方法如下:

<?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. SDWebImage源码解读之SDWebImageDownloaderOperation

    第七篇 前言 本篇文章主要讲解下载操作的相关知识,SDWebImageDownloaderOperation的主要任务是把一张图片从服务器下载到内存中.下载数据并不难,如何对下载这一系列的任务进行设计 ...

  2. spark处理大规模语料库统计词汇

    最近迷上了spark,写一个专门处理语料库生成词库的项目拿来练练手, github地址:https://github.com/LiuRoy/spark_splitter.代码实现参考wordmaker ...

  3. C++中的引用

    一,C++中引用的基础知识 1.引用的基本概念 1.所谓的引用其实就是对变量起“别名”.引用和变量对应得是相同的内存,修改引用的值,变量的值也会改变,和指针类似. 2.引用在定义的时候必须要初始化,初 ...

  4. 从netty-example分析Netty组件

    分析netty从源码开始 准备工作: 1.下载源代码:https://github.com/netty/netty.git 我下载的版本为4.1 2. eclipse导入maven工程. netty提 ...

  5. Web安全相关(三):开放重定向(Open Redirection)

    简介 那些通过请求(如查询字符串和表单数据)指定重定向URL的Web程序可能会被篡改,而把用户重定向到外部的恶意URL.这种篡改就被称为开发重定向攻击.   场景分析 假设有一个正规网站http:// ...

  6. WebLogic的安装和配置以及MyEclipse中配置WebLogic

    WebLogic 中间件: 是基础软件的一大类,属于可复用软件的范畴,顾名思义,中间件属于操作系统软件与应用软件的中间,比如:JDK,框架,weblogic. weblogic与tomcat区别 : ...

  7. 【干货分享】流程DEMO-固定资产转移流程

    流程名: 固定资产转移  业务描述: 固定资产从某员工转移至另一员工,转出人与转入人必须不同  流程相关文件: 流程包.xml  流程说明: 直接导入流程包文件,即可使用本流程  表单:  流程:  ...

  8. 嵌入式&iOS:回调函数(C)与block(OC)回调对比

    学了OC的block,再写C的回调函数有点别扭,对比下区别,回忆记录下. C的回调函数: callBack.h 1).定义一个回调函数的参数数量.类型. typedef void (*CallBack ...

  9. 基于注解的Spring多数据源配置和使用

    前一段时间研究了一下spring多数据源的配置和使用,为了后期从多个数据源拉取数据定时进行数据分析和报表统计做准备.由于之前做过的项目都是单数据源的,没有遇到这种场景,所以也一直没有去了解过如何配置多 ...

  10. MongoDB基础

    1.概念及特点 说明:由于部分语句中$ 符号无法正常显示,使用¥代表 概念 MongoDB是一个基于文档的分布式的开源的NoSQL数据库,文档的结构为BSON形式,每一个文档都有一个唯一的Object ...