2012-12-27 24 views
0

之前返回空格我使用了一個名爲ViaPost張貼字母爲我的企業網站。我正在使用SoapClient。上傳的文件必須是base64binary格式。我使用下面的代碼,但返回空。BASE64_ENCODE串

$pdf_data = file_get_contents('test.pdf'); 
    $pdf_data = base64_encode($pdf_data); 
    print $pdf_data; 

爲了擴大上述:

POST /viapostcustomer.asmx HTTP/1.1 
    Host: api.viapost.com 
    Content-Type: text/xml; charset=utf-8 
    Content-Length: length 
    SOAPAction: "http://api.viapost.com/CreateLetter" 





    <?xml version="1.0" encoding="utf-8"?> 
    <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
     <soap:Body> 
     <CreateLetter xmlns="http://api.viapost.com"> 
      <loginToken>string</loginToken> 
      <name>string</name> 
      <description>string</description> 
      <FileContents>base64Binary</FileContents> 
      <dynamic>boolean</dynamic> 
      <shareLetterWithGroup>boolean</shareLetterWithGroup> 
      <returnMessage>string</returnMessage> 
      <letterID>long</letterID> 
     </CreateLetter> 
     </soap:Body> 
    </soap:Envelope> 


    HTTP/1.1 200 OK 
    Content-Type: text/xml; charset=utf-8 
    Content-Length: length 

    <?xml version="1.0" encoding="utf-8"?> 
    <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
     <soap:Body> 
     <CreateLetterResponse xmlns="http://api.viapost.com"> 
      <CreateLetterResult>boolean</CreateLetterResult> 
      <returnMessage>string</returnMessage> 
      <letterID>long</letterID> 
     </CreateLetterResponse> 
     </soap:Body> 
    </soap:Envelope> 


    <?php 
    $client = new SoapClient("http://api.viapost.com/viapostcustomer.asmx?WSDL"); 
    $params = array('sUserName'=>'USERNAME','sPassword'=>'PASSWORD','sLoginToken'=>'','sReturnMessage'=>''); 
    $SignIn = $client->__soapCall('SignIn', array($params)); 
    $sLoginToken = $SignIn->sLoginToken; 


    $pdf_data = file_get_contents('test.pdf'); 
    $pdf_data = base64_encode($pdf_data); 
    $params = array('loginToken'=>$sLoginToken,'name'=>'testname','description'=>'testdescription','fileContents'=>$pdf_data,'dynamic'=>'true','shareLetterWithGroup'=>'false','returnMessage'=>'','letterID'=>''); 
    $CreateLetter = $client->__soapCall('CreateLetter', array($params)); 
    $returnMessage = $CreateLetter->returnMessage; 
    print $returnMessage; 


    ?> 

返回:保存你的文件有問題。請再試一次。

我已經做了一些愚蠢的,我知道我有。

+1

'$ pdf_data'是否爲空? (不'的file_get_contents( '檢驗.pdf');?'返回有效的數據) –

+0

有BASE64_ENCODE之前,你的$ pdf_data變量的內容? – m4t1t0

+0

是的,它的確如此。這是我沒有得到的。我承認我以前從未使用過這兩個命令中的任何一個。 base64_encode是可打印的嗎?感謝回覆 –

回答

1

base64_encode將返回空字符串,如果傳遞的參數本身就是空的。在將數據傳遞給此函數之前,您應該檢查這一點。

if(strlen($pdf_data)>0){ 
    $pdf_data = base64_encode($pdf_data); 
}else{ 
    throw new Exception("Empty File provided"); 
} 
+0

該文件不是空的,我的錯誤是輸出之前有數百個黑色空格。我不明白?當然base64_encode應該從第一個字符開始。 –

+0

這些空白行由此打印語句上方的代碼生成。顯示你的完整代碼,希望我們能弄明白。 –

+0

謝謝。我添加了我的代碼。我編碼,然後解碼文件,並正常返回。開始懷疑它是否有空白之前。但是SOAP響應仍然失敗。我試過其他的ViaPost SOAP調用,他們工作。這是我看編碼的主要原因。 –

1

嘗試增加錯誤報告,奇怪的檢查失敗也不會傷害。這應該有所幫助。 :)

<?php 
error_reporting(-1); 
ini_set('display_errors', true); 
$pdf_data = file_get_contents('test.pdf'); 

if(! $pdf_data) { 
    print 'Could not read file'; 
    exit; 
} 

$pdf_data = base64_encode($pdf_data); 
print $pdf_data; 
+0

號碼刺的確定感謝您的代碼。出於某種原因,打印數據之前有很多白色的空白區域。我期待一個充滿代碼的屏幕,而不是隻有300行空白字符。這是正常的嗎? –