Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

API Criar Token Cartão #29

Open
alexandre-da-costa opened this issue Apr 7, 2022 · 9 comments
Open

API Criar Token Cartão #29

alexandre-da-costa opened this issue Apr 7, 2022 · 9 comments

Comments

@alexandre-da-costa
Copy link

alexandre-da-costa commented Apr 7, 2022

Hoje gastei várias horas até perceber que a API de criar token de cartão não funciona corretamente, ou então a documentação está errada.

Na referência da versão 5, https://docs.pagar.me/reference#criar-token-cartão-1, mostra-se a possibilidade de inserir dados do endereço de cobrança junto dentro do objeto card.

Porém, ao criar um cartão com o token gerado, o billing address não é criado. O cartão fica sem a informação.
Isso causa erro na hora de gerar os pedidos, o, já famoso em outras issues, "validation_error | billing | "value" is required", que não ajuda em muita coisa.

Fui perceber ao começar a ver o que estava sendo gravado no cliente via dash. Lá, notei que não estava gravando o billing address. Usando o mesmo objeto card que usava para gerar o token, fiz a criação do card diretamente para o usuário, via API Criar Cartão. Aí sim, gravou o billing address.

Queria aproveitar a vantagem de não ter que fazer um monte de tratamento para inserir o billing address, mas não é possível.

Favor ajustar a função ou documentação, para não ficar perdendo tempo do pessoal...

@brunostc
Copy link

Também estou com o mesmo problema, preciso criar o token para realizar os pedidos e com o token de cartão simplesmente não consigo criar pedidos, dessa maneira a API é completamente inútil para mim.

Será que poderiam ajustar isso? É muito chato isso, é maior rolo pra conseguir contratar o serviço e fechar o contrato com vocês e aí quando fecha vocês simplesmente não fornecem uma API que funcione corretamente.

Frustrante.

@alexandre-da-costa
Copy link
Author

Também estou com o mesmo problema, preciso criar o token para realizar os pedidos e com o token de cartão simplesmente não consigo criar pedidos, dessa maneira a API é completamente inútil para mim.

Será que poderiam ajustar isso? É muito chato isso, é maior rolo pra conseguir contratar o serviço e fechar o contrato com vocês e aí quando fecha vocês simplesmente não fornecem uma API que funcione corretamente.

Frustrante.

Pois é. Nem o suporte via e-mail deles ajuda. Levam uma semana para responder, e, quando respondem, não falam nada que ajuda ou mandam links da documentação online... Só não revi trocar de serviço pois PagSeguro é pior, MercadoPago não tem sistema bom de recorrência, etc...

Mas, lendo o código, eu consegui usar sem maiores problemas a este pacote. Só tive que enviar o billing address via backend.

Qual o problema que você está tendo? Posso tentar ajudar.

@brunostc
Copy link

Eu estou fazendo uma aplicação onde tem pagamento por cartão de crédito através do app mobile, portanto preciso enviar os dados do cartao para o endpoint de tokenização de cartão da pagarme (através do cliente) para trabalhar com esse token no backend (criar o pedido). Mas quando crio o pedido me retorna esse erro de billing address, já tentei pré cadastrar o billing address e entao enviar só o billing_address_id, mas também não deu certo, já tentei enviar o billing address no objeto de pedido e também nao deu certo.
Poderia me dizer como você fez pra conseguir utilizar o token de cartao em alguma cobrança/pedido?

@alexandre-da-costa
Copy link
Author

Bom dia, claro.

No front, você faz um request direto para a API da Pagar.me para gerar o token, segue o body que usei para testes no Postman:

{
    "type": "card",
    "card": {
        "number": "4000000000000010",
        "holder_name": "Tony Sr Stark",
        "holder_document": "93095135270",
        "exp_month": 4,
        "exp_year": 2029,
        "cvv": "123",
        "brand": "VISA",
        "options": {
            "verify_card": true
        }
    }
}

