{"__v":0,"_id":"585034132272620f002835d3","category":{"project":"575aeffae12cf20e002f306c","version":"575aeffae12cf20e002f306f","_id":"5783f86dbfbba719003f0d8b","__v":0,"sync":{"url":"","isSync":false},"reference":false,"createdAt":"2016-07-11T19:50:05.606Z","from_sync":false,"order":3,"slug":"pagar-com-cartão","title":"Pagar com Cartão"},"parentDoc":null,"project":"575aeffae12cf20e002f306c","user":"57601a13af3e090e00108059","version":{"__v":29,"_id":"575aeffae12cf20e002f306f","project":"575aeffae12cf20e002f306c","createdAt":"2016-06-10T16:51:06.080Z","releaseDate":"2016-06-10T16:51:06.080Z","categories":["575aeffae12cf20e002f3070","575af039a083950e004487f7","575af5c7ba4ed70e000ca288","57602fe5b82256240055c657","57602ff6c811102000cef302","576030909b1a9a220067ca40","57604518b82256240055c722","5761a63d207db7170022fc14","5761b9a2b65324200072d79e","576832939f0bf4190014ffdf","576832c09f0bf4190014ffe1","576832cba151c10e004316f0","576832d5bb15f40e00a288ec","576832e107b1f30e0039c645","577680bf3cee3a0e00a000bc","577ff3b1ff48990e000c6806","5783f78c5cbce30e0074e2b7","5783f86292edb92200e6101c","5783f86dbfbba719003f0d8b","5783f8755cbce30e0074e2b8","5783f8b65cbce30e0074e2b9","5783f8bf5cbce30e0074e2ba","5783f8d8ce802f0e0087d574","578529f887c9280e0090394b","57852aeb87c9280e0090394d","57866e72b2f4060e00fa39ca","57ab6d5c39c2fd1900191879","57f39451ab0ee12000bef915","582499a0d90fa027009b259e"],"is_deprecated":false,"is_hidden":false,"is_beta":false,"is_stable":true,"codename":"2016","version_clean":"1.0.0","version":"1"},"updates":[],"next":{"pages":[],"description":""},"createdAt":"2016-12-13T17:46:59.535Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"settings":"","results":{"codes":[]},"auth":"required","params":[],"url":""},"isReference":false,"order":1,"body":"Saiba como permitir o pagamento de uma cobrança através de cartão de crédito. Para gerar, é bem simples e requer apenas dois passos:\n\n1. [Crie a transação](https://dev.gerencianet.com.br/docs/pagamento-cartao#section-1-criar-transa-o), informando o item/produto/serviço, valor, quantidade, etc;\n\n2. [Associe à forma de pagamento via cartão](https://dev.gerencianet.com.br/docs/pagamento-cartao#section-2-associe-forma-de-pagamento-via-cart-o), informando o <code>charge_id</code> da transação criada;\n\n  2.1. [Obtenção do payment_token](https://dev.gerencianet.com.br/docs/pagamento-cartao#section-2-1-obten-o-do-payment_token) (via JavaScript, único por transação);\n\n  2.2. [Pagando com cartão](https://dev.gerencianet.com.br/docs/pagamento-cartao#section-2-2-pagando-com-cart-o) (informando o payment_token obtido anteriormente).\n\nPor se tratar de pagamento via cartão e envolver dados sensíveis, como dados do cartão de crédito, os procedimentos descritos nos itens 2.1 e 2.2, ou seja, obtenção do <code>payment_token</code> e pagando com cartão, respectivamente, são necessários.\n\nO restante desta página apresenta as três etapas detalhadas, mas você precisa instalar uma de nossas bibliotecas em seu servidor para executar os códigos de exemplo. [Certifique-se que a SDK da Gerencianet foi instalada](https://dev.gerencianet.com.br/docs/instalacao-da-api).\n\n<hr>\n\n## 1. Criar transação\n\nInicialmente, será gerada uma transação e que estará com o status de <code>new</code>. Essa cobrança somente terá seu status alterado quando o integrador definir sua forma de pagamento.\n\nApós criar a cobrança, será retornado o <code>charge_id</code>, que é o identificador único da transação e que será utilizado para associar à forma de pagamento.\n\nPara gerar uma transação, você deve enviar uma requisição <code>POST</code> para a rota <code>/charge</code>.\n\nNo Playground (ambiente de desenvolvimento), o processo de geração de transação equivale ao endpoint <code>POST /charge</code>.\n\nA seguir um exemplo de utilização:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"<?php\\n \\nrequire __DIR__.'/../../vendor/autoload.php'; // caminho relacionado ao Composer\\n \\nuse Gerencianet\\\\Exception\\\\GerencianetException;\\nuse Gerencianet\\\\Gerencianet;\\n \\n$clientId = 'your_client_id'; // insira seu Client_Id, conforme o ambiente (Des ou Prod)\\n$clientSecret = 'your_client_secret'; // insira seu Client_Secret, conforme o ambiente (Des ou Prod)\\n \\n$options = [\\n  'client_id' => $clientId,\\n  'client_secret' => $clientSecret,\\n  'sandbox' => true // altere conforme o ambiente (true = desenvolvimento e false = producao)\\n];\\n \\n$item_1 = [\\n    'name' => 'Item 1', // nome do item, produto ou serviço\\n    'amount' => 1, // quantidade\\n    'value' => 1000 // valor (1000 = R$ 10,00)\\n];\\n \\n$item_2 = [\\n    'name' => 'Item 2', // nome do item, produto ou serviço\\n    'amount' => 2, // quantidade\\n    'value' => 2000 // valor (2000 = R$ 20,00)\\n];\\n \\n$items =  [\\n    $item_1,\\n    $item_2\\n];\\n\\n//Exemplo para receber notificações da alteração do status da transação.\\n//$metadata = ['notification_url'=>'sua_url_de_notificacao_.com.br']\\n//Outros detalhes em: https://dev.gerencianet.com.br/docs/notificacoes\\n\\n//Como enviar seu $body com o $metadata\\n//$body  =  [\\n//    'items' => $items,\\n//\\t\\t'metadata' => $metadata\\n//];\\n\\n$body  =  [\\n    'items' => $items\\n];\\n\\ntry {\\n    $api = new Gerencianet($options);\\n    $charge = $api->createCharge([], $body);\\n \\n    print_r($charge);\\n} catch (GerencianetException $e) {\\n    print_r($e->code);\\n    print_r($e->error);\\n    print_r($e->errorDescription);\\n} catch (Exception $e) {\\n    print_r($e->getMessage());\\n}\",\n      \"language\": \"php\"\n    },\n    {\n      \"code\": \"'use strict';\\n \\nvar Gerencianet = require('gn-api-sdk-node');\\n \\nvar clientId = 'your_client_id';\\nvar clientSecret = 'your_client_secret';\\n \\nvar options = {\\n  client_id: clientId,\\n  client_secret: clientSecret,\\n  sandbox: true\\n}\\n \\nvar body = {\\n  items: [{\\n    name: 'Product 1',\\n    value: 1000,\\n    amount: 2\\n  }],\\n  shippings: [{\\n    name: 'Default Shipping Cost',\\n    value: 100\\n  }]\\n}\\n \\nvar gerencianet = new Gerencianet(options);\\n \\ngerencianet\\n  .createCharge({}, body)\\n  .then(console.log)\\n  .catch(console.log)\\n  .done();\",\n      \"language\": \"javascript\",\n      \"name\": \"NodeJS\"\n    },\n    {\n      \"code\": \"require \\\"gerencianet\\\"\\n \\noptions = {\\n  client_id: \\\"client_id\\\",\\n  client_secret: \\\"client_secret\\\",\\n  sandbox: true\\n}\\n \\nbody = {\\n  items: [{\\n    name: \\\"Product 1\\\",\\n    value: 1000,\\n    amount: 2\\n  }],\\n  shippings: [{\\n    name: \\\"Default Shipping Cost\\\",\\n    value: 100\\n  }]\\n}\\n \\ngerencianet = Gerencianet.new(options)\\ngerencianet.create_charge(body: body)\",\n      \"language\": \"ruby\"\n    },\n    {\n      \"code\": \"from gerencianet import Gerencianet\\n \\noptions = {\\n    'client_id': 'client_id',\\n    'client_secret': 'client_secret',\\n    'sandbox': True\\n}\\n \\ngn = Gerencianet(options)\\n \\nbody = {\\n    'items': [{\\n        'name': \\\"Product 1\\\",\\n        'value': 1000,\\n        'amount': 2\\n    }],\\n    'shippings': [{\\n        'name': \\\"Default Shipping Cost\\\",\\n        'value': 100\\n    }]\\n}\\n \\ngn.create_charge(body=body)\",\n      \"language\": \"python\"\n    },\n    {\n      \"code\": \"dynamic endpoints = new Endpoints(\\\"client_id\\\", \\\"client_secret\\\", true);\\n \\nvar body = new\\n{\\n    items = new[] {\\n        new {\\n            name = \\\"Product 1\\\",\\n            value = 1000,\\n            amount = 2\\n        }\\n    },\\n    shippings = new[] {\\n        new {\\n            name = \\\"Default Shipping Cost\\\",\\n            value = 100\\n        }\\n    }\\n};\\n \\nvar response = endpoints.CreateCharge(null, body);\\nConsole.WriteLine(response);\",\n      \"language\": \"asp\",\n      \"name\": \".NET\"\n    },\n    {\n      \"code\": \"/* Para que a SDK Java funcione corretamente, é necessário que a instanciação do módulo seja feita através da criação de um objeto do tipo Gerencianet.\\n\\nSempre que quisermos chamar uma função da API, basta invocar o método call do objeto Gerencianet, passando como parâmetro o nome do método, os parâmetros da requisição (sempre será um HashMap<String, String>), e o \\\"body\\\", que consiste nas propriedades a serem passadas como argumento na chamada de um função da SDK. O \\\"body\\\" pode ser declarado de duas formas: um JSONObject ou um Map<String, Object>.\\n\\nEsta estrutura é necessária para representar o corpo da requisição http que é enviada à um determinado endpoint. Se o \\\"body\\\" for um JSONObject, o retorno do método call será um JSONObject, se for um Map<String, Object>, o retorno do método call será um Map<String, Object>\\n\\nA seguir, disponibilizamos links de nosso Github mostrando duas formas diferentes de retorno: JSONObject\\ne Map<String, Object>\\n\\n\\nJSONObject\\n\\nhttps://github.com/gerencianet/gn-api-sdk-java-examples/blob/master/src/main/java/br/com/gerencianet/charge/json/CreateCharge.java\\n\\n\\nMap<String, Object>\\n\\nhttps://github.com/gerencianet/gn-api-sdk-java-examples/blob/master/src/main/java/br/com/gerencianet/charge/map/CreateCharge.java\\n\\n*/\",\n      \"language\": \"java\"\n    }\n  ]\n}\n[/block]\n### a) Estrutura hierárquica dos atributos que podem ser utilizados:\n[block:html]\n{\n  \"html\": \"<p>Por meio da imagem a seguir é possível observar a hierarquia dos atributos presentes na estrutura dos dados do <abbr title=\\\"JSON que descreve a estrutura dos dados, incluindo todas as informações que podem ser enviadas e as especificidades de cada uma.\\\">Schema</abbr> do <em>endpoint</em> <code>POST /charge</code>:</p>\\n<br />\\n<img src=\\\"http://image.prntscr.com/image/12eeb6e0681149efaf443cd9cd8a1c12.png\\\" alt=\\\"POST /charge - Estrutura dos atributos do Schema que podem ser utilizados\\\"><br />\\n<p>Para verificar mais detalhes, <a href=\\\"https://dev.gerencianet.com.br/docs/playground-transacoes#charge\\\" target=\\\"_blank\\\">acesse aqui.</p>\"\n}\n[/block]\n### b) Atributos que podem ser usados para criar uma transação:\n[block:parameters]\n{\n  \"data\": {\n    \"h-0\": \"Atributo\",\n    \"h-1\": \"Descrição\",\n    \"h-2\": \"Obrigatório\",\n    \"h-3\": \"Tipo\",\n    \"0-0\": \"items\",\n    \"1-0\": \"shippings\",\n    \"2-0\": \"metadata\",\n    \"0-1\": \"Item que está sendo vendido. Uma mesma transação pode possuir ilimitados itens.\\n\\n<span class=\\\"tab1\\\"><em>Atributos de items</em></span>\\n\\n<div class=\\\"tab2\\\"><code>name<strong class=\\\"atributo-obrigatorio\\\">*</strong></code> // Nome do item, produto ou serviço. <strong class=\\\"descricao-atributo\\\"><span class=\\\"atributo\\\">Mínimo de 1 caractere e máximo de 255 caracteres (String).</span></strong></div>\\n\\n<div class=\\\"tab2\\\"><code>value<strong class=\\\"atributo-obrigatorio\\\">*</strong></code> // Valor, em centavos. Ex: R$ 10,00 = 1000. <strong class=\\\"descricao-atributo\\\"><span class=\\\"atributo\\\">Integer.</span></strong></div>\\n\\n<div class=\\\"tab2\\\"><code>amount</code> // Quantidade. <strong class=\\\"descricao-atributo\\\"><span class=\\\"atributo\\\">Integer (padrão: 1)</span></strong></div>\\n\\n<div class=\\\"tab2\\\"><code>marketplace</code> // Referente às configurações de repasses. <span class=\\\"atributo\\\">Atributos:</span></div> <div class=\\\"tab2\\\">\\n<code>*payee_code*</code> (<a href=\\\"http://image.prntscr.com/image/cabe13e1e5b64449b942cf31139150ba.png\\\" target=\\\"_blank\\\">código identificador da conta Gerencianet</a> - String).\\n<code>*percentage*</code> (porcentagem de repasse, sendo que 9000 equivale a 90% - Integer).</span></div>\",\n    \"1-1\": \"Determina o(s) valor(es) de frete(s) de uma transação. Uma mesma transação pode possuir ilimitados valores de frete.\\n\\n<span class=\\\"tab1\\\"><em>Atributos de shippings</em></span>\\n\\n<div class=\\\"tab2\\\"><code>name<strong class=\\\"atributo-obrigatorio\\\">*</strong></code> // Rótulo do frete. <strong class=\\\"descricao-atributo\\\"><span class=\\\"atributo\\\">Máximo de 255 caracteres. String.</span></strong></div>\\n\\n<div class=\\\"tab2\\\"><code>value<strong class=\\\"atributo-obrigatorio\\\">*</strong></code> // Valor do frete, em centavos (1990 equivale a R$19,90). <strong class=\\\"descricao-atributo\\\"><span class=\\\"atributo\\\">Integer.</span></strong></div>\\n\\n<div class=\\\"tab2\\\"><code>payeeCode</code> // <a href=\\\"http://image.prntscr.com/image/cabe13e1e5b64449b942cf31139150ba.png\\\" target=\\\"_blank\\\">Código identificador da conta Gerencianet</a>, único por conta. <strong class=\\\"descricao-atributo\\\"><span class=\\\"atributo\\\">Padrão: Identificador da sua própria conta. String.</span></strong></div>\",\n    \"2-1\": \"Define dados específicos da transação.\\n\\n<span class=\\\"tab1\\\"><em>Atributos de metadata</em></span>\\n\\n<div class=\\\"tab2\\\"><code>custom_id</code> // Permite associar uma transação Gerencianet a uma ID específica de seu sistema ou aplicação, permitindo identificá-la caso você possua uma identificação específica e queira mantê-la. <strong class=\\\"descricao-atributo\\\"><span class=\\\"atributo\\\">Máximo de 255 caracteres. String/null.</span></strong></div>\\n\\n<div class=\\\"tab2\\\"><code>notification_url</code> // Endereço de sua URL válida que receberá as notificações de mudanças de status das transações. <strong class=\\\"descricao-atributo\\\"><span class=\\\"atributo\\\">Máximo de 255 caracteres. String/null.</span></strong></div>\",\n    \"0-2\": \"Sim\",\n    \"1-2\": \"Não\",\n    \"2-2\": \"Não\",\n    \"0-3\": \"Array\",\n    \"1-3\": \"Array\",\n    \"2-3\": \"Object\"\n  },\n  \"cols\": 4,\n  \"rows\": 3\n}\n[/block]\n<strong class=\"atributo-obrigatorio-texto\">* valor obrigatório</strong>\n\n<hr>\n\n## 2. Associe à forma de pagamento via cartão\n\nCom a transação criada, vamos associá-la à forma de pagamento desejada, que neste caso, será cartão de crédito. Para tal, deverá ser informado a <code>charge_id</code> obtido no consumo anterior em que foi gerada a transação.\n\nNo caso de transações com cartão de crédito, será realizado em duas etapas, sendo a primeira a transmissão (**via JavaScript**, no browser), de forma segura, os dados do cartão e retornando um <code>payment_token</code>, e na segunda etapa seu *backend* envia o restante das informações da transação e o <code>payment_token</code> obtido na primeira etapa.\n[block:callout]\n{\n  \"type\": \"warning\",\n  \"title\": \"IMPORTANTE\",\n  \"body\": \"É importante frisar que **não é possível efetuar pagamento com cartão de crédito sem obter o** <code>payment_token</code> da transação, por isso, é imprescindível a realização dos procedimentos do **item 2.1** deste documento (obter o <code>payment_token</code>), e **só depois** passar para o item 2.2 (que é de fato o pagamento com cartão).\"\n}\n[/block]\nPara associar à forma de pagamento, você deve enviar uma requisição <code>POST</code> para a rota <code>/charge/:id/pay</code>, onde <code>:id</code> é o <code>charge_id</code> da transação desejada.\n\nNo Playground (ambiente de desenvolvimento), o processo de associar uma transação à uma forma de pagamento equivale ao endpoint <code>POST /charge/:id/pay</code>.\n\n<hr>\n\n## 2.1. Obtenção do payment_token\n\nCom a transação criada, vamos associá-la à forma de pagamento desejada, que neste caso, será cartão de crédito.\n[block:html]\n{\n  \"html\": \"<p>Inicialmente, vamos realizar a primeira etapa, que é a obtenção do <code>payment_token</code> e, para tal, você necessitará de um código Javascript específico de sua conta Gerencianet. Para gerá-lo, insira no campo abaixo o seu \\\"identificador da conta\\\" (<a target=\\\"blank\\\" href=\\\"http://image.prntscr.com/image/cabe13e1e5b64449b942cf31139150ba.png\\\" class=\\\"block-display-image-parent block-display-image-size-smart\\\"><img>onde localizo?</img></a>) e clique no botão \\\"Gerar\\\". Cabe frisar que é preciso estar logado em sua conta Gerencianet para visualizar o identificador de sua conta.</p>\\n\\n<input id=\\\"input_code\\\" type=\\\"text\\\" > <button id=\\\"get_code\\\">Gerar</button> \\n<div id=\\\"resultado_code_js\\\"></div>\\n<br>\\n<p>É importante frisar que é obtido via <strong>JavaScript</strong>, no browser, de forma segura, os dados do cartão e retorna um <code>payment_token</code>, que é a representação dos dados enviados.</p>\"\n}\n[/block]\n\n[block:callout]\n{\n  \"type\": \"info\",\n  \"title\": \"NOTA\",\n  \"body\": \"Lembre-se que, após informar seu identificador de conta, serão gerados 2 (dois) códigos JavaScript distintos. Copie e utilize o código referente ao ambiente desejado, atentando-se às diferenças do ambiente de *\\\"Desenvolvimento\\\"* e *\\\"Produção\\\"*.\"\n}\n[/block]\nPara aplicações web, você deve copiar o script acima, específico da sua conta, e utilizar a nossa biblioteca Javascript, conforme o *snippet* abaixo. Se você possui um app mobile, confira como proceder acessando nossa página no GitHub para Android e/ou iOS.\n\nAdicionalmente, esclarecemos que uma conta Gerencianet não possui um <code>payment_token</code> - ele é diferente e criado para cada cobrança gerada por cartão de crédito. Ele representa os dados do cartão do pagador e é obtido pela função <code>getPaymentToken</code>. Além disso, cabe frisar que o <code>payment_token</code> pode ser utilizado uma única vez, portanto, não é possível utilizá-lo para cobrar de forma recorrente.\n\n<br />\n### a) Obtendo um \"payment_token\" ( getPaymentToken )\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"$gn.ready(function(checkout) {\\n \\n  var callback = function(error, response) {\\n    if(error) {\\n      // Trata o erro ocorrido\\n      console.error(error);\\n    } else {\\n      // Trata a resposta\\n      console.log(response);\\n    }\\n  };\\n \\n  checkout.getPaymentToken({\\n    brand: 'visa', // bandeira do cartão\\n    number: '4012001038443335', // número do cartão\\n    cvv: '123', // código de segurança\\n    expiration_month: '05', // mês de vencimento\\n    expiration_year: '2018' // ano de vencimento\\n  }, callback);\\n \\n});\",\n      \"language\": \"json\",\n      \"name\": \"Código\"\n    }\n  ]\n}\n[/block]\n<br />\n### b) Obtendo informações sobre parcelamentos ( getInstallments )\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"$gn.ready(function(checkout){\\n \\n  checkout.getInstallments(50000,'visa', function(error, response){\\n    if(error) {\\n      // Trata o erro ocorrido\\n      console.log(error);\\n    } else {\\n      // Insere o parcelamento no site\\n    }\\n  });\\n \\n});\",\n      \"language\": \"json\",\n      \"name\": \"Código\"\n    }\n  ]\n}\n[/block]\n<br />\n### c) Atributos relacionados ao envio de dados do cartão:\n\n*$gn.ready ( callback )*\n[block:parameters]\n{\n  \"data\": {\n    \"h-0\": \"Parâmetro\",\n    \"h-1\": \"Descrição\",\n    \"h-2\": \"Tipo\",\n    \"0-0\": \"callback\",\n    \"0-2\": \"Function\",\n    \"0-1\": \"Função de inicialização que possibilita a chamada das funções *getPaymentToken* e *getInstallments*.\\n\\n<span class=\\\"tab1\\\"><em>Parâmetro(s) de callback</em></span>\\n\\n<div class=\\\"tab2\\\"><code>object</code> // Objeto que recebe as instâncias das outras funções.</div>\"\n  },\n  \"cols\": 3,\n  \"rows\": 1\n}\n[/block]\n<br />\n\n*getPaymentToken ( card_data, callback )*\n[block:parameters]\n{\n  \"data\": {\n    \"h-0\": \"Parâmetro\",\n    \"h-1\": \"Descrição\",\n    \"h-2\": \"Tipo\",\n    \"0-0\": \"card_data\",\n    \"1-0\": \"callback\",\n    \"0-1\": \"Objeto que contém os dados do cartão.\\n\\n<span class=\\\"tab1\\\"><em>As propriedades desse objeto são:</em></span>\\n\\n<div class=\\\"tab2\\\"><code>brand</code> // Bandeira do cartão</div>\\n<div class=\\\"tab2\\\"><code>number</code> // Número do cartão sem formatação</div>\\n<div class=\\\"tab2\\\"><code>cvv</code> // Código de segurança do cartão</div>\\n<div class=\\\"tab2\\\"><code>expiration_month</code> //  Mês de expiração do cartão no formato \\\"MM\\\"</div>\\n<div class=\\\"tab2\\\"><code>expiration_year</code> // Ano de expiração do cartão no formato \\\"YYYY\\\"</div>\",\n    \"0-2\": \"Object\",\n    \"1-2\": \"Function\",\n    \"1-1\": \"Função que recebe a resposta da Gerencianet.\\n\\n<span class=\\\"tab1\\\"><em>Parâmetro(s) de callback:</em></span>\\n\\n<div class=\\\"tab2\\\"><code>error</code> // Se não foi possível gerar o payment_token, os erros serão retornados neste parâmetro.</div>\\n\\n<div class=\\\"tab2\\\"><code>response</code> // Recebe os dados que representam o cartão de crédito: payment_token e card_mask</div>\"\n  },\n  \"cols\": 3,\n  \"rows\": 2\n}\n[/block]\n<br />\n\n*getInstallments ( total, brand, callback )*\n[block:parameters]\n{\n  \"data\": {\n    \"h-0\": \"Parâmetro\",\n    \"h-1\": \"Descrição\",\n    \"h-2\": \"Tipo\",\n    \"0-0\": \"total\",\n    \"1-0\": \"brand\",\n    \"2-0\": \"callback\",\n    \"0-2\": \"Integer\",\n    \"1-2\": \"String\",\n    \"2-2\": \"Function\",\n    \"0-1\": \"Valor total da cobrança, incluindo fretes, em centavos.\\n\\n<div class=\\\"tab2\\\"><strong class=\\\"descricao-atributo\\\"><span class=\\\"atributo\\\">Por exemplo: R$ 230,90 equivale a 23090.</span></strong></div>\",\n    \"1-1\": \"Bandeira do cartão que deseja-se obter os valores de parcelas.\\n\\n<span class=\\\"tab1\\\"><em>Possíveis valores:</em></span>\\n\\n<div class=\\\"tab2\\\"><code>visa</code> // Bandeira Visa</div>\\n\\n<div class=\\\"tab2\\\"><code>mastercard</code> // Bandeira MasterCard</div>\\n\\n<div class=\\\"tab2\\\"><code>jcb</code> // Bandeira JCB</div>\\n\\n<div class=\\\"tab2\\\"><code>diners</code> // Bandeira Dinners</div>\\n\\n<div class=\\\"tab2\\\"><code>amex</code> // Bandeira AmericanExpress</div>\\n\\n<div class=\\\"tab2\\\"><code>discover</code> // Bandeira Discover</div>\\n\\n<div class=\\\"tab2\\\"><code>elo</code> // Bandeira Elo</div>\\n\\n<div class=\\\"tab2\\\"><code>aura</code> // Bandeira Aura</div>\",\n    \"2-1\": \"Função que recebe a resposta da Gerencianet.\\n\\n<span class=\\\"tab1\\\"><em>Parâmetro(s) de callback:</em></span>\\n\\n<div class=\\\"tab2\\\"><code>error</code> // Se não foi possível obter dados sobre o pagamento, os erros serão retornados neste parâmetro.</div>\\n\\n<div class=\\\"tab2\\\"><code>response</code> // Recebe os dados relacionados ao tipo de pagamento consultado.</div>\"\n  },\n  \"cols\": 3,\n  \"rows\": 3\n}\n[/block]\n<br>\n\n<hr>\n\n## 2.2. Pagando com cartão\n\nAgora que a transação já foi criada e o <code>payment_token</code> já foi obtido através do código Javascript da primeira etapa, vamos prosseguir com o pagamento com cartão de crédito.\n\nNesta etapa, seu *backend* envia o restante das informações da transação e o <code>payment_token</code> obtido na primeira etapa.\n\nAo pagar uma transação por cartão de crédito, o status é alterado de <code>new</code> para <code>waiting</code>. Isso significa que a transação está associada a uma forma de pagamento e que está aguardando a confirmação do pagamento.\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"<?php\\n \\nrequire __DIR__.'/../../vendor/autoload.php'; // caminho relacionado ao Composer\\n \\nuse Gerencianet\\\\Exception\\\\GerencianetException;\\nuse Gerencianet\\\\Gerencianet;\\n \\n$clientId = 'your_client_id'; // insira seu Client_Id, conforme o ambiente (Des ou Prod)\\n$clientSecret = 'your_client_secret'; // insira seu Client_Secret, conforme o ambiente (Des ou Prod)\\n \\n$options = [\\n  'client_id' => $clientId,\\n  'client_secret' => $clientSecret,\\n  'sandbox' => true // altere conforme o ambiente (true = desenvolvimento e false = producao)\\n];\\n\\n// $charge_id refere-se ao ID da transação gerada anteriormente\\n$params = [\\n  'id' => $charge_id\\n];\\n \\n$paymentToken = '6426f3abd8688639c6772963669bbb8e0eb3c319'; // payment_token obtido na 1ª etapa (através do Javascript único por conta Gerencianet)\\n \\n$customer = [\\n  'name' => 'Gorbadoc Oldbuck', // nome do cliente\\n  'cpf' => '94271564656' , // cpf do cliente\\n  'email' => 'email_do_cliente:::at:::servidor.com.br' , // endereço de email do cliente\\n  'phone_number' => '5144916523' // telefone do cliente\\n  'birth' => '1990-05-20' // data de nascimento do cliente\\n];\\n \\n$billingAddress = [\\n  'street' => 'Street 3',\\n  'number' => 10,\\n  'neighborhood' => 'Bauxita',\\n  'zipcode' => '35400000',\\n  'city' => 'Ouro Preto',\\n  'state' => 'MG',\\n];\\n \\n$creditCard = [\\n  'installments' => 1, // número de parcelas em que o pagamento deve ser dividido\\n  'billing_address' => $billingAddress,\\n  'payment_token' => $paymentToken,\\n  'customer' => $customer\\n];\\n \\n$body = [\\n  'payment' => $payment\\n];\\n \\n$payment = [\\n  'credit_card' => $creditCard // forma de pagamento (credit_card = cartão)\\n];\\n \\ntry {\\n    $api = new Gerencianet($options);\\n    $charge = $api->payCharge($params, $body);\\n \\n    print_r($charge);\\n} catch (GerencianetException $e) {\\n    print_r($e->code);\\n    print_r($e->error);\\n    print_r($e->errorDescription);\\n} catch (Exception $e) {\\n    print_r($e->getMessage());\\n}\",\n      \"language\": \"php\"\n    },\n    {\n      \"code\": \"'use strict';\\n \\nvar Gerencianet = require('gn-api-sdk-node');\\n \\nvar clientId = 'your_client_id';\\nvar clientSecret = 'your_client_secret';\\n \\nvar options = {\\n  client_id: clientId,\\n  client_secret: clientSecret,\\n  sandbox: true\\n}\\n \\nvar params = {\\n  id: 1000\\n}\\n \\nvar body = {\\n  payment: {\\n    credit_card: {\\n      installments: 1,\\n      payment_token: '6426f3abd8688639c6772963669bbb8e0eb3c319',\\n      billing_address: {\\n        street: 'Street 3',\\n        number: 10,\\n        neighborhood: 'Bauxita',\\n        zipcode: '35400000',\\n        city: 'Ouro Preto',\\n        state: 'MG'\\n      },\\n      customer: {\\n        name: 'Gorbadoc Oldbuck',\\n        email: 'oldbuck@gerencianet.com.br',\\n        cpf: '94271564656',\\n        birth: '1977-01-15',\\n        phone_number: '5144916523'\\n      }\\n    }\\n  }\\n}\\n \\n \\nvar gerencianet = new Gerencianet(options);\\n \\ngerencianet\\n  .payCharge(params, body)\\n  .then(console.log)\\n  .catch(console.log)\\n  .done();\",\n      \"language\": \"javascript\",\n      \"name\": \"NodeJS\"\n    },\n    {\n      \"code\": \"require \\\"gerencianet\\\"\\n \\noptions = {\\n  client_id: \\\"client_id\\\",\\n  client_secret: \\\"client_secret\\\",\\n  sandbox: true\\n}\\n \\nparams = {\\n  id: 1000\\n}\\n \\nbody = {\\n  payment: {\\n    credit_card: {\\n      installments: 1,\\n      payment_token: \\\"6426f3abd8688639c6772963669bbb8e0eb3c319\\\",\\n      billing_address: {\\n        street: \\\"Av. JK\\\",\\n        number: 909,\\n        neighborhood: \\\"Bauxita\\\",\\n        zipcode: \\\"35400000\\\",\\n        city: \\\"Ouro Preto\\\",\\n        state: \\\"MG\\\"\\n      },\\n      customer: {\\n        name: \\\"Gorbadoc Oldbuck\\\",\\n        email: \\\"oldbuck@gerencianet.com.br\\\",\\n        cpf: \\\"94271564656\\\",\\n        birth: \\\"1977-01-15\\\",\\n        phone_number: \\\"5144916523\\\"\\n      }\\n    }\\n  }\\n}\\n \\ngerencianet = Gerencianet.new(options)\\ngerencianet.pay_charge(params: params, body: body)\",\n      \"language\": \"ruby\"\n    },\n    {\n      \"code\": \"from gerencianet import Gerencianet\\n \\noptions = {\\n    'client_id': 'client_id',\\n    'client_secret': 'client_secret',\\n    'sandbox': True\\n}\\n \\ngn = Gerencianet(options)\\n \\nparams = {\\n    'id': 1000\\n}\\n \\nbody = {\\n    'payment': {\\n        'credit_card': {\\n            'installments': 1,\\n            'payment_token': \\\"6426f3abd8688639c6772963669bbb8e0eb3c319\\\",\\n            'billing_address': {\\n                'street': \\\"Av. JK\\\",\\n                'number': 909,\\n                'neighborhood': \\\"Bauxita\\\",\\n                'zipcode': \\\"35400000\\\",\\n                'city': \\\"Ouro Preto\\\",\\n                'state': \\\"MG\\\"\\n            },\\n            'customer': {\\n                'name': \\\"Gorbadoc Oldbuck\\\",\\n                'email': \\\"oldbuck@gerencianet.com.br\\\",\\n                'cpf': \\\"94271564656\\\",\\n                'birth': \\\"1977-01-15\\\",\\n                'phone_number': \\\"5144916523\\\"\\n            }\\n        }\\n    }\\n}\\n \\ngn.pay_charge(params=params, body=body)\",\n      \"language\": \"python\"\n    },\n    {\n      \"code\": \"dynamic endpoints = new Endpoints(\\\"client_id\\\", \\\"client_secret\\\", true);\\n \\nvar param = new {\\n    id = 1000\\n};\\n \\nvar body = new {\\n    payment = new {\\n        credit_card = new {\\n            installments = 1,\\n            payment_token = \\\"6426f3abd8688639c6772963669bbb8e0eb3c319\\\",\\n            billing_address = new {\\n                street = \\\"Av. JK\\\",\\n                number = 909,\\n                neighborhood = \\\"Bauxita\\\",\\n                zipcode = \\\"35400000\\\",\\n                city = \\\"Ouro Preto\\\",\\n                state = \\\"MG\\\"\\n            },\\n            customer = new {\\n                name = \\\"Gorbadoc Oldbuck\\\",\\n                email = \\\"oldbuck@gerencianet.com.br\\\",\\n                cpf = \\\"94271564656\\\",\\n                birth = \\\"1977-01-15\\\",\\n                phone_number = \\\"5144916523\\\"\\n            }\\n        }\\n    }\\n};\\n \\nvar response = endpoints.PayCharge(param, body);\\nConsole.WriteLine(response);\",\n      \"language\": \"asp\",\n      \"name\": \".NET\"\n    },\n    {\n      \"code\": \"/* Para que a SDK Java funcione corretamente, é necessário que a instanciação do módulo seja feita através da criação de um objeto do tipo Gerencianet.\\n\\nSempre que quisermos chamar uma função da API, basta invocar o método call do objeto Gerencianet, passando como parâmetro o nome do método, os parâmetros da requisição (sempre será um HashMap<String, String>), e o \\\"body\\\", que consiste nas propriedades a serem passadas como argumento na chamada de um função da SDK. O \\\"body\\\" pode ser declarado de duas formas: um JSONObject ou um Map<String, Object>.\\n\\nEsta estrutura é necessária para representar o corpo da requisição http que é enviada à um determinado endpoint. Se o \\\"body\\\" for um JSONObject, o retorno do método call será um JSONObject, se for um Map<String, Object>, o retorno do método call será um Map<String, Object>\\n\\nA seguir, disponibilizamos links de nosso Github mostrando duas formas diferentes de retorno: JSONObject\\ne Map<String, Object>\\n\\n\\nJSONObject\\n\\nhttps://github.com/gerencianet/gn-api-sdk-java-examples/blob/master/src/main/java/br/com/gerencianet/charge/json/Card.java\\n\\n\\nMap<String, Object>\\n\\nhttps://github.com/gerencianet/gn-api-sdk-java-examples/blob/master/src/main/java/br/com/gerencianet/charge/map/Card.java\\n\\n*/\",\n      \"language\": \"java\"\n    }\n  ]\n}\n[/block]\n### a) Estrutura hierárquica dos atributos do Schema que podem ser utilizados:\n[block:html]\n{\n  \"html\": \"<p>Por meio da imagem a seguir é possível observar a hierarquia dos atributos presentes na estrutura dos dados do <abbr title=\\\"JSON que descreve a estrutura dos dados, incluindo todas as informações que podem ser enviadas e as especificidades de cada uma.\\\">Schema</abbr> do endpoint \\\"POST /charge/:id/pay\\\", apresentado na tabela a seguir:</p>\\n<br />\\n<img src=\\\"http://image.prntscr.com/image/0e20a4e18d624b808712bf49856d9433.png\\\" alt=\\\"POST /charge/:id/pay - Estrutura dos atributos do Schema que podem ser utilizados\\\"><br />\\n<p>Para verificar mais detalhes, <a href=\\\"https://dev.gerencianet.com.br/docs/playground-transacoes#charge_id_pay\\\" target=\\\"_blank\\\">acesse aqui.</p>\"\n}\n[/block]\n### b) Atributos relacionados ao pagamento com cartão de crédito:\n\n*Parâmetros da url*\n[block:parameters]\n{\n  \"data\": {\n    \"h-0\": \"Atributo\",\n    \"h-1\": \"Descrição\",\n    \"h-2\": \"Obrigatório\",\n    \"h-3\": \"Tipo\",\n    \"0-0\": \"id\",\n    \"0-1\": \"Identificador da transação (\\\"charge_id\\\")\",\n    \"0-2\": \"Sim\",\n    \"0-3\": \"Objeto **ID**\"\n  },\n  \"cols\": 4,\n  \"rows\": 1\n}\n[/block]\n<br />\n\n*Objeto **ID***\n[block:parameters]\n{\n  \"data\": {\n    \"h-0\": \"Atributo\",\n    \"h-1\": \"Descrição\",\n    \"h-2\": \"Obrigatório\",\n    \"h-3\": \"Tipo\",\n    \"0-0\": \"payment\",\n    \"0-2\": \"Sim\",\n    \"0-3\": \"Objeto **Payment**\",\n    \"0-1\": \"Tag raiz\"\n  },\n  \"cols\": 4,\n  \"rows\": 1\n}\n[/block]\n<br />\n\n*Objeto **Payment***\n[block:parameters]\n{\n  \"data\": {\n    \"0-0\": \"credit_card\",\n    \"0-1\": \"Objeto contendo as informações necessárias para o pagamento via cartão de crédito, como por exemplo, o número de parcelas e os dados do cliente.\",\n    \"0-2\": \"Sim\",\n    \"0-3\": \"Objeto **Credit_Card**\",\n    \"h-0\": \"Atributo\",\n    \"h-1\": \"Descrição\",\n    \"h-2\": \"Obrigatório\",\n    \"h-3\": \"Tipo\"\n  },\n  \"cols\": 4,\n  \"rows\": 1\n}\n[/block]\n<br />\n\n*Objeto **Credit_Card***\n[block:parameters]\n{\n  \"data\": {\n    \"h-0\": \"Atributo\",\n    \"h-1\": \"Descrição\",\n    \"h-2\": \"Obrigatório\",\n    \"h-3\": \"Tipo\",\n    \"0-0\": \"customer\",\n    \"0-2\": \"Sim\",\n    \"1-0\": \"installments\",\n    \"2-0\": \"discount\",\n    \"3-0\": \"billing_address\",\n    \"4-0\": \"payment_token\",\n    \"0-1\": \"Dados pessoais do pagador.\\n\\n<span class=\\\"tab1\\\">*Atributos de customer*</span>\\n\\n<div class=\\\"tab2\\\"><code>name<strong class=\\\"atributo-obrigatorio\\\">*</strong></code> // nome <strong class=\\\"descricao-atributo\\\"><span class=\\\"atributo\\\">(String)</strong></span></div>\\n\\n<div class=\\\"tab2\\\"><code>cpf<strong class=\\\"atributo-obrigatorio\\\">*</strong></code> // CPF do cliente (sem pontos, vírgulas ou hífen) <strong class=\\\"descricao-atributo\\\"><span class=\\\"atributo\\\">(String)</strong></span></div>\\n\\n<div class=\\\"tab2\\\"><code>email<strong class=\\\"atributo-obrigatorio\\\">*</strong></code> // Endereço de email válido do cliente <strong class=\\\"descricao-atributo\\\"><span class=\\\"atributo\\\">(String)</strong></span></div>\\n\\n<div class=\\\"tab2\\\"><code>phone_number<strong class=\\\"atributo-obrigatorio\\\">*</strong></code> // Telefone válido do cliente, sem caracteres especiais <strong class=\\\"descricao-atributo\\\"><span class=\\\"atributo\\\">(String)</strong></span></div>\\n\\n<div class=\\\"tab2\\\"><code>birth<strong class=\\\"atributo-obrigatorio\\\">*</strong></code> // Data de Nascimento (data válida em formato YYYY-MM-DD) <strong class=\\\"descricao-atributo\\\"><span class=\\\"atributo\\\">(String)</strong></span></div>\\n\\n<div class=\\\"tab2\\\"><code>address</code> // Endereço de Entrega <strong class=\\\"descricao-atributo\\\"><span class=\\\"atributo\\\">(Object)</strong></span> (<a href=\\\"https://dev.gerencianet.com.br/docs/definir-enderecos\\\" target=\\\"_blank\\\">mais informações</a>)</div>\\n\\n<div class=\\\"tab2\\\"><code>juridical_person</code> // Dados de pessoa jurídica <strong class=\\\"descricao-atributo\\\"><span class=\\\"atributo\\\">(Object) (<a href=\\\"https://dev.gerencianet.com.br/docs/pagar-com-pessoa-juridica\\\" target=\\\"_blank\\\">mais informações</a>)</strong></span></div>\",\n    \"2-1\": \"Define dados de desconto sobre a cobrança.\\n\\n<span class=\\\"tab1\\\">*Atributos de discount*</span>\\n\\n<div class=\\\"tab2\\\">\\n<strong class=\\\"descricao-atributo\\\"><span class=\\\"atributo\\\">type<strong class=\\\"atributo-obrigatorio\\\">*</strong></span>, // Tipo do desconto (String). Valores permitidos:\\n<code>currency</code>: o desconto será informado em centavos;\\n<code>percentage</code>: o desconto será informado em porcentagem.</strong>\\n</div>\\n\\n<div class=\\\"tab2\\\">\\n<strong class=\\\"descricao-atributo\\\"><span class=\\\"atributo\\\">value<strong class=\\\"atributo-obrigatorio\\\">*</strong></span>, // Valor do desconto (Integer). Se o tipo do desconto for <code>currency</code>, o valor desta tag deverá ser informada pelo integrador em centavos (ou seja, 500 equivale a R$ 5,00). Caso o tipo do desconto seja <code>percentage</code>, o valor deverá ser multiplicado por 100 (ou seja, 1500 equivale a 15%). Exemplos:\\n1) <code>currency</code> // deve ser informado em centavos, ou seja, se o desconto será de R$ 5,99, o integrador deve informar <code>599</code>;\\n2) <code>percentage</code> // deve ser informado em centavos, ou seja, se o desconto é de 15%, o integrador deve informar <code>1500</code>.\\n</strong>\\n</div>\",\n    \"4-1\": \"Token único de pagamento obtido na primeira etapa da geração da transação.\",\n    \"3-1\": \"Endereço de cobrança (<a href=\\\"https://dev.gerencianet.com.br/docs/definir-enderecos\\\" target=\\\"_blank\\\">mais informações</a>)\\n\\n<span class=\\\"tab1\\\">*Atributos de billing_address*</span>\\n\\n<div class=\\\"tab2\\\"><code>street<strong class=\\\"atributo-obrigatorio\\\">*</strong></code> // nome da rua <strong class=\\\"descricao-atributo\\\"><span class=\\\"atributo\\\">(Object)</strong></span></div>\\n\\n<div class=\\\"tab2\\\"><code>number<strong class=\\\"atributo-obrigatorio\\\">*</strong></code> // número <strong class=\\\"descricao-atributo\\\"><span class=\\\"atributo\\\">(String/Integer)</strong></span></div>\\n\\n<div class=\\\"tab2\\\"><code>neighborhood<strong class=\\\"atributo-obrigatorio\\\">*</strong></code> // Bairro <strong class=\\\"descricao-atributo\\\"><span class=\\\"atributo\\\">(String)</strong></span></div>\\n\\n<div class=\\\"tab2\\\"><code>zipcode<strong class=\\\"atributo-obrigatorio\\\">*</strong></code> // CEP (sem pontos ou hífen) <strong class=\\\"descricao-atributo\\\"><span class=\\\"atributo\\\">(String)</strong></span></div>\\n\\n<div class=\\\"tab2\\\"><code>city<strong class=\\\"atributo-obrigatorio\\\">*</strong></code> // cidade <strong class=\\\"descricao-atributo\\\"><span class=\\\"atributo\\\">(String)</strong></span></div>\\n\\n<div class=\\\"tab2\\\"><code>complement</code> // complemento <strong class=\\\"descricao-atributo\\\"><span class=\\\"atributo\\\">(String/null)</strong></span></div>\\n\\n<div class=\\\"tab2\\\"><code>state<strong class=\\\"atributo-obrigatorio\\\">*</strong></code> // estado (2 caracteres) <strong class=\\\"descricao-atributo\\\"><span class=\\\"atributo\\\">(Object)</strong></span></div>\",\n    \"1-1\": \"Número de parcelas em que o pagamento deve ser dividido.\",\n    \"3-2\": \"Sim\",\n    \"4-2\": \"Sim\",\n    \"1-2\": \"Não\",\n    \"2-2\": \"Não\",\n    \"0-3\": \"Object\",\n    \"1-3\": \"Integer\",\n    \"2-3\": \"Object\",\n    \"3-3\": \"Object\",\n    \"4-3\": \"String\"\n  },\n  \"cols\": 4,\n  \"rows\": 5\n}\n[/block]\n<strong class=\"atributo-obrigatorio-texto\">* valor obrigatório</strong>\n\n<br>\n\n<hr>\n\n## Vídeos Explicativos: Criando transação e pagando via cartão de crédito\n\nPensando em oferecer novos meios de transmitir informações, a Gerencianet disponibiliza os vídeos a seguir com o objetivo de explicar, de maneira clara e objetiva, como criar uma transação via integração e associá-la à forma de pagamento por \"cartão de crédito\".\n\n### Criando transação via Playground (ambiente de testes/sandbox)\n[block:html]\n{\n  \"html\": \"<iframe width=\\\"560\\\" height=\\\"315\\\" src=\\\"https://www.youtube.com/embed/ylqJUpHqwfY\\\" frameborder=\\\"0\\\" allowfullscreen></iframe>\"\n}\n[/block]\n### Definindo método de pagamento por Cartão de Crédito (via Playground)\n[block:html]\n{\n  \"html\": \"<iframe width=\\\"560\\\" height=\\\"315\\\" src=\\\"https://www.youtube.com/embed/vxhkSXV_aX8\\\" frameborder=\\\"0\\\" allowfullscreen></iframe>\"\n}\n[/block]\n### Criando uma transação por integração - Pagamento por Cartão de Crédito\n[block:html]\n{\n  \"html\": \"<iframe width=\\\"560\\\" height=\\\"315\\\" src=\\\"https://www.youtube.com/embed/ucEr_sjp9wQ\\\" frameborder=\\\"0\\\" allowfullscreen></iframe>\"\n}\n[/block]\nPara acesso às demais aulas, de outros assuntos, acesse a seção \"[Curso Online de Integrações](https://dev.gerencianet.com.br/docs/curso-online-gerencianet)\".\n\n<br>\n\n<hr>\n\n## Próximos Passos\n\nSe a sua necessidade for cobranças recorrentes, você pode conferir sobre as [assinaturas](https://dev.gerencianet.com.br/docs/assinaturas-introducao) ou [carnês](https://dev.gerencianet.com.br/docs/carnes-introducao). Também é possível utilizar o [marketplace](https://dev.gerencianet.com.br/docs/marketplace-introducao) da Gerencianet.","excerpt":"Você está em: *\"Pagar com Cartão > Pagamento com cartão\"*","slug":"pagamento-cartao","type":"basic","title":"Pagamento com cartão"}

Pagamento com cartão

Você está em: *"Pagar com Cartão > Pagamento com cartão"*

Saiba como permitir o pagamento de uma cobrança através de cartão de crédito. Para gerar, é bem simples e requer apenas dois passos: 1. [Crie a transação](https://dev.gerencianet.com.br/docs/pagamento-cartao#section-1-criar-transa-o), informando o item/produto/serviço, valor, quantidade, etc; 2. [Associe à forma de pagamento via cartão](https://dev.gerencianet.com.br/docs/pagamento-cartao#section-2-associe-forma-de-pagamento-via-cart-o), informando o <code>charge_id</code> da transação criada; 2.1. [Obtenção do payment_token](https://dev.gerencianet.com.br/docs/pagamento-cartao#section-2-1-obten-o-do-payment_token) (via JavaScript, único por transação); 2.2. [Pagando com cartão](https://dev.gerencianet.com.br/docs/pagamento-cartao#section-2-2-pagando-com-cart-o) (informando o payment_token obtido anteriormente). Por se tratar de pagamento via cartão e envolver dados sensíveis, como dados do cartão de crédito, os procedimentos descritos nos itens 2.1 e 2.2, ou seja, obtenção do <code>payment_token</code> e pagando com cartão, respectivamente, são necessários. O restante desta página apresenta as três etapas detalhadas, mas você precisa instalar uma de nossas bibliotecas em seu servidor para executar os códigos de exemplo. [Certifique-se que a SDK da Gerencianet foi instalada](https://dev.gerencianet.com.br/docs/instalacao-da-api). <hr> ## 1. Criar transação Inicialmente, será gerada uma transação e que estará com o status de <code>new</code>. Essa cobrança somente terá seu status alterado quando o integrador definir sua forma de pagamento. Após criar a cobrança, será retornado o <code>charge_id</code>, que é o identificador único da transação e que será utilizado para associar à forma de pagamento. Para gerar uma transação, você deve enviar uma requisição <code>POST</code> para a rota <code>/charge</code>. No Playground (ambiente de desenvolvimento), o processo de geração de transação equivale ao endpoint <code>POST /charge</code>. A seguir um exemplo de utilização: [block:code] { "codes": [ { "code": "<?php\n \nrequire __DIR__.'/../../vendor/autoload.php'; // caminho relacionado ao Composer\n \nuse Gerencianet\\Exception\\GerencianetException;\nuse Gerencianet\\Gerencianet;\n \n$clientId = 'your_client_id'; // insira seu Client_Id, conforme o ambiente (Des ou Prod)\n$clientSecret = 'your_client_secret'; // insira seu Client_Secret, conforme o ambiente (Des ou Prod)\n \n$options = [\n 'client_id' => $clientId,\n 'client_secret' => $clientSecret,\n 'sandbox' => true // altere conforme o ambiente (true = desenvolvimento e false = producao)\n];\n \n$item_1 = [\n 'name' => 'Item 1', // nome do item, produto ou serviço\n 'amount' => 1, // quantidade\n 'value' => 1000 // valor (1000 = R$ 10,00)\n];\n \n$item_2 = [\n 'name' => 'Item 2', // nome do item, produto ou serviço\n 'amount' => 2, // quantidade\n 'value' => 2000 // valor (2000 = R$ 20,00)\n];\n \n$items = [\n $item_1,\n $item_2\n];\n\n//Exemplo para receber notificações da alteração do status da transação.\n//$metadata = ['notification_url'=>'sua_url_de_notificacao_.com.br']\n//Outros detalhes em: https://dev.gerencianet.com.br/docs/notificacoes\n\n//Como enviar seu $body com o $metadata\n//$body = [\n// 'items' => $items,\n//\t\t'metadata' => $metadata\n//];\n\n$body = [\n 'items' => $items\n];\n\ntry {\n $api = new Gerencianet($options);\n $charge = $api->createCharge([], $body);\n \n print_r($charge);\n} catch (GerencianetException $e) {\n print_r($e->code);\n print_r($e->error);\n print_r($e->errorDescription);\n} catch (Exception $e) {\n print_r($e->getMessage());\n}", "language": "php" }, { "code": "'use strict';\n \nvar Gerencianet = require('gn-api-sdk-node');\n \nvar clientId = 'your_client_id';\nvar clientSecret = 'your_client_secret';\n \nvar options = {\n client_id: clientId,\n client_secret: clientSecret,\n sandbox: true\n}\n \nvar body = {\n items: [{\n name: 'Product 1',\n value: 1000,\n amount: 2\n }],\n shippings: [{\n name: 'Default Shipping Cost',\n value: 100\n }]\n}\n \nvar gerencianet = new Gerencianet(options);\n \ngerencianet\n .createCharge({}, body)\n .then(console.log)\n .catch(console.log)\n .done();", "language": "javascript", "name": "NodeJS" }, { "code": "require \"gerencianet\"\n \noptions = {\n client_id: \"client_id\",\n client_secret: \"client_secret\",\n sandbox: true\n}\n \nbody = {\n items: [{\n name: \"Product 1\",\n value: 1000,\n amount: 2\n }],\n shippings: [{\n name: \"Default Shipping Cost\",\n value: 100\n }]\n}\n \ngerencianet = Gerencianet.new(options)\ngerencianet.create_charge(body: body)", "language": "ruby" }, { "code": "from gerencianet import Gerencianet\n \noptions = {\n 'client_id': 'client_id',\n 'client_secret': 'client_secret',\n 'sandbox': True\n}\n \ngn = Gerencianet(options)\n \nbody = {\n 'items': [{\n 'name': \"Product 1\",\n 'value': 1000,\n 'amount': 2\n }],\n 'shippings': [{\n 'name': \"Default Shipping Cost\",\n 'value': 100\n }]\n}\n \ngn.create_charge(body=body)", "language": "python" }, { "code": "dynamic endpoints = new Endpoints(\"client_id\", \"client_secret\", true);\n \nvar body = new\n{\n items = new[] {\n new {\n name = \"Product 1\",\n value = 1000,\n amount = 2\n }\n },\n shippings = new[] {\n new {\n name = \"Default Shipping Cost\",\n value = 100\n }\n }\n};\n \nvar response = endpoints.CreateCharge(null, body);\nConsole.WriteLine(response);", "language": "asp", "name": ".NET" }, { "code": "/* Para que a SDK Java funcione corretamente, é necessário que a instanciação do módulo seja feita através da criação de um objeto do tipo Gerencianet.\n\nSempre que quisermos chamar uma função da API, basta invocar o método call do objeto Gerencianet, passando como parâmetro o nome do método, os parâmetros da requisição (sempre será um HashMap<String, String>), e o \"body\", que consiste nas propriedades a serem passadas como argumento na chamada de um função da SDK. O \"body\" pode ser declarado de duas formas: um JSONObject ou um Map<String, Object>.\n\nEsta estrutura é necessária para representar o corpo da requisição http que é enviada à um determinado endpoint. Se o \"body\" for um JSONObject, o retorno do método call será um JSONObject, se for um Map<String, Object>, o retorno do método call será um Map<String, Object>\n\nA seguir, disponibilizamos links de nosso Github mostrando duas formas diferentes de retorno: JSONObject\ne Map<String, Object>\n\n\nJSONObject\n\nhttps://github.com/gerencianet/gn-api-sdk-java-examples/blob/master/src/main/java/br/com/gerencianet/charge/json/CreateCharge.java\n\n\nMap<String, Object>\n\nhttps://github.com/gerencianet/gn-api-sdk-java-examples/blob/master/src/main/java/br/com/gerencianet/charge/map/CreateCharge.java\n\n*/", "language": "java" } ] } [/block] ### a) Estrutura hierárquica dos atributos que podem ser utilizados: [block:html] { "html": "<p>Por meio da imagem a seguir é possível observar a hierarquia dos atributos presentes na estrutura dos dados do <abbr title=\"JSON que descreve a estrutura dos dados, incluindo todas as informações que podem ser enviadas e as especificidades de cada uma.\">Schema</abbr> do <em>endpoint</em> <code>POST /charge</code>:</p>\n<br />\n<img src=\"http://image.prntscr.com/image/12eeb6e0681149efaf443cd9cd8a1c12.png\" alt=\"POST /charge - Estrutura dos atributos do Schema que podem ser utilizados\"><br />\n<p>Para verificar mais detalhes, <a href=\"https://dev.gerencianet.com.br/docs/playground-transacoes#charge\" target=\"_blank\">acesse aqui.</p>" } [/block] ### b) Atributos que podem ser usados para criar uma transação: [block:parameters] { "data": { "h-0": "Atributo", "h-1": "Descrição", "h-2": "Obrigatório", "h-3": "Tipo", "0-0": "items", "1-0": "shippings", "2-0": "metadata", "0-1": "Item que está sendo vendido. Uma mesma transação pode possuir ilimitados itens.\n\n<span class=\"tab1\"><em>Atributos de items</em></span>\n\n<div class=\"tab2\"><code>name<strong class=\"atributo-obrigatorio\">*</strong></code> // Nome do item, produto ou serviço. <strong class=\"descricao-atributo\"><span class=\"atributo\">Mínimo de 1 caractere e máximo de 255 caracteres (String).</span></strong></div>\n\n<div class=\"tab2\"><code>value<strong class=\"atributo-obrigatorio\">*</strong></code> // Valor, em centavos. Ex: R$ 10,00 = 1000. <strong class=\"descricao-atributo\"><span class=\"atributo\">Integer.</span></strong></div>\n\n<div class=\"tab2\"><code>amount</code> // Quantidade. <strong class=\"descricao-atributo\"><span class=\"atributo\">Integer (padrão: 1)</span></strong></div>\n\n<div class=\"tab2\"><code>marketplace</code> // Referente às configurações de repasses. <span class=\"atributo\">Atributos:</span></div> <div class=\"tab2\">\n<code>*payee_code*</code> (<a href=\"http://image.prntscr.com/image/cabe13e1e5b64449b942cf31139150ba.png\" target=\"_blank\">código identificador da conta Gerencianet</a> - String).\n<code>*percentage*</code> (porcentagem de repasse, sendo que 9000 equivale a 90% - Integer).</span></div>", "1-1": "Determina o(s) valor(es) de frete(s) de uma transação. Uma mesma transação pode possuir ilimitados valores de frete.\n\n<span class=\"tab1\"><em>Atributos de shippings</em></span>\n\n<div class=\"tab2\"><code>name<strong class=\"atributo-obrigatorio\">*</strong></code> // Rótulo do frete. <strong class=\"descricao-atributo\"><span class=\"atributo\">Máximo de 255 caracteres. String.</span></strong></div>\n\n<div class=\"tab2\"><code>value<strong class=\"atributo-obrigatorio\">*</strong></code> // Valor do frete, em centavos (1990 equivale a R$19,90). <strong class=\"descricao-atributo\"><span class=\"atributo\">Integer.</span></strong></div>\n\n<div class=\"tab2\"><code>payeeCode</code> // <a href=\"http://image.prntscr.com/image/cabe13e1e5b64449b942cf31139150ba.png\" target=\"_blank\">Código identificador da conta Gerencianet</a>, único por conta. <strong class=\"descricao-atributo\"><span class=\"atributo\">Padrão: Identificador da sua própria conta. String.</span></strong></div>", "2-1": "Define dados específicos da transação.\n\n<span class=\"tab1\"><em>Atributos de metadata</em></span>\n\n<div class=\"tab2\"><code>custom_id</code> // Permite associar uma transação Gerencianet a uma ID específica de seu sistema ou aplicação, permitindo identificá-la caso você possua uma identificação específica e queira mantê-la. <strong class=\"descricao-atributo\"><span class=\"atributo\">Máximo de 255 caracteres. String/null.</span></strong></div>\n\n<div class=\"tab2\"><code>notification_url</code> // Endereço de sua URL válida que receberá as notificações de mudanças de status das transações. <strong class=\"descricao-atributo\"><span class=\"atributo\">Máximo de 255 caracteres. String/null.</span></strong></div>", "0-2": "Sim", "1-2": "Não", "2-2": "Não", "0-3": "Array", "1-3": "Array", "2-3": "Object" }, "cols": 4, "rows": 3 } [/block] <strong class="atributo-obrigatorio-texto">* valor obrigatório</strong> <hr> ## 2. Associe à forma de pagamento via cartão Com a transação criada, vamos associá-la à forma de pagamento desejada, que neste caso, será cartão de crédito. Para tal, deverá ser informado a <code>charge_id</code> obtido no consumo anterior em que foi gerada a transação. No caso de transações com cartão de crédito, será realizado em duas etapas, sendo a primeira a transmissão (**via JavaScript**, no browser), de forma segura, os dados do cartão e retornando um <code>payment_token</code>, e na segunda etapa seu *backend* envia o restante das informações da transação e o <code>payment_token</code> obtido na primeira etapa. [block:callout] { "type": "warning", "title": "IMPORTANTE", "body": "É importante frisar que **não é possível efetuar pagamento com cartão de crédito sem obter o** <code>payment_token</code> da transação, por isso, é imprescindível a realização dos procedimentos do **item 2.1** deste documento (obter o <code>payment_token</code>), e **só depois** passar para o item 2.2 (que é de fato o pagamento com cartão)." } [/block] Para associar à forma de pagamento, você deve enviar uma requisição <code>POST</code> para a rota <code>/charge/:id/pay</code>, onde <code>:id</code> é o <code>charge_id</code> da transação desejada. No Playground (ambiente de desenvolvimento), o processo de associar uma transação à uma forma de pagamento equivale ao endpoint <code>POST /charge/:id/pay</code>. <hr> ## 2.1. Obtenção do payment_token Com a transação criada, vamos associá-la à forma de pagamento desejada, que neste caso, será cartão de crédito. [block:html] { "html": "<p>Inicialmente, vamos realizar a primeira etapa, que é a obtenção do <code>payment_token</code> e, para tal, você necessitará de um código Javascript específico de sua conta Gerencianet. Para gerá-lo, insira no campo abaixo o seu \"identificador da conta\" (<a target=\"blank\" href=\"http://image.prntscr.com/image/cabe13e1e5b64449b942cf31139150ba.png\" class=\"block-display-image-parent block-display-image-size-smart\"><img>onde localizo?</img></a>) e clique no botão \"Gerar\". Cabe frisar que é preciso estar logado em sua conta Gerencianet para visualizar o identificador de sua conta.</p>\n\n<input id=\"input_code\" type=\"text\" > <button id=\"get_code\">Gerar</button> \n<div id=\"resultado_code_js\"></div>\n<br>\n<p>É importante frisar que é obtido via <strong>JavaScript</strong>, no browser, de forma segura, os dados do cartão e retorna um <code>payment_token</code>, que é a representação dos dados enviados.</p>" } [/block] [block:callout] { "type": "info", "title": "NOTA", "body": "Lembre-se que, após informar seu identificador de conta, serão gerados 2 (dois) códigos JavaScript distintos. Copie e utilize o código referente ao ambiente desejado, atentando-se às diferenças do ambiente de *\"Desenvolvimento\"* e *\"Produção\"*." } [/block] Para aplicações web, você deve copiar o script acima, específico da sua conta, e utilizar a nossa biblioteca Javascript, conforme o *snippet* abaixo. Se você possui um app mobile, confira como proceder acessando nossa página no GitHub para Android e/ou iOS. Adicionalmente, esclarecemos que uma conta Gerencianet não possui um <code>payment_token</code> - ele é diferente e criado para cada cobrança gerada por cartão de crédito. Ele representa os dados do cartão do pagador e é obtido pela função <code>getPaymentToken</code>. Além disso, cabe frisar que o <code>payment_token</code> pode ser utilizado uma única vez, portanto, não é possível utilizá-lo para cobrar de forma recorrente. <br /> ### a) Obtendo um "payment_token" ( getPaymentToken ) [block:code] { "codes": [ { "code": "$gn.ready(function(checkout) {\n \n var callback = function(error, response) {\n if(error) {\n // Trata o erro ocorrido\n console.error(error);\n } else {\n // Trata a resposta\n console.log(response);\n }\n };\n \n checkout.getPaymentToken({\n brand: 'visa', // bandeira do cartão\n number: '4012001038443335', // número do cartão\n cvv: '123', // código de segurança\n expiration_month: '05', // mês de vencimento\n expiration_year: '2018' // ano de vencimento\n }, callback);\n \n});", "language": "json", "name": "Código" } ] } [/block] <br /> ### b) Obtendo informações sobre parcelamentos ( getInstallments ) [block:code] { "codes": [ { "code": "$gn.ready(function(checkout){\n \n checkout.getInstallments(50000,'visa', function(error, response){\n if(error) {\n // Trata o erro ocorrido\n console.log(error);\n } else {\n // Insere o parcelamento no site\n }\n });\n \n});", "language": "json", "name": "Código" } ] } [/block] <br /> ### c) Atributos relacionados ao envio de dados do cartão: *$gn.ready ( callback )* [block:parameters] { "data": { "h-0": "Parâmetro", "h-1": "Descrição", "h-2": "Tipo", "0-0": "callback", "0-2": "Function", "0-1": "Função de inicialização que possibilita a chamada das funções *getPaymentToken* e *getInstallments*.\n\n<span class=\"tab1\"><em>Parâmetro(s) de callback</em></span>\n\n<div class=\"tab2\"><code>object</code> // Objeto que recebe as instâncias das outras funções.</div>" }, "cols": 3, "rows": 1 } [/block] <br /> *getPaymentToken ( card_data, callback )* [block:parameters] { "data": { "h-0": "Parâmetro", "h-1": "Descrição", "h-2": "Tipo", "0-0": "card_data", "1-0": "callback", "0-1": "Objeto que contém os dados do cartão.\n\n<span class=\"tab1\"><em>As propriedades desse objeto são:</em></span>\n\n<div class=\"tab2\"><code>brand</code> // Bandeira do cartão</div>\n<div class=\"tab2\"><code>number</code> // Número do cartão sem formatação</div>\n<div class=\"tab2\"><code>cvv</code> // Código de segurança do cartão</div>\n<div class=\"tab2\"><code>expiration_month</code> // Mês de expiração do cartão no formato \"MM\"</div>\n<div class=\"tab2\"><code>expiration_year</code> // Ano de expiração do cartão no formato \"YYYY\"</div>", "0-2": "Object", "1-2": "Function", "1-1": "Função que recebe a resposta da Gerencianet.\n\n<span class=\"tab1\"><em>Parâmetro(s) de callback:</em></span>\n\n<div class=\"tab2\"><code>error</code> // Se não foi possível gerar o payment_token, os erros serão retornados neste parâmetro.</div>\n\n<div class=\"tab2\"><code>response</code> // Recebe os dados que representam o cartão de crédito: payment_token e card_mask</div>" }, "cols": 3, "rows": 2 } [/block] <br /> *getInstallments ( total, brand, callback )* [block:parameters] { "data": { "h-0": "Parâmetro", "h-1": "Descrição", "h-2": "Tipo", "0-0": "total", "1-0": "brand", "2-0": "callback", "0-2": "Integer", "1-2": "String", "2-2": "Function", "0-1": "Valor total da cobrança, incluindo fretes, em centavos.\n\n<div class=\"tab2\"><strong class=\"descricao-atributo\"><span class=\"atributo\">Por exemplo: R$ 230,90 equivale a 23090.</span></strong></div>", "1-1": "Bandeira do cartão que deseja-se obter os valores de parcelas.\n\n<span class=\"tab1\"><em>Possíveis valores:</em></span>\n\n<div class=\"tab2\"><code>visa</code> // Bandeira Visa</div>\n\n<div class=\"tab2\"><code>mastercard</code> // Bandeira MasterCard</div>\n\n<div class=\"tab2\"><code>jcb</code> // Bandeira JCB</div>\n\n<div class=\"tab2\"><code>diners</code> // Bandeira Dinners</div>\n\n<div class=\"tab2\"><code>amex</code> // Bandeira AmericanExpress</div>\n\n<div class=\"tab2\"><code>discover</code> // Bandeira Discover</div>\n\n<div class=\"tab2\"><code>elo</code> // Bandeira Elo</div>\n\n<div class=\"tab2\"><code>aura</code> // Bandeira Aura</div>", "2-1": "Função que recebe a resposta da Gerencianet.\n\n<span class=\"tab1\"><em>Parâmetro(s) de callback:</em></span>\n\n<div class=\"tab2\"><code>error</code> // Se não foi possível obter dados sobre o pagamento, os erros serão retornados neste parâmetro.</div>\n\n<div class=\"tab2\"><code>response</code> // Recebe os dados relacionados ao tipo de pagamento consultado.</div>" }, "cols": 3, "rows": 3 } [/block] <br> <hr> ## 2.2. Pagando com cartão Agora que a transação já foi criada e o <code>payment_token</code> já foi obtido através do código Javascript da primeira etapa, vamos prosseguir com o pagamento com cartão de crédito. Nesta etapa, seu *backend* envia o restante das informações da transação e o <code>payment_token</code> obtido na primeira etapa. Ao pagar uma transação por cartão de crédito, o status é alterado de <code>new</code> para <code>waiting</code>. Isso significa que a transação está associada a uma forma de pagamento e que está aguardando a confirmação do pagamento. [block:code] { "codes": [ { "code": "<?php\n \nrequire __DIR__.'/../../vendor/autoload.php'; // caminho relacionado ao Composer\n \nuse Gerencianet\\Exception\\GerencianetException;\nuse Gerencianet\\Gerencianet;\n \n$clientId = 'your_client_id'; // insira seu Client_Id, conforme o ambiente (Des ou Prod)\n$clientSecret = 'your_client_secret'; // insira seu Client_Secret, conforme o ambiente (Des ou Prod)\n \n$options = [\n 'client_id' => $clientId,\n 'client_secret' => $clientSecret,\n 'sandbox' => true // altere conforme o ambiente (true = desenvolvimento e false = producao)\n];\n\n// $charge_id refere-se ao ID da transação gerada anteriormente\n$params = [\n 'id' => $charge_id\n];\n \n$paymentToken = '6426f3abd8688639c6772963669bbb8e0eb3c319'; // payment_token obtido na 1ª etapa (através do Javascript único por conta Gerencianet)\n \n$customer = [\n 'name' => 'Gorbadoc Oldbuck', // nome do cliente\n 'cpf' => '94271564656' , // cpf do cliente\n 'email' => 'email_do_cliente@servidor.com.br' , // endereço de email do cliente\n 'phone_number' => '5144916523' // telefone do cliente\n 'birth' => '1990-05-20' // data de nascimento do cliente\n];\n \n$billingAddress = [\n 'street' => 'Street 3',\n 'number' => 10,\n 'neighborhood' => 'Bauxita',\n 'zipcode' => '35400000',\n 'city' => 'Ouro Preto',\n 'state' => 'MG',\n];\n \n$creditCard = [\n 'installments' => 1, // número de parcelas em que o pagamento deve ser dividido\n 'billing_address' => $billingAddress,\n 'payment_token' => $paymentToken,\n 'customer' => $customer\n];\n \n$body = [\n 'payment' => $payment\n];\n \n$payment = [\n 'credit_card' => $creditCard // forma de pagamento (credit_card = cartão)\n];\n \ntry {\n $api = new Gerencianet($options);\n $charge = $api->payCharge($params, $body);\n \n print_r($charge);\n} catch (GerencianetException $e) {\n print_r($e->code);\n print_r($e->error);\n print_r($e->errorDescription);\n} catch (Exception $e) {\n print_r($e->getMessage());\n}", "language": "php" }, { "code": "'use strict';\n \nvar Gerencianet = require('gn-api-sdk-node');\n \nvar clientId = 'your_client_id';\nvar clientSecret = 'your_client_secret';\n \nvar options = {\n client_id: clientId,\n client_secret: clientSecret,\n sandbox: true\n}\n \nvar params = {\n id: 1000\n}\n \nvar body = {\n payment: {\n credit_card: {\n installments: 1,\n payment_token: '6426f3abd8688639c6772963669bbb8e0eb3c319',\n billing_address: {\n street: 'Street 3',\n number: 10,\n neighborhood: 'Bauxita',\n zipcode: '35400000',\n city: 'Ouro Preto',\n state: 'MG'\n },\n customer: {\n name: 'Gorbadoc Oldbuck',\n email: 'oldbuck@gerencianet.com.br',\n cpf: '94271564656',\n birth: '1977-01-15',\n phone_number: '5144916523'\n }\n }\n }\n}\n \n \nvar gerencianet = new Gerencianet(options);\n \ngerencianet\n .payCharge(params, body)\n .then(console.log)\n .catch(console.log)\n .done();", "language": "javascript", "name": "NodeJS" }, { "code": "require \"gerencianet\"\n \noptions = {\n client_id: \"client_id\",\n client_secret: \"client_secret\",\n sandbox: true\n}\n \nparams = {\n id: 1000\n}\n \nbody = {\n payment: {\n credit_card: {\n installments: 1,\n payment_token: \"6426f3abd8688639c6772963669bbb8e0eb3c319\",\n billing_address: {\n street: \"Av. JK\",\n number: 909,\n neighborhood: \"Bauxita\",\n zipcode: \"35400000\",\n city: \"Ouro Preto\",\n state: \"MG\"\n },\n customer: {\n name: \"Gorbadoc Oldbuck\",\n email: \"oldbuck@gerencianet.com.br\",\n cpf: \"94271564656\",\n birth: \"1977-01-15\",\n phone_number: \"5144916523\"\n }\n }\n }\n}\n \ngerencianet = Gerencianet.new(options)\ngerencianet.pay_charge(params: params, body: body)", "language": "ruby" }, { "code": "from gerencianet import Gerencianet\n \noptions = {\n 'client_id': 'client_id',\n 'client_secret': 'client_secret',\n 'sandbox': True\n}\n \ngn = Gerencianet(options)\n \nparams = {\n 'id': 1000\n}\n \nbody = {\n 'payment': {\n 'credit_card': {\n 'installments': 1,\n 'payment_token': \"6426f3abd8688639c6772963669bbb8e0eb3c319\",\n 'billing_address': {\n 'street': \"Av. JK\",\n 'number': 909,\n 'neighborhood': \"Bauxita\",\n 'zipcode': \"35400000\",\n 'city': \"Ouro Preto\",\n 'state': \"MG\"\n },\n 'customer': {\n 'name': \"Gorbadoc Oldbuck\",\n 'email': \"oldbuck@gerencianet.com.br\",\n 'cpf': \"94271564656\",\n 'birth': \"1977-01-15\",\n 'phone_number': \"5144916523\"\n }\n }\n }\n}\n \ngn.pay_charge(params=params, body=body)", "language": "python" }, { "code": "dynamic endpoints = new Endpoints(\"client_id\", \"client_secret\", true);\n \nvar param = new {\n id = 1000\n};\n \nvar body = new {\n payment = new {\n credit_card = new {\n installments = 1,\n payment_token = \"6426f3abd8688639c6772963669bbb8e0eb3c319\",\n billing_address = new {\n street = \"Av. JK\",\n number = 909,\n neighborhood = \"Bauxita\",\n zipcode = \"35400000\",\n city = \"Ouro Preto\",\n state = \"MG\"\n },\n customer = new {\n name = \"Gorbadoc Oldbuck\",\n email = \"oldbuck@gerencianet.com.br\",\n cpf = \"94271564656\",\n birth = \"1977-01-15\",\n phone_number = \"5144916523\"\n }\n }\n }\n};\n \nvar response = endpoints.PayCharge(param, body);\nConsole.WriteLine(response);", "language": "asp", "name": ".NET" }, { "code": "/* Para que a SDK Java funcione corretamente, é necessário que a instanciação do módulo seja feita através da criação de um objeto do tipo Gerencianet.\n\nSempre que quisermos chamar uma função da API, basta invocar o método call do objeto Gerencianet, passando como parâmetro o nome do método, os parâmetros da requisição (sempre será um HashMap<String, String>), e o \"body\", que consiste nas propriedades a serem passadas como argumento na chamada de um função da SDK. O \"body\" pode ser declarado de duas formas: um JSONObject ou um Map<String, Object>.\n\nEsta estrutura é necessária para representar o corpo da requisição http que é enviada à um determinado endpoint. Se o \"body\" for um JSONObject, o retorno do método call será um JSONObject, se for um Map<String, Object>, o retorno do método call será um Map<String, Object>\n\nA seguir, disponibilizamos links de nosso Github mostrando duas formas diferentes de retorno: JSONObject\ne Map<String, Object>\n\n\nJSONObject\n\nhttps://github.com/gerencianet/gn-api-sdk-java-examples/blob/master/src/main/java/br/com/gerencianet/charge/json/Card.java\n\n\nMap<String, Object>\n\nhttps://github.com/gerencianet/gn-api-sdk-java-examples/blob/master/src/main/java/br/com/gerencianet/charge/map/Card.java\n\n*/", "language": "java" } ] } [/block] ### a) Estrutura hierárquica dos atributos do Schema que podem ser utilizados: [block:html] { "html": "<p>Por meio da imagem a seguir é possível observar a hierarquia dos atributos presentes na estrutura dos dados do <abbr title=\"JSON que descreve a estrutura dos dados, incluindo todas as informações que podem ser enviadas e as especificidades de cada uma.\">Schema</abbr> do endpoint \"POST /charge/:id/pay\", apresentado na tabela a seguir:</p>\n<br />\n<img src=\"http://image.prntscr.com/image/0e20a4e18d624b808712bf49856d9433.png\" alt=\"POST /charge/:id/pay - Estrutura dos atributos do Schema que podem ser utilizados\"><br />\n<p>Para verificar mais detalhes, <a href=\"https://dev.gerencianet.com.br/docs/playground-transacoes#charge_id_pay\" target=\"_blank\">acesse aqui.</p>" } [/block] ### b) Atributos relacionados ao pagamento com cartão de crédito: *Parâmetros da url* [block:parameters] { "data": { "h-0": "Atributo", "h-1": "Descrição", "h-2": "Obrigatório", "h-3": "Tipo", "0-0": "id", "0-1": "Identificador da transação (\"charge_id\")", "0-2": "Sim", "0-3": "Objeto **ID**" }, "cols": 4, "rows": 1 } [/block] <br /> *Objeto **ID*** [block:parameters] { "data": { "h-0": "Atributo", "h-1": "Descrição", "h-2": "Obrigatório", "h-3": "Tipo", "0-0": "payment", "0-2": "Sim", "0-3": "Objeto **Payment**", "0-1": "Tag raiz" }, "cols": 4, "rows": 1 } [/block] <br /> *Objeto **Payment*** [block:parameters] { "data": { "0-0": "credit_card", "0-1": "Objeto contendo as informações necessárias para o pagamento via cartão de crédito, como por exemplo, o número de parcelas e os dados do cliente.", "0-2": "Sim", "0-3": "Objeto **Credit_Card**", "h-0": "Atributo", "h-1": "Descrição", "h-2": "Obrigatório", "h-3": "Tipo" }, "cols": 4, "rows": 1 } [/block] <br /> *Objeto **Credit_Card*** [block:parameters] { "data": { "h-0": "Atributo", "h-1": "Descrição", "h-2": "Obrigatório", "h-3": "Tipo", "0-0": "customer", "0-2": "Sim", "1-0": "installments", "2-0": "discount", "3-0": "billing_address", "4-0": "payment_token", "0-1": "Dados pessoais do pagador.\n\n<span class=\"tab1\">*Atributos de customer*</span>\n\n<div class=\"tab2\"><code>name<strong class=\"atributo-obrigatorio\">*</strong></code> // nome <strong class=\"descricao-atributo\"><span class=\"atributo\">(String)</strong></span></div>\n\n<div class=\"tab2\"><code>cpf<strong class=\"atributo-obrigatorio\">*</strong></code> // CPF do cliente (sem pontos, vírgulas ou hífen) <strong class=\"descricao-atributo\"><span class=\"atributo\">(String)</strong></span></div>\n\n<div class=\"tab2\"><code>email<strong class=\"atributo-obrigatorio\">*</strong></code> // Endereço de email válido do cliente <strong class=\"descricao-atributo\"><span class=\"atributo\">(String)</strong></span></div>\n\n<div class=\"tab2\"><code>phone_number<strong class=\"atributo-obrigatorio\">*</strong></code> // Telefone válido do cliente, sem caracteres especiais <strong class=\"descricao-atributo\"><span class=\"atributo\">(String)</strong></span></div>\n\n<div class=\"tab2\"><code>birth<strong class=\"atributo-obrigatorio\">*</strong></code> // Data de Nascimento (data válida em formato YYYY-MM-DD) <strong class=\"descricao-atributo\"><span class=\"atributo\">(String)</strong></span></div>\n\n<div class=\"tab2\"><code>address</code> // Endereço de Entrega <strong class=\"descricao-atributo\"><span class=\"atributo\">(Object)</strong></span> (<a href=\"https://dev.gerencianet.com.br/docs/definir-enderecos\" target=\"_blank\">mais informações</a>)</div>\n\n<div class=\"tab2\"><code>juridical_person</code> // Dados de pessoa jurídica <strong class=\"descricao-atributo\"><span class=\"atributo\">(Object) (<a href=\"https://dev.gerencianet.com.br/docs/pagar-com-pessoa-juridica\" target=\"_blank\">mais informações</a>)</strong></span></div>", "2-1": "Define dados de desconto sobre a cobrança.\n\n<span class=\"tab1\">*Atributos de discount*</span>\n\n<div class=\"tab2\">\n<strong class=\"descricao-atributo\"><span class=\"atributo\">type<strong class=\"atributo-obrigatorio\">*</strong></span>, // Tipo do desconto (String). Valores permitidos:\n<code>currency</code>: o desconto será informado em centavos;\n<code>percentage</code>: o desconto será informado em porcentagem.</strong>\n</div>\n\n<div class=\"tab2\">\n<strong class=\"descricao-atributo\"><span class=\"atributo\">value<strong class=\"atributo-obrigatorio\">*</strong></span>, // Valor do desconto (Integer). Se o tipo do desconto for <code>currency</code>, o valor desta tag deverá ser informada pelo integrador em centavos (ou seja, 500 equivale a R$ 5,00). Caso o tipo do desconto seja <code>percentage</code>, o valor deverá ser multiplicado por 100 (ou seja, 1500 equivale a 15%). Exemplos:\n1) <code>currency</code> // deve ser informado em centavos, ou seja, se o desconto será de R$ 5,99, o integrador deve informar <code>599</code>;\n2) <code>percentage</code> // deve ser informado em centavos, ou seja, se o desconto é de 15%, o integrador deve informar <code>1500</code>.\n</strong>\n</div>", "4-1": "Token único de pagamento obtido na primeira etapa da geração da transação.", "3-1": "Endereço de cobrança (<a href=\"https://dev.gerencianet.com.br/docs/definir-enderecos\" target=\"_blank\">mais informações</a>)\n\n<span class=\"tab1\">*Atributos de billing_address*</span>\n\n<div class=\"tab2\"><code>street<strong class=\"atributo-obrigatorio\">*</strong></code> // nome da rua <strong class=\"descricao-atributo\"><span class=\"atributo\">(Object)</strong></span></div>\n\n<div class=\"tab2\"><code>number<strong class=\"atributo-obrigatorio\">*</strong></code> // número <strong class=\"descricao-atributo\"><span class=\"atributo\">(String/Integer)</strong></span></div>\n\n<div class=\"tab2\"><code>neighborhood<strong class=\"atributo-obrigatorio\">*</strong></code> // Bairro <strong class=\"descricao-atributo\"><span class=\"atributo\">(String)</strong></span></div>\n\n<div class=\"tab2\"><code>zipcode<strong class=\"atributo-obrigatorio\">*</strong></code> // CEP (sem pontos ou hífen) <strong class=\"descricao-atributo\"><span class=\"atributo\">(String)</strong></span></div>\n\n<div class=\"tab2\"><code>city<strong class=\"atributo-obrigatorio\">*</strong></code> // cidade <strong class=\"descricao-atributo\"><span class=\"atributo\">(String)</strong></span></div>\n\n<div class=\"tab2\"><code>complement</code> // complemento <strong class=\"descricao-atributo\"><span class=\"atributo\">(String/null)</strong></span></div>\n\n<div class=\"tab2\"><code>state<strong class=\"atributo-obrigatorio\">*</strong></code> // estado (2 caracteres) <strong class=\"descricao-atributo\"><span class=\"atributo\">(Object)</strong></span></div>", "1-1": "Número de parcelas em que o pagamento deve ser dividido.", "3-2": "Sim", "4-2": "Sim", "1-2": "Não", "2-2": "Não", "0-3": "Object", "1-3": "Integer", "2-3": "Object", "3-3": "Object", "4-3": "String" }, "cols": 4, "rows": 5 } [/block] <strong class="atributo-obrigatorio-texto">* valor obrigatório</strong> <br> <hr> ## Vídeos Explicativos: Criando transação e pagando via cartão de crédito Pensando em oferecer novos meios de transmitir informações, a Gerencianet disponibiliza os vídeos a seguir com o objetivo de explicar, de maneira clara e objetiva, como criar uma transação via integração e associá-la à forma de pagamento por "cartão de crédito". ### Criando transação via Playground (ambiente de testes/sandbox) [block:html] { "html": "<iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/ylqJUpHqwfY\" frameborder=\"0\" allowfullscreen></iframe>" } [/block] ### Definindo método de pagamento por Cartão de Crédito (via Playground) [block:html] { "html": "<iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/vxhkSXV_aX8\" frameborder=\"0\" allowfullscreen></iframe>" } [/block] ### Criando uma transação por integração - Pagamento por Cartão de Crédito [block:html] { "html": "<iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/ucEr_sjp9wQ\" frameborder=\"0\" allowfullscreen></iframe>" } [/block] Para acesso às demais aulas, de outros assuntos, acesse a seção "[Curso Online de Integrações](https://dev.gerencianet.com.br/docs/curso-online-gerencianet)". <br> <hr> ## Próximos Passos Se a sua necessidade for cobranças recorrentes, você pode conferir sobre as [assinaturas](https://dev.gerencianet.com.br/docs/assinaturas-introducao) ou [carnês](https://dev.gerencianet.com.br/docs/carnes-introducao). Também é possível utilizar o [marketplace](https://dev.gerencianet.com.br/docs/marketplace-introducao) da Gerencianet.