PHP

Pré requisitos

Para utilizar a API cliente em PHP, é preciso ter instalado e configurado um servidor WEB, com APACHE e PHP.

Começando

Primeiro passo é ter disponível seu token e a url do sistema. Caso não tenha ainda: Configurando acesso ao Webservice API.

Código da API client IXC

  1 <?php
  2 
  3 namespace IXCsoft;
  4 
  5 class WebserviceClientException extends \Exception
  6 {
  7 }
  8 
  9 class WebserviceClient implements \Iterator, \ArrayAccess
 10 {
 11     private $host, $curl, $token, $selfSigned, $responseBody, $decoded_resposta, $responseHeaders;
 12     private $headers = [];
 13 
 14     /**
 15      * api constructor.
 16      * @param string $host endereço da api
 17      * @param string $token token para autenticação é obrigatório
 18      * @param bool $selfSigned certificado autoassinado é obrigatório
 19      */
 20     public function __construct($host, $token = null, $selfSigned = false)
 21     {
 22         $this->host = $host;
 23         $this->token = $token;
 24         $this->selfSigned = $selfSigned;
 25         $this->curl = curl_init();
 26         curl_setopt($this->curl, CURLOPT_HEADER, 1);
 27 
 28         if ($token) {
 29             curl_setopt($this->curl, CURLOPT_USERPWD, $token);
 30         }
 31         curl_setopt($this->curl, CURLOPT_RETURNTRANSFER, true);
 32         if ($selfSigned) {
 33             curl_setopt($this->curl, CURLOPT_SSL_VERIFYHOST, FALSE);
 34             curl_setopt($this->curl, CURLOPT_SSL_VERIFYPEER, FALSE);
 35         }
 36     }
 37 
 38     public function __destruct()
 39     {
 40 
 41         curl_close($this->curl);
 42     }
 43 
 44     /**
 45      * Incluir cabeçalho customizado na requisição
 46      * @param string $key Nome do attributo
 47      * @param string $value Valor do attributo
 48      */
 49     public function setCabecalho($key, $value)
 50     {
 51         $this->headers[] = sprintf("%s: %s", $key, $value);
 52     }
 53 
 54     /**
 55      * Fazer uma requisição GET
 56      * @param string $url endereço da requisição
 57      * @param array $params GET parametros da requisição
 58      */
 59     public function get($url, array $params = [])
 60     {
 61         $this->headers[] = "ixcsoft: listar";
 62         curl_setopt($this->curl, CURLOPT_POST, true);
 63         curl_setopt($this->curl, CURLOPT_POSTFIELDS, $params);
 64         $this->request($url);
 65     }
 66 
 67     /**
 68      * Fazer uma requisição POST
 69      * @param string $url endereço da requisição
 70      * @param string array com o conteúdo
 71      * @param bool $json
 72      */
 73     public function post($url, array $params = [])
 74     {
 75         curl_setopt($this->curl, CURLOPT_POST, true);
 76         curl_setopt($this->curl, CURLOPT_POSTFIELDS, $params);
 77         $this->request($url);
 78     }
 79 
 80     /**
 81      * Fazer uma requisição PUT
 82      * @param string $url endereço da requisição
 83      * @param mixed $data array com o conteúdo
 84      * @param string $registro id do registro
 85      */
 86     public function put($url, $data, $registro)
 87     {
 88         if ($json = !is_scalar($data))
 89             $data = json_encode($data);
 90         curl_setopt($this->curl, CURLOPT_CUSTOMREQUEST, "PUT");
 91         curl_setopt($this->curl, CURLOPT_POSTFIELDS, $data);
 92         $this->request($url . '/' . $registro, $json);
 93     }
 94 
 95     /**
 96      * Fazer uma requisição DELETE
 97      * @param string $url endereço da requisição
 98      * @param string $registro id do registro
 99      */
100     public function delete($url, $registro = '')
101     {
102         curl_setopt($this->curl, CURLOPT_CUSTOMREQUEST, "DELETE");
103         $this->request($url . '/' . $registro);
104     }
105 
106     private function request($target, $json = false)
107     {
108         if (!strpos($target, '&')) {
109             $target = trim($target) . '/';
110         }
111         curl_setopt($this->curl, CURLOPT_URL, trim($this->host, '/') . '/' . trim($target));
112         if ($json) {
113             $this->headers[] = "Content-type: application/json";
114         }
115         if ($this->headers) {
116             curl_setopt($this->curl, CURLOPT_HTTPHEADER, $this->headers);
117         }
118         $this->headers = [];
119         $raw_response = curl_exec($this->curl);
120         $header_size = curl_getinfo($this->curl, CURLINFO_HEADER_SIZE);
121         $this->reset();
122         $header = substr($raw_response, 0, $header_size);
123         $this->responseHeaders = array_filter(explode(PHP_EOL, $header), function ($line) {
124             return !preg_match("/^(HTTP|\r\n|Server|Date)/", $line) && trim($line);
125         });
126         $this->responseBody = substr($raw_response, $header_size);
127     }
128 
129     /**
130      * Retorna o conteúdo da última requisição
131      * @param bool $json_decode
132      * @return mixed
133      */
134     public function getRespostaConteudo($json_decode = true)
135     {
136         if ($json_decode == true) {
137             $decode = json_decode($this->responseBody, true);
138             return $this->decoded_resposta = $this->array_map_recursive('utf8_decode', $decode);
139         } else {
140             return $this->decoded_resposta = $this->responseBody;
141         }
142         return $this->decoded_resposta = $json_decode ? json_decode($this->responseBody, true) : $this->responseBody;
143     }
144 
145     /**
146      * @param $callback função para executar recursivamente no array
147      * @param $array array que deverá ser executado a função
148      * @return array
149      */
150     private function array_map_recursive($callback, $array)
151     {
152         $func = function ($item) use (&$func, &$callback) {
153             return is_array($item) ? array_map($func, $item) : call_user_func($callback, $item);
154         };
155 
156         return array_map($func, $array);
157     }
158 
159     /**
160      * Retorna o cabeçalho da ultima requisição
161      * @return array
162      */
163     public function getResposta_cabecalho()
164     {
165         return $this->responseHeaders;
166     }
167 
168     //Iterator methods
169     public function current()
170     {
171         return current($this->decoded_resposta);
172     }
173 
174     public function key()
175     {
176         return key($this->decoded_resposta);
177     }
178 
179     public function next()
180     {
181         return next($this->decoded_resposta);
182     }
183 
184     public function valid()
185     {
186         return is_array($this->decoded_resposta)
187             && (key($this->decoded_resposta) !== NULL);
188     }
189 
190     //ArrayAcess methods
191     public function rewind()
192     {
193         $this->getRespostaConteudo(true);
194         return reset($this->responseBody);
195     }
196 
197     public function offsetExists($chave)
198     {
199         $this->getRespostaConteudo(true);
200         return is_array($this->responseBody) ?
201             isset($this->responseBody[$chave]) : isset($this->responseBody->{$chave});
202     }
203 
204     public function offsetGet($chave)
205     {
206         $this->decode_resposta();
207         if (!$this->offsetExists($chave))
208             return NULL;
209 
210         return is_array($this->decoded_resposta) ?
211             $this->decoded_resposta[$chave] : $this->decoded_resposta->{$chave};
212     }
213 
214     public function offsetSet($chave, $valor)
215     {
216         throw new WebserviceClientException("Decoded resposta data is immutable.");
217     }
218 
219     public function offsetUnset($chave)
220     {
221         throw new WebserviceClientException("Decoded resposta data is immutable.");
222     }
223 
224     private function reset()
225     {
226         curl_reset($this->curl);
227         curl_setopt($this->curl, CURLOPT_HEADER, 1);
228         if ($this->token) {
229             curl_setopt($this->curl, CURLOPT_USERPWD, $this->token);
230         }
231         curl_setopt($this->curl, CURLOPT_RETURNTRANSFER, true);
232         if ($this->selfSigned) {
233             curl_setopt($this->curl, CURLOPT_SSL_VERIFYPEER, false);
234         }
235     }
236 }

-

Voltar para Página principal