Author Image

leandroberg

Sep 12, 2024

Tratamento de Erros em API de Cartão de Crédito

APItry/catchcartão de créditoSDK PHPtratamento de erros

Boa tarde tudo bem com todos? Poderiam analisar esse try / catch da requisição à API de cartão de crédito e me dizer se está correto por gentileza, se possível me enviar exemplos do tratamento pós-request para que eu possa corrigir meu código em caso de problemas, muito obrigado, segue o código:

try {
$api = new Gerencianet($options);
$response = $api->createOneStepCharge($params = [], $body);
$response_array = json_decode($response, true);


if (json_last_error() === JSON_ERROR_NONE) {

$status = isset($response_array['data']['status']) ? $response_array['data']['status'] : '';

if ($status === 'approved') {

updateOrderDetails($order_id, $_POST['customerName']);

return [
'result' => 'success',
'redirect' => $this->get_return_url(wc_get_order($order_id))
];

} else {

return [
'result' => 'failure',
'message' => 'Payment status is not approved. Current status: ' . $status
];
}

} else {

return [
'result' => 'failure',
'message' => 'Error decoding JSON: ' . json_last_error_msg()
];

}
} catch (GerencianetException $e) {

return [
'result' => 'failure',
'message' => 'Gerencianet Error - Code: ' . $e->code . ', Error: ' . $e->error . ', Description: ' . $e->errorDescription
];

} catch (Exception $e) {

return [
'result' => 'failure',
'message' => 'General Error: ' . $e->getMessage()
];

}

Respostas (3):
Avatar discord do usuario guilherme_efi

guilherme_efi

13/09/2024

Oi, @leandroberg. Bom dia! Tudo bem?
Sim, o tratamento dos status está correto para o fluxo de criação da cobrança de cartão.
Sugiro apenas acrescentar a informação refusal>reason na sua mensagem de retorno quando o pagamento não for approved. Assim, você poderá mostrar com mais detalhes o motivo da reprovação.
imagem enviada na mensagem pelo usuario guilherme_efi

Avatar discord do usuario leandroberg

leandroberg

14/09/2024

Muito obrigado pelo retorno, você poderia me mostrar um exemplo simples da chamada e do tratamento do retorno? Não precisa ser um código completo, pode ser algo bem direto ao ponto mesmo só para eu ver essa implementação. Veja, a chamada está aqui >> $response = $api->createOneStepCharge($params = [], $body); << daí minha dúvida é, como tratar o retorno atribuído à variável $response? Usei aqui o json_decode porém gera erro dizendo que estou passando um array quando eu deveria passar uma string. Nos exemplos que vem no SDK PHP infelizmente só tem a chamada, o tratamento do retorno acabei não encontrando exemplos e estou tendo dificuldades de gerar um var_dump ou algo do tipo pois estou implementando no WooCommerce como um gateway personalizado (por isso não estou usando o plugin oficial para woo). Muito obrigado.

Avatar discord do usuario guilherme_efi

guilherme_efi

16/09/2024

Bom dia, @695704370158895194! Tudo bem?
Mesmo que a API retorne as respostas em formato JSON, nossa SDK em PHP já faz o tratamento para entregar as informações em um array. Assim, a variável $response será um array.

Quanto ao tratamento dos dados, isso pode variar de acordo com a regra de negócio de cada sistema. Por exemplo, com o método createOneStepCharge($params = [], $body), você está usando o endpoint de criação de cobrança por cartão de crédito em One Step (um passo). A partir do array $response, é possível verificar o status com $response['data']['status'] === 'approved' ou $response['data']['status'] === 'unpaid'. Se a transação for recusada, você pode capturar o motivo e exibir para o cliente com $response['data']['refusal']['reason'].
imagem enviada na mensagem pelo usuario guilherme_efi
imagem enviada na mensagem pelo usuario guilherme_efi