API-3.0-PHP
API-3.0-PHP copied to clipboard
SANDBOX :: capture sale - return Request error, code 400
Tenho a implementacao da API 3.0 ja desenvolvida a meses, tudo estava normal ate alguns dias, o paymentId é gerado normalmente porem ao tentar capturar retorna RequestError code 400,consultei a documentacao e segue a mesma.
` public function paymentWithToken(CreditCardPaymentWithToken $creditCardPaymentWithToken): array {
$environment = $this->getEnvironment();
$merchant = $this->getMerchant();
$sale = new Sale($creditCardPaymentWithToken->orderId);
$customer = $sale->customer($creditCardPaymentWithToken->customerName);
$payment = $sale->payment($creditCardPaymentWithToken->orderAmount);
$payment->setType(Payment::PAYMENTTYPE_CREDITCARD)
->creditCard($creditCardPaymentWithToken->cardCVV, $creditCardPaymentWithToken->cardBrand)
->setCardToken($creditCardPaymentWithToken->cardToken);
try {
$sale = (new CieloEcommerce($merchant, $environment))->createSale($sale);
$paymentId = $sale->getPayment()->getPaymentId();
$captureSale = (new CieloEcommerce($merchant, $environment))
->captureSale($paymentId, $creditCardPaymentWithToken->orderAmount, 0);
$captured = [
'authorizationCode' => $captureSale->getAuthorizationCode(),
'returnCode' => $captureSale->getReturnCode(),
'returnMessage' => $captureSale->getReturnMessage(),
'status' => $captureSale->getStatus(),
'tid' => $captureSale->getTid(),
];
switch ($captureSale->getReturnCode()) {
case "4":
case "6":
$status = "success";
$message = "Operação realizada com sucesso";
break;
case "05":
$status = "error";
$message = "Não Autorizada";
break;
case "57":
$status = "error";
$message = "Cartão Expirado";
break;
case "78":
$status = "error";
$message = "Cartão Bloqueado";
break;
case "99":
$status = "error";
$message = "Tempo Excedido";
break;
case "77":
$status = "error";
$message = "Cartão Cancelado";
break;
case "70":
default:
$status = "error";
$message = "Problemas com o Cartão de Crédito";
break;
}
return [
'status'=>$status,
'private_message'=>$message,
'paymentId'=>$paymentId,
'captureSale'=>$captured
];
} catch (CieloRequestException $e) {
return [
'status'=>'error',
//'private_message'=>$e->getCode().'::'.$e->getMessage().'::'.$e->getTraceAsString(),
'private_message'=>$e->getCode().'::'.$e->getMessage(),
'paymentId'=>null,
'captureSale'=>null
];
}
}`
tambem tentei fazer a requisicao manualmente e tive outro tipo de retorno
`
public function capturePaymentInternal($paymentId,$amount)
{
//{{apiUrl}}/1/sales/{{paymentId}}/capture
$headers = new Headers();
$headers->addHeaderLine("MerchantId", $this->cielo_merchant_id);
$headers->addHeaderLine("MerchantKey", $this->cielo_merchant_key);
$headers->addHeaderLine("Content-Type", 'text/json');
$headers->addHeaderLine("Content-Length", 0);
$url = $this->cielo_url_request."/1/sales/".$paymentId."/capture?amount=".$amount;
$client = new Client();
$client->setUri($url);
$client->setHeaders($headers);
$client->setMethod('PUT');
$response = $client->send();
return [$response->getBody(),$paymentId];
}`
retorno "[\r\n {\r\n "Code": 308,\r\n "Message": "Transaction not available to capture"\r\n }\r\n]", "08807f32-b864-400d-9f72-bc985c6e070f"
Apos dias de analise e tentar alguma solucao usado o SDK, implementei minha propria API conforme documentacao da Cielo. Porem achei uma segunda alternativa que seria, ja passar o parametro de captura no momento da requisicao, apos isso apenas pego a informacao da transacao via paymentID, tentando capturar apos gerar o paymentID, continua retornando erro.
`environment = $this->getEnvironment(); $merchant = $this->getMerchant();
$sale = new Sale($creditCardPaymentWithToken->orderId);
$customer = $sale->customer($creditCardPaymentWithToken->customerName);
$payment = $sale->payment($creditCardPaymentWithToken->orderAmount);
// passar parametros de captura
$payment->setCapture(true);
$payment->setCapturedAmount($creditCardPaymentWithToken->orderAmount);
$payment->setType(Payment::PAYMENTTYPE_CREDITCARD)
->creditCard($creditCardPaymentWithToken->cardCVV, $creditCardPaymentWithToken->cardBrand)
->setCardToken($creditCardPaymentWithToken->cardToken);
try {
$createSale = (new CieloEcommerce($merchant, $environment))->createSale($sale);
$paymentId = $createSale->getPayment()->getPaymentId();
//metodo interno onde faco uma simples consulta via paymentID
$paymentInfo = $this->getPaymentInfo($paymentId);
$payment = $paymentInfo['payment']['payment'];
$captured = [
'authorizationCode' => $payment->getAuthorizationCode(),
'returnCode' => $payment->getReturnCode(),
'returnMessage' => $payment->getReturnMessage(),
'status' => $payment->getStatus(),
'tid' => $payment->getTid(),
];
switch ($captureSale->getReturnCode()) {
case "4":
case "6":
$status = "success";
$message = "Operação realizada com sucesso";
break;
case "05":
$status = "error";
$message = "Não Autorizada";
break;
case "57":
$status = "error";
$message = "Cartão Expirado";
break;
case "78":
$status = "error";
$message = "Cartão Bloqueado";
break;
case "99":
$status = "error";
$message = "Tempo Excedido";
break;
case "77":
$status = "error";
$message = "Cartão Cancelado";
break;
case "70":
default:
$status = "error";
$message = "Problemas com o Cartão de Crédito";
break;
}
return [
'status'=>$status,
'private_message'=>$message,
'paymentId'=>$paymentId,
'captureSale'=>$captured
];
} catch (CieloRequestException $e) {
return [
'status'=>'error',
//'private_message'=>$e->getCode().'::'.$e->getMessage().'::'.$e->getTraceAsString(),
'private_message'=>$e->getCode().'::'.$e->getMessage(),
'paymentId'=>null,
'captureSale'=>null
];
}`
@ozzpy vc conseguiu integrar? To recebendo o mesmo erro 308 em algumas transações, e não faço ideia de onde mexer kkk