php soap https 登录 复杂请求 上海资信 金融p2p Error cannot find parameter <faultstring>Function ' not found
来源:互联网 发布:c语言从右至左的运算符 编辑:程序博客网 时间:2024/04/30 07:16
php soap 复杂请求 上海资信 金融p2p <faultstring>Error cannot find parameter <faultstring>Function ' not found
要点
1 soap 链接 https的接口的时候 dorequest 方法需要重写
2 需要需要登录的话 dorequest 也要加入cookie
3 注意要加入wsdl规范 new soapclient('wsdl.txt',options)
wsdl.txt 从soap接口服务器下载
问题:
1 群友(php群 50194090)问soap接口的问题,,上海资信soap 。比较复杂的接口 需要登录 vpn,登录后输入网址,得到soap 接口的真实地址
2 、
先登录
$url = 'https://vpn.shanghai-cis.com.cn/+webvpn+/index.html';$post_data = array('tgroup' =>'','next' =>'','tgcookieset' =>'','username'=>'aaa','password'=>'bbb','Login'=>'登录',);$headers = array("Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8","Accept-Encoding:gzip, deflate","Accept-Language:zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3","Connection:keep-alive","Cookie:webvpnx=; webvpnlogin=1; webvpn_state=; csc_next=; webvpnlogin=1; webvpnLang=en","Host:vpn.shanghai-cis.com.cn","Referer:https://vpn.shanghai-cis.com.cn/+CSCOE+/logon.html","User-Agent:Mozilla/5.0 (Windows NT 6.1; rv:39.0) Gecko/20100101 Firefox/39.0");$link = curl($url,$headers,$post_data);//var_dump($link);$reg = '/webvpn=\s*([^;]+);/is';echo $link;if (preg_match_all($reg,$link['header'],$p))$cookiestr = implode(';',$p[1]);
function curl($url,$headers=array(),$post_data=''){ $ch = curl_init(); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查 //curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, true); // 从证书中检查SSL加密算法是否存在 curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post_data)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_TIMEOUT, 30); $response = curl_exec($ch); $errmsg = curl_error($ch); $pos = strpos($response,"\r\n\r\n"); return array( 'code'=>curl_getinfo($ch,CURLINFO_HTTP_CODE), 'header'=>substr($response,0,$pos), 'body'=>substr($response,$pos+4), 'error'=>$errmsg ); //curl_close($ch);}链接 soap
$context = stream_context_create( array ( 'ssl' => array ( 'verify_peer' => false, 'allow_self_signed' => true ), )); $options['stream_context'] = $context;$client = new SoapClientAuth('wsdl.txt', array( 'location' => 'https://vbbb/batchcredit?wsdl', // 设置server路径 'uri' => 'https://vpn.ddd/batchcredit?wsdl', 'login' => 'ccc', // HTTP auth login 'password' => 'ddd', // HTTP auth password 'trace'=>true, 'targetNamespace'=>'http://webservice.creditreport.p2p.sino.com/', 'stream_context'=>$context )); $client->__setCookie('webvpn',$cookiestr); var_dump($client);返回方法,和测试方法
$param1 = array( 'orgcode'=>'Q100000000', 'secret'=>'bbbbb', 'plate'=>'1', 'certtype'=>'0', 'certno'=>'111', 'name'=>'李亚', 'reason'=>'06', 'createtype'=>'0' );
var_dump($client->__getFunctions()); //var_dump($client->__soapCall());$ret = $client->queryCredit($param1);
<?php/** * SoapClientAuth for accessing Web Services protected by HTTP authentication * Author: tc * Last Modified: 04/08/2011 * Update: 14/03/2012 - Fixed issue with CURLAUTH_ANY not authenticating to NTLM servers * Download from: http://tcsoftware.net/blog/ * * Copyright (C) 2011 tc software (http://tcsoftware.net) * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ /** * SoapClientAuth * The interface and operation of this class is identical to the PHP SoapClient class (http://php.net/manual/en/class.soapclient.php) * except this class will perform HTTP authentication for both SOAP messages and while downloading WSDL over HTTP and HTTPS. * Provide the options login and password in the options array of the constructor. * * @author tc * @copyright Copyright (C) 2011 tc software * @license http://opensource.org/licenses/gpl-license.php GNU Public License * @link http://php.net/manual/en/class.soapclient.php * @link http://tcsoftware.net/ */ class SoapClientAuth extends SoapClient{ public $Username = NULL; public $Password = NULL; /** * * @param string $wsdl * @param array $options */ function SoapClientAuth($wsdl, $options = NULL) { @stream_wrapper_unregister('https'); @stream_wrapper_unregister('http'); stream_wrapper_register('https', 'streamWrapperHttpAuth'); stream_wrapper_register('http', 'streamWrapperHttpAuth'); if($options) { $this->Username = $options['login']; streamWrapperHttpAuth::$Username = $this->Username; $this->Password = $options['password']; streamWrapperHttpAuth::$Password = $this->Password; } parent::SoapClient($wsdl, ($options?$options:array())); @stream_wrapper_restore('https'); @stream_wrapper_restore('http'); } function __doRequest($request, $location, $action, $version) { $headers = array( 'User-Agent: PHP-SOAP', 'Content-Type: text/xml; charset=utf-8', 'SOAPAction: "' . $action . '"', 'Content-Length: ' . strlen($request), 'Expect: 100-continue', 'Connection: Keep-Alive' ); $this->__last_request_headers = $headers; $ch = curl_init($location); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POST, TRUE); curl_setopt($ch, CURLOPT_POSTFIELDS, $request); curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); curl_setopt($ch, CURLOPT_FAILONERROR, FALSE); curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY); curl_setopt($ch, CURLOPT_USERPWD, $this->Username . ':' . $this->Password); global $cookiestr; curl_setopt($ch, CURLOPT_COOKIE,'webvpn='.$cookiestr); //curl_setopt($ch, CURLOPT_SSLVERSION, 3); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); //curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_VERBOSE, TRUE); curl_setopt($ch, CURLOPT_CERTINFO, TRUE); $response = curl_exec($ch); if(($info = curl_getinfo($ch)) && $info['http_code']==200) return $response; else if($info['http_code']==401) throw new Exception ('Access Denied', 401); else if(curl_errno($ch)!=0) { throw new Exception(curl_error($ch), curl_errno($ch)); }else print_r($info); echo $info['http_code']; throw new Exception('Error', $info['http_code']); } } class streamWrapperHttpAuth { public static $Username = NULL; public static $Password = NULL; private $path = NULL; private $position = 0; private $buffer = NULL; private $curlHandle = NULL; public function stream_close() { if($this->curlHandle) curl_close ($this->curlHandle); } public function stream_open($path, $mode, $options, &$opened_path) { $this->path = $path; $response = $this->postRequest($this->path); $this->buffer = ($response!==FALSE?$response:NULL); $this->position = 0; return $response!==FALSE; } public function stream_eof() { return $this->position>strlen($this->buffer); } public function stream_flush() { $this->position = 0; $this->buffer = NULL; } public function stream_read($count) { if($this->buffer) { $data = substr($this->buffer, $this->position, $count); $this->position += $count; return $data; } return FALSE; } public function stream_write($data) { return ($this->buffer?TRUE:FALSE); } public function stream_seek($offset, $whence = SEEK_SET) { switch($whence) { case SEEK_SET: $this->position = $offset; break; case SEEK_CUR: $this->position += $offset; break; case SEEK_END: $this->position = strlen($this->buffer) + $offset; break; } return TRUE; } public function stream_tell() { return $this->position; } public function stream_stat() { return array('size' => strlen($this->buffer)); } public function url_stat($path, $flags) { $response = $this->postRequest($path); return array('size' => strlen($response)); } protected function postRequest($path, $authType = CURLAUTH_ANY) { $this->curlHandle = curl_init($path); curl_setopt($this->curlHandle, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($this->curlHandle, CURLOPT_FOLLOWLOCATION, TRUE); if(streamWrapperHttpAuth::$Username) { curl_setopt($this->curlHandle, CURLOPT_HTTPAUTH, $authType); curl_setopt($this->curlHandle, CURLOPT_USERPWD, streamWrapperHttpAuth::$Username . ':' . streamWrapperHttpAuth::$Password); } //curl_setopt($this->curlHandle, CURLOPT_SSLVERSION, 3); curl_setopt($this->curlHandle, CURLOPT_SSL_VERIFYPEER, FALSE); //curl_setopt($this->curlHandle, CURLOPT_SSL_VERIFYHOST, 2); $response = curl_exec($this->curlHandle); if(($info = curl_getinfo($this->curlHandle)) && $info['http_code']==200) { if(curl_errno($this->curlHandle)==0) { return $response; }else throw new Exception(curl_error($this->curlHandle), curl_errno($this->curlHandle)); }else if($info['http_code']==401) { // Attempt NTLM Auth only, CURLAUTH_ANY does not work with NTML if($authType!=CURLAUTH_NTLM) return $this->postRequest($path, CURLAUTH_NTLM); else { throw new Exception ('Access Denied', 401); } }else if(curl_errno($this->curlHandle)!=0) { throw new Exception(curl_error($this->curlHandle), curl_errno($this->curlHandle)); }else throw new Exception('Error', $info['http_code']); return FALSE; } }?>
0 0
- php soap https 登录 复杂请求 上海资信 金融p2p Error cannot find parameter <faultstring>Function ' not found
- 安装PHP常见错误解决error: libjpeg.(a|so),error: libpng.(a|so) not found,error: Cannot find ldap
- 安装PHP常见错误解决error: libjpeg.(a|so),error: libpng.(a|so) not found,error: Cannot find ldap
- 安装PHP常见错误解决error: libjpeg.(a|so),error: libpng.(a|so) not found,error: Cannot find ldap
- Parameter xxx not found.
- configure: error: Cannot find php-config
- PHP Fatal error: Class 'DOMDocument' not found
- PHP Fatal error: Class 'Mongo' not found
- PHP Fatal error: Class 'DOMDocument' not found
- Mybatis异常 Parameter "..." not found
- Mybatis出现Parameter not found
- CMDTUX_CAT:816: ERROR: Cannot exec, executable file not found
- php soap连接https的wsdl报错SOAP-ERROR: Parsing WSDL:Couldn't load from
- Could not find parameter map
- bug记录:Mybatis-error:Parameter 'xxx' not found. Available parameters are [list]
- error: cannot find -ldemo_shared
- configure: error: Cannot find php-config.的问题
- jni error: cannot access class file for not found javadoc:error
- 【Nginx】基于TCP的反向代理
- 面向对象的多态性(3)
- Eclipse启动Tomcat错误
- CH13
- 关于ListView循环播放的一些事情
- php soap https 登录 复杂请求 上海资信 金融p2p Error cannot find parameter <faultstring>Function ' not found
- 01背包问题(动态规划)
- POJ 题目1436 Horizontally Visible Segments(线段树染色覆盖求相互是否可见)
- java强引用、软引用、弱引用、虚引用
- 论char数组在c++和java中的不同
- linux常用命令(13):less命令
- iOS js oc相互调用(JavaScriptCore)
- iOS开发 跳转到系统设置
- Appium 自动化用例设计 (Excel 配置篇)