iT邦幫忙

0

如何創建一個 PHP SOAP Client 去call WCF Web 服務?

預期用SOAPClient寫一支PHP去call WCF Service(只有WSHTTPBinding,沒有Basic),以下程式是用來測試能否成功回傳結果,目前還無法成功,求解?

//$params的格式與代入的參數用WCFTestClient測試是有成功回傳值
try{       
    $params = array(
        'stringEncryptionAccount'=> $EncryptionAccount,
        'guidToken'=>$systoken,
        'stringErrorMsg' => $error
    );      
    echo "<pre>".print_r($params, true)."</pre>";
    $client = new SoapClient($url.'?wsdl',
        array(
            'trace'=>true,
            'exceptions' => true,
            'cache_wsdl' => 0,
            'soap_version' => 'SOAP_1_2',
            'encoding' => 'ISO-8859-1'
        )
    );  
    $OutParam = $client->GetDecryptAccount($params);
    $userid = $OutParam->GetDecryptAccountResult;
    echo 'Response'."<BR><BR>"; 
    echo 'userid: '.$userid."<BR><BR>"; 

} catch (SoapFault $e) {  
    echo '錯誤訊息: ' .$e->getMessage().'<br>';
    echo '錯行數: ' .$e->getLine().'<br>';
    echo '錯誤檔案: ' .$e->getFile().'<br>';
    echo '錯誤碼: ' .$e->getCode().'<br>';

die;
exit;
}

執行結果:
https://ithelp.ithome.com.tw/upload/images/20210915/20133775295pNs3Tfi.jpg

[更新]2021/9/16 於另一台Server測試相同程式,call相同的WCF service,同樣失敗,但錯誤訊息卻不同?
https://ithelp.ithome.com.tw/upload/images/20210916/20133775QfiXuoOI6x.jpg

看更多先前的討論...收起先前的討論...
Homura iT邦高手 1 級 ‧ 2021-09-15 17:07:48 檢舉
對方要求的格式呢?
他是要obj還是array?
mayyola iT邦研究生 5 級 ‧ 2021-09-16 08:50:40 檢舉
$wsdlUrl = "https://網址/webservice/webservice/WebService1.asmx?WSDL";
$client = new SoapClient($wsdlUrl, array('trace'=>true));
$authlogin = $client->MemberData();

可能要先print_r($OutParam) 或 print_r($userid) 判斷有沒有值
eric1223 iT邦新手 5 級 ‧ 2021-09-16 08:52:28 檢舉
function :
string GetDecryptAccount(string stringEncryptionAccount, Guid guidToken, out string stringErrorMsg)
我認為只要用帶3個string values的array做input ?
mayyola iT邦研究生 5 級 ‧ 2021-09-16 09:12:16 檢舉
$client->GetDecryptAccount( $參數1, $參數2, $參數3); 我猜是這樣,參考看看
eric1223 iT邦新手 5 級 ‧ 2021-09-16 11:21:05 檢舉
GetDecryptAccount($參數1, $參數2, $參數3)試過,錯誤訊息一樣

1 個回答

0
海綿寶寶
iT邦大神 1 級 ‧ 2021-09-15 21:13:49

確認一下$url?wsdl是否存在

看更多先前的回應...收起先前的回應...
eric1223 iT邦新手 5 級 ‧ 2021-09-16 08:49:11 檢舉

透過瀏覽器執行是存在
https://ithelp.ithome.com.tw/upload/images/20210916/20133775iX8J1S9NNX.jpg

如果認真一點
慢慢一篇一篇看

如果想速解
就在 new SOAPClient 之前加一列
libxml_disable_entity_loader(false);
試試看

eric1223 iT邦新手 5 級 ‧ 2021-09-16 11:14:02 檢舉

這篇我也有試過,但錯誤訊息相同

不想理錯誤訊息也不行
/images/emoticon/emoticon67.gif

我要發表回答

立即登入回答