artistas / laravel-pagseguro

Checkout Transparente e Pagamentos Recorrentes (Assinaturas)
MIT License
228 stars 72 forks source link

Erro installment quantity. #35

Closed vanessasoutoc closed 7 years ago

vanessasoutoc commented 7 years ago

Atualmente estou tendo esse erro na hora de enviar os dados paga pagseguro!

The no interest installment quantity must be an integer.

Provavelmente é esperado dados em integer e por isso causa o erro, acontece que já alterei para integer e o erro persiste! Log abaixo:

at PagSeguro->validate(array('paymentMethod' => 'creditCard', 'bankName' => null, 'creditCardToken' => 'Vem do Javascript', 'installmentQuantity' => '2', 'installmentValue' => '50.20', 'noInterestInstallmentQuantity' => null), array('paymentMethod' => 'required', 'bankName' => 'required_if:paymentMethod,eft', 'creditCardToken' => 'required_if:paymentMethod,creditCard', 'installmentQuantity' => 'required_if:paymentMethod,creditCard|integer|between:1,18', 'installmentValue' => 'required_if:paymentMethod,creditCard|numeric|between:0.00,9999999.00', 'noInterestInstallmentQuantity' => 'integer|between:1,18')) in PagSeguro.php line 436

fernandobandeira commented 7 years ago

Ele ta passando como null nesse teu exemplo, por isso que está dando o erro, como que é opcional este valor eu vou alterar para ele apenas ignorar nesse caso...

vanessasoutoc commented 7 years ago

Então, acontece que estou enviando os mesmo dados que tem na wiki. $pagseguro = PagSeguro::setReference('2') ->setSenderInfo([ 'senderName' => 'Nome Completo', //Deve conter nome e sobrenome 'senderPhone' => '(32) 1324-1421', //Código de área enviado junto com o telefone 'senderEmail' => 'email@email.com', 'senderHash' => 'Hash gerado pelo javascript', 'senderCNPJ' => '98.966.488/0001-00' //Ou CPF se for Pessoa Física ]) ->setShippingAddress([ 'shippingAddressStreet' => 'Rua/Avenida', 'shippingAddressNumber' => 'Número', 'shippingAddressDistrict' => 'Bairro', 'shippingAddressPostalCode' => '12345-678', 'shippingAddressCity' => 'Cidade', 'shippingAddressState' => 'UF' ]) ->setItems([ [ 'itemId' => 'ID', 'itemDescription' => 'Nome do Item', 'itemAmount' => 12.14, //Valor unitário 'itemQuantity' => '2', // Quantidade de itens ], [ 'itemId' => 'ID 2', 'itemDescription' => 'Nome do Item 2', 'itemAmount' => 12.14, 'itemQuantity' => '2', ] ]) ->send([ 'paymentMethod' => 'boleto' ]);

consegui passar desse erro comentando as linhas, no arquivo (vendor/laravel-pagseguro/src/Artistas/PagSeguro.php): //'installmentQuantity' => 'required_if:paymentMethod,creditCard|integer|between:1,18', //'installmentValue' => 'required_if:paymentMethod,creditCard|numeric|between:0.00,9999999.00', //'noInterestInstallmentQuantity' => 'integer|between:1,18'

Acredito que essa validação deve ser feita apenas quando o pagamento for feito por cartão de crédito, no entanto quanto é boleta a validação também está sendo chamada!

fernandobandeira commented 7 years ago

OK, eu vou refatorar essa validação, assumo que esteja usando o 5.3, no 5.3 tem a regra nullable que da pra por ali

'noInterestInstallmentQuantity' => 'nullable|integer|between:1,18'

Adicionando isso deve parar os erros, mas o problema é que o 5.1 e 5.2 tem essa regra ativa já por padrão, e a mesma não existe, então vou ver o que eu posso fazer para corrigir aqui sem tirar o suporte das versões e de uma maneira simples, devo corrigir nesses proximos dias e lançar uma versão...

fernandobandeira commented 7 years ago

@vanessasoutoc Eu adicionei um commit https://github.com/artistas/laravel-pagseguro/commit/2748695fecbad750f98e728616973ba5825315b1 que deve solucionar o problema, ele filtra o array retirando os valores vazios antes de validar, lancei a versão 1.1.0, tens como atualizar e ver se resolve o teu problema?

vanessasoutoc commented 7 years ago

@fernandobandeira O commit acima funcionou!! Muito obrigado. Entretanto nos pagamentos com utilização de cartão de crédito algumas validações não estão funcionando! linhas 147 e 148 do arquivo PagSeguro.php Comentei as original e modifiquei, veja abaixo!

'creditCardHolderAreaCode' => $this->fallbackValue(substr($cardHolderPhone, 0, 2), $this->senderInfo, 'senderAreaCode'),

'creditCardHolderPhone' => $this->fallbackValue(substr($cardHolderPhone, 2), $this->senderInfo, 'senderPhone'),