Autor Tópico: DISCUSSÃO SOBRE A MACRO SC_WEBSERVICE SC 8.1  (Lida 1125 vezes)

Haroldo

  • Expert
  • *****
  • Mensagens: 6274
  • Conhecimento diminui limitações.△TFA△
    • Infinitus Web Gestão Empresarial/Gestão ITIL/Consultoria Scriptcase
DISCUSSÃO SOBRE A MACRO SC_WEBSERVICE SC 8.1
« Online: Agosto 18, 2015, 03:59:44 pm »
Colegas,

Participei do seminário a respeito da macro sc_webservice, mas confesso que sua utilização ainda é confusa para mim:

Criei uma blank (Test_Servidor_Soap), cujo o evento onExecute tem o seguinte código:

Código: [Selecionar]
sc_include_library("prj", "MinhaClasse", "minhaclasse.class.php", true, true);

$url = "http://http://192.168.153.130/sc/8/app/webservice/Test_Servidor_Soap/";

$options = array('uri' => $url);
$server = new SoapServer("wsdl", $options);
$server->setClass('MinhaClasse');
$server->handle();

Biblioteca (novo): MinhaClasse:

Código: [Selecionar]
<?
class MinhaClasse {
function helloWorld ($nome) {
return "Hello World ".$nome;
}

}
?>


App Blank (Test_Cliente_Soap) para consumir o webservice evento onExecute:
Esse código funciona direitinho:

Código: [Selecionar]
$options = array( 'location' => 'http://192.168.153.130/sc/8/app/webservice/Test_Servidor_Soap',
   'uri' => 'http://192.168.153.130/sc/8/app/webservice/Test_Servidor_Soap' );


$client = new SoapClient(null, $options);

print_r(  $client->helloWorld("Maneco Programer Analist") );


Ms usando a macro não funciona:

Código: [Selecionar]
$options = array( 'location' => 'http://192.168.153.130/sc/8/app/webservice/Test_Servidor_Soap',
   'uri' => 'http://192.168.153.130/sc/8/app/webservice/Test_Servidor_Soap' );


//$client = new SoapClient(null, $options);

//print_r(  $client->helloWorld("Maneco Programer Analist") );

$arr_param = array(
   'trace' => true,
   'exceptions' => true,
   'compression' => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP,
   'connection_timeout' => 1000
  );


$obj_soap = sc_webservice("soap", 'http://192.168.153.130/sc/8/app/webservice/Test_Servidor_Soap', 80, "", "",$arr_param, 30);
      print_r(  $obj_soap ->helloWorld("Maneco Programer Analist") );


No exemplo não uso WSDL.



Rodrigo Goulart Padovezzi

  • Expert
  • *****
  • Mensagens: 1045
    • Email
Re:DISCUSSÃO SOBRE A MACRO SC_WEBSERVICE SC 8.1
« Responder #1 Online: Agosto 19, 2015, 08:08:45 am »
Bom dia, também participei do seminário e não achei que essa macro facilita a nossa vida.
Pelo que vi ela apenas muda a maneira de escrevermos o código PHP, não acho que facilitou muito.
Ainda prefiro usar a escrita padrão de curl e soap.

Alexandre Pereira Bühler

  • Expert
  • *****
  • Mensagens: 1640
  • Nunca estabeleça um teto para os seus rendimentos.
    • Simão & Bühler Ltda
    • Email
Re:DISCUSSÃO SOBRE A MACRO SC_WEBSERVICE SC 8.1
« Responder #2 Online: Novembro 13, 2015, 12:53:20 am »
Sinceramente.
Outro dia tentei usar esta macro.
Não sei se é somente a falta de documentação com mais exemplos.
Mas me compliquei todo. Sempre dava erro na execução.
Queria pegar os valores da alíquota para o phpnfe no IBPT.

Como passar esta consulta ao IBPT para a macro sc_webservice?

// baesado no manual do php -> http://php.net/manual/pt_BR/book.curl.php

// teste para produto

// inicia a variável que guardara a url;
$url= "http://iws.ibpt.org.br/api/deolhonoimposto/produto?token=meutokenxxxx&cnpj=meucnpjxxxx&codigo=85234920&uf=PR&ex=0";

