PHP + CURL и PHP + SoapClient - PullRequest
       62

PHP + CURL и PHP + SoapClient

0 голосов
/ 28 января 2019

это мой первый пост, так что извините за что-то.Я искал в интернете, но не нашел ничего непротиворечивого.

Я должен отправить этот XML на WS:

<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ser=\"http://services.senior.com.br\">
            <soapenv:Body>
              <ser:ConsultarGeral>
                <user>iusr</user>
                <password>ipss</password>
                <encryption>0</encryption>
                <parameters>
                  <CodEmp>1</CodEmp>
                  <CodFil>1</CodFil>
                  <IdentificadorSistema>1</IdentificadorSistema>
                </parameters>
              </ser:ConsultarGeral>
            </soapenv:Body>
          </soapenv:Envelope>

И я всегда получал одну и ту же ошибку (она говорит: «я не отправляю поля codemp, codfil, identificadorsistema).
Я пытался с CURL:

 const URI_CURL = 'http://192.168.1.7:8080/g5-senior-services/sapiens_Synccom_senior_g5_co_cad_condicaopagamento?wsdl=';

    function execWs() {
        try {

        $curl = curl_init();

        curl_setopt_array($curl, array(
          CURLOPT_URL => URI_CURL,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_MAXREDIRS => 10,
          CURLOPT_TIMEOUT => 60,
          CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
          CURLOPT_CUSTOMREQUEST => "POST",
          CURLOPT_POSTFIELDS => "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ser=\"http://services.senior.com.br\">
            <soapenv:Body>
              <ser:ConsultarGeral>
                <user>iusr</user>
                <password>ipss</password>
                <encryption>0</encryption>
                <parameters>
                  <CodEmp>1</CodEmp>
                  <CodFil>1</CodFil>
                  <IdentificadorSistema>1</IdentificadorSistema>
                </parameters>
              </ser:ConsultarGeral>
            </soapenv:Body>
          </soapenv:Envelope>",
          CURLOPT_HTTPHEADER => array(
            "cache-control: no-cache",
            "content-type: text/xml"
          ),
        ));
        $curlInfo = curl_getinfo($curl);
        //print_r($curlInfo);
        $response = curl_exec($curl);
        $err      = curl_error($curl);

        curl_close($curl);

        if ($err) {

          //$info['mensagem'] = $err;
          $info['erro']     = false;

          return $info;

        } else {

          $xml = simplexml_load_string(str_replace('ns2:', '', str_replace('S:', '', $response)));

          //$xml = simplexml_load_string($response);
          if (is_object($xml)) {

            $info['TipoRetorno'] = (int) $xml->Body->ConsultarGeralResponse->result->TipoRetorno;
            $info['CondicaoDePagamento'] = (string) $xml->Body->ConsultarGeralResponse->result->CondicaoDePagamento;
            $info['MensagemRetorno'] = (string) $xml->Body->ConsultarGeralResponse->result->MensagemRetorno;
            $info['Erros'] = (string) $xml->Body->ConsultarGeralResponse->result->Erros;
            $info['erro']  = (string) $xml->Body->ConsultarGeralResponse->result->erroExecucao;
            echo "TipoRetorno:<br><i>";
            print_r ($info['TipoRetorno']);
            echo "</i><br>Lista Condições:<br><i>";
            print_r ($info['CondicaoDePagamento']);
            echo "</i><br>MensagemRetorno:<br><i>";
            print_r ($info['MensagemRetorno']);
            echo "</i><br>Erros:<br><i>";
            print_r ($info['Erros']);
            echo "</i><br>Erro:<br><i>";
            print_r ($info['erro']);
            echo "</i>";

          } else {

            //$info['mensagem'] = 'Erro';
            $info['erro']     = false;

          }

          if (is_array($info)) {

            return $info;

          } else {

            //$info['mensagem'] = 'Erro';
            $info['erro']     = false;

            return $info;

          }

        }

      } catch (Exception $e) {

        return $e->getMessage();

      }

    }

?>

И SoapClient:

$a = 1;
$b = 1;
$c = 1;

$client = new SoapClient('http://192.168.1.7:8080/g5-senior-services/sapiens_Synccom_senior_g5_co_cad_condicaopagamento?wsdl');
$function = 'ConsultarGeral';
$arguments= array('user' => 'isur', 'password' => 'ipss', 'encryption' => 0, 'ConsultarGeral' => array('CodEmp'=>$a,'CodFil'=>$b,'IdentificadorSistema'=>$c));
$options = array('location' => 'http://192.168.1.7:8080/g5-senior-services/sapiens_Synccom_senior_g5_co_cad_condicaopagamento?wsdl');
$result = $client->__soapCall($function, $arguments, $options);
echo '<BR>';

if(isset($result->erroExecucao)){
    echo '<strong>' . $result->erroExecucao . '<strong>';
} else {
    $response = 'Resultado: <strong>' . $result->MensagemRetorno . '<strong>';
    echo $response;
}

Получил то же самоеошибка на обоих, кто-то может определить, что я делаю неправильно?

РЕДАКТИРОВАТЬ: я использовал

echo "REQUEST:\n" . htmlentities($client->__getLastRequest()) . "\n <BR>";

, чтобы напечатать мой XML, сгенерированный soapclient, и это возврат: REQUEST:

<?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://services.senior.com.br"><SOAP-ENV:Body><ns1:ConsultarGeral><user>iusr</user><password>ipss</password><encryption>0</encryption><parameters/></ns1:ConsultarGeral></SOAP-ENV:Body></SOAP-ENV:Envelope>

Параметры тега не создаются, но на $ arguments я передаю его: /

$arguments= array('user' => 'iusr', 
                  'password' => 'ipss', 
                  'encryption' => 0,
                  'ConsultarGeral' => array('CodEmp' => 1, 
                                            'CodFil' => 1,
                                            'IdentificadorSistema' => 1));

Ответы [ 2 ]

0 голосов
/ 29 января 2019

Используя soapUI, я обнаружил, что теги должны быть (с учетом регистра) codEmp, codFil, identificadorSistema, а не так, как сказано в документации (CodEmp, CodFil, IdentificadorSistema).

Спасибо за помощь в любом случае.

0 голосов
/ 28 января 2019

Объект SOAP, который вы пытаетесь отправить, ссылается на URL http://services.senior.com.br в теге xmlns.Существует размещенная XML-схема, которая проверяет ваш объект SOAP.Похоже, что в результате отсутствуют xmp-узлы codemp, codfil, identificadorsistema.Поэтому вы должны изменить свой xml-объект или удалить схему проверки.

Надеюсь, это поможет ...

...