Cálculo de Parcelamento Pagseguro Com Juros e Sem Juros
Autor: Bruno Passos | Publicado: 2015-02-05T18:21:00-02:00

Me deparei recentemente com a missão de efetuar o cálculo do Pagseguro com juros e sem juros. O vendedor desejava que o cliente ao entrar num produto pudesse visualizar as opções de parcelamento de forma que mostra-se se o produto pudesse ser parcelado em até 6 x sem juros que fosse mostrada uma tabela com as opções de parcelamento até 12, porém até 6 sem juros e a partir daí com juros.




Procurando na internet a maioria dos códigos utilizavam o fator de parcelamento para cada parcela multiplicado assim o valor da compra pelo fator e obtendo o valor da parcela com juros. Então a maioria dos algoritmos simplesmente usavam o fator correspondente a tabela na parte de parcela. Porém existe um grande problema em relação a esse tipo de algoritmo, pois se o vendedor configurar que aceita o parcelamento em até 6 x sem juros então na sétima parcela o fator será diferente de se ele aceitasse em 3 vezes ou não aceitasse nenhum parcelamento.




Então a solução foi utilizar a porcentagem aplicada a partir da parcela que começa os juros.



Utilize o pequeno algoritmo de exemplo abaixo e adeque as suas necessidades. Para verificar se está correto entre no pagseguro na parte de parcelamento e faça testes com o valores e parcelas sem juros que aceita.



&lt;form name="frm" method="POST"&gt;
&nbsp; &nbsp; &lt;input type="text" name="valor_compra" value="" /&gt;
&nbsp; &nbsp; &lt;input type="submit" value="OK" /&gt;
&lt;/form&gt;

&lt;?php

$valor_compra = $_POST["valor_compra"];

//apenas para não fazer o calculo com valores zerados.
if(empty($valor_compra)){
&nbsp; &nbsp; exit;
}

$valor_compra = str_replace(".", "", $valor_compra);
$valor_compra = str_replace(",", ".", $valor_compra);

//array com as porcentagens que são usadas quando o vendedor não vai oferecer parcelamento sem juros.
$todas_com_juros = array(4.51, 6.04, 7.59, 9.15, 10.72, 12.31, 13.92, 15.54, 17.17, 18.82, 20.48, 22.16, 26.85, 25.56, 27.28, 29.02, 30.77);

//array com as porcentagens utilizadas quando o vendedor oferece parcelas sem juros. A diferença é que começa com a taxa de 2.99
$algumas_com_juros = array(2.99, 4.51, 6.04, 7.59, 9.15, 10.72, 12.31, 13.92, 15.54, 17.17, 18.82, 20.48, 22.16, 26.85, 25.56, 27.28);

$max_parcelas = 12;

$max_sem_juros = 6;

$cont_juros = 0;

//testa se vai oferecer parcelas sem juro para definir qual array será utilizado
if($max_sem_juros &gt; 1){
&nbsp; &nbsp; $juros = $algumas_com_juros;
}else{
&nbsp; &nbsp; $juros = $todas_com_juros;
}

echo "&lt;table border='0' cellpadding='10'&gt;";


for ($i=1;$i&lt;=$max_parcelas;$i++){
&nbsp; 
&nbsp; &nbsp; if($i&lt;=$max_sem_juros){
&nbsp; &nbsp; &nbsp; &nbsp; $parcela = $valor_compra / $i;//parcela sem juros
&nbsp; &nbsp; &nbsp; &nbsp; $tipo = "sem juros";
&nbsp; &nbsp; }else{
&nbsp; &nbsp; &nbsp; &nbsp; $parcela = ($valor_compra + ($valor_compra * $juros[$cont_juros] / 100)) / $i;//parcela com juros
&nbsp; &nbsp; &nbsp; &nbsp; $tipo = "com juros";
&nbsp; &nbsp; &nbsp; &nbsp; $cont_juros++;
&nbsp; &nbsp; }

&nbsp; &nbsp; echo "&lt;tr&gt;";
&nbsp; &nbsp; &nbsp; &nbsp; echo "&lt;td&gt;".$i."x&lt;/td&gt;";
&nbsp; &nbsp; &nbsp; &nbsp; echo "&lt;td&gt;de R$ ".number_format($parcela, 2, ",", ".")."&lt;/td&gt;";
&nbsp; &nbsp; &nbsp; &nbsp; echo "&lt;td&gt;".$tipo."&lt;/td&gt;";
&nbsp; &nbsp; &nbsp; &nbsp; echo "&lt;td&gt;Total: R$ ".number_format($parcela*$i, 2, ",", ".")."&lt;/td&gt;"; &nbsp; &nbsp; &nbsp; 
&nbsp; &nbsp; echo "&lt;/tr&gt;";
}

echo "&lt;/table&gt;";
?&gt;