欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

wsdl在php中的應(yīng)用

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)wsdl在php中的應(yīng)用,以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶,將通過(guò)不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名注冊(cè)、網(wǎng)絡(luò)空間、營(yíng)銷軟件、網(wǎng)站建設(shè)、谷城網(wǎng)站維護(hù)、網(wǎng)站推廣。

近期一直在寫接口,在此之前接口數(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)題。覺得挺有意思的,所以記下來(lái)先。

0x01 wsdl是什么

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

詳見:https://www.php.cn/faq/437443.html

當(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ò),就是一坨...

wsdl在php中的應(yīng)用

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

0x02 理解描述文檔

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

<?php
$client = new SoapClient('http://api.test.cn/xwebservices/testServer?wsdl');
print "\n提供的方法\n";
print_r($client->__getFunctions());
print "相關(guān)的數(shù)據(jù)結(jié)構(gòu)\n";
print_r($client->__getTypes());
print "\n\n";

wsdl在php中的應(yīng)用

這里我們用到了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,in1和in2。

此處的傳參數(shù)key必然是in0,也就是一個(gè)無(wú)需數(shù)組,用戶自定義或雙方約定好的任意參數(shù)名稱。在開始寫接口方法的時(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就是的0到2。可試過(guò)之后還是沒(méi)什么卵用,最終包著試一試的心態(tài),嘗試一下將int0作為鍵名,對(duì)應(yīng)的err_msg內(nèi)容作為值。ok~,完美解決。

Code:

<?php
/**
 * @author 0x584A
 * 獲取WSDL接口數(shù)據(jù)
 */
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' => '此處是要傳輸?shù)臄?shù)據(jù)'
    ];
    public function setUp()
    {
        $client = new SoapClient('http://api.test.cn/xwebservices/testServer?wsdl');
        print "提供的方法\n";
        print_r($client->__getFunctions());
        print "相關(guān)的數(shù)據(jù)結(jié)構(gòu)\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);
            //調(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;
    }
}
?>

關(guān)于wsdl在php中的應(yīng)用就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

網(wǎng)頁(yè)題目:wsdl在php中的應(yīng)用
網(wǎng)站網(wǎng)址:http://chinadenli.net/article30/gicsso.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)、移動(dòng)網(wǎng)站建設(shè)網(wǎng)站導(dǎo)航、企業(yè)建站、域名注冊(cè)、網(wǎng)站維護(hù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)