Aí você manda para o seu backend o token, parcelas, etc e o billing address.
Primeiro, cria o objeto de pagamento com cartão, que tem que informar parcelas e etc...

$cardPayment= new CreateCreditCardPaymentRequest();
$cardPayment->installments = $details['installments'];
$cardPayment->capture = true;
$cardPayment->statementDescriptor = config('app.name');

Dentro do atributo card dele, você cria um objeto cartão, e nesse objeto vc informa o token e o billing address
Eu quis deixar o billing address bem completo, nos padrões que vi na doc... é meio redundante, mas deve haver motivos.

$cardPayment->card = new CreateCardRequest();
$cardPayment->card->token = $details['token'];
$cardPayment->card->billingAddress = new CreateAddressRequest();
$cardPayment->card->billingAddress->line1 =
    $details['billing_address']['number'] . ', ' .
    $details['billing_address']['street'] . ', ' .
    $details['billing_address']['district'];
$cardPayment->card->billingAddress->line2 = $details['billing_address']['complement'];
$cardPayment->card->billingAddress->street = $details['billing_address']['street'];
$cardPayment->card->billingAddress->number = $details['billing_address']['number'];
$cardPayment->card->billingAddress->complement = $details['billing_address']['complement'];
$cardPayment->card->billingAddress->neighborhood = $details['billing_address']['district'];
$cardPayment->card->billingAddress->zipCode = $details['billing_address']['cep'];
$cardPayment->card->billingAddress->city = $details['billing_address']['city'];
$cardPayment->card->billingAddress->state = $details['billing_address']['state'];
$cardPayment->card->billingAddress->country = $details['billing_address']['country'];

Aí você usa ele dentro do atributo payments do pedido

$order->payments = [new \PagarmeCoreApiLib\Models\CreatePaymentRequest()];
$order->payments[0]->creditCard = $cardPayment;
$order->payments[0]->paymentMethod = "credit_card";

E daí só enviar o pedido...

Abraços

@brunostc
Copy link

Obrigado pela respota rapida, ajudou muito.

Uma ultima duvida, o pacote pagarme-core-api-php é diferente do pacote pagarme-php?

Porque estou utilizando o pagarme-php (composer require pagarme/pagarme-php) e não consigo importar as classes que você colocou no seu exemplo.

@alexandre-da-costa
Copy link
Author

Opa,

sim o pagarme-php é das versões velhas...

A versão nova da API usa este aqui.

composer require pagarme/pagarmecoreapi

tira o antigo do teu composer.json e bota o novo.

@brunostc
Copy link

Obrigado pela ajuda, Alexandre.

Um abraço.

@crossworth
Copy link

@alexandre-da-costa quando tu diz: "No front, você faz um request direto para a API da Pagar.me para gerar o token" isso seria para criar o card hash, o mesmo que o tokenizecard js deveria fazer (mas hoje está quebrado com problemas de CORS), correto?

Se sim, poderia me informar a URL que você utiliza para criar esse card hash e se preciso enviar a Chave pública?

@brunostc Sobre alterar a biblioteca, tu vai ter que provavelmente verificar se sua conta tem suporte para API nova (talvez tenha que solicitar) e também talvez tenha que verificar se as taxas são iguais... pelo menos é isso que a gente teve que fazer para poder sair da versão antigo para a nova.

@alexandre-da-costa
Copy link
Author

@alexandre-da-costa quando tu diz: "No front, você faz um request direto para a API da Pagar.me para gerar o token" isso seria para criar o card hash, o mesmo que o tokenizecard js deveria fazer (mas hoje está quebrado com problemas de CORS), correto?

Se sim, poderia me informar a URL que você utiliza para criar esse card hash e se preciso enviar a Chave pública?

Eu faço um POST no endpoint que tem na documentação. Não vi necessidade de usar o script para isso. Tem que enviar a chave pública como parâmetro:
https://api.pagar.me/core/v5/tokens?appId=pk_test_xxxxxxxxxxxxx

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants