Open alexandre-da-costa opened 2 years ago
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.
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.
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?
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
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.
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.
Obrigado pela ajuda, Alexandre.
Um abraço.
@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 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
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...