Ir para conteúdo

POWERED BY:

Arquivado

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

redstyle

API BCASH dando erro de email e token

Recommended Posts

Olá pessoal, não é de hoje que vejo a fraca documentação do bcash. Desde quando era Pagamento Digital a documentação é a mais fraca do mercado.

No formulário de integração existe o campo url_aviso. Neste campo coloco um link de minha loja que recebe notificações (callback) do próprio bcash. Este callback é um POST com os campos:

[transacao_id] => 16976839
[pedido] => 1301109544
[status] => Cancelada

Eu tenho o e-mail e o token normalmente e estou usando o exemplo do "manual" da api encontrado aqui https://www.bcash.com.br/site/manual/Bcash_Manual_Integracao_Consultar_Dados_Transacao.pdf

O que acontece é que mesmo passando os parâmetros pedidos sempre recebo um erro:
"{"erro":{"codigo":"2015004","descricao":"Campos obrigatórios não preenchidos: email token"}}"

Alguém já trabalhou com essa API para fazer requisições nas transações vindas do bcash?

Segue meu código:

function getOrderBcash($dados){
  $email        = $dados['email'];
  $token        = $dados['token'];
  $urlPost      = "https://www.pagamentodigital.com.br/transacao/consulta/";
  $transacaoId  = $dados['transacao_id'];
  $pedidoId     = $dados['pedido'];
  $tipoRetorno  = 2; // 1 => utf-8, 2 => ISO–8859–1
  $codificacao  = 1; // 1 => xml, 2 => json
  
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_URL, $urlPost); curl_setopt($ch, CURLOPT_POST, true);
  curl_setopt($ch,CURLOPT_POSTFIELDS,array("id_transacao"=>$transacaoId,"id_pedido"=>$pedidoId,"tipo_retorno"=>$tipoRetorno,"codificacao"=>$codificacao));
  curl_setopt($ch, CURLOPT_HTTPHEADER, array("Authorization: Basic".base64_encode($email. ":".$token)));
  $resposta = curl_exec($ch);
  var_dump($resposta);
  $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
  curl_close($ch);
  if($httpCode != "200"){
    return json_decode($resposta);
  }
  return false;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Os clientes da agência onde trabalho utilizam esta API, até agora não tivemos problema algum.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Os clientes da agência onde trabalho utilizam esta API, até agora não tivemos problema algum.

 

Você não poderia passar o trecho do código onde trata isso para eu comparar com o meu e ver onde posso estar errando?

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá,

 

Seria interessante você postar o código onde essa função é chamada.

 

Talvez algo que ajude no trecho que você passou é aumentar um pouco a "confiança" no código. Colocar algumas validações, do tipo:

 

<?php

function isValidEmail($email) {
/* validação de e-mail aqui */
return true; // retorna true se válido
}

function isValidToken($token) {
/* validação do token, por exemplo pelo tamanho da string ou regex */
return true; // retorna true se token válido
}

function isValidIdTransacao($transactionId) {
/* mesma coisa dos caras acima */
return true;
}

function isValidIdPedido($transactionId) {
/* mesma coisa dos caras acima */
return true;
}

function getOrderBcash($dados) {
// validações básicas
if (!isValidEmail($dados['email'])) trigger_error('e-mail inválido');
if (!isValidToken($dados['token'])) trigger_error('token inválido');
if (!isValidIdTransacao($dados['transacao_id'])) trigger_error('transacao_id inválido');
if (!isValidIdPedido($dados['pedido'])) trigger_error('pedido inválido');

$email = $dados['email'];
$token = $dados['token'];
$urlPost = "https://www.pagamentodigital.com.br/transacao/consulta/";
$transacaoId = $dados['transacao_id'];
$pedidoId = $dados['pedido'];
$tipoRetorno = 2; // 1 => utf-8, 2 => ISO–8859–1
$codificacao = 1; // 1 => xml, 2 => json

$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, $urlPost);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, array("id_transacao"=>$transacaoId,"id_pedido"=>$pedidoId,"tipo_retorno"=>$tipoRetorno,"codificacao"=>$codificacao));
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Authorization: Basic".base64_encode($email. ":".$token)));
$resposta = curl_exec($ch);
var_dump($resposta);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($httpCode != "200") {
	return json_decode($resposta);
}
return false;
}

 

Isso pelo menos vai evitar que a função propague uma falha na entrada dos dados. Sei que isso aparentemente não vai resolver seu problema, mas pode ajudar na identificação.

 

Boa sorte! :thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

