# Migrar para a API Payment Intents

> #### Recursos de integração do Payment Element
> 
> Você pode integrar o Payment Element para gerenciar assinaturas, impostos, descontos, frete e conversão de moedas. Para saber mais, consulte o guia [Criar uma página de checkout](https://docs.stripe.com/payments/quickstart.md).

Saiba como migrar seus cartões e a integração da API Charges.

A migração do fluxo de pagamentos pode ser complexa. A adoção incremental da API Payment Intents, em paralelo com o uso da API Charges, é segura. Para fazer isso, divida a migração nas seguintes etapas:

1. [Atualizar a versão da API e da biblioteca cliente](https://docs.stripe.com/payments/payment-intents/migration.md#api-version).
2. Se for aplicável, [migre o código que faz leitura das propriedades de Charge](https://docs.stripe.com/payments/payment-intents/migration/charges.md) para ter um caminho de leitura consistente entre cobranças criadas pela API Charges e cobranças criadas pela API Payment Intents. Isso garante uma integração do lado da leitura que funcione para a integração de pagamentos nova e antiga.
3. Migre sua integração existente da API Charges na [web](https://docs.stripe.com/payments/payment-intents/migration.md#web), [iOS](https://docs.stripe.com/payments/accept-a-payment.md?payment-ui=mobile&platform=ios) e [Android](https://docs.stripe.com/payments/accept-a-payment.md?payment-ui=mobile&platform=android) para usar a API Payment Intents.
4. Migre sua integração que [salva cartões em objetos Customer](https://docs.stripe.com/payments/payment-intents/migration.md#saved-cards).
5. [Teste com cartões de teste regulatório](https://docs.stripe.com/testing.md#regulatory-cards) para assegurar que a integração atualizada gerencie a autenticação corretamente.

## Atualizar a versão da API e a biblioteca do cliente

Embora a API Payment Intents funcione em todas as versões da API, recomendamos que você [atualize para a versão mais recente da API](https://docs.stripe.com/upgrades.md). Se decidir usar uma versão da API anterior a [2019-02-11](https://docs.stripe.com/upgrades.md#2019-02-11), observe as duas alterações a seguir ao analisar os exemplos de código:

- `requires_source` mudou para `requires_payment_method`
- `requires_source_action` mudou para `requires_action`

Além disso, se você usa uma das nossas [SDKs](https://docs.stripe.com/sdks.md), atualize para a versão mais recente da biblioteca para usar a API Payment Intents.

## Migre seus fluxos de pagamentos avulsos

#### Elements

Estas são as etapas de uma integração criada com Stripe.js e Elements:

1. Registrar sua intenção de coletar pagamentos no lado do servidor
2. Coletar dados de pagamento no lado do cliente
3. Iniciar a criação do pagamento
4. Executar o pedido do cliente no lado do servidor

### Etapa 1: registrar sua intenção de coletar pagamentos no lado do servidor

[Crie um PaymentIntent](https://docs.stripe.com/payments/payment-intents.md) no seu servidor e deixe-o [acessível no lado do cliente](https://docs.stripe.com/payments/payment-intents.md#passing-to-client).

### Etapa 2: coletar dados de pagamento no lado do cliente

Use a função [confirmCardPayment](https://docs.stripe.com/js.md#stripe-confirm-card-payment), que coleta os dados de pagamento e os envia diretamente à Stripe.

### Etapa 3: iniciar a criação do pagamento

Na integração existente, a última etapa é usar dados de pagamento tokenizados para criar uma cobrança no seu servidor. Isso não é mais necessário, pois a função `confirmCardPayment`, chamada na etapa anterior, inicia a criação da cobrança.

### Etapa 4: executar o pedido do cliente

Com a confirmação automática, a cobrança é criada para você de forma assíncrona a partir da ação do cliente, por isso, você deve [monitorar os webhooks](https://docs.stripe.com/payments/payment-intents/verifying-status.md) para determinar quando o pagamento é concluído corretamente. Para realizar etapas como processamento de pedido após o pagamento bem-sucedido de um cliente, implemente a compatibilidade com webhooks e monitore o evento `payment_intent.succeeded`.

### Before

Se a cobrança for bem-sucedida, faça o processamento.

### After

Assine o webhook `payment_intent.succeeded` e processe no gerenciador de webhooks.

Agora que você fez a migração, use os cartões de teste na seção a seguir para verificar se a sua integração atualizada gerencia autenticação 3D Secure.

#### Botão de solicitação de pagamento

O [botão de solicitação de pagamento](https://docs.stripe.com/stripe-js/elements/payment-request-button.md).js da Stripe funciona com a API Payment Intents usando o token obtido em uma integração PaymentRequest tradicional e vinculando-o a um PaymentIntent.

Estas são as etapas de uma integração criada com PaymentRequest:

1. Registrar sua intenção de coletar pagamentos no lado do servidor
2. Coletar dados de pagamento no lado do cliente
3. Iniciar a criação do pagamento
4. Executar o pedido do cliente no lado do servidor

Como alternativa, use o [Express Checkout Element](https://docs.stripe.com/elements/express-checkout-element.md) para oferecer múltiplos botões de pagamento com um clique aos seus clientes, incluindo Apple Pay, Google Pay, Link e PayPal.

### Etapa 1: registrar sua intenção de coletar pagamentos no lado do servidor

[Crie um PaymentIntent](https://docs.stripe.com/payments/payment-intents.md) no seu servidor e deixe-o [acessível no lado do cliente](https://docs.stripe.com/payments/payment-intents.md#passing-to-client).

### Etapa 2: coletar dados de pagamento no lado do cliente

Escute o evento `token` do objeto `PaymentRequest`, que fornece um token e uma função de retorno de chamada que você pode usar para indicar quando o processo de pagamento é concluído.

Para adaptar essa integração para a API Payment Intents, use a função [confirmCardPayment](https://docs.stripe.com/js.md#stripe-confirm-card-payment) e envie o ID do token para ela, em vez de enviá-lo ao seu servidor. Quando a promessa devolvida pela função `confirmCardPayment` for resolvida, acione o retorno de chamada de conclusão.

### Etapa 3: iniciar a criação do pagamento

Na integração existente, a última etapa é usar dados de pagamento tokenizados para criar uma cobrança no seu servidor. Isso não é mais necessário, pois a função `confirmCardPayment`, chamada na etapa anterior, inicia a criação da cobrança.

### Etapa 4: executar o pedido do cliente

Com a confirmação automática, a cobrança é criada para você de forma assíncrona a partir da ação do cliente, por isso, você deve [monitorar os webhooks](https://docs.stripe.com/payments/payment-intents/verifying-status.md) para determinar quando o pagamento é concluído corretamente. Para realizar etapas como processamento de pedido após o pagamento bem-sucedido de um cliente, implemente a compatibilidade com webhooks e monitore o evento `payment_intent.succeeded`.

### Before

Se a cobrança for bem-sucedida, faça o processamento.

### After

Assine o webhook `payment_intent.succeeded` e processe no gerenciador de webhooks.

Agora que você fez a migração, use os cartões de teste na seção a seguir para verificar se a sua integração atualizada gerencia autenticação 3D Secure.

#### Checkout antigo

Se estiver usando a versão antiga do Checkout, atualize para a [nova versão do Checkout](https://docs.stripe.com/payments/checkout.md), a maneira mais rápida de aceitar pagamentos com a Stripe. Ela permite aceitar pagamentos avulsos e assinaturas. Você também pode usar o Checkout sem a API da Stripe no seu servidor. Siga o [guia de migração do Checkout](https://docs.stripe.com/payments/checkout/migration.md) para migrar sua integração existente.

Se preferir criar seu próprio fluxo de checkout, use o [Elements](https://docs.stripe.com/payments/elements.md). Se você tiver migrado para o Elements, será possível criar uma integração com a API Payment Intents usando o [guia de migração do Elements](https://docs.stripe.com/payments/payment-intents/migration.md#web).

#### Stripe.js v2

Para atualizar uma integração do Stripe.js v2 existente e usar a API Payment Intents, primeiro atualize a integração para coletar dados de pagamento com o Elements. O Elements fornece componentes de IU criados previamente e [conformidade com PCI](https://docs.stripe.com/security/guide.md) simples com relatórios SAQ A.

Depois de fazer um upgrade para o Elements, crie uma integração com a API Payment Intents usando o [guia de migração do Elements](https://docs.stripe.com/payments/payment-intents/migration.md#web).

## Migre sua integração que salva cartões em objetos Customer

#### Salvar cartões no fluxo de checkout

Uma integração da API Payment Intents que coleta dados de cartão no fluxo de checkout consiste nas seguintes etapas:

1. Registrar sua intenção de coletar pagamentos no lado do servidor
2. Coletar dados de pagamento no lado do cliente
3. Iniciar a criação do pagamento
4. Executar o pedido do cliente no lado do servidor

### Etapa 1: registrar sua intenção de coletar pagamentos no lado do servidor

[Crie um PaymentIntent](https://docs.stripe.com/payments/payment-intents.md) no seu servidor. Defina [setup_future_usage](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-setup_future_usage) como `off_session` se você pretende cobrar os usuários quando estiverem fora do seu aplicativo ou `on_session` se planeja cobrá-los no aplicativo. Se você planeja usar o cartão para pagamentos na sessão e fora dela, use `off_session`. Informar o parâmetro `setup_future_usage` junto com o ID do cliente salvará o PaymentMethod resultante para esse cliente após a confirmação do PaymentIntent e a conclusão de todas as ações necessárias pelo cliente. Em seguida, torne o PaymentIntent [acessível no lado do cliente](https://docs.stripe.com/payments/payment-intents.md#passing-to-client).

### Etapa 2: coletar dados de pagamento no lado do cliente

Use a função [confirmCardPayment](https://docs.stripe.com/js.md#stripe-confirm-card-payment), que coleta os dados de pagamento e os envia diretamente à Stripe.

Por último, vincule a forma de pagamento (`paymentIntent.payment_method`) ao cliente.

### Etapa 3: iniciar a criação do pagamento

Na integração existente, a última etapa é usar dados de pagamento tokenizados para criar uma cobrança no seu servidor. Isso não é mais necessário, pois a função `confirmCardPayment`, chamada na etapa anterior, inicia a criação da cobrança.

### Etapa 4: executar o pedido do cliente

Com a confirmação automática, a cobrança é criada para você de forma assíncrona a partir da ação do cliente, por isso, você deve [monitorar os webhooks](https://docs.stripe.com/payments/payment-intents/verifying-status.md) para determinar quando o pagamento é concluído corretamente. Para realizar etapas como processamento de pedido após o pagamento bem-sucedido de um cliente, implemente a compatibilidade com webhooks e monitore o evento `payment_intent.succeeded`.

### Before

Se a cobrança for bem-sucedida, faça o processamento.

### After

Assine o webhook `payment_intent.succeeded` e processe no gerenciador de webhooks.

Agora que você fez a migração, use os cartões de teste na seção a seguir para verificar se a sua integração atualizada gerencia autenticação 3D Secure.

#### Salvar cartões fora do fluxo de checkout

Você precisará fazer algumas alterações na integração atual que salva os dados do cartão fora do fluxo de checkout. Primeiro, crie um [SetupIntent](https://docs.stripe.com/api/setup_intents.md) no seu servidor. Um SetupIntent autentica o cartão sem efetuar um pagamento inicial.

Passe o [segredo do cliente](https://docs.stripe.com/api/setup_intents/object.md#setup_intent_object-client_secret) do SetupIntent para o cliente e use a função [confirmCardSetup](https://docs.stripe.com/js.md#stripe-confirm-card-setup) em vez de [createToken](https://docs.stripe.com/js.md#stripe-create-token) ou [createSource](https://docs.stripe.com/js.md#stripe-create-source) depois que o cliente informar os dados do cartão.

Se exigido pela regulamentação, [confirmCardSetup](https://docs.stripe.com/js.md#stripe-confirm-card-setup) solicitará que o usuário autentique o cartão.

Quando [confirmCardSetup](https://docs.stripe.com/js.md#stripe-confirm-card-setup) é bem-sucedida, `setupIntent.payment_method` contém um [PaymentMethod](https://docs.stripe.com/api/payment_methods/object.md) que você pode associar a um objeto Customer.

Passe o ID desse PaymentMethod ao servidor e [associe a forma de pagamento](https://docs.stripe.com/api/payment_methods/attach.md) ao objeto Customer usando a API Payment Methods em vez da API Customers.

#### Pagar com cartões salvos

Ao pagar com uma forma de pagamento previamente salva, especifique o ID do cliente e o ID do cartão, a fonte ou o PaymentMethod previamente salvo. Antes, a fonte de pagamento padrão do cliente era utilizada se nenhuma fosse fornecida. Agora, você precisa especificar explicitamente a forma de pagamento desejado.

Se o cliente estiver *fora de sessão* (A payment is described as off-session if it occurs without the direct involvement of the customer, using previously-collected payment information), sinalize o pagamento como fora de sessão. Consulte [Cobrar cartões salvos](https://docs.stripe.com/payments/save-and-reuse.md?platform=web&ui=elements#charge-saved-payment-method) para saber mais.

## Acessar formas de pagamento salvas

Para exibir os cartões, as fontes e os PaymentMethods previamente salvos pelo cliente, [liste as formas de pagamento](https://docs.stripe.com/api/payment_methods/list.md) em vez de ler a propriedade de [fontes](https://docs.stripe.com/api/customers/object.md#customer_object-sources) do objeto do cliente. Isso é necessário porque novos PaymentMethods adicionados a um cliente não serão duplicados na propriedade de fontes do objeto do cliente.

## Testar a integração

É importante testar completamente a integração para garantir o tratamento correto de cartões que exigem autenticação adicional e os que não exigem essa autenticação. Use estes números de cartão em uma [área restrita](https://docs.stripe.com/keys.md#test-live-modes) com uma data de validade no futuro e qualquer código CVC de três dígitos para validar a integração desses dois tipos de cartão.

| Número | Autenticação | Descrição |
| --- | --- | --- |
| 4000002500003155 | Exigido na configuração ou primeira transação | Este cartão de teste exige autenticação para [pagamentos avulsos](https://docs.stripe.com/payments/accept-a-payment.md?platform=web). No entanto, quando você configura esse cartão usando a [API Setup Intents](https://docs.stripe.com/payments/save-and-reuse.md) e usa o cartão salvo para os próximos pagamentos, nenhuma autenticação adicional é necessária. |
| 4000002760003184 | Obrigatório | Este cartão de teste exige autenticação em todas as transações. |
| 4000008260003178 | Obrigatório | Este cartão de teste exige autenticação, mas os pagamentos serão recusados com o código `insufficient_funds` depois da autenticação. |
| 4000000000003055 | Compatível | Este cartão de teste aceita a autenticação do 3D Secure 2, mas não a exige. Os pagamentos com esse cartão não exigem autenticação adicional em uma área restrita, a menos que as [regras do Radar da área restrita](https://docs.stripe.com/payments/3d-secure/authentication-flow.md#three-ds-radar) solicitem autenticação. |

Use estes cartões no aplicativo ou na [demonstração de pagamentos](https://stripe-payments-demo.appspot.com) para ver o comportamento diferente.

## See also

- [PaymentIntents no iOS](https://docs.stripe.com/payments/accept-a-payment.md?payment-ui=mobile&platform=ios)
- [PaymentIntents no Android](https://docs.stripe.com/payments/accept-a-payment.md?payment-ui=mobile&platform=android)
