Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
O código abaixo é a orientação de gerar boleto no gateway de pagamento da locaweb. O problema que não manjo muito de cURL e/ou JSON tão profundamente assim o qual peço ajuda. >
curl 'https://api.gatewaylocaweb.com.br/v1/transacao' -H "Content-Type: application/json" -d '{ "token":"3a5bbed0-50d4-012f-8d73-0026bb5a6240", "transacao":{ "pedido":{ "numero":"123", "total":"100.00", "moeda":"real", "descricao":"Venda em atacado." }, "pagamento":{ "meio_pagamento":"boleto_banco_brasil", "data_vencimento": "23122012" }, "comprador":{ "nome":"Bruna da Silva", "documento":"12345678900", "endereco":"Rua da Casa", "complemento":"Ap 82", "numero":"10", "cep":"09710240", "bairro":"Centro", "cidade":"São Paulo", "estado":"SP" } } }' Entendi que isso dever gerar um array que é enviado por POST... Então fui atrás da cURL no php.net. Mas os exemplos de lá são muito diferente da notação acima. O que seria este "-H"... ou mesmo o "-d" em cURL?? O JSON e uma forma de gerar agrupar array por javascript. Então deduzo que cada "{" chave é um array? array( chave => valor, ) Logo daria um array multidimencial Correto? $cars = array ( array("Volvo",100,96), array("BMW",60,59), array("Toyota",110,100) ). Volvo |100| 96 BMW| 60| 59 Toyota|110|100 Adaptando... Seria assim? $pagamento {$meio_pagamento => boleto_banco_brasil,)... Pesquisando achei uma processo via cURL que usei antigamente em um site que utilizada pagaseguro como um dois meios de pagamento... Pelo que vi... captava os dados,concatena gerando uma string: $dados.="&shippingAddressCountry=BRA". $dados.="&extraAmount=".$VrFreteOK. $dados.="&redirectURL=http://www.site.com.br/retornopagamento1.php". Depois, mandava dados pelo arrajo cURL (abaixo) que recebia um xml que tratava pelo simplexml_load_string. $curl = curl_init($url). curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false). curl_setopt($curl, CURLOPT_RETURNTRANSFER, true). curl_setopt($curl, CURLOPT_POST, true). curl_setopt($curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1). //curl_setopt($curl, CURLOPT_HTTPHEADER, Array("Content-Type: application/x-www-form-urlencoded. charset=ISO-8859-1")). curl_setopt($curl, CURLOPT_POSTFIELDS, $dados). $xml= curl_exec($curl). if($xml == 'Unauthorized'){ header('Location: usuErroPgto.php?tipo=autenticacao'). exit. }curl_close($curl). $xml= simplexml_load_string($xml). Mas que conforme a notação disponibiliza (1ª) da cURL + JSON não sei com criar a string ou mesmo efetuar o submit dos dados.. Desculpa se parecer básico para alguns... Mas realmente não sei por onde começar. Agradeço qualquer ajuda. Nossa! Ninguem... É tão complicado assim.. Ou eu é sou "fraquim" mesmo (rs). Gente! Uma luz please.
Olá Lucas, obrigado por responder.
Você quer dizer: Submit por POST, um form comun (normal); Os inputs(nomes) indicados na instrução da locaweb (1ª)..Concatenando-os assim:
>
$dados.="&shippingAddressCountry=BRA";
$dados.="&extraAmount=".$VrFreteOK;
...
É isso?? E o JSON? Tem haver alguma coisa? Na notação deles tem: "Content-Type: application/json"
Na outra da "$curl = curl_init($url)" (acima) tem outro "content-type".
Gente! Procurei documentação deles a respeito.. Não "funfa" e o pessoal de lá não tem um exemplo completo...
Será que algum já passou por isso!? Por favor indique mais ou menos o "caminho das pedras".
isso mesmo. quando você enviar os dados via url cURL, ele vai gerar um xml..
aonde você vai ter que trata o retorno.
veja o exemplo:
https://github.com/locaweb/locaweb-gateway-php/tree/master/example
O exemplo que você postou no começo é para uso em linha de comando. Por isso o [inline]-H[/inline] que significa que você deseja passar um cabeçalho customizado e o [inline]-d[/inline] que indica os dados que você deseja postar.
com PHP, você precisa informar que efetuará um POST e enviar os dados com a requisição
$request = curl_init();
curl_setopt($request, CURLOPT_POST, true);
curl_setopt($request, CURLOPT_POSTFIELDS, array(...));
curl_setopt($request, CURLOPT_URL, "https://api.gatewaylocaweb.com.br/v1/transacao");
var_dump(curl_exec($request));
curl_close($request);Lucas, Evando Obrigado por responder.
Evando: na linha :
curl_setopt($request, CURLOPT_POSTFIELDS, array(...));
Entendi que é pra mandar um array. Correto? Mais é um array comum php mesmo Ou tem que ser por esta parada do JSON ( que nunca usei).
Porque me parecer um array bidimensional.
testa com o array bidimensional e, em caso de erros, nos informe a respeito. Normalmente a lib já mapeia.
Fiz assim:
>
$meusDados = array(
'token' => '3a5bbed0-50d4-012f-8d73-0026bb5a6240',
'transacao' => array('pedido' =>
array('numero' => '123',
'total' => '100.00',
'moeda' => 'real',
'descricao' => 'Venda em atacado',
),
array('pagamento' =>
array('meio_pagamento' => 'boleto_banco_brasil',
'data_vencimento' => '23122012',
array('comprador' =>
array('nome' => '12345678900',
'documento' => 'boleto_banco_brasil',
'endereco' => 'Rua da Casa',
'complemento' => 'Ap 82',
'numero' => '123',
'cep' => '09710240',
'bairro' => 'Centro',
'cidade' => 'São Paulo',
'estado' => 'SP',
),
),
),
),
),
);
$json = json_encode($meusDados);
$request = curl_init();
curl_setopt($request, CURLOPT_POST, true);
curl_setopt($request, CURLOPT_POSTFIELDS,$json);[var_dump(curl_exec($request](https://api.gatewaylocaweb.com.br/v1/transacao)));
curl_close($request);
Deu:
bool(false)
Ta certo a montagem deste array, antes de verificar o cURL??
Deu :
Curl error: SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify
failedbool(false)
Independente do "token" exemplo ou oficial.
Evando, está certo a mondagem do array no PHP?
Segue codigo c/ tratamento do suposto erro.
>
$request = curl_init();
curl_setopt($request, CURLOPT_POST, true);
curl_setopt($request, CURLOPT_POSTFIELDS,$json);
curl_setopt($request, CURLOPT_RETURNTRANSFER, true);
curl_setopt($request, CURLOPT_URL, "[https://api.gatewaylocaweb.com.br/v1/transacao](https://api.gatewaylocaweb.com.br/v1/transacao)");
if(curl_exec($request) === false){
echo "Curl error: " . curl_error($request);
}else{
echo "Operation completed without any errors";
}
var_dump(curl_exec($request));
curl_close($request);Adicione as seguintes configurações (pode ser depois de [inline]$request = curl_init();[/inline]):
curl_setopt($request, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($request, CURLOPT_SSL_VERIFYHOST, false);Opah! Será que passou?
Deu:
Operation completed without any errorsstring(75) "{"transacao":{"erro":{"codigo":"001","mensagem":"Credenciais inválidas"}}}"
Pra tratar isso tentei :
var_dump(json_decode($json, true));
Deu:
Operation completed without any errorsarray(1) { ["transacao"]=> array(1) { ["erro"]=> array(2) { ["codigo"]=> string(3) "001" ["mensagem"]=> string(22) "Credenciais inválidas" } } }
Como jogo isso no Array?
A requisição terminou. Agora você vai precisar de um token válido pra verificar se os dados do array que foi postado são aceitos.
Sim. Estou vendo isso. Apesar de já ter testado com um token ativo e válido...
Mas como trato o retorno? Como jogo no array php? json_decode Tentei.... Deu acima.
Também quer dizer que a montagem do array POST (enviado) está correta. Correto?
Mas como trato o retorno? Como jogo no array php? json_decode Tentei.... Deu acima.
Se a API diz que retorna um json, é com json_decode mesmo.
>
Também quer dizer que a montagem do array POST (enviado) está correta. Correto?
Então, enquanto o retorno for "credenciais inválidas" fica difícil saber.
Olá Pessoal, Evandro.
Eu outra vez. Com o mesmo problema: Decifrar como executar esta integração.
Seguinte: Sobre as “credencias...” Recriei a chave/token... 2ª a orientação do suporte da Locaweb que, inclusive disse, que poderia enviar os dados por POST tipo:
var1=valor1&var2=valor2&var3=valor3...
O qual eu testei, porem, não funcionou.
Daí voltei a postar ( enviar por POST) o array como acima:
$json = json_encode($meusDados);
Passou do token (credenciais)... Imagino... Porque deu:
Operation completada sem erro cURLarray(1) { ["transacao"]=> array(1) {
["erro"]=> array(2) { ["codigo"]=> string(3) "002" ["mensagem"]=>
string(37) "Transação inválida: JSON inválido" } } }
Transação inválida JSON Inválido... Então também deduzo que o array enviado está errado.
Como devo montar o array da notação acima (1ª lá do top) ? É uma array dentro de outro? É a junção de 2 e 3 arrays? Uff!?
tenta utilizar json_encode nos dados que você deseja enviar por post.
Evandro.
Já estou fazendo isso (ver vemelho):
>
$meusDados = array(
'token' => '3a5bbed0-50d4-012f-8d73-0026bb5a6240',
'transacao' => array('pedido' =>
array('numero' => '123',
'total' => '100.00',
'moeda' => 'real',
'descricao' => 'Venda em atacado',
),
array('pagamento' =>
array('meio_pagamento' => 'boleto_banco_brasil',
'data_vencimento' => '23122012',
array('comprador' =>
array('nome' => '12345678900',
'documento' => 'boleto_banco_brasil',
'endereco' => 'Rua da Casa',
'complemento' => 'Ap 82',
'numero' => '123',
'cep' => '09710240',
'bairro' => 'Centro',
'cidade' => 'São Paulo',
'estado' => 'SP',
),
),
),
),
),
);
$json = json_encode($meusDados);
Mas não estou seguro se estou montando o array corretamente....
Digo: É um array dentro do outro? Ou é um array vazio com outra dimensão dentro do mesmo array (ver amarelo)?
>
Evandro.
Já estou fazendo isso (ver vemelho):
Como assim, já está fazendo isso? Lá no começo sugeri que fizesse...
>
curl_setopt($request, CURLOPT_POSTFIELDS, array(...));
Tentou dessa forma primeiro?? Veja que não há json_encode ali. Apenas o array puro.
Certo Evando.
Mudei:
//curl_setopt($request, CURLOPT_POST, $json);
por assim:
curl_setopt($request,
CURLOPT_POSTFIELDS, array('token'=>'8998b8b0-52da-426a-9bbe-28f48946de89',
array('transacao'=> array('pedido'=> array('numero'=>
'123','total'=> '100.00','moeda'=> 'real','descricao'=> 'Venda emRetornou:
Operation completada sem erro cURL array(1) { ["transacao"]=> array(1) {
["erro"]=> array(2) { ["codigo"]=> string(3) "002" ["mensagem"]=>
string(37) "Transação inválida: JSON inválido" } } }Você sabia que eles têm um utilitário escrito em PHP e documentado pra facilitar o trabalho?
Certo Evandro. bom dia.
Sim sim. Já vi e já tentei rodar com aqueles arquivos também. Não consegui ou estou fazendo algum coisa errada.
O suporte de lá não ajuda quase nada. As instruções/documentação(inclusive este que vc indicou)... Para mim são fragmentadas e também muito abrangentes. Digo serve para varias linguagens ao mesmo tempo. Exemplo: “Os caras” dizem que é simples a implementação do boleto veja o link.
http://www.locaweb.com.br/produtos/gateway-pagamento/funcionalidades.html...
Este exemplo foi o inicio deste Post... Então? Eu não consegui roda-lo... Nem com a sua ajuda. Mais valeu de qualquer forma.
Supondo que eles precisem <strong>validar</strong> o JSON pra obter suas credenciais, o erro "Credenciais inválidas" quer dizer que eles receberam um bom post, com um token inválido. Revise seu token de acesso ou entre em contato com o suporte.
olá, você pode enviar os dados para a ulr da locaweb via $_POST, A função curl, ajuda a você traser o retorno via xml.
aonde você vai ter que tratar os dados de retorno.. enviar para seu banco de dados