Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

JGD

integração gateway de pagamento POST+cURL+JSON

Recommended Posts

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

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

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

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

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

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

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

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

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

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

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

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

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

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.

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.

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.