Извлечение файла PDF с использованием SOAP и PHP - PullRequest
1 голос
/ 13 июля 2010

РЕДАКТИРОВАТЬ: Этот вопрос недействителен, так как сервер, который я использую, внезапно истек. ПОЖАЛУЙСТА, ИГНОРИРУЙТЕ

Я новичок в 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);

Есть идеи, что я делаю не так?

Ответы [ 3 ]

1 голос
/ 13 июля 2010

Похоже, это закодировано в 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);
1 голос
/ 13 июля 2010

Я не могу проверить это, так как не могу получить доступ к вашему веб-сервису (вставьте его в ваш браузер, и он говорит, что срок его действия истек), но я считаю, что вам нужно указать длину содержимого и расположение в заголовках.

$length = strlen($pdfdoc);
header("Content-type: application/pdf");
header("Content-Length: $length");
header("Content-Disposition: attachment; filename=myfile.pdf");
1 голос
/ 13 июля 2010

На первый взгляд кажется, что URL SoapClient неверен. Попробуйте:

$client = new SoapClient('http://69.128.94.30:8080/4DSOAP/'); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...