mrprompt/Cielo — pull request #10 by xthiago (2014-03-31 06:00:21+00:00)
Title: Corrige bug na definição do valor da transação

Transacao::setValor() exige que o argumento $valor seja do tipo integer de modo que os valores monetários sejam expressos em centavos (exemplo: R$ 14,37 = 1437), conforme especificação da
Cielo. Inclusive há validação para impedir caracteres alfanuméricos, digitos e pontuação.

A implementação anterior acrescentava dois digitos ao final do número recebido, transformando 1437 (R$ 14,37) em 143700 (R$ 1437,00), não deixando que especifiquemos os centavos. Não faz sentido aplicar number_format no valor recebido se já é exigido que os mesmos sejam recebidos como integer (conforme mencionado no 1º parágrafo). Removi essa linha.

Aproveitando a oportunidade, substitui o truncamento do valor para o tamanho máximo especificado pela Cielo ($this->valorPedido = substr($valor, 0, 12);) por uma validação de tamanho usando regex. Julgo ser melhor lançar uma exceção caso o tamanho do $valor exceda o limite do que tratar isso implicitamente, pois a implementação anterior poderia gerar uma transação com valor inferior ao solicitado.

Por fim, tentei deixar as mensagens de exceção lançadas por esse método mais claras ao desenvolvedor (do que simplesmente "valor inválido").