PHP 以 SOAP 方式呼叫介面

阿隆索逃跑了發表於2020-03-12

起因

最近做了一個專案,需要和其他公司進行介面除錯,該公司的開發工程師是搞java的,然後介面都是soap形式的,自己以前沒有用過soap,都是json格式資料介面,通過檢視文件,以及各種谷歌,自己搞了一個soap的公用方法用來除錯soap介面,特此記錄一下。

程式碼

    public function WsSoapClient($wsdl, $filter, $funName, $ccuser = null){
        $client = new \SoapClient($wsdl,array('trace' => 1));
        try {
            if (! empty($ccuser)) {
                $str = '';
                foreach ($filter as $v) {
                    $str = $str . $v;
                }
                $str = 加密方法處理
                $ns = 'http://xxxxx.com';
                $var = new \SoapVar('<auth:authenticate xmlns:auth="http://www.xxxx.com">
                    <cc>' . $ccuser['cc'] . '</cc>
                    <sign>' . $str . '</sign>
                </auth:authenticate>', XSD_ANYXML);
                $header = new \SoapHeader($ns, 'authenticate', $var);
                $client->__setSoapHeaders($header);
            }
            if ($filter) {
                $result = $client->$funName($filter);
            } else {
                $result = $client->$funName();
            }
            $result = get_object_vars($result);
        } catch (SoapFault $fault) {
            echo "Fault! code:", $fault->faultcode, ", string: ", $fault->faultstring;
        }
        return json_encode($result['return']);
    }

後續

因為呼叫過程中,對方一直要我給出請求報文,我開始並不知道怎麼列印出請求報文,後來查閱了一些資料才找到方法。

$client->__getLastRequest();//獲取最後一次請求的報文
$client->__getLastResponse();//獲取最後一次的返回報文
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章