[RESOLVIDO] Bilibotecas internas e macros dentro de class

Bom dia,
Scriptcase 8 e 9.

Se crio uma biblioteca interna com o conteúdo:

<?php function imprime(){ sc_select(versao,"SELECT VERSION()"); echo "
".$versao->fields[0]; } ?>

Obtenho em uma blank ao chamar imprime() o valor correto impresso na tela.

Se crio uma biblioteca interna com o conteúdo:

<?php class servicosoap { public function helloworld() { return 'Hello world!'; } public function somarnum($num1,$num2) { if ($num < 0 || $num2 <= 0) { return new SoapFault('1', 'somarnum: Os números não pode ser negativos'); } return $num1 + $num2; } public function numeropositivo($num) { return $num >= 0; } public function mariadbversao() { sc_select(versao,"SELECT VERSION()"); return "
".$versao->fields[0]; } } ?>

e construo o servidor soap e o cliente soap

obtenho o erro ao chamar uma blank para consumir o webservice:

messagem: Hello world!
soma: 5
O número -10 é negativo
Call to undefined function sc_select()

Macros não funcionam em bibliotecas internas se estiverem dentro de classes?

Sim desde que eu é assim ‘desde sempre’ não dá para se criar classes em libs internas no SC.

Você terá que fazer essa rotina por tabela igual ‘SINUCA’, criar esse SOAP externo ao SC, e essa .php do SOAP, ela
faria requisição diretamente para uma _blank sua do feita no SC, que retornaria a versão do servidor para ela, ai ela retornaria para o ‘cliente’ que
fez a chamada já com a versão.

Criando JSON na blank_:

// JSON PARA 1 LINHA (NIVEL SIMPLES)
$array_para_json = array (‘name’ => “Diogo Matheus”, ‘age’ => 23);
$json_str=json_encode($array_para_json);
echo $json_str."
";
// Resultado: {“name”:“Diogo Matheus”,“age”:23} // Formato JSON

Rotina para ler o JSON dentro da SOAP que seu blank_ em SC vai gerar:

$_url=“http://www.seusite.com.br/sistema/blank_json01/blank_json01.php”;

$_retorno = curl_init();
$_timeout = 5;
curl_setopt($_retorno, CURLOPT_URL, $url);
curl_setopt($_retorno, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($_retorno, CURLOPT_CONNECTTIMEOUT, $_timeout);
$_dados_json_url = curl_exec($_retorno);
curl_close($_retorno);

echo 'JSON = '.json_decode($_dados_json_url, true);

Manipulando o JSON recebido:
$jsonObj = json_decode($_dados_json_url, true); // Aqui pegamos o JSON e convertemos em um ojbeto.
echo $jsonObj->name."
"; // /a partir daqui, $jsonObj é um objecto, portanto basta usar $jsonObj->name
// Resultado: Diogo Matheus

Jailton entendi agora com sua explicação.
Obrigado pelo retorno.
Eu fiz a parte do servidor do webservice em wsdl.
Para mim está funcionando assim:

blank do servidor

$opt = array(‘uri’ => ‘http://xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx’, ‘enconding’ => ‘utf8’);
$server = new SoapServer(null,$opt);
$server->setClass(‘servicosoap’);
$server->handle();

Note que ainda não fiz o arquivo wsdl por isto o null no new soapserver

blank do cliente

$opt = array(‘location’ => ‘http://xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx’,
‘uri’ => ‘http://xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx’,
‘enconding’ => ‘utf8’
);
try {
$client = new SoapClient(null,$opt);
echo ‘messagem: ‘.$client->helloworld().’
’;
echo ‘soma: ‘. $client->somarNum(2,3).’
’;
$num = -10;
if ($client->numeropositivo($num)) {
echo “O número $num é positivo
”;
}
else { echo “O número $num é negativo
”;
}
echo “
”.$client->mariadbversao();

}

catch (soapFault $e) {
echo $e->getMessage();
}

Este é o link de teste:
http://www.simaoebuhler.com.br/teste/soap/clientesoapsemwdsl/

Sim isso mesmo você no Servidor tem que fazer 2 arquivos um .php e um .wsdl que é na verdade um .xml
https://ajuda.locaweb.com.br/pt-br/Utilizando_SOAP_com_PHP

Para registro da solução.
Bibliotecas internas somente como métodos.

Dias atrás eu estava com problema semelhante, não estava conseguindo implementar classe dentro da biblioteca interna. A solução foi usar uma externa com NuSOAP.