学编程 ❀(๑╯◡╰๑)❀ 就上soxunxi.cn!这里有CMS,CSS,NET,PHP,Linux,HTML,JAVA,MySQL,Python等教程.
当前位置: PHP > php怎样处置惩罚wsdl【php教程】,php,wsdl

0x00 媒介

近期一直在写接口,在此之前接口数据传输都是运用json或许xml花样举行传输或猎取的。但这次和第三方联调时,他们赋予的是wsdl花样。霎时秒变SB...

google到测试用code,测试挪用第三方接口返回状况200。认为没啥事了能够就此结束了,跟近后才发明,不管怎样挪用他们接口就是没有准确的数据回显。随后他们那里检察log后发明,压根传过去的参数他们没有接收到,懵逼了一下昼到晚上才处置惩罚了这个问题。以为挺有意义的,所以记下来先。

0x01 wsdl是什么

综合某度上所说,它就是一个xml花样的文档,用于形貌Web Server的定义,也就是说是一个Web Server要领及参数申明。

详见:https://www.ki4.cn/faq/437443.html

当我们要求http://api.test.cn/xwebservices/testServer?wsdl',相似这类末端是?wsdl的URL时,会一坨xml构造的数据给你。

没错,就是一坨...

接下来,怎样看懂它和它所说的要领才是症结,别的都是白费。

0x02 明白形貌文档

刚入手下手看这个xml文档时是比较懵逼的,但用PHP的扩大处置惩罚下就显著很多了。

<?php
$client = new SoapClient('http://api.test.cn/xwebservices/testServer?wsdl');
print "\n供应的要领\n";
print_r($client->__getFunctions());
print "相干的数据构造\n";
print_r($client->__getTypes());
print "\n\n";

这里我们用到了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 "供应的要领\n";
        print_r($client->__getFunctions());
        print "相干的数据构造\n";
        print_r($client->__getTypes());
        print "\n\n";
    }
    /**
     * 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的细致内容,更多请关注ki4网别的相干文章!

「梦想一旦被付诸行动,就会变得神圣,如果觉得我的文章对您有用,请帮助本站成长」

分享到:
赞(0) 打赏

支付宝扫一扫打赏

微信扫一扫打赏

标签:

上一篇:

下一篇:

相关推荐

0 条评论关于"php怎样处置惩罚wsdl【php教程】,php,wsdl"

最新评论

    暂无留言哦~~

博客简介

看古风美女插画Cos小姐姐,素材合集图集打包下载:炫龙网,好看二次元插画应有尽有,唯美小姐姐等你来。

友情链接

他们同样是一群网虫,却不是每天泡在网上游走在淘宝和网游之间、刷着本来就快要透支的信用卡。他们或许没有踏出国门一步,但同学却不局限在一国一校,而是遍及全球!申请交换友链

服务热线:
 

 QQ在线交流

 旺旺在线