浅谈PHP调用Webservice思路及源码分享
发布:smiling 来源: PHP粉丝网 添加日期:2021-02-07 15:50:25 浏览: 评论:0
NuSoap是PHP环境下的WebService编程工具,用于创建或调用WebService。它是一个开源软件,是完全采用PHP语言编写的、通过HTTP收发SOAP消息的一系列PHP类。NuSOAP的一个优势是不需要扩展库的支持,这种特性使得NuSoap可以用于所有的PHP环境,不受服务器安全设置的影响。
方法一:直接调用,代码如下:
- <?
- /******************************************************************************/
- /* 文件名 : soapclient.php
- /* 说 明 : WebService接口客户端例程
- /******************************************************************************/
- include('NuSoap.php');
- // 创建一个soapclient对象,参数是server的WSDL
- $client = new soapclient('http://localhost/Webservices/Service.asmx?WSDL', 'wsdl');
- // 参数转为数组形式传递
- $aryPara = array('strUsername'=>'username', 'strPassword'=>MD5('password'));
- // 调用远程函数
- $aryResult = $client->call('login',$aryPara);
- //echo $client->debug_str;
- /*
- if (!$err=$client->getError()) {
- print_r($aryResult);
- } else {
- print "ERROR: $err";
- }
- */
- $document=$client->document;
- echo <<<SoapDocument
- <?xml version="1.0" encoding="GB2312"?>
- <SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:si="http://soapinterop.org/xsd">
- <SOAP-ENV:Body>
- $document
- </SOAP-ENV:Body>
- </SOAP-ENV:Envelope>
- SoapDocument;
- ?>
- <?
- /******************************************************************************/
- /* 文件名 : soapclient.php
- /* 说 明 : WebService接口客户端例程
- /******************************************************************************/
- include('NuSoap.php');
- // 创建一个soapclient对象,参数是server的WSDL
- $client = new soapclient('http://localhost/Webservices/Service.asmx?WSDL', 'wsdl');
- // 参数转为数组形式传递
- $aryPara = array('strUsername'=>'username', 'strPassword'=>MD5('password'));
- // 调用远程函数
- $aryResult = $client->call('login',$aryPara);
- //echo $client->debug_str;
- /*
- if (!$err=$client->getError()) {
- print_r($aryResult);
- } else {
- print "ERROR: $err";
- }
- */
- $document=$client->document;
- echo <<<SoapDocument
- <?xml version="1.0" encoding="GB2312"?>
- <SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:si="http://soapinterop.org/xsd">
- <SOAP-ENV:Body>
- $document
- </SOAP-ENV:Body>
- </SOAP-ENV:Envelope>
- SoapDocument;
- ?>
方法二:代理方式调用,代码如下:
- <?
- /******************************************************************************/
- /* 文件名 : soapclient.php
- /* 说 明 : WebService接口客户端例程
- /******************************************************************************/
- require('NuSoap.php');
- //创建一个soapclient对象,参数是server的WSDL
- $client=new soapclient('http://localhost/Webservices/Service.asmx?WSDL', 'wsdl');
- //生成proxy类
- $proxy=$client->getProxy();
- //调用远程函数
- $aryResult=$proxy->login('username',MD5('password'));
- //echo $client->debug_str;
- /*
- if (!$err=$proxy->getError()) {
- print_r($aryResult);
- } else {
- print "ERROR: $err";
- }
- */
- $document=$proxy->document;
- echo <<<SoapDocument
- <?xml version="1.0" encoding="GB2312"?>
- <SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:si="http://soapinterop.org/xsd">
- <SOAP-ENV:Body>
- $document
- </SOAP-ENV:Body>
- </SOAP-ENV:Envelope>
- SoapDocument;
- ?>
- <?
- /******************************************************************************/
- /* 文件名 : soapclient.php
- /* 说 明 : WebService接口客户端例程
- /******************************************************************************/
- require('NuSoap.php');
- //创建一个soapclient对象,参数是server的WSDL
- $client=new soapclient('http://localhost/Webservices/Service.asmx?WSDL', 'wsdl');
- //生成proxy类
- $proxy=$client->getProxy();
- //调用远程函数
- $aryResult=$proxy->login('username',MD5('password'));
- //echo $client->debug_str;
- /*
- if (!$err=$proxy->getError()) {
- print_r($aryResult);
- } else {
- print "ERROR: $err";
- }
- */
- $document=$proxy->document;
- echo <<<SoapDocument
- <?xml version="1.0" encoding="GB2312"?>
- <SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:si="http://soapinterop.org/xsd">
- <SOAP-ENV:Body>
- $document
- </SOAP-ENV:Body>
- </SOAP-ENV:Envelope>
- SoapDocument;
- ?>
许多使用NuSoap 调用.NET WebService或J2EE WebService的朋友可能都遇到过中文乱码问题,下面介绍这一问题的出现的原因和相应的解决方法。
NuSoap调用WebService出现乱码的原因:
通常我们进行WebService开发时都是用的UTF-8编码,这时我们需要设置:
$client->soap_defencoding = 'utf-8';
$client->soap_defencoding = 'utf-8';
同时,需要让xml以同样的编码方式传递:
$client->xml_encoding = 'utf-8';
$client->xml_encoding = 'utf-8';
至此应该是一切正常了才对,但是我们在输出结果的时候,却发现返回的是乱码。
NuSoap调用WebService出现乱码的解决方法:
实际上,开启了调试功能的朋友,相信会发现$client->response返回的是正确的结果,为什么$result = $client->call($action, array('parameters' => $param)); 却是乱码呢?
研究过NuSoap代码后我们会发现,当xml_encoding设置为UTF-8时,NuSoap会检测decode_utf8的设置,如果为true,会执行 PHP 里面的utf8_decode函数,而NuSoap默认为true,因此,我们需要设置:
- $client->soap_defencoding = 'utf-8';
- $client->decode_utf8 = false;
- $client->xml_encoding = 'utf-8';
- $client->soap_defencoding = 'utf-8';
- $client->decode_utf8 = false;
- $client->xml_encoding = 'utf-8';
Tags: Webservice
相关文章
- ·php soap 调用webservice应用测试(2014-07-23)
- ·PHP调用Webservice经典实例(2014-08-02)
- ·php中nusoap调用java axis2发布的webservice(2014-08-26)
- ·php 调用 webservice 中文乱码解决方案(2014-09-06)
- ·php实现通过soap调用.Net的WebService asmx文件(2018-08-03)
- ·PHP使用SOAP扩展实现WebService的方法(2019-10-20)
- ·PHP使用SOAP调用.net的WebService数据(2020-06-18)
- ·PHP调用JAVA的WebService简单实例(2020-10-26)
- ·php中创建和调用webservice接口示例(2021-03-24)
- ·php实现webservice实例(2021-04-24)
- ·四种php中webservice实现的简单架构方法及实例(2021-05-09)
- ·PHP调用.NET的WebService 简单实例(2021-05-18)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)