{"_id":"585034132272620f002835d3","__v":0,"category":{"_id":"5783f86dbfbba719003f0d8b","project":"575aeffae12cf20e002f306c","version":"575aeffae12cf20e002f306f","__v":0,"sync":{"url":"","isSync":false},"reference":false,"createdAt":"2016-07-11T19:50:05.606Z","from_sync":false,"order":4,"slug":"pagar-com-cartão","title":"Pagar com Cartão"},"parentDoc":null,"user":"57601a13af3e090e00108059","project":"575aeffae12cf20e002f306c","version":{"_id":"575aeffae12cf20e002f306f","project":"575aeffae12cf20e002f306c","__v":30,"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","58c29df1258e5a1900b60478"],"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 os procedimentos detalhados, 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#section-bibliotecas).\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\nCaso queira, pode explorar e conhecer mais sobre este recurso <a href=\"https://dev.gerencianet.com.br/docs/playground-transacoes#charge\" target=\"_blank\">usando nosso Playground</a>.\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 a SDK\\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      \"code\": \"interface\\nfunction CreateCharge: String;\\n\\nimplementation\\nuses uGerenciaClient, uGerenciaNetClientUtilities;\\n{... your code ... }\\n\\nfunction CreateCharge: String;\\nvar \\nBody :  String;\\n\\nbegin  \\n  EnableService( 'GerenciaNet.dll' ); \\n  ConfigureService( ToPAnsiChar( 'client_id' ),ToPAnsiChar( 'client_secret' ),'sandbox','config.json',''); \\n  GerenciaNetAuthorize(); \\n\\n  Body := \\n  '{'+\\n    '\\\"items\\\":'+\\n      '['+\\n        '{'+\\n          '\\\"name\\\":\\\"test article\\\",'+\\n          '\\\"value\\\":1900,'+\\n          '\\\"amount\\\":2'+\\n        '},'+\\n        '{'+\\n          '\\\"name\\\":\\\"test article 2\\\",'+\\n          '\\\"value\\\":3000,'+\\n          '\\\"amount\\\":1'+\\n        '}'+\\n      ']'+\\n  '}';\\n\\n  Result := ExecuteGerenciaNetRequest( 'createCharge','','',Body );\\nend;\",\n      \"language\": \"json\",\n      \"name\": \"Delphi\"\n    }\n  ]\n}\n[/block]\n### a) Estrutura hierárquica dos atributos que podem ser utilizados:\n\n<img src=\"http://image.prntscr.com/image/12eeb6e0681149efaf443cd9cd8a1c12.png\" alt=\"Estrutura hierárquica\" alt=\"createCharge\">\nPara verificar mais detalhes, <a href=\"https://dev.gerencianet.com.br/docs/playground-transacoes#charge\" target=\"_blank\">acesse aqui</a>.\n\n\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>payee_code</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\nCaso queira, pode explorar e conhecer mais sobre este recurso <a href=\"https://dev.gerencianet.com.br/docs/playground-transacoes#charge_id_pay\" target=\"_blank\">usando nosso Playground</a>.\n\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 <a href=\"https://github.com/gerencianet/gn-api-sdk-android\" target=\"_blank\">Android</a> e/ou <a href=\"https://github.com/gerencianet/gn-api-sdk-ios\" target=\"_blank\">iOS</a>.\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## 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 a SDK\\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      \"code\": \"interface\\nfunction PayChargeWithCard(Id, Token: String): String;\\n\\nimplementation\\nuses uGerenciaClient, uGerenciaNetClientUtilities;\\n{... your code ... }\\n\\nfunction PayChargeWithCard(Id, Token: String): String;\\nvar\\n    Body: String;\\n    PaymentParams: String;\\n\\nbegin\\n  Body :=\\n  '{'+\\n    '\\\"payment\\\": {'+\\n      '\\\"credit_card\\\": {'+\\n        '\\\"customer\\\": {'+\\n          '\\\"name\\\": \\\"Gorbadoc Oldbuck\\\",'+\\n          '\\\"cpf\\\": \\\"94271564656\\\",'+\\n          '\\\"phone_number\\\": \\\"5144916523\\\",'+\\n          '\\\"email\\\": \\\"email_do_cliente@servidor.com.br\\\",'+\\n          '\\\"birth\\\": \\\"1977-01-15\\\"'+\\n        '},'+\\n        '\\\"installments\\\": 1,'+\\n        '\\\"payment_token\\\": \\\"'+Token+'\\\",'+\\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      '}'+\\n    '}'+\\n  '}';\\n\\n  EnableService( 'GerenciaNet.dll' ); \\n  ConfigureService( ToPAnsiChar( 'client_id' ),ToPAnsiChar( 'client_secret' ),'sandbox','config.json',''); \\n  GerenciaNetAuthorize();\\n  \\n  PaymentParams := CreateRequestParams( [ 'id='+Id ] ).Text;\\n  Result := ExecuteGerenciaNetRequest( 'payCharge',PaymentParams,'',Body );\\nend;\",\n      \"language\": \"json\",\n      \"name\": \"Delphi\"\n    }\n  ]\n}\n[/block]\n### a) Estrutura hierárquica dos atributos do Schema que podem ser utilizados:\n\n<img src=\"http://image.prntscr.com/image/0e20a4e18d624b808712bf49856d9433.png\" alt=\"Estrutura hierárquica - payCharge\">\nPara verificar mais detalhes, <a href=\"https://dev.gerencianet.com.br/docs/playground-transacoes#charge_id_pay\" target=\"_blank\">acesse aqui</a>.\n\n\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 (<code>charge_id</code>)\",\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 do cliente (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<strong class=\\\"descricao-atributo\\\"><span class=\\\"atributo\\\">Mínimo 1 e máximo 12. Integer.</span></strong>\",\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    \"5-0\": \"message\",\n    \"5-1\": \"Permite incluir no boleto uma \\\"observação\\\", ou em outras palavras, uma mensagem para o cliente. Essa mensagem poderá ser vista nos e-mails relacionados à cobrança, no boleto ou carnê.\\n<strong class=\\\"descricao-atributo\\\"><span class=\\\"atributo\\\">Máximo de 80 caracteres. String.</span></strong>\",\n    \"5-2\": \"Não\",\n    \"5-3\": \"String\"\n  },\n  \"cols\": 4,\n  \"rows\": 6\n}\n[/block]\n<strong class=\"atributo-obrigatorio-texto\">* valor obrigatório</strong>\n\n<br>\n\n<hr>\n\n## Vídeos: 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 os procedimentos detalhados, 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#section-bibliotecas). <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>. Caso queira, pode explorar e conhecer mais sobre este recurso <a href="https://dev.gerencianet.com.br/docs/playground-transacoes#charge" target="_blank">usando nosso Playground</a>. A seguir um exemplo de utilização: [block:code] { "codes": [ { "code": "<?php\n \nrequire __DIR__.'/../../vendor/autoload.php'; // caminho relacionado a SDK\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" }, { "code": "interface\nfunction CreateCharge: String;\n\nimplementation\nuses uGerenciaClient, uGerenciaNetClientUtilities;\n{... your code ... }\n\nfunction CreateCharge: String;\nvar \nBody : String;\n\nbegin \n EnableService( 'GerenciaNet.dll' ); \n ConfigureService( ToPAnsiChar( 'client_id' ),ToPAnsiChar( 'client_secret' ),'sandbox','config.json',''); \n GerenciaNetAuthorize(); \n\n Body := \n '{'+\n '\"items\":'+\n '['+\n '{'+\n '\"name\":\"test article\",'+\n '\"value\":1900,'+\n '\"amount\":2'+\n '},'+\n '{'+\n '\"name\":\"test article 2\",'+\n '\"value\":3000,'+\n '\"amount\":1'+\n '}'+\n ']'+\n '}';\n\n Result := ExecuteGerenciaNetRequest( 'createCharge','','',Body );\nend;", "language": "json", "name": "Delphi" } ] } [/block] ### a) Estrutura hierárquica dos atributos que podem ser utilizados: <img src="http://image.prntscr.com/image/12eeb6e0681149efaf443cd9cd8a1c12.png" alt="Estrutura hierárquica" alt="createCharge"> Para verificar mais detalhes, <a href="https://dev.gerencianet.com.br/docs/playground-transacoes#charge" target="_blank">acesse aqui</a>. ### 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>payee_code</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. Caso queira, pode explorar e conhecer mais sobre este recurso <a href="https://dev.gerencianet.com.br/docs/playground-transacoes#charge_id_pay" target="_blank">usando nosso Playground</a>. ## 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 <a href="https://github.com/gerencianet/gn-api-sdk-android" target="_blank">Android</a> e/ou <a href="https://github.com/gerencianet/gn-api-sdk-ios" target="_blank">iOS</a>. 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> ## 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 a SDK\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" }, { "code": "interface\nfunction PayChargeWithCard(Id, Token: String): String;\n\nimplementation\nuses uGerenciaClient, uGerenciaNetClientUtilities;\n{... your code ... }\n\nfunction PayChargeWithCard(Id, Token: String): String;\nvar\n Body: String;\n PaymentParams: String;\n\nbegin\n Body :=\n '{'+\n '\"payment\": {'+\n '\"credit_card\": {'+\n '\"customer\": {'+\n '\"name\": \"Gorbadoc Oldbuck\",'+\n '\"cpf\": \"94271564656\",'+\n '\"phone_number\": \"5144916523\",'+\n '\"email\": \"email_do_cliente@servidor.com.br\",'+\n '\"birth\": \"1977-01-15\"'+\n '},'+\n '\"installments\": 1,'+\n '\"payment_token\": \"'+Token+'\",'+\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 '}'+\n '}'+\n '}';\n\n EnableService( 'GerenciaNet.dll' ); \n ConfigureService( ToPAnsiChar( 'client_id' ),ToPAnsiChar( 'client_secret' ),'sandbox','config.json',''); \n GerenciaNetAuthorize();\n \n PaymentParams := CreateRequestParams( [ 'id='+Id ] ).Text;\n Result := ExecuteGerenciaNetRequest( 'payCharge',PaymentParams,'',Body );\nend;", "language": "json", "name": "Delphi" } ] } [/block] ### a) Estrutura hierárquica dos atributos do Schema que podem ser utilizados: <img src="http://image.prntscr.com/image/0e20a4e18d624b808712bf49856d9433.png" alt="Estrutura hierárquica - payCharge"> Para verificar mais detalhes, <a href="https://dev.gerencianet.com.br/docs/playground-transacoes#charge_id_pay" target="_blank">acesse aqui</a>. ### 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 (<code>charge_id</code>)", "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 do cliente (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.\n<strong class=\"descricao-atributo\"><span class=\"atributo\">Mínimo 1 e máximo 12. Integer.</span></strong>", "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", "5-0": "message", "5-1": "Permite incluir no boleto uma \"observação\", ou em outras palavras, uma mensagem para o cliente. Essa mensagem poderá ser vista nos e-mails relacionados à cobrança, no boleto ou carnê.\n<strong class=\"descricao-atributo\"><span class=\"atributo\">Máximo de 80 caracteres. String.</span></strong>", "5-2": "Não", "5-3": "String" }, "cols": 4, "rows": 6 } [/block] <strong class="atributo-obrigatorio-texto">* valor obrigatório</strong> <br> <hr> ## Vídeos: 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.