redstyle, bom dia!

Pelo que vi em seu código, está faltando um espaço na linha de autenticação, e não está reconhecendo o email e token no Bcash.

 

É só alterar a linha de código abaixo, colocando um espaço depois da palavra Basic:

 

curl_setopt($ch, CURLOPT_HTTPHEADER, array("Authorization: Basic ".base64_encode($email. ":".$token)));

 

Segue abaixo o código corrigido:

 

function getOrderBcash($dados){
  $email        = $dados['email'];
  $token        = $dados['token'];
  $urlPost      = "https://www.bcash.com.br/transacao/consulta/";
  $transacaoId  = $dados['transacao_id'];
  $pedidoId     = $dados['pedido'];
  $tipoRetorno  = 2; // 1 => utf-8, 2 => ISO–8859–1
  $codificacao  = 1; // 1 => xml, 2 => json
  
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_URL, $urlPost); curl_setopt($ch, CURLOPT_POST, true);
  curl_setopt($ch,CURLOPT_POSTFIELDS,array("id_transacao"=>$transacaoId,"id_pedido"=>$pedidoId,"tipo_retorno"=>$tipoRetorno,"codificacao"=>$codificacao));
  curl_setopt($ch, CURLOPT_HTTPHEADER, array("Authorization: Basic ".base64_encode($email. ":".$token)));
  $resposta = curl_exec($ch);
  var_dump($resposta);
  $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
  curl_close($ch);
  if($httpCode != "200"){
    return json_decode($resposta);
  }
  return false;
}

 

Se tiver alguma dificuldade, envie um email para o suporte de integração do Bcash, através do email integracao@bcash.com.br, pois sempre tive retorno nos contatos.

 

Att

 

Cláudio RP.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, não uso esta api mas estou tendo o mesmo problema.

 

No meu caso este problema ocorre quando eu vou no bcash, entro na tela de detalhes de alguma transação e clico em 'Efetuar Retorno'.

 

ex:

 

 

 

Retorno Automático dos Dados (Saiba Mais) URL de aviso: http://www.XXXXXXXXXX.com.br/index.php?XXXXXXXXXXX/pagamento_digital/callback Data Status Enviado Comunicação Tentativas Última Tentativa 17/02/2013 02:25:24 Em andamento OK 1 de 5 17/02/2013 02:30:04

 

 

Quando verifico o post que foi feito pelo bcash, recebo apenas os mesmos três parametros, ex:

 

transacao_id=17502756

pedido=633

status=Cancelada

 

Acontece que na documentação do retorno automatico (link 'Saiba Mais' na mesma página de detalhe onde cliquei em 'Efetuar Retorno') não há menção alguma para 'transacao_id', somente para 'id_transacao' e que o post enviado pelo bcash deveria ser com mais parametros do que somente estes três (transacao_id, pedido e status) que então sendo enviados.

 

No meu caso, além de estar esperando por 'id_transacao' e não transacao_id, eu também nao consigo saber o cod_status, apena o status em string....

 

Realmente a documentação do Bcash é bem ruinzinha mesmo porque não achei nada a respeito....

 

Obs: Quando o retorno é realmente automatico, (quando o cliente pagou por exemplo) eu recebo o post de acordo com a documentação, parametro id_transacao e todos os outros parametros que constam na documentação...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá.

A documentação do BCash está complicada mesmo. Muitos furos. Mas atrapalha do que ajuda.

Encontrei esse trecho de código em outro fórum. Segundo quem postou a BCash teria enviado esse código pra ele após uma reclamação. Eu usei dessa forma e conseguir confirmar o status das minhas transações:

 

 

// Email cadastrado no Bcash
$email = "AQUIVAIOEMAIL";

// Obtenha seu TOKEN entrando no menu Ferramentas do Bcash
$token = "AQUIVAIMEUTOKEN";

$urlPost = "https://www.bcash.com.br/transacao/consulta/";
//var_dump($_POST);die;

$transacaoId = $_POST["transacao_id"];
$pedidoId = $_POST["pedido"];
$tipoRetorno = 1;
$codificacao = 1;

ob_start();
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $urlPost);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, array("id_transacao"=>$transacaoId,"id_pedido"=>$pedidoId,"tipo_retorno"=>$tipoRetorno,"codificacao"=>$codificacao));
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Authorization: Basic ".base64_encode($email. ":".$token)));
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, FALSE); curl_exec ($ch);

/* XML ou Json de retorno */
$resposta = ob_get_contents();
ob_end_clean();

var_dump($resposta);

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.