# Pagamentos com cartão na API Charges Aprenda a cobrar, salvar e autenticar cartões com as APIs herdadas da Stripe. > #### API herdada > > O conteúdo desta seção se refere a um recurso *obsoleto* (Technology that's no longer recommended). Use a [API Payment Intents](https://docs.stripe.com/payments/accept-a-payment.md). > > A API Charges não aceita os seguintes recursos, muitos deles obrigatórios para a conformidade com cartões de crédito: > > - Negócios na Índia - [Solicitações bancárias para autenticação de cartão](https://docs.stripe.com/payments/cards/overview.md) - [Autenticação Forte de Cliente](https://docs.stripe.com/strong-customer-authentication.md) As APIs [Charges](https://docs.stripe.com/api/charges.md) e [Tokens](https://docs.stripe.com/api/tokens.md) são APIs legadas usadas em integrações antigas da Stripe para aceitar pagamentos com cartão de débito e crédito. Nas novas integrações, use [PaymentIntents](https://docs.stripe.com/payments/accept-a-payment.md). A API Charges limita o aproveitamento de recursos da Stripe. Para usar os recursos mais avançados da Stripe, use o [Stripe Checkout](https://docs.stripe.com/payments/checkout.md) ou [migre para a API Payment Intents](https://docs.stripe.com/payments/payment-intents/migration.md). ## Fluxo de pagamentos Na maioria dos casos, a API PaymentIntents oferece mais flexibilidade e opções de integração. | API Charges | API Payment Intents | | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | 1. Colete os dados de pagamento do cliente no navegador com o Elements. 1. Crie tokens com dados de pagamento com Stripe.js. 1. Faça uma solicitação para enviar o token ao seu servidor. 1. Use o token para criar uma cobrança no seu servidor com o valor e moeda desejados. 1. Execute o pedido do cliente se o pagamento for finalizado. | 1. Crie um PaymentIntent no seu servidor com o valor e moeda desejados. 1. Envie o segredo do cliente do PaymentIntent para o lado do cliente. 1. Colete os dados de pagamento do cliente no navegador com o Elements. 1. Use Stripe.js ou o SDK para celular para gerenciar [3D Secure](https://docs.stripe.com/payments/3d-secure/authentication-flow.md#three-ds-radar) e finalizar o pagamento no cliente. 1. Use webhooks para executar o pedido do cliente se o pagamento for finalizado. | ## Reembolsos Para reembolsar um pagamento pela API, crie um [reembolso](https://docs.stripe.com/api.md#create_refund) e forneça o ID da cobrança a ser reembolsada. ```curl curl https://api.stripe.com/v1/refunds \ -u "<>:" \ -d charge={{CHARGE_ID}} ``` Para reembolsar parte de um pagamento, forneça um parâmetro `amount` em forma de inteiro em centavos (ou o menor valor possível na moeda da cobrança). ```curl curl https://api.stripe.com/v1/refunds \ -u "<>:" \ -d charge={{CHARGE_ID}} \ -d amount=1000 ``` ## Apple Pay Quando o cliente aprova o pagamento, seu aplicativo recebe uma instância [PKPayment](https://developer.apple.com/documentation/passkit/pkpayment) com os dados do cartão criptografados, implementando os métodos de [PKPaymentAuthorizationViewControllerDelegate](https://developer.apple.com/documentation/passkit/pkpaymentauthorizationviewcontrollerdelegate). 1. Use o método do SDK [createTokenWithPayment](https://stripe.dev/stripe-ios/stripe-payments/Classes/STPAPIClient.html#/c:@CM@StripePayments@StripeCore@objc\(cs\)STPAPIClient\(im\)createTokenWithPayment:completion:) para transformar o `PKPayment` em um `Token` da Stripe 1. Use este `Token` para gerar uma cobrança. #### Swift ```swift extension CheckoutViewController: PKPaymentAuthorizationViewControllerDelegate { func paymentAuthorizationViewController(_ controller: PKPaymentAuthorizationViewController, didAuthorizePayment payment: PKPayment, handler: @escaping (PKPaymentAuthorizationResult) -> Void) { // Convert the PKPayment into a Token STPAPIClient.shared.createToken(withPayment: payment) { token, error in guard let token = token else { // Handle the error return } let tokenID = token.tokenId // Send the token identifier to your server to create a Charge... // If the server responds successfully, set self.paymentSucceeded to YES } } func paymentAuthorizationViewControllerDidFinish(_ controller: PKPaymentAuthorizationViewController) { // Dismiss payment authorization view controller dismiss(animated: true, completion: { if (self.paymentSucceeded) { // Show a receipt page... } else { // Present error to customer... } }) } } ``` ## Descrição dinâmica no extrato Por padrão, a [descrição no extrato](https://docs.stripe.com/get-started/account/activate.md#public-business-information) da sua conta Stripe aparece nos extratos do cliente sempre que você cobra o cartão. Também é possível configurar a descrição do extrato dinamicamente, em todas as solicitações de cobrança, com o argumento `statement_descriptor` no objeto Charge. #### curl ```bash curl https://api.stripe.com/v1/charges \ -u <>: \ -d "amount"=999 \ -d "currency"="usd" \ -d "description"="Example charge" \ -d "source"="tok_visa" \ -d "statement_descriptor"="Custom descriptor" ``` As descrições de extratos são limitadas a 22 caracteres, não podem usar os caracteres especiais `<`, `>`, `'`, `"` ou `*` e não devem consistir exclusivamente em números. Para definir a descrição do extrato dinamicamente em cobranças em cartões de crédito e débito, a parte dinâmica é anexada ao descritor do comerciante da liquidação (separado por um `*` e um espaço em branco). Por exemplo, uma descrição no extrato de uma empresa chamada FreeCookies pode incluir o tipo de cookie comprado: `FREECOOKIES* MORANGO`. O `*` e o espaço em branco são contabilizados nos 22 caracteres, e a Stripe automaticamente aloca 10 caracteres para a descrição dinâmica do extrato. Isso significa que a descrição do comerciante da liquidação pode ser truncada se tiver mais de 10 caracteres (considerando que a descrição dinâmica também tenha mais de 10 caracteres). Se a descrição dinâmica para o extrato também tiver mais de 10 caracteres, as duas serão cortadas para ficar só com 10. Se tiver dificuldades com os limites de caracteres, crie uma [descrição encurtada](https://dashboard.stripe.com/settings/public) no Stripe Dashboard para reduzir a descrição do comerciante da liquidação. Com isso, sobra mais espaço para a descrição dinâmica. A descrição encurtada: - Substitui a descrição do extrato do comerciante da liquidação ao usar descrições dinâmicas. - Pode ter de 2 a 10 caracteres. > Se a descrição do extrato da sua conta tiver mais de 10 caracteres, defina uma [descrição curta](https://dashboard.stripe.com/settings/public) no Dashboard ou use `statement_descriptor_prefix`. Isso evita que a descrição do seu extrato fique truncada de forma imprevisível. Se não souber como as descrições ficam quando são combinadas, consulte o [Stripe Dashboard](https://dashboard.stripe.com/settings/public). ## Armazenar informações em metadados Para usar a [API Payment Intents](https://docs.stripe.com/payments/accept-a-payment.md), acesse e atualize somente os campos `metadata` e `description` do objeto Payment Intent. Se estiver usando os objetos Payment Intent e também Charge, os valores desses campos nem sempre serão iguais. A Stripe aceita [metadados](https://docs.stripe.com/api.md#metadata) nas solicitações mais comuns, como processamento de cobranças. Os metadados não aparecem para o cliente nem são usados como referência para a recusa ou bloqueio de uma cobrança no nosso sistema de prevenção de fraudes. Com metadados, é possível associar outras informações importantes para você às atividades da Stripe. Todos os metadados ficarão visíveis no Dashboard (por exemplo: ao analisar a página de uma cobrança específica) e também ficarão disponíveis nos relatórios e exportações comuns. Por exemplo, o ID do pedido da sua loja pode ser anexado à cobrança usada para pagar esse pedido. Dessa forma, você, seu contador ou equipe de finanças poderá reconciliar facilmente as cobranças da Stripe com os pedidos no seu sistema. Se estiver usando o *Radar* (Stripe Radar helps detect and block fraud for any type of business using machine learning that trains on data across millions of global companies. It’s built into Stripe and requires no additional setup to get started), considere passar dados adicionais do cliente e do pedido como metadados. Dessa forma, você pode criar [ Regras do radar usando atributos de](https://docs.stripe.com/radar/rules/reference.md#metadata-attributes) metadados e ter mais informações sobre o pagamento disponíveis no Dashboard para agilizar seu processo de revisão. #### curl ```bash curl https://api.stripe.com/v1/charges \ -u <>: \ -d "amount"=999 \ -d "currency"="usd" \ -d "description"="Example charge" \ -d "source"="tok_visa" \ -d "metadata[order_id]"=6735 ``` > Não armazene dados sensíveis (informações que identifiquem uma pessoa, dados de cartão e assim por diante) como metadados ou no parâmetro `description` da cobrança. ## Recusas Para que a integração responda automaticamente a falhas de pagamento, você pode acessar o `outcome` de uma cobrança de duas formas. - [Processe o erro de API](https://docs.stripe.com/api.md#error_handling) retornado quando um pagamento falha. Para pagamentos bloqueados e recusados pelo emissor do cartão, o erro inclui o ID da cobrança, que pode ser usado para [acessá-la](https://docs.stripe.com/api.md#retrieve_charge). - Use [webhooks](https://docs.stripe.com/webhooks.md) para monitorar as atualizações de status. Por exemplo, o evento `charge.failed` é acionado quando um pagamento falha.