//inicializa uma sessão curl e guarda numa variável
$curlhandle=curl_init();

// seta o meio de transferência
curl_setopt($curlhandle, CURLOPT_URL, "$url");
curl_setopt($curlhandle, CURLOPT_HEADER, 0); // elimia o cabeçalho da resposta

//imprime o retorno no navegador
curl_exec($curlhandle);

// close cURL resource, and free up system resources
curl_close($curlhandle);

echo "<br>";

// teste para serviço

// inicia a variável que guardara a url;
$url= "http://iws.ibpt.org.br/api/deolhonoimposto/servico?token=meutokenxxxx&cnpj=meucnpjxxxx&codigo=111032200&uf=PR&ex=0";

//inicializa uma sessão curl e guarda numa variável
$curlhandle=curl_init();

// seta o meio de transferência
curl_setopt($curlhandle, CURLOPT_URL, "$url");
curl_setopt($curlhandle, CURLOPT_HEADER, 0); // elimia o cabeçalho da resposta

//imprime o retorno no navegador
curl_exec($curlhandle);

// close cURL resource, and free up system resources
curl_close($curlhandle)

Como os colegas disseram é mais fácil usar a sintaxe do manual do php do que a macro em si.
« Última modificação: Novembro 13, 2015, 02:28:20 am por Alexandre Pereira Bühler »
--
Alexandre Pereira Bühler
https://www.simaoebuhler.com.br
Hospedagem compartilhada Scriptcase desenvolvimento e produção. Temos servidores dedicados Scriptcase.
Eu RTFM todo dia e você?

Alexandre Pereira Bühler

  • Expert
  • *****
  • Mensagens: 1640
  • Nunca estabeleça um teto para os seus rendimentos.
    • Simão & Bühler Ltda
    • Email
Re:DISCUSSÃO SOBRE A MACRO SC_WEBSERVICE SC 8.1
« Responder #3 Online: Novembro 13, 2015, 02:25:04 am »
Quando o windows 95 saiu eu tive que reinstalar ele 95 vezes para começar a ficar estável  e eu poder usar.
Com a macro sc_webservice eu tive que usar o método tentativa e erro mais vezes que Thomas Edson ao inventar a lâmpada.
Tudo se define ao péssimo manual da macro:
onde se lê:

"Retorno(opcional)    Formato de retorno do web service. Quando informado como "true", a resposta do web service é retornada em formato de array, caso contrário mantém-se o formato de retorno original do serviço. Default: true."

"Deveria dizer true = xml transformado em array."

Como o retorno do webservice do IBPT retornava um json era somente este erro que aparecia:
"Atenção
simplexml_load_string(): Entity: line 1: parser error : Start tag expected, '<' not found
Atenção
simplexml_load_string(): {"Codigo":"85234920","UF":"PR","EX":0,"Descricao":"Suportes gravados,p/leit.raio
Atenção
simplexml_load_string(): ^"

E então eu fiquei quebrando a cabeça para resolvê-lo e foram horas que se transformaram em alguns dias.
Ai lembrei de meu Pai que dizia que a cabeça é feita para muito mais que separar as duas orelhas.
E me concentrei na mensagem do erro e não na sua resolução.
Notei que ele transformava o xml em array. Horas!  Isto nunca aconteceria com json se a resposta que o sc espera é um xml.

Logo, se o retorno é xml use como True o parâmetro "Retorno", se for Json use como false.

Aqui vai a sintaxe que usei para o retorno do webservice (http://iws.ibpt.org.br/Help) numa app blank:

$url= "http://iws.ibpt.org.br/api/deolhonoimposto/produto";
// sintaxe da macro sc_webservice("Método", "URL", "Porta", "Método de Envio", "Array de Parâmetros", "Array de Configuração", "Timeout", "Retorno")
$configuracao=array(CURLOPT_RETURNTRANSFER => true);
$params['token'] = "meu token secreto, obtenha o seu no IBPT";
$params['cnpj'] = "Meu cnpj";
$params['codigo'] = "85234920";
$params['uf'] = "PR";
$params['ex'] = "0";
$params=http_build_query($params);

$resposta=sc_webservice("curl","$url",80,"GET",$params,$configuracao,30,false);
echo $resposta;

imprimiu no navegador:

{"Codigo":"85234920","UF":"PR","EX":0,"Descricao":"Suportes gravados,p/leit.raio laser,de fenom. dif.som/imag","Nacional":13.98,"Estadual":7.00,"Importado":26.32}

Aqui vai minha sugestão para netmake: Por favor melhorem este manual!

--
Alexandre Pereira Bühler
https://www.simaoebuhler.com.br
Hospedagem compartilhada Scriptcase desenvolvimento e produção. Temos servidores dedicados Scriptcase.
Eu RTFM todo dia e você?

pauloper

  • Global Moderator
  • Avançado
  • *****
  • Mensagens: 373
Re:DISCUSSÃO SOBRE A MACRO SC_WEBSERVICE SC 8.1
« Responder #4 Online: Novembro 13, 2015, 10:06:45 am »
Eu utilizo a leitura direta do site IBPT.

$token = 'cC1vCCyPDu2FI2QSXtPtJzCYPOjytRBhynhhyhrHv2X6YuUjhY5lNiyLcoeX4gzgpTktBKoZ';
  $cnpj = '12345678910';

    $result = file_get_contents("http://iws.ibpt.org.br/api/deolhonoimposto/produto?token=$token&cnpj=$cnpj&codigo=$ncm&uf=$uf&ex=$ex");
 
  if($result === false)
  {
    $result = NULL;
  }
  else
  {
    $result = json_decode($result);
  }
  $result = get_object_vars($result);
  return $result;

Alexandre Pereira Bühler

  • Expert
  • *****
  • Mensagens: 1640
  • Nunca estabeleça um teto para os seus rendimentos.
    • Simão & Bühler Ltda
    • Email
Re:DISCUSSÃO SOBRE A MACRO SC_WEBSERVICE SC 8.1
« Responder #5 Online: Novembro 13, 2015, 10:45:27 am »
Obrigado por contribuir com mais esta forma de acesso.
--
Alexandre Pereira Bühler
https://www.simaoebuhler.com.br
Hospedagem compartilhada Scriptcase desenvolvimento e produção. Temos servidores dedicados Scriptcase.
Eu RTFM todo dia e você?

liga

  • Novato
  • *
  • Mensagens: 10
Re:DISCUSSÃO SOBRE A MACRO SC_WEBSERVICE SC 8.1
« Responder #6 Online: Março 09, 2016, 03:20:03 pm »
Prezados,

Tentei seguir o exemplo do Haroldo e a aplicação NÃO funcionou. Alguém pode me dizer como faço uma aplicação web service Server, para rodar dentro do Sc 81.?

Obrigado.

Jailton

  • Expert
  • *****
  • Mensagens: 2032
Re:DISCUSSÃO SOBRE A MACRO SC_WEBSERVICE SC 8.1
« Responder #7 Online: Março 09, 2016, 07:09:32 pm »
Quando o windows 95 saiu eu tive que reinstalar ele 95 vezes para começar a ficar estável  e eu poder usar.
Com a macro sc_webservice eu tive que usar o método tentativa e erro mais vezes que Thomas Edson ao inventar a lâmpada.
Tudo se define ao péssimo manual da macro:
onde se lê:

"Retorno(opcional)    Formato de retorno do web service. Quando informado como "true", a resposta do web service é retornada em formato de array, caso contrário mantém-se o formato de retorno original do serviço. Default: true."


kkkkkkkkkkkkkkkkkkkkkkkk
O Princípio da Vibração. "Nada está parado, tudo se move, tudo vibra". Caibalion.

liga

  • Novato
  • *
  • Mensagens: 10
Re:DISCUSSÃO SOBRE A MACRO SC_WEBSERVICE SC 8.1
« Responder #8 Online: Março 10, 2016, 11:53:58 am »
Oi Jailton,

Suas palavras de incentivo deram resultado. Mergulhamos no código proposto pelo Haroldo e descobrimos erros na nossa cópia. Corrigimos e tudo FUNCIONOU CORRETAMENTE. Obrigado.