Bug com telefones que iniciam com “55”
-
Boa noite.
Já reportei por e-mail para a equipe técnica, porém, pelo jeito, não foi solucionado ainda. Na verdade no e-mail mesmo já tem até a solução que testei e estou aplicando… o e-mail foi é ignorado sumariamente mesmo. E-mail enviado com assunto “Bug com números DDD 55” no dia 19 de mai. de 2026, 10:12.
Telefones de cidades que iniciam com DDD “55” tem o “55” removido pois o plugin remove o “55” pensando ser o DDI (número do país Brasil). Não tem nenhuma verificação se o telefone está no formato correto. Segue código errado no arquivo “classes/transformers/V2/TransactionRequestTransformer.php”:
‘phone’ => preg_replace(‘/^55/’, ”, preg_replace(‘/\D/’, ”, ArrUtils::get($payload, ‘fone’))),Esse erro faz com que o plugin envie o telefone do comprador (quanto de uma cidade com DDD 55) sem o DDD para a API, que retorna o erro: “Payment error: Customer.phone is not a valid phone. (968290091)” (troquei alguns números para preservar o cliente).
O número “968290091” na real era “55968290091”, pois o comprador é de Santa Maria, RS; cidade cujo DDD é 55. O plugin simplesmente remove o “55” que é do DDD e envia apenas o número, sem o DDD.
Para corrigir o erro é necessário que a função identifique se o telefone está no formato “DDI + DDD + número” antes de remover o DDI 55 (código do país) e manter o DDD (mesmo se for 55) para que aí sim envie para a API da iPag. Desenvolvi internamente a solução para o bug.
Criamos uma função para normalizar o telefone no arquivo “classes/transformers/V2/TransactionRequestTransformer.php”:
private static function normalizePhone($value): string
{
$phone = preg_replace(‘/\D/’, ”, (string) $value);
if ($phone === ”) {
return ”;
}
if (strpos($phone, ‘0055’) === 0) {
$candidate = substr($phone, 4);
if (in_array(strlen($candidate), [10, 11], true)) {
return $candidate;
}
}
if (strpos($phone, ’55’) === 0) {
$candidate = substr($phone, 2);
if (in_array(strlen($candidate), [10, 11], true)) {
return $candidate;
}
}
return $phone;
}
E depois:
‘phone’ => self::normalizePhone(ArrUtils::get($payload, ‘fone’)),
Dessa forma a função identifica o formato do número antes de remover o 55 só se for DDI de fato.Corrigi localmente o erro na versão 3.0.0 e agora vou precisar aplicá-la novamente na versão 3.0.1 pois não deram a mínima para a correção.
You must be logged in to reply to this topic.