JGD 0 Denunciar post Postado Agosto 31, 2013 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. Compartilhar este post Link para o post Compartilhar em outros sites
lucas de souza 0 Denunciar post Postado Agosto 31, 2013 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 Compartilhar este post Link para o post Compartilhar em outros sites
JGD 0 Denunciar post Postado Setembro 2, 2013 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". Compartilhar este post Link para o post Compartilhar em outros sites
lucas de souza 0 Denunciar post Postado Setembro 2, 2013 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 Compartilhar este post Link para o post Compartilhar em outros sites
Evandro Oliveira 331 Denunciar post Postado Setembro 2, 2013 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); Compartilhar este post Link para o post Compartilhar em outros sites
JGD 0 Denunciar post Postado Setembro 3, 2013 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. Compartilhar este post Link para o post Compartilhar em outros sites
Evandro Oliveira 331 Denunciar post Postado Setembro 3, 2013 testa com o array bidimensional e, em caso de erros, nos informe a respeito. Normalmente a lib já mapeia. Compartilhar este post Link para o post Compartilhar em outros sites
JGD 0 Denunciar post Postado Setembro 3, 2013 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);curl_setopt($request, CURLOPT_URL, "https://api.gatewaylocaweb.com.br/v1/transacao"); var_dump(curl_exec($request));curl_close($request); Deu: bool(false) Ta certo a montagem deste array, antes de verificar o cURL?? Compartilhar este post Link para o post Compartilhar em outros sites
Evandro Oliveira 331 Denunciar post Postado Setembro 4, 2013 http://www.php.net/manual/en/function.curl-error.php Compartilhar este post Link para o post Compartilhar em outros sites
JGD 0 Denunciar post Postado Setembro 4, 2013 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"); 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); Compartilhar este post Link para o post Compartilhar em outros sites
Evandro Oliveira 331 Denunciar post Postado Setembro 4, 2013 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); Compartilhar este post Link para o post Compartilhar em outros sites
JGD 0 Denunciar post Postado Setembro 4, 2013 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? Compartilhar este post Link para o post Compartilhar em outros sites
Evandro Oliveira 331 Denunciar post Postado Setembro 4, 2013 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. Compartilhar este post Link para o post Compartilhar em outros sites
JGD 0 Denunciar post Postado Setembro 4, 2013 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? Compartilhar este post Link para o post Compartilhar em outros sites
Evandro Oliveira 331 Denunciar post Postado Setembro 4, 2013 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. Compartilhar este post Link para o post Compartilhar em outros sites
JGD 0 Denunciar post Postado Setembro 9, 2013 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!? Compartilhar este post Link para o post Compartilhar em outros sites
Evandro Oliveira 331 Denunciar post Postado Setembro 10, 2013 tenta utilizar json_encode nos dados que você deseja enviar por post. Compartilhar este post Link para o post Compartilhar em outros sites
JGD 0 Denunciar post Postado Setembro 10, 2013 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)? Compartilhar este post Link para o post Compartilhar em outros sites
Evandro Oliveira 331 Denunciar post Postado Setembro 10, 2013 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. Compartilhar este post Link para o post Compartilhar em outros sites
JGD 0 Denunciar post Postado Setembro 10, 2013 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 em atacado.'),array ('pagamento'=> array('meio_pagamento'=>'boleto_santander','data_vencimento'=> '23122012'),array('comprador' => Array('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'))))))); Retornou: 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" } } } Compartilhar este post Link para o post Compartilhar em outros sites