# Como corrigir a integração com Zoho/Salesforce no WPForms

A integração Zoho/Salesforce no WPForms falha quando o addon exige a licença Elite, o site não roda em HTTPS, o app conectado (Connected App) do CRM está mal configurado ou o mapeamento de campos do formulário não casa com os campos do objeto no CRM, fazendo o envio não criar o registro.

## O que é integração Zoho/Salesforce no WPForms?

A integração Zoho/Salesforce no WPForms usa os addons de CRM para enviar cada envio de formulário direto para o seu CRM, criando ou atualizando um registro como Lead, Contato ou Conta. O addon autentica via OAuth com um app conectado criado dentro do Salesforce ou do Zoho CRM, e depois você mapeia cada campo do formulário para um campo correspondente do objeto no CRM dentro do construtor de formulários.

A falha aparece quando esse fluxo quebra em um dos pontos: a conexão OAuth não autoriza, o formulário envia mas o registro nunca chega ao CRM, ou os dados chegam incompletos porque o mapeamento está errado. Segundo a documentação oficial do WPForms, o addon Salesforce exige a licença Elite, exige que o site carregue por SSL (HTTPS) e só funciona com edições do Salesforce que liberam acesso à API (Enterprise, Unlimited, Performance e Developer), o que explica boa parte dos casos em que a conexão nunca completa.

## Como identificar

- O formulário é enviado normalmente e a entrada aparece em WPForms -> Entradas, mas nenhum Lead, Contato ou registro novo é criado no Salesforce ou no Zoho CRM.
- Ao clicar em Conectar ao Salesforce, a tela do CRM retorna a mensagem 'error=invalid_client_id&error_description=client identifier invalid' e a conexão não é concluída.
- Em WPForms -> Configurações -> Integrações o status da conta de CRM aparece como desconectado ou some depois de salvo.
- No construtor, a aba Marketing -> Salesforce (ou Zoho) não lista os objetos ou campos do CRM no menu de mapeamento.
- O registro chega ao CRM, mas com campos vazios ou trocados porque o mapeamento de campos do formulário para o objeto está incorreto.

**Antes de começar:** Antes de recriar o Connected App ou editar credenciais e mapeamentos em produção, faça backup do site e exporte as entradas atuais, ou teste primeiro em um ambiente de staging. Trate o Consumer Secret como senha: não o exponha em prints públicos nem o salve em arquivos versionados.

## Como prevenir

- Mantenha a licença Elite ativa e o addon de CRM sempre atualizado, já que mudanças de versão podem exigir reautorizar a conexão OAuth.
- Garanta SSL permanente no site e renove o certificado antes do vencimento, pois a queda do HTTPS interrompe o callback de autenticação do CRM.
- Documente a Callback URL, os escopos de OAuth e a edição do CRM usada, para recriar o Connected App rápido se alguém o apagar.
- Sempre mapeie os campos obrigatórios do objeto no CRM e faça um envio de teste após qualquer alteração no formulário ou no CRM.

Erros relacionados

