Como corrigir o erro de conversao de moeda do Stripe no WPForms no WordPress
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.
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.
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
- 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 - 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 - 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 - 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 - 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
<?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 );
}














