最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

php如何处理wsdl

来源:动视网 责编:小采 时间:2020-11-03 18:24:09
文档

php如何处理wsdl

php如何处理wsdl:0x00 前言近期一直在写接口,在此之前接口数据传输都是使用json或者xml格式进行传输或获取的。但这次和第三方联调时,他们给予的是wsdl格式。瞬间秒变SB...google到测试用code,测试调用第三方接口返回状态200。以为没啥事了可以就此结束了,跟近后才发现,不
推荐度:
导读php如何处理wsdl:0x00 前言近期一直在写接口,在此之前接口数据传输都是使用json或者xml格式进行传输或获取的。但这次和第三方联调时,他们给予的是wsdl格式。瞬间秒变SB...google到测试用code,测试调用第三方接口返回状态200。以为没啥事了可以就此结束了,跟近后才发现,不
0x00 前言

近期一直在写接口,在此之前接口数据传输都是使用json或者xml格式进行传输或获取的。但这次和第三方联调时,他们给予的是wsdl格式。瞬间秒变SB...

google到测试用code,测试调用第三方接口返回状态200。以为没啥事了可以就此结束了,跟近后才发现,不管怎么调用他们接口就是没有正确的数据回显。随后他们那边查看log后发现,压根传过去的参数他们没有接收到,懵逼了一下午到晚上才解决了这个问题。觉得挺有意思的,所以记下来先。

0x01 wsdl是什么

综合某度上所说,它就是一个xml格式的文档,用于描述Web Server的定义,也就是说是一个Web Server方法及参数说明。

当我们请求http://api.test.cn/xwebservices/testServer?wsdl',类似这种结尾是?wsdl的URL时,会一坨xml结构的数据给你。

没错,就是一坨...

28421c3fc7d991f4c4487b03993a819.png

接下来,怎么看懂它和它所说的方法才是关键,其它都是白搭。

0x02 理解描述文档

刚开始看这个xml文档时是比较懵逼的,但用PHP的扩展处理下就明显很多了。

<?php
$client = new SoapClient('http://api.test.cn/xwebservices/testServer?wsdl');
print "
提供的方法
";
print_r($client->__getFunctions());
print "相关的数据结构
";
print_r($client->__getTypes());
print "

";

05653125ef9f7976837243150044a23.png

这里我们用到了SOAP扩展,这个扩展是PHP官方文案中出示操作处理WebServer服务扩展,最终我们也是通过它来实现参数传输。

在上面的图片中可以理解出,这个接口提供了三个方法,分别是:

● xxxxUserInfo

● xxxxResumeNum

● download**

相关的数据机构则是指方法中参数名称,及参数类型。比如xxxxUserInfo方法,需要三个string类型的参数。分别对应in0,in1和in2。

此处的传参数key必然是in0,也就是一个无需数组,用户自定义或双方约定好的任意参数名称。在开始写接口方法的时候,我是根据接口文案中给予的参数说明如:err_msg(表示错误信息),err_code(表示错误编码),date(传输的最终数据)进行传输的。后改为有序数组,挨个填入对应参数,此时key就是的0到2。可试过之后还是没什么卵用,最终包着试一试的心态,尝试一下将int0作为键名,对应的err_msg内容作为值。ok~,完美解决。

Code:

<?php
/**
 * @author 0x584A
 * 获取WSDL接口数据
 */
class getwsdlTest extends PHPUnit_Framework_TestCase
{
 public $apiurl = 'http://api.test.cn/xwebservices/testServer?wsdl';
 private static $soapClientHandler;
 private $infoArr = [
 'err_msg' => 'false',
 'err_code' => '0',
 'date' => '此处是要传输的数据'
 ];
 public function setUp()
 {
 $client = new SoapClient('http://api.test.cn/xwebservices/testServer?wsdl');
 print "提供的方法
";
 print_r($client->__getFunctions());
 print "相关的数据结构
";
 print_r($client->__getTypes());
 print "

";
 }
 /**
 * xxxxUserInfo方法
 */
 public function testxxxxUserInfoData()
 {
 try {
 $ApiInfo = $this->infoArr;
 //set request param
 $parameter = array(
 'in0' => $ApiInfo['err_msg'],
 'in1' => $ApiInfo['err_code'],
 'in2' => $ApiInfo['date']
 );
 $result = $this->getSoapClientHandler()->synchUserInfo($parameter);
 //调用结果返回异常
 if (!$result instanceof stdClass) {
 throw new Exception("调用synchUserInfo结果出现异常:" . json_encode($result));
 }
 //调用接口状态码,输出对应错误详情
 if ($result->out == '01') {
 throw new Exception("调用synchUserInfo=>error:" . $result->out . ",msg:接口数据异常");
 }
 $xml_parser = xml_parser_create();
 if (!xml_parse($xml_parser, $result->out, true)) {
 xml_parser_free($xml_parser);
 throw new Exception("调用synchUserInfo返回的不是一个xml结构体");
 }
 xml_parser_free($xml_parser);
 //XXE
 libxml_disable_entity_loader(true);
 $xml = simplexml_load_string($result->out, 'SimpleXMLElement', LIBXML_NOCDATA);
 // 输出参数
 var_dump($xml->data);
 echo " 成功".PHP_EOL;
 } catch (SoapFault $soapFault) {
 throw new Exception($soapFault->getMessage() . $this->getSoapClientHandler()->__getLastResponse());
 }
 }
 /**
 * @description getSoapClientHandler
 */
 public function getSoapClientHandler()
 {
 if (!self::$soapClientHandler) {
 self::$soapClientHandler = new SoapClient($this->getSynchApi());
 }
 return self::$soapClientHandler;
 }
 /**
 * @description getSynchApi
 */
 public function getSynchApi()
 {
 return $this->apiurl;
 }
}
?>

推进:《PHP教程》

文档

php如何处理wsdl

php如何处理wsdl:0x00 前言近期一直在写接口,在此之前接口数据传输都是使用json或者xml格式进行传输或获取的。但这次和第三方联调时,他们给予的是wsdl格式。瞬间秒变SB...google到测试用code,测试调用第三方接口返回状态200。以为没啥事了可以就此结束了,跟近后才发现,不
推荐度:
标签: 处理 解决 php
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top