API-3.0-PHP icon indicating copy to clipboard operation
API-3.0-PHP copied to clipboard

Como autenticar o Débito

Open brunogonncalves opened this issue 7 years ago • 15 comments

Usei o mesmo exemplo de débito, mas o retorno que tenho é:

returnCode -> "014" returnMessage -> "Autorização Direta é permitida apenas para crédito"

Liguei no suporte, me falaram que tem que autenticar. Na 1.5 eu tinha como marcar a requisição pra autenticação, ou pra aprovar se ja tiver autenticado etc. Essa 3.0 PHP é bem zoadinha, como autentica um débito ?

brunogonncalves avatar May 22 '17 14:05 brunogonncalves

Como se trata de débito, é o cliente quem precisa autenticar. A URL de autenticação é retornada na criação do pagamento; redirecione o cliente para a URL de autenticação que o restante do fluxo acontece dentro da página do banco emissor do cartão.

netojoaobatista avatar May 22 '17 15:05 netojoaobatista

Então João mas eu não tenho a url de autenticação, hora que tento fazer a requisição me da este erro que reportei acima, e o getAuthenticationUrl() vem null.

brunogonncalves avatar May 22 '17 15:05 brunogonncalves

@brunogonncalves, como está seu código de criação da transação de débito?

netojoaobatista avatar May 22 '17 15:05 netojoaobatista

Exatamente igual no exemplo:

   ```
    // Crie uma instância de Sale informando o ID do pagamento
    $sale = new Sale('ID');

    // Crie uma instância de Customer informando o nome do cliente
    $customer = $sale->customer($clientName);

    // Crie uma instância de Payment informando o valor do pagamento
    $payment = $sale->payment($value);

    // Crie uma instância de Credit Card utilizando os dados de teste
    // esses dados estão disponíveis no manual de integração
    $payment->setReturnUrl('Minha url');
        $payment
            ->debitCard($cvv, $brand)
            ->setExpirationDate($expirationDate)
            ->setCardNumber($cardNumber)
            ->setHolder($clientName);

    // Crie o pagamento na Cielo
    try {
        // Configure o SDK com seu merchant e o ambiente apropriado para criar a venda
        $sale = (new CieloEcommerce($this->_merchant, $this->_environment))->createSale($sale);

        // Com a venda criada na Cielo, já temos o ID do pagamento, TID e demais
        // dados retornados pela Cielo
        $payment = $sale->getPayment();

        $data = [
            'success' => true,
            'payment' => $payment,
            'id' => $this->_id
        ];

        $data['returnUrl'] = $payment->getAuthenticationUrl();
        return $data;


    } catch (CieloRequestException $e) {
        // Em caso de erros de integração, podemos tratar o erro aqui.
        // os códigos de erro estão todos disponíveis no manual de integração.
        $cieloError = $e->getCieloError();

        return [
            'success' => false,
            'message' => $cieloError ? $cieloError->getMessage() : $e->getMessage(),
            'code' => $cieloError ? $cieloError->getCode() : $e->getCode()
        ];
    }
   ```

E esta requisição aí me da o erro que informei acima: returnCode -> "014" returnMessage -> "Autorização Direta é permitida apenas para crédito" Outro detalhe, é q em ambiente SANDBOX, eu consigo a url de autenticação normal, me leva pra página de autenticação posso colocar se quero ou não autenticar fica tudo certinho.

brunogonncalves avatar May 22 '17 15:05 brunogonncalves

Ué, estranho, @brunogonncalves; executei o código aqui e o retorno foi exatamente o esperado:

<?php
// ...
// Crie uma instância de Sale informando o ID do pagamento
$sale = new Sale('123');

// Crie uma instância de Customer informando o nome do cliente,
// documento e seu endereço
$customer = $sale->customer('Fulano de Tal');

// Crie uma instância de Payment informando o valor do pagamento
$payment = $sale->payment(15700);

// Defina a URL de retorno para que o cliente possa voltar para a loja
// após a autenticação do cartão
$payment->setReturnUrl('https://localhost/test');

// Crie uma instância de Debit Card utilizando os dados de teste
// esses dados estão disponíveis no manual de integração
$payment->debitCard("123", "Visa")
        ->setExpirationDate("12/2018")
        ->setCardNumber("0000000000000001")
        ->setHolder("Fulano de Tal");

// Crie o pagamento na Cielo
try {
    // Configure o SDK com seu merchant e o ambiente apropriado para criar a venda
    $sale = (new CieloEcommerce($merchant, $environment))->createSale($sale);
    $payment = $sale->getPayment();

    // Com a venda criada na Cielo, já temos o ID do pagamento, TID e demais
    // dados retornados pela Cielo
    $paymentId = $payment->getPaymentId();
    $authenticationUrl = $payment->getAuthenticationUrl();

    printf("URL de autenticação: %s\n", $authenticationUrl);
} catch (CieloRequestException $e) {
    // Em caso de erros de integração, podemos tratar o erro aqui.
    // os códigos de erro estão todos disponíveis no manual de integração.
    $error = $e->getCieloError();
}

netojoaobatista avatar May 22 '17 15:05 netojoaobatista

Poderia ser algum alguma trava na minha Chave ? A cielo tem que liberar alguma coisa pra mim ? É realmente muito estranho isso estar acontecendo pq não faz sentido algum.

brunogonncalves avatar May 22 '17 16:05 brunogonncalves

