1

ViaPost というサイトを使用して、ビジネス用の手紙を投稿しています。SoapClient を使用しています。アップロードされたファイルは base64binary 形式である必要があります。次のコードを使用していますが、空を返します。

    $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;


    ?>

戻り値: ファイルの保存中に問題が発生しました。もう一度やり直してください。

私は自分が持っていると知っているばかげたことをしました。

4

2 に答える 2

1

base64_encode渡された引数自体が空の場合、空の文字列を返します。この関数にデータを渡す前に、これを確認する必要があります。

if(strlen($pdf_data)>0){
   $pdf_data = base64_encode($pdf_data);
}else{
   throw new Exception("Empty File provided");
}
于 2012-12-27T11:37:39.583 に答える
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;
于 2012-12-27T11:37:57.443 に答える