Personalizar mensagem de erro json retornada pela API SDK PHP

Comentários

7 comentários

  • Sophia Silva

    Paulo

    Dá mais detalhe do que você está chamando, isso é checkout transparente, redirect, recorrência... o que exatamente você está utilizando?

    Qual etapa do processo você está tratando esse erro? Consegue compartilhar ai um trecho maior do código, algo que possamos reproduzir aqui e vermos o mesmo cenário?

  • Paulo Ceami

    Eu estou aderindo o cliente a uma assinatura.... este erro {"error":true,"errors":{"11014":"senderPhone invalid value: 312321312"}} , significa que o cliente informou um telefone errado ao aderir a assinatura... A adesao da assinatura nao possui erro algum se eu informo os dados corretamente, mas eu gostaria de tratar esse erro retornado pelo pagseguro.

  • Natalia Almeida

    Olá Paulo, tudo bom ?

    Poderia enviar o link da URL que foi baixado a SDK e compartilhar um trecho maior do código, para tentarmos reproduzir?

  • Paulo Ceami

    esta é a rotina pra aderir a um plano, funciona perfeitamente, porem se o user informar um telefone incorreto entao a exceção é lançada ..

    EU ESTOU DESCONFIADO QUE PRECISO TRANSFORMAR A RESPOSTA EM XML PRA PODER PEGAR OS DADOS DO ERRO

    $REFERENCE_MD5 = random_string(md5);

    $CardToken = $this->input->post('CardToken');
    $CodePlano = $this->input->post('CodePlano');
    $ReferencePlano = $this->input->post('ReferencePlano');
    $REFERENCE = $ReferencePlano . '-' . $REFERENCE_MD5;

    $Amount = $this->input->post('Amount');

    $myIP = $this->input->ip_address();

    //DADOS DO ASSINANTE
    $emp_nome = $this->input->post('emp_nome');
    $emp_responsavel = $this->input->post('emp_responsavel');
    $emp_email = $this->input->post('emp_email');
    $emp_endereco_completo = help_remove_acentos($this->input->post('emp_endereco_completo'));
    $emp_endereco_numero = $this->input->post('emp_endereco_numero');
    $emp_bairro = $this->input->post('emp_bairro');
    $cid_codigo = $this->input->post('cid_codigo');

    $emp_cnpj = str_replace('.', '', $this->input->post('emp_cnpj'));
    $emp_cnpj = str_replace('-', '', $emp_cnpj);
    $emp_cnpj = str_replace('/', '', $emp_cnpj);
    $emp_cnpj = str_replace(' ', '', $emp_cnpj);

    $emp_cep = str_replace('.', '', $this->input->post('emp_cep'));
    $emp_cep = str_replace('-', '', $emp_cep);

    $cid_uf = $this->input->post('cid_uf');
    $cidade_name = $this->input->post('cidade_name'); // obtido pelo get-cidade.js
    $emp_complemento = $this->input->post('emp_complemento');

    $emp_cpf = str_replace('.', '', $this->input->post('emp_cpf'));
    $emp_cpf = str_replace('-', '', $emp_cpf);

    $emp_telefone = str_replace('-', '', $this->input->post('emp_telefone'));
    $emp_ddd = $this->input->post('emp_ddd');

    // DADOS DO CARTAO DE CREDITO

    $TitularNameCard = $this->input->post('TitularNameCard');
    $DataNascTitularCard = $this->input->post('DataNascTitularCard');
    $cpfTitularCard = str_replace('.', '', $this->input->post('cpfTitularCard'));
    $cpfTitularCard = str_replace('-', '', $cpfTitularCard);
    $dddTitularCard = $this->input->post('dddTitularCard');
    $foneTitularCard = str_replace('-', '', $this->input->post('foneTitularCard'));

    // DADOS DE ENDEREÇO DO TITULAR DO CARTAO DE CREDITO
    $endTitularCard = help_remove_acentos($this->input->post('endTitularCard'));
    $EndNumeroTitularCard = $this->input->post('EndNumeroTitularCard');
    $bairroTitularCard = $this->input->post('bairroTitularCard');
    $cid_ufTitularCard = $this->input->post('cid_ufTitularCard');
    $cidade_name_titular = $this->input->post('cidade_name_titular'); // obtido pelo get-cidade.js
    $complTitularCard = $this->input->post('complTitularCard');

    $cepTitularCard = str_replace('.', '', $this->input->post('cepTitularCard'));
    $cepTitularCard = str_replace('-', '', $cepTitularCard);

    self::getCredentials();
    $preApproval = new \PagSeguro\Domains\Requests\DirectPreApproval\Accession();
    $preApproval->setPlan($CodePlano);
    $preApproval->setReference($REFERENCE);
    $preApproval->setSender()->setName($emp_nome); //assinante
    $preApproval->setSender()->setEmail($emp_email); //assinante
    $preApproval->setSender()->setIp($myIP); //assinante

    $preApproval->setSender()->setAddress()->withParameters(
    $emp_endereco_completo, $emp_endereco_numero, $emp_bairro, $emp_cep, $cidade_name, $cid_uf, 'BRA', $emp_complemento); //assinante
    $document = new \PagSeguro\Domains\DirectPreApproval\Document();
    $document->withParameters('CPF', $emp_cpf); //assinante
    $preApproval->setSender()->setDocuments($document);
    $preApproval->setSender()->setPhone()->withParameters($emp_ddd, $emp_telefone); //assinante
    // DADOS DO CARTAO DE CREDITO
    $preApproval->setPaymentMethod()->setCreditCard()->setToken($CardToken); //token do cartão de crédito gerado via javascript
    $preApproval->setPaymentMethod()->setCreditCard()->setHolder()->setName($TitularNameCard); //nome do titular do cartão de crédito
    $preApproval->setPaymentMethod()->setCreditCard()->setHolder()->setBirthDate($DataNascTitularCard); //data de nascimento do titular do cartão de crédito
    $document = new \PagSeguro\Domains\DirectPreApproval\Document();
    $document->withParameters('CPF', $cpfTitularCard); //cpf do titular do cartão de crédito
    $preApproval->setPaymentMethod()->setCreditCard()->setHolder()->setDocuments($document);
    $preApproval->setPaymentMethod()->setCreditCard()->setHolder()->setPhone()->withParameters($dddTitularCard, $foneTitularCard); //telefone do titular do cartão de crédito
    $preApproval->setPaymentMethod()->setCreditCard()->setHolder()->setBillingAddress()->withParameters(
    $endTitularCard, $EndNumeroTitularCard, $bairroTitularCard, $cepTitularCard, $cidade_name_titular, $cid_ufTitularCard, 'BRA', $complTitularCard); //endereço do titular do cartão de crédito

    try {


    $response = $preApproval->register(


    new \PagSeguro\Domains\AccountCredentials($this->accountEmail, $this->accountToken) // credencias do vendedor no pagseguro


    );


    $this->LOGINFO->info('NOVA ADESAO CRIADA ::: ' . $response->code);
    // salvando a empresa da adesao no mysql
    $std = new stdClass();
    $std->emp_cnpj = $emp_cnpj;
    $std->emp_nome = $emp_nome;
    $std->emp_responsavel = $emp_responsavel;
    $std->emp_endereco_completo = $emp_endereco_completo;
    $std->emp_bairro = $emp_bairro;
    $std->emp_cep = $emp_cep;
    $std->emp_email = $emp_email;
    $std->emp_telefone = $emp_telefone;
    $std->cid_codigo = $cid_codigo;
    $std->emp_reference = $REFERENCE;
    self::salvarEmpresa($std);

    help_msg_success("Recebemos sua assinatura " . $ReferencePlano . ",

    redirect('adesao-assinatura-sucesso');

    } catch (Exception $e) {

    //aqui eu envio a mensagem pro meu usuario disparada pelo sdk
    help_msg_alert_warning($e->getMessage());

    }

  • Natalia Almeida

    Olá Paulo, tudo bom ?

    Não será necessário converter para XML da para fazer mais ou menos assim:

    catch (Exception $e) {

    $json_str = json_decode($e->getMessage());
    $itens = $json_str->errors;

    foreach ( $itens as $key => $value ) {

    echo "{$key} => {$value} </br>";

    }

    O retorno ficou da forma abaixo e você consegue encontrar uma forma para deixar da maneira que você desejar:

    11014 => senderPhone invalid value: 188231054 
    11013 => senderAreaCode invalid value: 88980000

    Caso você prefira trabalhar com XML, esta API de Pagamento Recorrente também permite o retorno ser com XML. Basta alterar neste arquivo (arquivo no git) a informação:

    'Accept: application/vnd.pagseguro.com.br.v3+json;charset=ISO-8859-1' 
    para 'Accept: application/vnd.pagseguro.com.br.v3+xml;charset=ISO-8859-1' 

  • Paulo Ceami

    opa !

    te amo vou testar.

  • Felipe Olimpio

    Compartilhe com a comunidade se ocorreu tudo ok, Paulo!

    Obrigado pela interação.