- [Como corrigir o addon Form Abandonment que não captura dados no WPForms](https://full.services/wp-fixer/corrigir-form-abandonment-wpforms/)
- [Como corrigir o Post Submissions que não cria posts no WPForms](https://full.services/wp-fixer/corrigir-post-submissions-wpforms/)
- [Como corrigir o mapeamento de campos no User Registration do WPForms](https://full.services/wp-fixer/corrigir-user-registration-wpforms/)

## Causa

- A licença ativa do WPForms é inferior à Elite: o addon Salesforce exige o plano Elite e não é instalado nem autentica em licenças Basic, Plus ou Pro.
- O site não carrega por HTTPS: a documentação do addon Salesforce exige SSL ativo, e sem ele o fluxo de OAuth do CRM não completa a autorização de retorno (callback).
- A edição do Salesforce não libera acesso à API: o addon só funciona com Enterprise, Unlimited, Performance e Developer; edições Professional exigem o complemento de API pago e sem ele a conexão falha.
- O Connected App do CRM está mal configurado: a Callback URL não bate com a fornecida pelo WPForms, faltam os escopos de OAuth (api e refresh_token), ou a opção 'Require Proof Key for Code Exchange (PKCE)' ficou marcada, gerando o erro invalid_client_id.
- A conexão foi tentada antes do período de espera de 10 minutos que o Salesforce leva para propagar o novo Connected App, ou o Consumer Key/Consumer Secret foi colado com espaço ou caractere a mais.
- O mapeamento de campos no construtor não casa com os campos obrigatórios do objeto no CRM (por exemplo, criar um Lead sem mapear o campo Sobrenome, que é obrigatório no Salesforce), então o CRM rejeita o registro.

## Como resolver

1. Confirme a licença Elite e o SSL do site: O addon Salesforce do WPForms exige a licença Elite e que o site carregue por HTTPS. Verifique o plano em Configurações e garanta o cadeado de SSL antes de qualquer ajuste, pois sem isso a conexão com o CRM nunca completa.

```
Painel WP -> WPForms -> Configurações -> verifique se a licença é Elite
Painel WP -> WPForms -> Addons -> instale e ative o addon Salesforce
Confirme que o site abre em https:// com certificado válido (cadeado no navegador)
```

2. Recrie o Connected App no Salesforce em Lightning Experience: O Salesforce não permite mais criar apps conectados no Classic Experience. Use o Lightning Experience e habilite o OAuth com os escopos corretos. A Callback URL deve ser exatamente a que o WPForms exibe ao adicionar a conta.

```
Salesforce -> ícone de engrenagem -> Setup (em Lightning Experience)
Apps -> External Client Apps -> Settings -> New Connected App, habilite OAuth Settings
Cole a Callback URL de WPForms -> Configurações -> Integrações -> Salesforce -> Add New Account
Adicione os escopos 'Manage user data via APIs (api)' e 'Perform requests at any time (refresh_token, offline_access)'
Desmarque 'Require Proof Key for Code Exchange (PKCE) Extension' e salve
```

3. Aguarde 10 minutos e cole as credenciais no WPForms: Após salvar o Connected App, o Salesforce leva cerca de 10 minutos para propagar. Conectar antes desse prazo é a causa direta do erro invalid_client_id. Espere, copie o Consumer Key e o Consumer Secret em Manage Consumer Details e cole no WPForms sem espaços extras.

```
Aguarde os 10 minutos sem fechar a aba do navegador
Salesforce -> seu Connected App -> Manage Consumer Details -> copie Consumer Key e Consumer Secret
WPForms -> Configurações -> Integrações -> Salesforce -> cole Consumer Key e Consumer Secret
Clique em Connect to Salesforce, faça login e clique em Allow
```

4. Revise o mapeamento de campos no construtor: Abra o formulário e confira a conexão do CRM. Mapeie todos os campos obrigatórios do objeto escolhido, como o Sobrenome ao criar um Lead no Salesforce. Campo obrigatório sem origem no formulário faz o CRM rejeitar o registro silenciosamente.

```
WPForms -> abra o formulário -> Marketing -> Salesforce (ou Zoho) -> Add New Connection
Selecione a conta conectada e o objeto (Lead, Contato, Conta)
Mapeie cada campo obrigatório do objeto a um campo do formulário e salve
```

5. Teste o envio e reenvie as entradas que falharam: Envie um teste pela prévia do formulário e confirme o registro no CRM. Se um envio anterior não chegou ao Salesforce, o WPForms permite reenviar a entrada já capturada sem perder o dado do lead.

```
WPForms -> Visualizar -> envie uma entrada de teste
No Salesforce/Zoho, confirme o novo registro no objeto mapeado
WPForms -> Entradas -> abra a entrada que falhou -> em Ações, clique em Resubmit to Salesforce
```


## Código

```php
<?php
// Loga no error_log a resposta do CRM quando um envio falha na integração,
// para descobrir se o erro é de autenticação, de campo obrigatório ou de API.
add_action( 'wpforms_process_complete', 'full_log_crm_falha', 20, 4 );
function full_log_crm_falha( $fields, $entry, $form_data, $entry_id ) {
    // Dispara só se houver uma conexão de CRM configurada no formulário.
    if ( empty( $form_data['providers'] ) ) {
        return;
    }
    foreach ( $form_data['providers'] as $provider => $conexoes ) {
        if ( ! in_array( $provider, array( 'salesforce', 'zoho-crm' ), true ) ) {
            continue;
        }
        error_log( sprintf(
            '[WPForms CRM] entry %d via %s: revisar conexão, escopos OAuth e campos obrigatórios mapeados.',
            (int) $entry_id,
            $provider
        ) );
    }
}
```

## Perguntas frequentes

### Por que o WPForms não envia os dados para o Salesforce

Os motivos mais comuns são a licença abaixo de Elite, o site sem HTTPS ou uma edição do Salesforce sem acesso à API. O addon Salesforce exige a licença Elite, SSL ativo e uma edição Enterprise, Unlimited, Performance ou Developer para criar registros via API.

### O que significa o erro invalid_client_id ao conectar o Salesforce

A mensagem 'error=invalid_client_id&error_description=client identifier invalid' indica Connected App mal configurado ou tentativa antes da propagação. Confira a Callback URL, os escopos de OAuth e o Consumer Key, e espere os 10 minutos após criar o app antes de reconectar.

### Preciso da licença Elite para usar o addon Salesforce no WPForms

Sim. A documentação oficial do WPForms lista o addon Salesforce como exclusivo da licença Elite. Em planos Basic, Plus ou Pro o addon não fica disponível para instalar, então a integração com o CRM não funciona nesses níveis.

### O formulário envia mas o lead não aparece no CRM, o que verificar

Verifique o mapeamento de campos no construtor. Se um campo obrigatório do objeto, como Sobrenome em um Lead do Salesforce, não estiver mapeado a um campo do formulário, o CRM rejeita o registro mesmo com a entrada salva no WPForms.

### Posso recuperar um envio que não chegou ao Salesforce

Sim. Abra a entrada em WPForms -> Entradas e, na seção Ações, clique em Resubmit to Salesforce. O WPForms reenvia o dado já capturado ao CRM, então você não perde o lead quando a integração falha em uma submissão pontual.

### Por que não consigo criar o Connected App no Salesforce

O Salesforce não permite mais criar apps conectados no Classic Experience. Mude para o Lightning Experience e crie o app em Apps -> External Client Apps -> Settings. Sem isso o WPForms não recebe um Consumer Key e Secret válidos para conectar.

### A integração com o Zoho CRM funciona igual à do Salesforce

O conceito é o mesmo: o addon autentica via OAuth com um app criado no Zoho CRM e mapeia campos do formulário para módulos do CRM. As diferenças ficam na seleção da região do data center do Zoho e nos escopos, então use o app correto da sua conta Zoho.

**Fonte:** [WPForms — How to Install and Use the Salesforce Addon](https://wpforms.com/docs/how-to-install-and-use-the-salesforce-addon-with-wpforms/)
