# Como corrigir o erro de conversao de moeda do Stripe no WPForms no WordPress

O erro de conversao de moeda do Stripe no WPForms acontece quando a moeda definida em WPForms, Configurações, Pagamentos não corresponde a moeda da conta Stripe ou ao valor que você esperava cobrar, fazendo o Stripe converter, arredondar ou recusar o pagamento.

## O que é erro de conversao de moeda do Stripe no WPForms?

O erro de conversao de moeda do Stripe no WPForms aparece quando o valor cobrado chega ao Stripe em uma moeda diferente da que você configurou ou esperava. O WPForms tem uma única moeda global, definida no menu Configurações, na aba Pagamentos, através do menu suspenso Moeda (Currency), e e essa moeda que ele envia para o Stripe em cada cobranca. Quando essa configuração esta em USD e a conta deveria operar em BRL, o cliente ve um valor convertido, um simbolo de moeda errado no formulário ou uma cobranca em dolar no extrato.

O Stripe não adivinha a moeda pelo pais do cartao: ele cobra exatamente na moeda enviada pelo WPForms. Além disso, o Stripe processa valores em centavos para moedas comuns e em unidade inteira para moedas de zero decimais, como o iene japones (JPY). Se o código ou a configuração tratar uma moeda de zero decimais como se tivesse centavos, o valor cobrado fica cem vezes maior ou menor. Por isso o problema quase sempre se resume a um desalinhamento entre a moeda do WPForms, a moeda da conta Stripe e o formato de valor esperado.

## Como identificar

- O cliente e cobrado em uma moeda diferente da que aparece no formulário, por exemplo o formulário mostra R$ mas o extrato do cartao registra a cobranca em USD.
- No painel do Stripe a cobranca aparece com 'Converted from' ou com uma taxa de conversao aplicada que você não configurou.
- O valor cobrado fica multiplicado ou dividido por cem ao usar uma moeda de zero decimais como JPY, resultando em uma quantia absurda.
- O Stripe recusa o pagamento com a mensagem 'This currency is not supported for this account' ou 'The currency provided is not supported'.
- O simbolo de moeda exibido no campo de pagamento do formulário não corresponde a moeda real da sua loja ou pais.

**Antes de começar:** Antes de mexer na moeda de um formulário que já recebe pagamentos em producao, faca uma cobranca no modo de teste do Stripe ou valide em um ambiente de staging. Trocar a moeda global afeta todos os formulários de pagamento do site, entao confirme o impacto antes de salvar.

## Como prevenir

- Defina a moeda correta em WPForms, Configurações, Pagamentos logo na configuração inicial e confirme que ela coincide com a moeda de liquidacao da conta Stripe.
- Antes de cada novo formulário de pagamento, faca uma cobranca de teste no modo de teste do Stripe e confira moeda e valor no painel antes de publicar.
- Ao cobrar em moedas de zero decimais, documente que o valor vai sem centavos para evitar cobrancas cem vezes maiores.
- Padronize o formato decimal dos campos de valor com ponto como separador e evite separador de milhar nos campos enviados ao Stripe.

Erros relacionados

