成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

php處理wsdl

TwIStOy / 2179人閱讀

摘要:前言近期一直在寫(xiě)接口,在此之前接口數(shù)據(jù)傳輸都是使用或者格式進(jìn)行傳輸或獲取的。理解描述文檔剛開(kāi)始看這個(gè)文檔時(shí)是比較懵逼的,但用的擴(kuò)展處理下就明顯很多了。

0x00 前言

近期一直在寫(xiě)接口,在此之前接口數(shù)據(jù)傳輸都是使用json或者xml格式進(jìn)行傳輸或獲取的。但這次和第三方聯(lián)調(diào)時(shí),他們給予的是wsdl格式。瞬間秒變SB...

google到測(cè)試用code,測(cè)試調(diào)用第三方接口返回狀態(tài)200。以為沒(méi)啥事了可以就此結(jié)束了,跟近后才發(fā)現(xiàn),不管怎么調(diào)用他們接口就是沒(méi)有正確的數(shù)據(jù)回顯。隨后他們那邊查看log后發(fā)現(xiàn),壓根傳過(guò)去的參數(shù)他們沒(méi)有接收到,懵逼了一下午到晚上才解決了這個(gè)問(wèn)題。覺(jué)得挺有意思的,所以記下來(lái)先。

0x01 wsdl是什么

綜合某度上所說(shuō),它就是一個(gè)xml格式的文檔,用于描述Web Server的定義,也就是說(shuō)是一個(gè)Web Server方法及參數(shù)說(shuō)明。

詳見(jiàn):http://baike.baidu.com/link?url=R7x3FdekxbndR4SlzQLZE_2m1ebpt_SWt9IMjoHSErvLlbZ3-hwhR3ERrinXS1xZaDvkYFpxWnUchrk34_WkZq

當(dāng)我們請(qǐng)求http://api.test.cn/xwebservices/testServer?wsdl",類似這種結(jié)尾是?wsdl的URL時(shí),會(huì)一坨xml結(jié)構(gòu)的數(shù)據(jù)給你。

沒(méi)錯(cuò),就是一坨...

接下來(lái),怎么看懂它和它所說(shuō)的方法才是關(guān)鍵,其它都是白搭。

0x02 理解描述文檔

剛開(kāi)始看這個(gè)xml文檔時(shí)是比較懵逼的,但用PHP的擴(kuò)展處理下就明顯很多了。

__getFunctions());
print "相關(guān)的數(shù)據(jù)結(jié)構(gòu)
";
print_r($client->__getTypes());
print "

";

這里我們用到了SOAP擴(kuò)展,這個(gè)擴(kuò)展是PHP官方文案中出示操作處理WebServer服務(wù)擴(kuò)展,最終我們也是通過(guò)它來(lái)實(shí)現(xiàn)參數(shù)傳輸。

在上面的圖片中可以理解出,這個(gè)接口提供了三個(gè)方法,分別是:

xxxxUserInfo

xxxxResumeNum

download**

相關(guān)的數(shù)據(jù)機(jī)構(gòu)則是指方法中參數(shù)名稱,及參數(shù)類型。比如xxxxUserInfo方法,需要三個(gè)string類型的參數(shù)。分別對(duì)應(yīng)in0,in1in2

此處的傳參數(shù)key必然是in0,也就是一個(gè)無(wú)需數(shù)組,用戶自定義或雙方約定好的任意參數(shù)名稱。在開(kāi)始寫(xiě)接口方法的時(shí)候,我是根據(jù)接口文案中給予的參數(shù)說(shuō)明如:err_msg(表示錯(cuò)誤信息),err_code(表示錯(cuò)誤編碼)date(傳輸?shù)淖罱K數(shù)據(jù))進(jìn)行傳輸?shù)?。后改為有序?shù)組,挨個(gè)填入對(duì)應(yīng)參數(shù),此時(shí)key就是的02??稍囘^(guò)之后還是沒(méi)什么卵用,最終包著試一試的心態(tài),嘗試一下將int0作為鍵名,對(duì)應(yīng)的err_msg內(nèi)容作為值。ok~,完美解決。

