2010-07-12 50 views
1

編輯︰這個問題是無效的,因爲我使用的服務器已經突然中斷。請忽略使用SOAP和PHP獲取PDF文件

我是新來的SoapClient在PHP中,我試圖通過傳遞三個參數並抓取結果來獲取PDF。這裏是我正在使用WSDL文件(我真的不太多/在這個部分的任何控件):

<!-- this WSDL file was automatically generated by 4D --> 
<definitions name="A_WebService" targetNamespace="http://www.4d.com/namespace/default" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://www.4d.com/namespace/default" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <message name="WS_ME_StatementRequest"> 
     <part name="FuneralHomeID" type="xsd:string"/> 
     <part name="Month" type="xsd:int"/> 
     <part name="Year" type="xsd:string"/> 
    </message> 
    <message name="WS_ME_StatementResponse"> 
     <part name="StatementPDF" type="xsd:base64Binary"/> 
    </message> 
    <portType name="A_WebServiceRPC"> 
     <operation name="WS_ME_Statement"> 
      <input message="tns:WS_ME_StatementRequest"/> 
      <output message="tns:WS_ME_StatementResponse"/> 
     </operation> 
    </portType> 
    <binding name="A_WebServiceBinding" type="tns:A_WebServiceRPC"> 
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="rpc" /> 
     <operation name="WS_ME_Statement"> 
<documentation>Inputs: None 
Outputs: text variable</documentation> 
      <soap:operation soapAction="A_WebService#WS_ME_Statement"/> 
      <input> 
       <soap:body use="encoded" namespace="http://www.4d.com/namespace/default" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </input> 
      <output> 
       <soap:body use="encoded" namespace="http://www.4d.com/namespace/default" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </output> 
     </operation> 
    </binding> 
    <service name="A_WebService"> 
     <documentation></documentation> 
     <port name="A_WebServicePort" binding="tns:A_WebServiceBinding"> 
      <soap:address location="http://69.128.94.30:8080/4DSOAP/"/> 
     </port> 
    </service> 
</definitions> 

而且這裏是我到目前爲止這是剛剛返回404的:

<?php 

header("content-type: application/pdf"); 

$client = new SoapClient('http://69.128.94.30:8080/4DSOAP/'); 
$result = $client->WS_ME_StatementRequest(array('FuneralHomeID' => '0008-00', 'Month' => 11, 'Year' => "2008")); 
$pdfdoc = $result->WS_ME_StatementResponse->StatementPDF; 
print($pdfdoc); 

我做錯了什麼想法?

+0

嘗試先將它寫入文件。 – 2010-07-12 20:23:47

回答

1

看起來像它的base64編碼..

header("content-type: application/pdf"); 

$client = new SoapClient('http://69.128.94.30:8080/4DSOAP/'); 
$result = $client->WS_ME_StatementRequest(array('FuneralHomeID' => '0008-00', 'Month' => 11, 'Year' => "2008")); 
echo base64_decode($result->WS_ME_StatementResponse->StatementPDF); 
+0

謝謝。你有嘗試過嗎?我只是試過了,它似乎沒有改變任何東西。 – 2010-07-12 20:29:31

+0

我無法得到過期消息..嘗試將其寫入二進制文件!該過期消息看起來像是一個服務器錯誤..您可能需要仔細檢查一下,您是不是首先查詢過期的產品;)在瀏覽器中查看:http://69.128.94.30:8080/4DSOAP/。 – 2010-07-12 20:32:09

+0

是的,服務器自發布以來似乎已過期。好的時機呃?無論如何,我更新了OP,告訴人們忽略這個問題,因爲我們現在無法測試。 – 2010-07-12 20:47:27

1

乍一看,它看起來像SoapClient網址是錯誤的。嘗試:

$client = new SoapClient('http://69.128.94.30:8080/4DSOAP/'); 
+0

啊,這是我改變了作爲一個測試後複製/粘貼的錯。可悲的是,不會改變任何事情。我將它固定在OP中。 – 2010-07-12 20:17:29

1

我不能對此進行測試,因爲我無法訪問您的Web服務(它粘貼到瀏覽器和它說,它已過期)但我相信你需要在你的頭文件中指定一個內容長度和配置。

$length = strlen($pdfdoc); 
header("Content-type: application/pdf"); 
header("Content-Length: $length"); 
header("Content-Disposition: attachment; filename=myfile.pdf");