- [Como corrigir a integração Stripe/PayPal que não processa pagamentos no WPForms](https://full.services/wp-fixer/corrigir-pagamento-stripe-paypal-wpforms/)
- [Como corrigir entradas que não salvam no banco de dados no WPForms](https://full.services/wp-fixer/corrigir-entries-nao-salvam-wpforms/)
- [Como corrigir o erro de redirecionamento após envio no WPForms](https://full.services/wp-fixer/corrigir-redirecionamento-wpforms/)

## Causa

- A moeda definida em WPForms, Configurações, Pagamentos, no menu suspenso Moeda, esta diferente da moeda em que você pretende cobrar, e o WPForms envia essa moeda global para o Stripe em todas as cobrancas.
- A moeda configurada no WPForms não esta habilitada ou suportada na conta Stripe conectada, entao o Stripe recusa a cobranca ou aplica uma conversao automática no momento do settlement.
- A cobranca usa uma moeda de zero decimais, como JPY, mas o valor foi tratado como se tivesse centavos, fazendo o Stripe interpretar o montante cem vezes maior ou menor.
- O campo de valor do formulário foi preenchido com separador de milhar ou virgula decimal incompativel com o formato esperado, e o WPForms envia ao Stripe um valor convertido para um número inteiro de centavos errado.
- A conta Stripe esta cadastrada em um pais cuja moeda de liquidacao difere da moeda enviada pelo WPForms, e o Stripe converte automaticamente no recebimento, gerando a diferenca percebida pelo cliente.

## Como resolver

1. Confira a moeda global do WPForms em Pagamentos: Abra as configurações do WPForms e va até a aba Pagamentos. O menu suspenso Moeda define a única moeda usada em todos os formulários e enviada ao Stripe. Ajuste-o para a moeda correta antes de qualquer outro passo, pois o WPForms aplica essa escolha a cada cobranca.

```
Painel WP -> WPForms -> Configurações
Abra a aba Pagamentos (Payments)
No menu suspenso Moeda (Currency), selecione a moeda correta, por exemplo BRL - Real brasileiro
Clique em Salvar Configurações
```

2. Confirme que a conta Stripe aceita essa moeda: No painel do Stripe, verifique se a moeda escolhida no WPForms esta entre as moedas suportadas pela conta e pelo pais cadastrado. Se a moeda não for suportada, o Stripe converte no recebimento ou recusa a cobranca, gerando a diferenca de valor.

```
Acesse dashboard.stripe.com -> Configurações -> Pagamentos
Verifique a moeda padrão de liquidacao da conta
Confirme que a moeda definida no WPForms esta na lista de moedas aceitas pela conta
```

3. Trate moedas de zero decimais corretamente: Se você cobra em uma moeda de zero decimais, como JPY, o valor não deve ser multiplicado por cem. Garanta que o valor no campo de pagamento esteja em unidade inteira para essas moedas, evitando a cobranca cem vezes maior.

```
Liste as moedas de zero decimais usadas (ex.: JPY, KRW)
No campo de valor do formulário, informe o montante em unidade inteira, sem centavos
Faca uma cobranca de teste no modo de teste do Stripe e confira o valor recebido
```

4. Padronize o formato do valor no campo de pagamento: Verifique o campo de valor do formulário (Single Item, Total ou calculo) para garantir que o formato decimal não gere um número de centavos errado ao ser convertido pelo WPForms. Use ponto como separador decimal interno e teste o envio.

```
Painel WP -> WPForms -> Todos os Formulários -> abra o formulário de pagamento
Selecione o campo de valor (Single Item / Total) e confira o valor configurado
Envie um teste e compare o valor recebido no painel do Stripe com o esperado
```

5. Faca uma cobranca de teste antes de reabrir o formulário: Ative o modo de teste do Stripe no WPForms, faca uma cobranca com um cartao de teste e confirme no painel do Stripe que a moeda e o valor batem com o esperado. So depois volte ao modo de producao para liberar o formulário aos clientes.

```
Painel WP -> WPForms -> Configurações -> Pagamentos -> Stripe -> ative o Modo de Teste
Use o cartao de teste 4242 4242 4242 4242 para simular o pagamento
Confirme moeda e valor em dashboard.stripe.com -> Pagamentos, depois desative o Modo de Teste
```


## Código

```php
<?php
// Forca a moeda BRL nas cobrancas do Stripe via WPForms e trata moedas de zero decimais.
add_filter( 'wpforms_settings_currencies', 'full_wpforms_currency_default' );
function full_wpforms_currency_default( $currencies ) {
    // Garante que BRL esteja disponivel no menu suspenso Moeda (Configuracoes -> Pagamentos).
    $currencies['BRL'] = array(
        'name'                => esc_html__( 'Real brasileiro', 'wpforms-lite' ),
        'symbol'              => 'R$',
        'symbol_pos'          => 'left',
        'thousands_separator' => '.',
        'decimal_separator'   => ',',
        'decimals'            => 2,
    );
    return $currencies;
}

// Lista de moedas de zero decimais aceitas pelo Stripe (valor em unidade inteira, sem x100).
function full_stripe_zero_decimal( $currency ) {
    $zero_decimal = array( 'JPY', 'KRW', 'VND', 'CLP' );
    return in_array( strtoupper( $currency ), $zero_decimal, true );
}
```

## Perguntas frequentes

### Por que o WPForms esta cobrando na moeda errada no Stripe

Porque o WPForms envia ao Stripe a moeda definida em Configurações, na aba Pagamentos, pelo menu suspenso Moeda. Se essa moeda global estiver diferente da que você espera, o Stripe cobra exatamente na moeda enviada. Ajuste o menu Moeda para a opção correta e salve.

### Onde fica a configuração de moeda do WPForms

No painel do WordPress, va em WPForms, Configurações e abra a aba Pagamentos. La existe um menu suspenso chamado Moeda que define a moeda usada em todos os formulários e enviada ao Stripe a cada cobranca.

### O Stripe converte a moeda automaticamente para o pais do cliente

Não. O Stripe cobra na moeda que o WPForms envia, não na moeda do cartao do cliente. A conversao so ocorre quando a moeda enviada não e suportada pela conta Stripe ou difere da moeda de liquidacao, gerando taxa de conversao no recebimento.

### Por que o valor cobrado em iene ou outra moeda ficou cem vezes maior

Moedas de zero decimais, como o iene japones, são processadas pelo Stripe em unidade inteira, sem centavos. Se o valor for tratado como se tivesse centavos, o Stripe interpreta o montante multiplicado por cem. Informe o valor em unidade inteira para essas moedas.

### Posso usar moedas diferentes em formulários diferentes do WPForms

Não de forma nativa. A moeda do WPForms e global, definida uma vez na aba Pagamentos, e vale para todos os formulários do site. Para cobrar em outra moeda você precisa alterar essa configuração global, o que afeta todos os formulários de pagamento.

### Mudar a moeda no WPForms afeta pagamentos já recebidos

Não altera as cobrancas que já foram processadas no Stripe, mas passa a valer para todas as cobrancas seguintes em todos os formulários. Por isso faca uma cobranca de teste após a mudanca e confirme a moeda no painel do Stripe antes de reabrir o formulário.

### Como testo se a moeda esta correta antes de cobrar clientes reais

Ative o modo de teste do Stripe no WPForms, use o cartao de teste 4242 4242 4242 4242 e faca um envio. Depois confira em dashboard.stripe.com, na seção de Pagamentos, se a moeda e o valor batem com o esperado, e so entao volte ao modo de producao.

**Fonte:** [WPForms — Stripe Addon (currency setting in Settings, Payments)](https://wpforms.com/docs/)