Code:

 "false",
        "err_code" => "0",
        "date" => "此處是要傳輸?shù)臄?shù)據(jù)"
    ];

    public function setUp()
    {
        $client = new SoapClient("http://api.test.cn/xwebservices/testServer?wsdl");
        print "提供的方法
";
        print_r($client->__getFunctions());
        print "相關(guān)的數(shù)據(jù)結(jié)構(gòu)
";
        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);

            //調(diào)用結(jié)果返回異常
            if (!$result instanceof stdClass) {
                throw new Exception("調(diào)用synchUserInfo結(jié)果出現(xiàn)異常:" . json_encode($result));
            }

            //調(diào)用接口狀態(tài)碼,輸出對(duì)應(yīng)錯(cuò)誤詳情
            if ($result->out == "01") {
                throw new Exception("調(diào)用synchUserInfo=>error:" . $result->out . ",msg:接口數(shù)據(jù)異常");
            }

            $xml_parser = xml_parser_create();
            if (!xml_parse($xml_parser, $result->out, true)) {
                xml_parser_free($xml_parser);
                throw new Exception("調(diào)用synchUserInfo返回的不是一個(gè)xml結(jié)構(gòu)體");
            }
            xml_parser_free($xml_parser);
            //XXE
            libxml_disable_entity_loader(true);
            $xml = simplexml_load_string($result->out, "SimpleXMLElement", LIBXML_NOCDATA);
            // 輸出參數(shù)
            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;
    }

}
?>

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/30486.html

相關(guān)文章

  • PHP SOAP 擴(kuò)展的使用

    摘要:類也是一個(gè)只包含構(gòu)造器的低級(jí)類,與和類相似。安裝擴(kuò)展對(duì)于平臺(tái),需要在中加入如下代碼上面的工作完成之后,還需要注意的是擴(kuò)展在配置文件中有獨(dú)立的代碼片段這些配置項(xiàng)主要是用來(lái)指定處理文件時(shí)使用緩存的行為。支持與擴(kuò)展類似的。 原文地址:PHP SOAP 擴(kuò)展,本文在原文基礎(chǔ)上添加了一些內(nèi)容和章節(jié),也加入了一些注釋,請(qǐng)讀者注意。 前兩篇文章 《SOAP 介紹》 和 《SOAP Web 服務(wù)介紹》...

    Cympros 評(píng)論0 收藏0
  • 學(xué)習(xí) PHP SOAP 擴(kuò)展的一些筆記

    摘要:對(duì)的相關(guān)學(xué)習(xí)就先告此一段落,這是最后一篇文章用來(lái)記錄下學(xué)習(xí)過(guò)程中的一些筆記和心得。對(duì),沒(méi)錯(cuò)在還沒(méi)有提供擴(kuò)展前,的確很多人也是這樣做的。總結(jié)上面都是自己在學(xué)習(xí)擴(kuò)展時(shí)的一些零散的筆記,如果有不對(duì)的地方,希望大家指出,謝謝。 對(duì) SOAP 的相關(guān)學(xué)習(xí)就先告此一段落,這是最后一篇文章用來(lái)記錄下學(xué)習(xí)過(guò)程中的一些筆記和心得。 前面三篇文章分別是: 《SOAP 介紹》 《SOAP Web 服務(wù)介紹...

    wthee 評(píng)論0 收藏0
  • php實(shí)現(xiàn)webservice(實(shí)測(cè)C#及java可調(diào)用)

    摘要:具體如何操作這里跳過(guò),實(shí)現(xiàn)是需要擴(kuò)展的。返回值也很特別,不是直接返回,而是把它放到一個(gè)對(duì)象里再返回。返回值中值對(duì)應(yīng)的是中的名稱。最后按運(yùn)行可以查看到對(duì)應(yīng)的輸出,如下圖所示,說(shuō)明實(shí)現(xiàn)的在中可以正確調(diào)用。 使用PHP搭建起一個(gè)其他語(yǔ)言如C#、JAVA可用的Webservice的方法與網(wǎng)上大多數(shù)所述的用PHP建立的webservice感覺(jué)是有差別的。對(duì)于接口的輸入?yún)?shù)及輸出參數(shù)較為復(fù)雜的情況...

    arashicage 評(píng)論0 收藏0
  • spring boot開(kāi)發(fā)soap webservice

    摘要:本文介紹如何在中開(kāi)發(fā)接口,以及接口如何同時(shí)支持和兩種協(xié)議。該功能很簡(jiǎn)單,就是通過(guò)一個(gè)人的姓名查詢這個(gè)人的詳細(xì)信息。就是關(guān)鍵,如本次請(qǐng)求報(bào)文如下就是,對(duì)應(yīng)。測(cè)試使用進(jìn)行測(cè)試,通過(guò)地址導(dǎo)入文件進(jìn)行測(cè)試。測(cè)試這樣就實(shí)現(xiàn)了和同時(shí)提供的目的。 介紹spring boot web模塊提供了RestController實(shí)現(xiàn)restful,第一次看到這個(gè)名字的時(shí)候以為還有SoapController,...

    Ashin 評(píng)論0 收藏0
  • laravel中soapServer支持wsdl的例子

    摘要:上邊這段代碼是無(wú)模式下的,但是這次是對(duì)接第三方的服務(wù),需要我們這邊去定義,第三方來(lái)調(diào)用,第三方定義的是模式的,所以今天研究了下。 $server = new SoapServer(null, [uri => noganluonguri]); $server->setObject(new NganluongServer()); ob_start(); $server->handle();...

    elarity 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<