• Resolved ehstbr

    (@ehstbr)


    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.

    • This topic was modified 2 weeks, 5 days ago by ehstbr.
    • This topic was modified 2 weeks, 5 days ago by ehstbr.
Viewing 1 replies (of 1 total)
  • Plugin Author Lucas

    (@lcslucas)

    Olá, obrigado pelo reporte!

    O ajuste já está disponível na versão 3.0.2. Basta atualizar o plugin para refletir a correção do bug relatado.

    Qualquer coisa, estamos à disposição.

Viewing 1 replies (of 1 total)

You must be logged in to reply to this topic.