@brunogonncalves, no sandbox, você usa as credenciais de testes e a Cielo não precisa liberar nada; só no ambiente de produção que você precisa da liberação.

Verifique se não está utilizando credenciais de produção no sandbox; pode ser isso.

netojoaobatista avatar May 22 '17 16:05 netojoaobatista

Eu acessei o fonte que faz a requisição e mandei printar os dados do curl, olha que estranho a chave debitCard está enviando os dados do cartão, mas como tipo CreditCard, e mais pra baixo tem a chave type que está corretamente preenchida com "DebitCard". Seria um problema no sdk ? Estou usando exatamente o exemplo man.

Sale {
  -merchantOrderId: 55
  -customer: Customer {
    -name: "SATIRA MARINILZA F ALMEIDA"
    -email: null
    -birthDate: null
    -identity: null
    -identityType: null
    -address: null
    -deliveryAddress: null
  }
  -payment: Payment {
    -serviceTaxAmount: null
    -installments: 1
    -interest: null
    -capture: false
    -authenticate: false
    -recurrent: null
    -recurrentPayment: null
    -creditCard: null
    -debitCard: CreditCard {
      -cardNumber: "----"
      -holder: "SATIRA MARINILZA F ALMEIDA"
      -expirationDate: "08/2023"
      -securityCode: "---"
      -saveCard: false
      -brand: "Master"
      -cardToken: null
    }
    -authenticationUrl: null
    -tid: null
    -proofOfSale: null
    -authorizationCode: null
    -softDescriptor: ""
    -returnUrl: "http://teste.sortesim.com.br/retorno-cielo/55"
    -provider: null
    -paymentId: null
    -type: "DebitCard"
    -amount: "500"
    -receivedDate: null
    -capturedAmount: null
    -capturedDate: null
    -currency: null
    -country: null
    -returnCode: null
    -returnMessage: null
    -status: null
    -links: null
    -extraDataCollection: null
    -expirationDate: null
    -url: null
    -number: null
    -barCodeNumber: null
    -digitableLine: null
    -address: null
  }
}

brunogonncalves avatar May 22 '17 17:05 brunogonncalves

debitCard está enviando os dados do cartão, mas como tipo CreditCard, e mais pra baixo tem a chave type que está corretamente preenchida com "DebitCard". Seria um problema no sdk ?

Não; o tipo é o mesmo, por isso é utilizado uma instância de CreditCard; a diferença é apenas na propriedade, que em vez de definir Payment::$creditCard, define Payment::$debitCard, exatamente como está sendo feito.

netojoaobatista avatar May 22 '17 17:05 netojoaobatista

Não faz sentido algum então me retornar isso: returnCode -> "014" returnMessage -> "Autorização Direta é permitida apenas para crédito."

Estou como no exemplo, poderia retornar qq outro erro, mas realmente faz parecer que está tentando efetuar uma transação com cartão de crédito, o que não é o caso os dados da requisição estão aí em cima.

brunogonncalves avatar May 22 '17 17:05 brunogonncalves

Cara é alguma falha muito estranha e no SDK, eu desisti de pelejar com o problema e fiz diretamente um curl caso a transação seja um débito, tive a resposta esperada, a url de autenticação tudo certo.

brunogonncalves avatar May 22 '17 17:05 brunogonncalves

estou com o mesmo problema : ["authenticationUrl":"Cielo\API30\Ecommerce\Payment":private]=> NULL ["authenticate":"Cielo\API30\Ecommerce\Payment":private]=> bool(true) ["type":"Cielo\API30\Ecommerce\Payment":private]=> string(9) "DebitCard", eu não tenho muita experiencia com isso poderia me mostrar como você fez pra receber essa authenticationUrl ?

edit1 : Consegui a url de autenticação, só coloquei o tipo:debitcard, e o outro erro era porque eu estava usando um cartão de débito da elo

edit2: tive que adicionar isso ao exemplo: $payment->setAuthenticate(TRUE) ->setType(Payment::PAYMENTTYPE_DEBITCARD)

GabrielGCardoso avatar Jun 09 '17 11:06 GabrielGCardoso

Fiz como o @GabrielGCardoso indicou e funcionou corretamente. Obrigado.

Neste caso, precisei fazer apenas isso:

$payment->setAuthenticate(TRUE) ->setType(Payment::PAYMENTTYPE_DEBITCARD)

brunoroeder avatar Jun 15 '17 14:06 brunoroeder

Olá pessoal, o problema é exatamente o que o @brunoroeder disse.

No exemplo do README consta o seguinte exemplo: $payment->debitCard("123", CreditCard::VISA)->setExpirationDate("12/2018")->setCardNumber("0000000000000001")->setHolder("Fulano de Tal");

Mas falta informar que deve ser uma solicitação autenticada. Basta acrescentar o método setAuthenticate passando true. Portanto deve ficar assim:

$payment->debitCard("123", CreditCard::VISA)->setExpirationDate("12/2018")->setCardNumber("0000000000000001")->setHolder("Fulano de Tal")->setAuthenticate(TRUE);

joaohcrangel avatar May 14 '19 18:05 joaohcrangel

Código acima não funcionou para me, mas eu consegui de uma forma parecida. Depois de dias debugando --'

$payment->setCapture(1);
$payment->setAuthenticate(1);
  
$payment->debitCard("123", CreditCard::VISA)->setExpirationDate("12/2018")->setCardNumber("0000000000000001")->setHolder("Fulano de Tal");

matheus0608 avatar Nov 30 '19 20:11 matheus0608