{"_id":"5d558f916082d1006c281988","project":"575aeffae12cf20e002f306c","version":{"_id":"575aeffae12cf20e002f306f","project":"575aeffae12cf20e002f306c","__v":33,"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","5a7c4127490e52002a7f643c","5ce43ecb9e6a78002aae5c66","5ce7de70923530005cbe627a"],"is_deprecated":false,"is_hidden":false,"is_beta":false,"is_stable":true,"codename":"2016","version_clean":"1.0.0","version":"1"},"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":6,"slug":"pagar-com-cartão","title":"Pagar com Cartão"},"user":"5cd2d0083432a2004b7a6b83","__v":0,"parentDoc":null,"metadata":{"title":"","description":"","image":[]},"updates":[],"next":{"pages":[],"description":""},"createdAt":"2019-08-15T17:00:01.460Z","link_external":false,"link_url":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[]},"settings":"","auth":"required","params":[],"url":""},"isReference":false,"order":1,"body":"Atualmente disponibilizamos dois procedimentos para a criação de uma transação do tipo cartão de crédito, na primeira delas o titulo é criado em um passo único, assim fora convencionado como *One Step*. A segunda opção de criação da transação se da em dois passos, sendo assim convencionada como *Two Steps*. Ambos os fluxos estão detalhados a seguir:\n\n1. [Criando a transação em *One Step* (Um passo)](https://dev.gerencianet.com.br/docs/pagamento-com-cartao#section-1-cria-o-de-transa-o-por-cart-o-de-cr-dito-em-one-step-um-passo-).\n\n2. [Criando a transação em *Two Steps* (Dois passos)](https://dev.gerencianet.com.br/docs/pagamento-com-cartao#section-2-cria-o-de-transa-o-por-cart-o-de-cr-dito-em-two-steps-dois-passos-).\n\n# 1. Criação de transação por cartão de crédito em *One Step* (Um passo)\n[block:callout]\n{\n  \"type\": \"warning\",\n  \"body\": \"Para que a criação de transações via *One Step* ocorra normalmente é necessário atualizar sua SDK. Todos os arquivos necessários para tal estão disponíveis através de nosso [repositório](https://github.com/gerencianet) e em nossa [documentação](https://dev.gerencianet.com.br/docs/instalacao-da-api).\",\n  \"title\": \"Importante\"\n}\n[/block]\nNo caso de transações com cartão de crédito, será realizada uma etapa anterior a criação onde ocorre a transmissão (**via JavaScript**, no browser), de forma segura, dos 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  \"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 1.1** deste documento (obter o <code>payment_token</code>), e **só depois** passar para o item 1.2 (que é de fato o pagamento com cartão).\"\n}\n[/block]\n## 1.1. Obtenção do payment_token\n[block:html]\n{\n  \"html\": \"<p>Inicialmente, vamos realizar a primeira etapa, que é a obtenção do <code>payment_token</code>. Para tal, você necessitará de um código JavaScript específico de sua conta Gerencianet. Para gerá-lo, siga os passos:</p>\\n  \\n<ul>\\n  <li><a href=\\\"https://usuario.gerencianet.com.br/login\\\" target=\\\"_blank\\\">Efetue login</a> em sua conta Gerencianet e acesse <code>Minha Conta</code> (canto superior direito)</li>\\n  <li>Copie seu <code>Identificador de Conta</code> (<a href=\\\"https://s3-sa-east-1.amazonaws.com/pe85007/portal/wp-content/uploads/2017/10/payee_code_p.png\\\" target=\\\"_blank\\\">veja onde</a>)</li>\\n  <li>Cole no campo abaixo e clique no botão <code>Gerar</code></li>\\n</ul> \\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\": \"warning\",\n  \"body\": \"Lembre-se que, após informar seu identificador de conta, serão gerados 2 (dois) códigos JavaScript distintos.\\n\\nCopie 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\": \"text\",\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\": \"<code>callback</code>\",\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    \"0-2\": \"Function\"\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\": \"\",\n    \"0-0\": \"<code>card_data</code>\",\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-0\": \"<code>callback</code>\",\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    \"1-2\": \"Function\"\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\": \"<code>total</code>\",\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    \"0-2\": \"Integer\",\n    \"1-0\": \"<code>brand</code>\",\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>diners</code> // Bandeira Dinners</div>\\n\\n<div class=\\\"tab2\\\"><code>amex</code> // Bandeira AmericanExpress</div>\\n\\n<div class=\\\"tab2\\\"><code>elo</code> // Bandeira Elo</div>\\n\\n<div class=\\\"tab2\\\"><code>hipercard</code> // Bandeira Hipercard</div>\",\n    \"1-2\": \"String\",\n    \"2-0\": \"<code>callback</code>\",\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    \"2-2\": \"Function\"\n  },\n  \"cols\": 3,\n  \"rows\": 3\n}\n[/block]\n<br>\n\n## 1.2. Pagando com cartão\n\nAgora que 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\nAssim que o pagamento for confirmado, a transação terá o status alterado de <code>waiting</code> para <code>paid</code>. Mas, se por alguma razão não for possível confirmar o pagamento, o status será alterado para <code>unpaid</code>.\n\nO exemplo abaixo mostra como isto pode ser feito, utilizando as SDK's disponíveis:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"<?php\\n\\nrequire __DIR__.'/../../autoload.php'; //Caminho da SDK\\n\\nuse Gerencianet\\\\Exception\\\\GerencianetException;\\nuse Gerencianet\\\\Gerencianet;\\n\\n$clientId = 'informe_seu_client_id'; // insira seu Client_Id, conforme o ambiente (Des ou Prod)\\n$clientSecret = 'informe_seu_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$paymentToken = 'InsiraAquiUmPayeementeCode'; // payment_token obtido na 1ª etapa (através do Javascript único por conta Gerencianet)\\n\\n$item_1 = [\\n   'name' => 'Item 1', // nome do item, produto ou serviço\\n   'amount' => 1, // quantidade\\n   'value' => 3000 // valor (1000 = R$ 10,00) (Obs: É possível a criação de itens com valores negativos. Porém, o valor total da fatura deve ser superior ao valor mínimo para geração de transações.)\\n];\\n$items = [\\n   $item_1\\n];\\n$metadata = array('notification_url'=>'https://SuaUrl/16rpx6y1');\\n$customer = [\\n   'name' => 'Gorbadoc Oldbuck', // nome do cliente\\n   'cpf' => '04267484171', // cpf do cliente\\n   'phone_number' => '5144916523', // telefone do cliente\\n   'email' => 'oldbuck:::at:::gerencianet.com.br', // endereço de email do cliente\\n   'birth' => '1977-01-15' // data de nascimento do cliente\\n];\\n$billingAddress = [\\n  'street' => 'Av JK',\\n  'number' => 909,\\n  'neighborhood' => 'Bauxita',\\n  'zipcode' => '35400000',\\n  'city' => 'Ouro Preto',\\n  'state' => 'MG'\\n];\\n$discount = [\\n   'type' => 'currency',\\n   'value' => 599\\n];\\n$configurations = [\\n   'fine' => 200,\\n   'interest' => 33\\n];\\n$credit_card = [\\n  'customer' => $customer,\\n  'installments' => 1, // número de parcelas em que o pagamento deve ser dividido\\n  'discount' =>$discount,\\n  'billing_address' => $billingAddress,\\n  'payment_token' => $paymentToken,\\n  'message' => 'teste\\\\nteste\\\\nteste\\\\nteste'\\n];\\n$payment = [\\n   'credit_card' => $credit_card // forma de pagamento (credit_card = cartão)\\n];\\n$body = [\\n   'items' => $items,\\n   'metadata' =>$metadata,\\n   'payment' => $payment\\n];\\ntry {\\n       $api = new Gerencianet($options);\\n       $pay_charge = $api->oneStep([],$body);\\n       echo '<pre>';\\n       print_r($pay_charge);\\n       echo '<pre>';\\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\": \"using System;\\n\\nnamespace Gerencianet.SDK.Examples\\n{\\n    class OneStep\\n    {\\n        public static void Execute()\\n        {\\n            dynamic endpoints = new Endpoints(Credentials.Default.ClientId, Credentials.Default.ClientSecret, Credentials.Default.Sandbox);\\n\\n            var body = new\\n            {\\n                items = new[] {\\n                    new {\\n                        name = \\\"Product 1\\\",\\n                        value = 590,\\n                        amount = 2\\n                    }\\n                },\\n                shippings = new[] {\\n                    new {\\n                        name = \\\"Default Shipping Cost\\\",\\n                        value = 10\\n                    }\\n                },\\n                payment = new\\n                {\\n                    credit_card = new\\n                    {\\n                        installments = 1,\\n                        payment_token = \\\"7d0a3fe0f0c9caab4f3b6578317a9d7e8ed6303f\\\",\\n                        billing_address = new\\n                        {\\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                        {\\n                            name = \\\"Gorbadoc Oldbuck\\\",\\n                            email = \\\"oldbuck@gerencianet.com.br\\\",\\n                            cpf = \\\"04267484171\\\",\\n                            birth = \\\"1977-01-15\\\",\\n                            phone_number = \\\"5144916523\\\"\\n                        }\\n                    }\\n                }\\n                };\\n\\n            try\\n            {\\n                var response = endpoints.OneStep(null, body);\\n                Console.WriteLine(response);\\n            }\\n            catch (GnException e)\\n            {\\n                Console.WriteLine(e.ErrorType);\\n                Console.WriteLine(e.Message);\\n            }\\n        }\\n    }\\n}\",\n      \"language\": \"csharp\",\n      \"name\": \".net\"\n    },\n    {\n      \"code\": \"'use strict';\\n​\\nvar Gerencianet = require('gn-api-sdk-node');\\nvar credentials = require('./credentials');\\n​\\nvar options = {\\n  client_id: credentials.client_id,\\n  client_secret: credentials.client_secret,\\n  sandbox: true\\n}\\n​\\nvar body = {\\n​\\n  payment: {\\n    credit_card: {\\n      installments: 1,\\n      payment_token: '83d52dbd590d9ebc991938c711ddd31f65df89a5',\\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  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  .oneStep([], body)\\n  .then(console.log)\\n  .catch(console.log)\\n  .done();\",\n      \"language\": \"javascript\",\n      \"name\": \"NodeJs\"\n    },\n    {\n      \"code\": \"package main\\n​\\nimport (\\n\\t\\\"fmt\\\"\\n\\t\\\"github.com/dmalberto/gn-api-sdk-go/gerencianet\\\"\\n\\t\\\"../configs\\\"\\n)\\n​\\nfunc main(){\\n\\t\\n\\tcredentials := configs.Credentials\\n\\tgn := gerencianet.NewGerencianet(credentials)\\n​\\n\\tpaymentToken := \\\"428d7f3b2dc49117552ace464078557832c4ae4f\\\";\\n​\\n\\tcustomer := map[string]interface{}{\\n\\t\\t\\\"name\\\": \\\"Gorbadoc Oldbuck\\\",\\n\\t\\t\\\"cpf\\\": \\\"04267484171\\\",\\n\\t\\t\\\"phone_number\\\": \\\"51944916523\\\",\\n\\t\\t\\\"email\\\": \\\"gorb.oldbuck@gerencianet.com.br\\\",\\n\\t\\t\\\"birth\\\": \\\"1977-01-15\\\",\\n\\t}\\n​\\n\\tbillingAddress := map[string]interface{} {\\n\\t\\t\\\"street\\\": \\\"Av JK\\\",\\n\\t\\t\\\"number\\\": 909,\\n\\t\\t\\\"neighborhood\\\": \\\"Bauxita\\\",\\n\\t\\t\\\"zipcode\\\": \\\"35400000\\\",\\n\\t\\t\\\"city\\\": \\\"Ouro Preto\\\",\\n\\t\\t\\\"state\\\": \\\"MG\\\",\\n\\t  }\\n​\\n\\tbody := map[string]interface{} {\\n\\t\\t\\\"payment\\\": map[string]interface{} {\\n\\t\\t\\t\\\"credit_card\\\": map[string]interface{} {\\n\\t\\t\\t  \\\"installments\\\": 1,\\n\\t\\t\\t  \\\"billing_address\\\": billingAddress,\\n\\t\\t\\t  \\\"payment_token\\\": paymentToken,\\n\\t\\t\\t  \\\"customer\\\": customer,\\n\\t\\t\\t},\\n\\t\\t},\\n\\t\\t\\\"items\\\": []map[string]interface{}{\\n\\t\\t\\t{\\n\\t\\t\\t\\t\\\"name\\\": \\\"Product 1\\\",\\n\\t\\t\\t\\t\\\"value\\\": 1000,\\n\\t\\t\\t\\t\\\"amount\\\": 2,\\n\\t\\t\\t},\\n\\t\\t},\\n\\t\\t\\\"shippings\\\": []map[string]interface{} {\\n\\t\\t\\t{\\n\\t\\t\\t\\t\\\"name\\\": \\\"Default Shipping Cost\\\",\\n\\t\\t\\t\\t\\\"value\\\": 100,\\n\\t\\t\\t},\\n\\t\\t},\\n\\t}\\n​\\n\\tres, err := gn.CreateChargeOneStep(body) // no lugar do 1 coloque o charge_id certo\\n​\\n\\tif err != nil {\\n\\t\\tfmt.Println(err)\\n\\t} else {\\n\\t\\tfmt.Println(res)\\n\\t}\\n}\",\n      \"language\": \"go\"\n    },\n    {\n      \"code\": \"require \\\"gerencianet\\\"\\nrequire_relative \\\"./credentials\\\"\\n​\\noptions = {\\n  client_id: CREDENTIALS::CLIENT_ID,\\n  client_secret: CREDENTIALS::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  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)\\nputs gerencianet.create_charge_onestep(body: body)\",\n      \"language\": \"ruby\"\n    },\n    {\n      \"code\": \"package br.com.gerencianet.charge.json;\\n\\nimport java.util.HashMap;\\n\\nimport org.json.JSONArray;\\nimport org.json.JSONObject;\\n\\nimport br.com.gerencianet.Credentials;\\nimport br.com.gerencianet.gnsdk.Gerencianet;\\nimport br.com.gerencianet.gnsdk.exceptions.GerencianetException;\\n\\npublic class OneStepCard {\\n\\tpublic static void main(String[] args) {\\n        /* *********  Set credentials parameters ******** */\\n        Credentials credentials = new Credentials();\\n        JSONObject options = new JSONObject();\\n        options.put(\\\"client_id\\\", credentials.getClientId());\\n        options.put(\\\"client_secret\\\", credentials.getClientSecret());\\n        //options.put(\\\"partner_token\\\", credentials.getPartnerToken());\\n        options.put(\\\"sandbox\\\", credentials.isSandbox());\\n        /* ************************************************* */         \\n        \\n        String paymentToken = \\\"32add25a335ff3f588e42055486b3156253b7b75\\\";\\n        \\n        // items\\n        JSONArray items = new JSONArray();\\n        JSONObject item1 = new JSONObject();\\n        item1.put(\\\"name\\\", \\\"Item 1\\\");\\n        item1.put(\\\"amount\\\", 1);\\n        item1.put(\\\"value\\\", 600);\\n        JSONObject item2 = new JSONObject(\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"Item 2\\\\\\\", \\\\\\\"amount\\\\\\\":1, \\\\\\\"value\\\\\\\":1000}\\\");\\n        items.put(item1);\\n        items.put(item2);\\n        \\n        //customer\\n        JSONObject customer = new JSONObject();\\n        customer.put(\\\"name\\\", \\\"Gorbadoc Oldbuck\\\");\\n        customer.put(\\\"cpf\\\", \\\"94271564656\\\");\\n        customer.put(\\\"phone_number\\\", \\\"5144916523\\\");\\n        customer.put(\\\"email\\\", \\\"gorbadoc.oldbuck@gerencianet.com.br\\\");\\n        customer.put(\\\"birth\\\", \\\"1990-05-04\\\");\\n        \\n        // endereço do comprador\\n        JSONObject billingAddress = new JSONObject();\\n\\t\\tbillingAddress.put(\\\"street\\\", \\\"Av. JK\\\");\\n\\t\\tbillingAddress.put(\\\"number\\\", 909);\\n\\t\\tbillingAddress.put(\\\"neighborhood\\\", \\\"Bauxita\\\");\\n\\t\\tbillingAddress.put(\\\"zipcode\\\", \\\"35400000\\\");\\n\\t\\tbillingAddress.put(\\\"city\\\", \\\"Ouro Preto\\\");\\n\\t\\tbillingAddress.put(\\\"state\\\", \\\"MG\\\");\\n        \\n        //URL de notificações\\n        JSONObject metadata = new JSONObject();\\n        metadata.put(\\\"notification_url\\\", \\\"https://SuaUrl/16rpx6y1\\\");\\n        metadata.put(\\\"custom_id\\\", \\\"Id_0007\\\");\\n        \\n        //desconto        \\n        JSONObject discount = new JSONObject();\\n        discount.put(\\\"type\\\",\\\"currency\\\");\\n        discount.put(\\\"value\\\",599);\\n        \\n        \\n        JSONObject creditCard = new JSONObject();\\n\\t\\tcreditCard.put(\\\"installments\\\", 1);\\n\\t\\tcreditCard.put(\\\"billing_address\\\", billingAddress);\\n\\t\\tcreditCard.put(\\\"payment_token\\\", paymentToken);\\n\\t\\tcreditCard.put(\\\"customer\\\", customer);\\n\\t\\tcreditCard.put(\\\"discount\\\", discount);\\n\\n\\t\\tJSONObject payment = new JSONObject();\\n\\t\\tpayment.put(\\\"credit_card\\\", creditCard);\\n\\n\\t\\tJSONObject body = new JSONObject();\\n\\t\\tbody.put(\\\"payment\\\", payment);\\n\\t\\tbody.put(\\\"items\\\", items);\\n        body.put(\\\"metadata\\\", metadata);\\n        \\n        try {\\n            Gerencianet gn = new Gerencianet(options);\\n            JSONObject response = gn.call(\\\"oneStep\\\", new HashMap<String,String>(), body);\\n            System.out.println(response);\\n        }catch (GerencianetException e){\\n            System.out.println(e.getCode());\\n            System.out.println(e.getError());\\n            System.out.println(e.getErrorDescription());\\n        }\\n        catch (Exception e) {\\n            System.out.println(e.getMessage());\\n        }\\n    }\\n}\",\n      \"language\": \"java\"\n    },\n    {\n      \"code\": \"# encoding: utf-8\\n​\\nfrom gerencianet import Gerencianet\\nfrom credentials import CREDENTIALS\\n​\\ngn = Gerencianet(CREDENTIALS)\\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    'payment': {\\n        'credit_card': {\\n            'installments': 1,\\n            'payment_token': \\\"5cffb658d047093b3fbdf7eff8c434c3d26a4bd1\\\",\\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​\\nresponse = gn.create_charge_onestep(params=None, body=body)\\nprint(response)\",\n      \"language\": \"python\"\n    },\n    {\n      \"code\": \"interface\\n\\nfunction PayOneStepWithCard: String;\\n\\nimplementation\\nuses uGerenciaClient, uGerenciaNetClientUtilities;\\n{... your code ... }\\n\\nvar\\n   Body: String;\\nbegin\\n Body :=\\n '{'+\\n   '\\\"items\\\": ['+\\n     '{'+\\n       '\\\"name\\\": \\\"Product 1\\\",'+\\n       '\\\"value\\\": 590,'+\\n       '\\\"amount\\\": 2'+\\n     '}'+\\n   '],'+\\n   '\\\"shippings\\\": ['+\\n     '{'+\\n       '\\\"name\\\": \\\"Default Shipping Cost\\\",'+\\n       '\\\"value\\\": 10'+\\n     '}'+\\n   '],'+\\n   '\\\"payment\\\": {'+\\n     '\\\"credit_card\\\": {'+\\n       '\\\"installments\\\": 1,'+\\n       '\\\"payment_token\\\": \\\"InsiraAquiOPayment_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       '\\\"customer\\\": {'+\\n         '\\\"name\\\": \\\"Gorbadoc Oldbuck\\\",'+\\n         '\\\"email\\\": \\\"oldbuck@gerencianet.com.br\\\",'+\\n         '\\\"cpf\\\": \\\"04267484171\\\",'+\\n         '\\\"birth\\\": \\\"1977-01-15\\\",'+\\n         '\\\"phone_number\\\": \\\"5144916523\\\"'+\\n       '}'+\\n     '}'+\\n   '}'+\\n '}';\\n Result := ExecuteGerenciaNetRequest( 'payOneStep','','',Body );\\nend;\",\n      \"language\": \"javascript\",\n      \"name\": \"Delphi\"\n    }\n  ]\n}\n[/block]\n<br>\n\n## a) Estrutura hierárquica dos atributos do Schema que podem ser utilizados:\n\n    \"items\"\n        \"name\"\n        \"value\"\n        \"amount\"\n        \"marketplace\"\n            \"payee_code\"\n            \"percentage\"\n    \"shippings\"\n        \"name\"\n        \"value\"\n        \"payee_code\"\n    \"metadata\"\n        \"custom_id\"\n        \"notification_url\"\n    \"payment\"\n        \"credit_card\"\n            \"customer\"\n                \"name\"\n                \"cpf\"\n                \"email\"\n                \"phone_number\"\n                \"birth\"\n                \"address\"\n                    \"street\"\n                    \"number\"\n                    \"neighborhood\"\n                    \"zipcode\"\n                    \"city\"\n                    \"complement\"\n                    \"state\"\n                \"juridical_person\"\n                    \"corporate_name\"\n                    \"cnpj\"\n            \"installments\"\n            \"discount\"\n                \"type\"\n                    \"percentage\",\n                    \"currency\"\n                \"value\"\n            \"billing_address\"\n                \"street\"\n                \"number\"\n                \"neighborhood\"\n                \"zipcode\"\n                \"city\"\n                \"complement\"\n                \"state\"\n            \"payment_token\"\n            \"message\"\n\n<br>\n\n## b) Atributos que podem ser utilizados 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\": \"<code>items</code>\",\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> (código identificador da conta Gerencianet, único por conta - veja <a href=\\\"https://s3-sa-east-1.amazonaws.com/pe85007/portal/wp-content/uploads/2017/10/payee_code_p.png\\\" target=\\\"_blank\\\">onde localizá-lo</a>). String.\\n<code>*percentage*</code> (porcentagem de repasse, sendo que 9000 equivale a 90% - Integer).</span></div>\",\n    \"0-2\": \"Sim\",\n    \"0-3\": \"Array\",\n    \"1-0\": \"<code>shippings</code>\",\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> // código identificador da conta Gerencianet, único por conta - confira onde localizá-lo, de acordo com o layout de sua plataforma - <a href=\\\"https://gerencianet.com.br/wp-content/uploads/2017/10/payee_code_n.png\\\" target=\\\"_blank\\\">opção 1</a> ou <a href=\\\"https://gerencianet.com.br/wp-content/uploads/2017/10/payee_code_p.png\\\" target=\\\"_blank\\\">opção 2</a>. <strong class=\\\"descricao-atributo\\\"><span class=\\\"atributo\\\">Padrão: Identificador da sua própria conta. String.</span></strong></div>\",\n    \"1-2\": \"Não\",\n    \"1-3\": \"Array\",\n    \"2-0\": \"<code>metadata</code>\",\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    \"2-2\": \"Não\",\n    \"2-3\": \"Object\"\n  },\n  \"cols\": 4,\n  \"rows\": 3\n}\n[/block]\n<br />\n\n*Objeto **Payment***\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-3\": \"Objeto **Credit_Card**\",\n    \"0-2\": \"Sim\",\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-0\": \"<code>credit_card</code>\"\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-3\": \"Object\",\n    \"0-2\": \"Sim\",\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    \"0-0\": \"<code>customer</code>\",\n    \"1-0\": \"<code>installments</code>\",\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    \"1-2\": \"Não\",\n    \"1-3\": \"Integer\",\n    \"2-0\": \"<code>discount</code>\",\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    \"2-2\": \"Não\",\n    \"2-3\": \"Object\",\n    \"3-0\": \"<code>billing_address</code>\",\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    \"3-2\": \"Sim\",\n    \"3-3\": \"Object\",\n    \"4-0\": \"<code>payment_token</code>\",\n    \"4-1\": \"Token único de pagamento obtido na primeira etapa da geração da transação.\",\n    \"4-2\": \"Sim\",\n    \"4-3\": \"String\",\n    \"5-0\": \"<code>message</code>\",\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\\\">Até 4 linhas contendo 100 caracteres em cada linha. String.\\n\\nO operador <code>\\\\n</code> é utilizado para efetuar a quebra de linha.</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# 2. Criação de transação por cartão de crédito em *Two Steps* (Dois passos)\n\nNesta opção é necessário que o *body* da requisição contenha todos os atributos mínimos obrigatórios para a emissão do titulo.\nAbaixo temos os exemplos de implementação utilizando as SDK's disponíveis:\n\n2.1. [Crie a transação](https://dev.gerencianet.com.br/docs/pagamento-com-cart%C3%A3o#section-2-1-criar-transa-o), informando o item/produto/serviço, valor, quantidade, etc;\n\n2.2. [Associe à forma de pagamento via cartão](https://dev.gerencianet.com.br/docs/pagamento-com-cart%C3%A3o#section-2-2-associe-forma-de-pagamento-via-cart-o), informando o <code>charge_id</code> da transação criada e os dados do cliente;\n\n  2.3. [Obtenção do payment_token](https://dev.gerencianet.com.br/v1/docs/pagamento-com-cart%C3%A3o#section-2-3-obten-o-do-payment_token) (via JavaScript, único por transação);\n\n  2.4. [Pagando com cartão](https://dev.gerencianet.com.br/v1/docs/pagamento-com-cart%C3%A3o#section-2-4-pagando-com-cart-o).\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 3.1 e 3.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 de que a SDK da Gerencianet foi instalada](https://dev.gerencianet.com.br/docs/instalacao-da-api).\n\n<hr>\n\n## 2.1. Criar transação\n\nPrimeiramente, precisamos gerar a transação (também chamada de \"cobrança\"). É neste momento que será informado o nome do item/produto/serviço, valor da transação, quantidade, dentre outras informações possíveis.\n\nApós criá-la, será retornado o <code>charge_id</code>, que é o identificador único da transação e que será utilizado para associar à forma de pagamento.\n\nAssim que essa transação é criada, ela recebe o status <code>new</code>, que significa que a cobrança foi gerada e está aguardando definição da forma de pagamento. Essa cobrança somente terá seu status alterado quando o integrador definir sua forma de pagamento.\n\nPara gerar uma transação, você deve enviar uma requisição <code>POST</code> para a rota <code>/v1/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\nO exemplo abaixo mostra como isto pode ser feito, utilizando as SDK's disponíveis:\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 = 'informe_seu_client_id'; // insira seu Client_Id, conforme o ambiente (Des ou Prod)\\n$clientSecret = 'informe_seu_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) (Obs: É possível a criação de itens com valores negativos. Porém, o valor total da fatura deve ser superior ao valor mínimo para geração de transações.)\\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\\\"\\nrequire_relative \\\"./credentials\\\"\\n\\noptions = {\\n  client_id: CREDENTIALS::CLIENT_ID,\\n  client_secret: CREDENTIALS::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)\\nputs gerencianet.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      \"code\": \"// No código de exemplo de uso da SDK de Go, definimos as credenciais de acesso à API (Client_Id e Client_Secret) e o ambiente a ser usado (sandbox como 'true' ou 'false') dentro de um arquivo específico (configs.go), que está localizado no diretório \\\"_examples/configs\\\". Essas credenciais são exportadas através da variável 'Credentials'.\\n\\npackage main\\n\\nimport (\\n\\t\\\"fmt\\\"\\n\\t\\\"github.com/gerencianet/gn-api-sdk-go/gerencianet\\\"\\n\\t\\\"github.com/gerencianet/gn-api-sdk-go/_examples/configs\\\"\\n)\\n\\nfunc main(){\\n\\t\\n\\tcredentials := configs.Credentials\\n\\tgn := gerencianet.NewGerencianet(credentials)\\n\\n\\tbody := map[string]interface{} {\\n\\t\\t\\\"items\\\": []map[string]interface{}{\\n\\t\\t\\t{\\n\\t\\t\\t\\t\\\"name\\\": \\\"Product 1\\\",\\n\\t\\t\\t\\t\\\"value\\\": 1000,\\n\\t\\t\\t\\t\\\"amount\\\": 2,\\n\\t\\t\\t},\\n\\t\\t},\\n\\t\\t\\\"shippings\\\": []map[string]interface{} {\\n\\t\\t\\t{\\n\\t\\t\\t\\t\\\"name\\\": \\\"Default Shipping Cost\\\",\\n\\t\\t\\t\\t\\\"value\\\": 100,\\n\\t\\t\\t},\\n\\t\\t},\\n\\t}\\n\\n\\tres, err := gn.CreateCharge(body)\\n\\n\\tif err != nil {\\n\\t\\tfmt.Println(err)\\n\\t} else {\\n\\t\\tfmt.Println(res)\\n\\t}\\n}\",\n      \"language\": \"go\"\n    }\n  ]\n}\n[/block]\n<br>\n\n## a) Estrutura hierárquica dos atributos do Schema que podem ser utilizados:\n\n<pre>\"id\": \"/Charge\"\n    \"items\"\n        \"name\"\n        \"value\"\n        \"amount\"\n        \"marketplace\"\n            \"payee_code\"\n            \"percentage\"\n    \"shippings\"\n        \"name\"\n        \"value\"\n        \"payee_code\"\n    \"metadata\"\n        \"custom_id\"\n        \"notification_url\"</pre>\n\nPara verificar mais detalhes, <a href=\"https://dev.gerencianet.com.br/docs/playground-transacoes#charge\" target=\"_blank\">acesse aqui</a> e explore em nosso Playground.\n\n<br>\n\n## b) Atributos que podem ser utilizados 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\": \"<code>items</code>\",\n    \"1-0\": \"<code>shippings</code>\",\n    \"2-0\": \"<code>metadata</code>\",\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> (código identificador da conta Gerencianet, único por conta - veja <a href=\\\"https://s3-sa-east-1.amazonaws.com/pe85007/portal/wp-content/uploads/2017/10/payee_code_p.png\\\" target=\\\"_blank\\\">onde localizá-lo</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> // código identificador da conta Gerencianet, único por conta - confira onde localizá-lo, de acordo com o layout de sua plataforma - <a href=\\\"https://gerencianet.com.br/wp-content/uploads/2017/10/payee_code_n.png\\\" target=\\\"_blank\\\">opção 1</a> ou <a href=\\\"https://gerencianet.com.br/wp-content/uploads/2017/10/payee_code_p.png\\\" target=\\\"_blank\\\">opção 2</a>. <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<br>\n\n<hr>\n\n## 2.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 - SOBRE O PAYMENT_TOKEN\",\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>/v1/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.3. Obtenção do payment_token\n\n\n[block:html]\n{\n  \"html\": \"<p>Com a transação criada, vamos associá-la à forma de pagamento desejada, que neste caso, será cartão de crédito.</p>\\n\\n<p>Inicialmente, vamos realizar a primeira etapa, que é a obtenção do <code>payment_token</code>. Para tal, você necessitará de um código JavaScript específico de sua conta Gerencianet. Para gerá-lo, siga os passos:</p>\\n  \\n<ul>\\n  <li><a href=\\\"https://usuario.gerencianet.com.br/login\\\" target=\\\"_blank\\\">Efetue login</a> em sua conta Gerencianet e acesse <code>Minha Conta</code> (canto superior direito)</li>\\n  <li>Copie seu <code>Identificador de Conta</code> (<a href=\\\"https://s3-sa-east-1.amazonaws.com/pe85007/portal/wp-content/uploads/2017/10/payee_code_p.png\\\" target=\\\"_blank\\\">veja onde</a>)</li>\\n  <li>Cole no campo abaixo e clique no botão <code>Gerar</code></li>\\n</ul> \\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\": \"warning\",\n  \"title\": \"IMPORTANTE\",\n  \"body\": \"Lembre-se que, após informar seu identificador de conta, serão gerados 2 (dois) códigos JavaScript distintos.\\n\\nCopie 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\": \"<code>callback</code>\",\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\": \"<code>card_data</code>\",\n    \"1-0\": \"<code>callback</code>\",\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\": \"<code>total</code>\",\n    \"1-0\": \"<code>brand</code>\",\n    \"2-0\": \"<code>callback</code>\",\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>diners</code> // Bandeira Dinners</div>\\n\\n<div class=\\\"tab2\\\"><code>amex</code> // Bandeira AmericanExpress</div>\\n\\n<div class=\\\"tab2\\\"><code>elo</code> // Bandeira Elo</div>\\n\\n<div class=\\\"tab2\\\"><code>hipercard</code> // Bandeira Hipercard</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.4. 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\nAssim que o pagamento for confirmado, a transação terá o status alterado de <code>waiting</code> para <code>paid</code>. Mas, se por alguma razão não for possível confirmar o pagamento, o status será alterado para <code>unpaid</code>.\n\nO exemplo abaixo mostra como isto pode ser feito, utilizando as SDK's disponíveis:\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 = 'informe_seu_client_id'; // insira seu Client_Id, conforme o ambiente (Des ou Prod)\\n$clientSecret = 'informe_seu_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}\",\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      \"code\": \"// No código de exemplo de uso da SDK de Go, definimos as credenciais de acesso à API (Client_Id e Client_Secret) e o ambiente a ser usado (sandbox como 'true' ou 'false') dentro de um arquivo específico (configs.go), que está localizado no diretório \\\"_examples/configs\\\". Essas credenciais são exportadas através da variável 'Credentials'.\\n\\npackage main\\n\\nimport (\\n\\t\\\"fmt\\\"\\n\\t\\\"github.com/gerencianet/gn-api-sdk-go/gerencianet\\\"\\n\\t\\\"github.com/gerencianet/gn-api-sdk-go/_examples/configs\\\"\\n)\\n\\nfunc main(){\\n\\t\\n\\tcredentials := configs.Credentials\\n\\tgn := gerencianet.NewGerencianet(credentials)\\n\\n\\tpaymentToken := \\\"payment_token\\\";\\n\\n\\tcustomer := map[string]interface{}{\\n\\t\\t\\\"name\\\": \\\"Gorbadoc Oldbuck\\\",\\n\\t\\t\\\"cpf\\\": \\\"04267484171\\\",\\n\\t\\t\\\"phone_number\\\": \\\"5144916523\\\",\\n\\t\\t\\\"email\\\": \\\"oldbuck@gerencianet.com.br\\\",\\n\\t\\t\\\"birth\\\": \\\"1977-01-15\\\",\\n\\t}\\n\\n\\tbillingAddress := map[string]interface{} {\\n\\t\\t\\\"street\\\": \\\"Av JK\\\",\\n\\t\\t\\\"number\\\": 909,\\n\\t\\t\\\"neighborhood\\\": \\\"Bauxita\\\",\\n\\t\\t\\\"zipcode\\\": \\\"35400000\\\",\\n\\t\\t\\\"city\\\": \\\"Ouro Preto\\\",\\n\\t\\t\\\"state\\\": \\\"MG\\\",\\n\\t}\\n\\n\\tbody := map[string]interface{} {\\n\\t\\t\\\"payment\\\": map[string]interface{} {\\n\\t\\t\\t\\\"credit_card\\\": map[string]interface{} {\\n\\t\\t\\t\\t\\\"installments\\\": 1,\\n\\t\\t\\t\\t\\\"billing_address\\\": billingAddress,\\n\\t\\t\\t\\t\\\"payment_token\\\": paymentToken,\\n\\t\\t\\t\\t\\\"customer\\\": customer,\\n\\t\\t\\t},\\n\\t\\t},\\n\\t}\\n\\n\\tres, err := gn.PayCharge(1, body) // no lugar do 1 coloque o charge_id certo\\n\\n\\tif err != nil {\\n\\t\\tfmt.Println(err)\\n\\t} else {\\n\\t\\tfmt.Println(res)\\n\\t}\\n}\",\n      \"language\": \"go\"\n    }\n  ]\n}\n[/block]\n<br>\n\n## a) Estrutura hierárquica dos atributos do Schema que podem ser utilizados:\n\n<pre>\"id\": \"/Pay\",\n    \"payment\"\n        \"credit_card\"\n            \"customer\"\n                \"name\"\n                \"cpf\"\n                \"email\"\n                \"phone_number\"\n                \"birth\"\n                \"address\"\n                    \"street\"\n                    \"number\"\n                    \"neighborhood\"\n                    \"zipcode\"\n                    \"city\"\n                    \"complement\"\n                    \"state\"\n                \"juridical_person\"\n                    \"corporate_name\"\n                    \"cnpj\"\n            \"installments\"\n            \"discount\"\n                \"type\"\n                    \"percentage\",\n                    \"currency\"\n                \"value\"\n            \"billing_address\"\n                \"street\"\n                \"number\"\n                \"neighborhood\"\n                \"zipcode\"\n                \"city\"\n                \"complement\"\n                \"state\"\n            \"payment_token\"\n            \"message\"</pre>\n\nPara verificar mais detalhes, <a href=\"https://dev.gerencianet.com.br/docs/playground-transacoes#charge_id_pay\" target=\"_blank\">acesse aqui</a> e explore em nosso Playground.\n\n<br>\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\": \"<code>id</code>\",\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\": \"<code>payment</code>\",\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\": \"<code>credit_card</code>\",\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\": \"<code>customer</code>\",\n    \"0-2\": \"Sim\",\n    \"1-0\": \"<code>installments</code>\",\n    \"2-0\": \"<code>discount</code>\",\n    \"3-0\": \"<code>billing_address</code>\",\n    \"4-0\": \"<code>payment_token</code>\",\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\": \"<code>message</code>\",\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\\\">Até 4 linhas contendo 100 caracteres em cada linha. String.\\n\\nO operador <code>\\\\n</code> é utilizado para efetuar a quebra de linha.</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[block:callout]\n{\n  \"type\": \"info\",\n  \"title\": \"Pagamento realizado como Pessoa Jurídica (PJ)\",\n  \"body\": \"O cliente associado à transação pode ser uma Pessoa Jurídica. Nesse caso, devem ser informados a Razão Social e o CNPJ da empresa pagadora dentro do atributo <code>juridical_person</code>.\\n\\n<a href=\\\"https://dev.gerencianet.com.br/docs/pagar-com-pessoa-juridica\\\" target=\\\"_blank\\\" title=\\\"Link Interno\\\">Veja detalhes neste link</a> sobre como gerar um pagamento cuja forma de pagamento seja \\\"cartão de crédito\\\" para um cliente que seja Pessoa Jurídica (PJ).\"\n}\n[/block]\n\n[block:callout]\n{\n  \"type\": \"info\",\n  \"title\": \"Relação de todos os possíveis status de uma transação\",\n  \"body\": \"Todas as transações possuem status, que representa a \\\"situação\\\" dessa transação. Portanto, é importante conhecer os possíveis status na API para fornecer as devidas tratativas em seu sistema.\\n\\nConfira <a href=\\\"https://dev.gerencianet.com.br/docs/transacoes\\\" target=\\\"_blank\\\" title=\\\"Link Interno\\\">neste link</a> todos os detalhes dos possíveis status das transações.\"\n}\n[/block]\n\n[block:callout]\n{\n  \"type\": \"warning\",\n  \"body\": \"As notificações permitem que você seja informado quando uma transação tiver seu status alterado. Dessa forma, você poderá identificar quando uma cobrança for paga, por exemplo.\\n\\nConfira <a href=\\\"https://dev.gerencianet.com.br/docs/notificacoes-recebendo\\\" target=\\\"_blank\\\" title=\\\"Link Interno\\\">neste link</a> todos os detalhes sobre como implementar a sua URL de notificação.\",\n  \"title\": \"Callbacks (notificações) das transações da API para seu sistema\"\n}\n[/block]\n<br>\n<hr>\n\n# 3. Outros endpoints\n\nExistem outros endpoints e métodos relacionados a pagamento via cartão de crédito que estão disponíveis na API e podem ser explorados pelo integrador. Confira a relação completa:\n\n- [Cancelar determinada transação](https://dev.gerencianet.com.br/docs/pagar-cartao-outros-endpoints#section-1-cancelar-determinada-transa-o)\n\n- [Alterar URL de notificação (notification_url) e/ou custom_id de transação](https://dev.gerencianet.com.br/docs/pagar-cartao-outros-endpoints#section-2-alterar-url-de-notifica-o-notification_url-e-ou-custom_id-de-transa-o)\n\n- [Acrescentar informações ao histórico da transação](https://dev.gerencianet.com.br/docs/pagar-cartao-outros-endpoints#section-3-acrescentar-informa-es-ao-hist-rico-da-transa-o)\n\n- [Retornar informações sobre transação](https://dev.gerencianet.com.br/docs/pagar-cartao-outros-endpoints#section-4-retornar-informa-es-sobre-transa-o)\n\n- [Listar parcelas, de acordo com a bandeira do cartão de crédito](https://dev.gerencianet.com.br/docs/pagar-cartao-outros-endpoints#section-5-listar-parcelas-de-acordo-com-a-bandeira-do-cart-o-de-cr-dito)\n\n<br>\n\n<hr>\n\n# 4. 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## 4.1. 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<br>\n\n## 4.2. 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<br>\n\n## 4.3. 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]\n<br>\n[block:callout]\n{\n  \"type\": \"info\",\n  \"title\": \"DICA\",\n  \"body\": \"Para acesso as demais aulas, de outros assuntos, acesse a página <a href=\\\"https://dev.gerencianet.com.br/docs/curso-online-gerencianet\\\" title=\\\"Link Interno\\\">Curso Online de Integrações</a>.\"\n}\n[/block]\n<br>\n\n<hr>\n\n# 5. Próximos Passos\n\nExistem outras soluções da API que permitem a utilização de pagamento por cartão de crédito, quer conhecê-las?\n\n- <a href=\"https://dev.gerencianet.com.br/docs/criando-assinaturas\" title=\"Link Interno\">Assinaturas (cobrança recorrente)</a>\n- <a href=\"https://dev.gerencianet.com.br/docs/marketplace-recebimentos\" title=\"Link Interno\">Marketplace (split)</a>\n- <a href=\"https://dev.gerencianet.com.br/docs/link-pagamento-criando\" title=\"Link Interno\">Link de Pagamento</a>\n- <a href=\"https://gerencianet.com.br/artigo/sistemas-integrados/\" title=\"Link Interno\">Módulos e Plugins Gerencianet</a>","excerpt":"Você está em: *\"Pagar com Cartão > Pagamento com cartão\"*","slug":"pagamento-com-cartao","type":"basic","title":"Pagamento com cartão"}

Pagamento com cartão

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

Atualmente disponibilizamos dois procedimentos para a criação de uma transação do tipo cartão de crédito, na primeira delas o titulo é criado em um passo único, assim fora convencionado como *One Step*. A segunda opção de criação da transação se da em dois passos, sendo assim convencionada como *Two Steps*. Ambos os fluxos estão detalhados a seguir: 1. [Criando a transação em *One Step* (Um passo)](https://dev.gerencianet.com.br/docs/pagamento-com-cartao#section-1-cria-o-de-transa-o-por-cart-o-de-cr-dito-em-one-step-um-passo-). 2. [Criando a transação em *Two Steps* (Dois passos)](https://dev.gerencianet.com.br/docs/pagamento-com-cartao#section-2-cria-o-de-transa-o-por-cart-o-de-cr-dito-em-two-steps-dois-passos-). # 1. Criação de transação por cartão de crédito em *One Step* (Um passo) [block:callout] { "type": "warning", "body": "Para que a criação de transações via *One Step* ocorra normalmente é necessário atualizar sua SDK. Todos os arquivos necessários para tal estão disponíveis através de nosso [repositório](https://github.com/gerencianet) e em nossa [documentação](https://dev.gerencianet.com.br/docs/instalacao-da-api).", "title": "Importante" } [/block] No caso de transações com cartão de crédito, será realizada uma etapa anterior a criação onde ocorre a transmissão (**via JavaScript**, no browser), de forma segura, dos 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", "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 1.1** deste documento (obter o <code>payment_token</code>), e **só depois** passar para o item 1.2 (que é de fato o pagamento com cartão)." } [/block] ## 1.1. Obtenção do payment_token [block:html] { "html": "<p>Inicialmente, vamos realizar a primeira etapa, que é a obtenção do <code>payment_token</code>. Para tal, você necessitará de um código JavaScript específico de sua conta Gerencianet. Para gerá-lo, siga os passos:</p>\n \n<ul>\n <li><a href=\"https://usuario.gerencianet.com.br/login\" target=\"_blank\">Efetue login</a> em sua conta Gerencianet e acesse <code>Minha Conta</code> (canto superior direito)</li>\n <li>Copie seu <code>Identificador de Conta</code> (<a href=\"https://s3-sa-east-1.amazonaws.com/pe85007/portal/wp-content/uploads/2017/10/payee_code_p.png\" target=\"_blank\">veja onde</a>)</li>\n <li>Cole no campo abaixo e clique no botão <code>Gerar</code></li>\n</ul> \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": "warning", "body": "Lembre-se que, após informar seu identificador de conta, serão gerados 2 (dois) códigos JavaScript distintos.\n\nCopie 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": "text", "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": "<code>callback</code>", "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>", "0-2": "Function" }, "cols": 3, "rows": 1 } [/block] <br /> *getPaymentToken ( card_data, callback )* [block:parameters] { "data": { "h-0": "Parâmetro", "h-1": "Descrição", "h-2": "", "0-0": "<code>card_data</code>", "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-0": "<code>callback</code>", "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>", "1-2": "Function" }, "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": "<code>total</code>", "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>", "0-2": "Integer", "1-0": "<code>brand</code>", "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>diners</code> // Bandeira Dinners</div>\n\n<div class=\"tab2\"><code>amex</code> // Bandeira AmericanExpress</div>\n\n<div class=\"tab2\"><code>elo</code> // Bandeira Elo</div>\n\n<div class=\"tab2\"><code>hipercard</code> // Bandeira Hipercard</div>", "1-2": "String", "2-0": "<code>callback</code>", "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>", "2-2": "Function" }, "cols": 3, "rows": 3 } [/block] <br> ## 1.2. Pagando com cartão Agora que 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. Assim que o pagamento for confirmado, a transação terá o status alterado de <code>waiting</code> para <code>paid</code>. Mas, se por alguma razão não for possível confirmar o pagamento, o status será alterado para <code>unpaid</code>. O exemplo abaixo mostra como isto pode ser feito, utilizando as SDK's disponíveis: [block:code] { "codes": [ { "code": "<?php\n\nrequire __DIR__.'/../../autoload.php'; //Caminho da SDK\n\nuse Gerencianet\\Exception\\GerencianetException;\nuse Gerencianet\\Gerencianet;\n\n$clientId = 'informe_seu_client_id'; // insira seu Client_Id, conforme o ambiente (Des ou Prod)\n$clientSecret = 'informe_seu_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$paymentToken = 'InsiraAquiUmPayeementeCode'; // payment_token obtido na 1ª etapa (através do Javascript único por conta Gerencianet)\n\n$item_1 = [\n 'name' => 'Item 1', // nome do item, produto ou serviço\n 'amount' => 1, // quantidade\n 'value' => 3000 // valor (1000 = R$ 10,00) (Obs: É possível a criação de itens com valores negativos. Porém, o valor total da fatura deve ser superior ao valor mínimo para geração de transações.)\n];\n$items = [\n $item_1\n];\n$metadata = array('notification_url'=>'https://SuaUrl/16rpx6y1');\n$customer = [\n 'name' => 'Gorbadoc Oldbuck', // nome do cliente\n 'cpf' => '04267484171', // cpf do cliente\n 'phone_number' => '5144916523', // telefone do cliente\n 'email' => 'oldbuck@gerencianet.com.br', // endereço de email do cliente\n 'birth' => '1977-01-15' // data de nascimento do cliente\n];\n$billingAddress = [\n 'street' => 'Av JK',\n 'number' => 909,\n 'neighborhood' => 'Bauxita',\n 'zipcode' => '35400000',\n 'city' => 'Ouro Preto',\n 'state' => 'MG'\n];\n$discount = [\n 'type' => 'currency',\n 'value' => 599\n];\n$configurations = [\n 'fine' => 200,\n 'interest' => 33\n];\n$credit_card = [\n 'customer' => $customer,\n 'installments' => 1, // número de parcelas em que o pagamento deve ser dividido\n 'discount' =>$discount,\n 'billing_address' => $billingAddress,\n 'payment_token' => $paymentToken,\n 'message' => 'teste\\nteste\\nteste\\nteste'\n];\n$payment = [\n 'credit_card' => $credit_card // forma de pagamento (credit_card = cartão)\n];\n$body = [\n 'items' => $items,\n 'metadata' =>$metadata,\n 'payment' => $payment\n];\ntry {\n $api = new Gerencianet($options);\n $pay_charge = $api->oneStep([],$body);\n echo '<pre>';\n print_r($pay_charge);\n echo '<pre>';\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": "using System;\n\nnamespace Gerencianet.SDK.Examples\n{\n class OneStep\n {\n public static void Execute()\n {\n dynamic endpoints = new Endpoints(Credentials.Default.ClientId, Credentials.Default.ClientSecret, Credentials.Default.Sandbox);\n\n var body = new\n {\n items = new[] {\n new {\n name = \"Product 1\",\n value = 590,\n amount = 2\n }\n },\n shippings = new[] {\n new {\n name = \"Default Shipping Cost\",\n value = 10\n }\n },\n payment = new\n {\n credit_card = new\n {\n installments = 1,\n payment_token = \"7d0a3fe0f0c9caab4f3b6578317a9d7e8ed6303f\",\n billing_address = new\n {\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 {\n name = \"Gorbadoc Oldbuck\",\n email = \"oldbuck@gerencianet.com.br\",\n cpf = \"04267484171\",\n birth = \"1977-01-15\",\n phone_number = \"5144916523\"\n }\n }\n }\n };\n\n try\n {\n var response = endpoints.OneStep(null, body);\n Console.WriteLine(response);\n }\n catch (GnException e)\n {\n Console.WriteLine(e.ErrorType);\n Console.WriteLine(e.Message);\n }\n }\n }\n}", "language": "csharp", "name": ".net" }, { "code": "'use strict';\n​\nvar Gerencianet = require('gn-api-sdk-node');\nvar credentials = require('./credentials');\n​\nvar options = {\n client_id: credentials.client_id,\n client_secret: credentials.client_secret,\n sandbox: true\n}\n​\nvar body = {\n​\n payment: {\n credit_card: {\n installments: 1,\n payment_token: '83d52dbd590d9ebc991938c711ddd31f65df89a5',\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 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 .oneStep([], body)\n .then(console.log)\n .catch(console.log)\n .done();", "language": "javascript", "name": "NodeJs" }, { "code": "package main\n​\nimport (\n\t\"fmt\"\n\t\"github.com/dmalberto/gn-api-sdk-go/gerencianet\"\n\t\"../configs\"\n)\n​\nfunc main(){\n\t\n\tcredentials := configs.Credentials\n\tgn := gerencianet.NewGerencianet(credentials)\n​\n\tpaymentToken := \"428d7f3b2dc49117552ace464078557832c4ae4f\";\n​\n\tcustomer := map[string]interface{}{\n\t\t\"name\": \"Gorbadoc Oldbuck\",\n\t\t\"cpf\": \"04267484171\",\n\t\t\"phone_number\": \"51944916523\",\n\t\t\"email\": \"gorb.oldbuck@gerencianet.com.br\",\n\t\t\"birth\": \"1977-01-15\",\n\t}\n​\n\tbillingAddress := map[string]interface{} {\n\t\t\"street\": \"Av JK\",\n\t\t\"number\": 909,\n\t\t\"neighborhood\": \"Bauxita\",\n\t\t\"zipcode\": \"35400000\",\n\t\t\"city\": \"Ouro Preto\",\n\t\t\"state\": \"MG\",\n\t }\n​\n\tbody := map[string]interface{} {\n\t\t\"payment\": map[string]interface{} {\n\t\t\t\"credit_card\": map[string]interface{} {\n\t\t\t \"installments\": 1,\n\t\t\t \"billing_address\": billingAddress,\n\t\t\t \"payment_token\": paymentToken,\n\t\t\t \"customer\": customer,\n\t\t\t},\n\t\t},\n\t\t\"items\": []map[string]interface{}{\n\t\t\t{\n\t\t\t\t\"name\": \"Product 1\",\n\t\t\t\t\"value\": 1000,\n\t\t\t\t\"amount\": 2,\n\t\t\t},\n\t\t},\n\t\t\"shippings\": []map[string]interface{} {\n\t\t\t{\n\t\t\t\t\"name\": \"Default Shipping Cost\",\n\t\t\t\t\"value\": 100,\n\t\t\t},\n\t\t},\n\t}\n​\n\tres, err := gn.CreateChargeOneStep(body) // no lugar do 1 coloque o charge_id certo\n​\n\tif err != nil {\n\t\tfmt.Println(err)\n\t} else {\n\t\tfmt.Println(res)\n\t}\n}", "language": "go" }, { "code": "require \"gerencianet\"\nrequire_relative \"./credentials\"\n​\noptions = {\n client_id: CREDENTIALS::CLIENT_ID,\n client_secret: CREDENTIALS::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 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)\nputs gerencianet.create_charge_onestep(body: body)", "language": "ruby" }, { "code": "package br.com.gerencianet.charge.json;\n\nimport java.util.HashMap;\n\nimport org.json.JSONArray;\nimport org.json.JSONObject;\n\nimport br.com.gerencianet.Credentials;\nimport br.com.gerencianet.gnsdk.Gerencianet;\nimport br.com.gerencianet.gnsdk.exceptions.GerencianetException;\n\npublic class OneStepCard {\n\tpublic static void main(String[] args) {\n /* ********* Set credentials parameters ******** */\n Credentials credentials = new Credentials();\n JSONObject options = new JSONObject();\n options.put(\"client_id\", credentials.getClientId());\n options.put(\"client_secret\", credentials.getClientSecret());\n //options.put(\"partner_token\", credentials.getPartnerToken());\n options.put(\"sandbox\", credentials.isSandbox());\n /* ************************************************* */ \n \n String paymentToken = \"32add25a335ff3f588e42055486b3156253b7b75\";\n \n // items\n JSONArray items = new JSONArray();\n JSONObject item1 = new JSONObject();\n item1.put(\"name\", \"Item 1\");\n item1.put(\"amount\", 1);\n item1.put(\"value\", 600);\n JSONObject item2 = new JSONObject(\"{\\\"name\\\":\\\"Item 2\\\", \\\"amount\\\":1, \\\"value\\\":1000}\");\n items.put(item1);\n items.put(item2);\n \n //customer\n JSONObject customer = new JSONObject();\n customer.put(\"name\", \"Gorbadoc Oldbuck\");\n customer.put(\"cpf\", \"94271564656\");\n customer.put(\"phone_number\", \"5144916523\");\n customer.put(\"email\", \"gorbadoc.oldbuck@gerencianet.com.br\");\n customer.put(\"birth\", \"1990-05-04\");\n \n // endereço do comprador\n JSONObject billingAddress = new JSONObject();\n\t\tbillingAddress.put(\"street\", \"Av. JK\");\n\t\tbillingAddress.put(\"number\", 909);\n\t\tbillingAddress.put(\"neighborhood\", \"Bauxita\");\n\t\tbillingAddress.put(\"zipcode\", \"35400000\");\n\t\tbillingAddress.put(\"city\", \"Ouro Preto\");\n\t\tbillingAddress.put(\"state\", \"MG\");\n \n //URL de notificações\n JSONObject metadata = new JSONObject();\n metadata.put(\"notification_url\", \"https://SuaUrl/16rpx6y1\");\n metadata.put(\"custom_id\", \"Id_0007\");\n \n //desconto \n JSONObject discount = new JSONObject();\n discount.put(\"type\",\"currency\");\n discount.put(\"value\",599);\n \n \n JSONObject creditCard = new JSONObject();\n\t\tcreditCard.put(\"installments\", 1);\n\t\tcreditCard.put(\"billing_address\", billingAddress);\n\t\tcreditCard.put(\"payment_token\", paymentToken);\n\t\tcreditCard.put(\"customer\", customer);\n\t\tcreditCard.put(\"discount\", discount);\n\n\t\tJSONObject payment = new JSONObject();\n\t\tpayment.put(\"credit_card\", creditCard);\n\n\t\tJSONObject body = new JSONObject();\n\t\tbody.put(\"payment\", payment);\n\t\tbody.put(\"items\", items);\n body.put(\"metadata\", metadata);\n \n try {\n Gerencianet gn = new Gerencianet(options);\n JSONObject response = gn.call(\"oneStep\", new HashMap<String,String>(), body);\n System.out.println(response);\n }catch (GerencianetException e){\n System.out.println(e.getCode());\n System.out.println(e.getError());\n System.out.println(e.getErrorDescription());\n }\n catch (Exception e) {\n System.out.println(e.getMessage());\n }\n }\n}", "language": "java" }, { "code": "# encoding: utf-8\n​\nfrom gerencianet import Gerencianet\nfrom credentials import CREDENTIALS\n​\ngn = Gerencianet(CREDENTIALS)\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 'payment': {\n 'credit_card': {\n 'installments': 1,\n 'payment_token': \"5cffb658d047093b3fbdf7eff8c434c3d26a4bd1\",\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​\nresponse = gn.create_charge_onestep(params=None, body=body)\nprint(response)", "language": "python" }, { "code": "interface\n\nfunction PayOneStepWithCard: String;\n\nimplementation\nuses uGerenciaClient, uGerenciaNetClientUtilities;\n{... your code ... }\n\nvar\n Body: String;\nbegin\n Body :=\n '{'+\n '\"items\": ['+\n '{'+\n '\"name\": \"Product 1\",'+\n '\"value\": 590,'+\n '\"amount\": 2'+\n '}'+\n '],'+\n '\"shippings\": ['+\n '{'+\n '\"name\": \"Default Shipping Cost\",'+\n '\"value\": 10'+\n '}'+\n '],'+\n '\"payment\": {'+\n '\"credit_card\": {'+\n '\"installments\": 1,'+\n '\"payment_token\": \"InsiraAquiOPayment_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 '\"customer\": {'+\n '\"name\": \"Gorbadoc Oldbuck\",'+\n '\"email\": \"oldbuck@gerencianet.com.br\",'+\n '\"cpf\": \"04267484171\",'+\n '\"birth\": \"1977-01-15\",'+\n '\"phone_number\": \"5144916523\"'+\n '}'+\n '}'+\n '}'+\n '}';\n Result := ExecuteGerenciaNetRequest( 'payOneStep','','',Body );\nend;", "language": "javascript", "name": "Delphi" } ] } [/block] <br> ## a) Estrutura hierárquica dos atributos do Schema que podem ser utilizados: "items" "name" "value" "amount" "marketplace" "payee_code" "percentage" "shippings" "name" "value" "payee_code" "metadata" "custom_id" "notification_url" "payment" "credit_card" "customer" "name" "cpf" "email" "phone_number" "birth" "address" "street" "number" "neighborhood" "zipcode" "city" "complement" "state" "juridical_person" "corporate_name" "cnpj" "installments" "discount" "type" "percentage", "currency" "value" "billing_address" "street" "number" "neighborhood" "zipcode" "city" "complement" "state" "payment_token" "message" <br> ## b) Atributos que podem ser utilizados para criar uma transação: [block:parameters] { "data": { "h-0": "Atributo", "h-1": "Descrição", "h-2": "Obrigatório", "h-3": "Tipo", "0-0": "<code>items</code>", "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> (código identificador da conta Gerencianet, único por conta - veja <a href=\"https://s3-sa-east-1.amazonaws.com/pe85007/portal/wp-content/uploads/2017/10/payee_code_p.png\" target=\"_blank\">onde localizá-lo</a>). String.\n<code>*percentage*</code> (porcentagem de repasse, sendo que 9000 equivale a 90% - Integer).</span></div>", "0-2": "Sim", "0-3": "Array", "1-0": "<code>shippings</code>", "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> // código identificador da conta Gerencianet, único por conta - confira onde localizá-lo, de acordo com o layout de sua plataforma - <a href=\"https://gerencianet.com.br/wp-content/uploads/2017/10/payee_code_n.png\" target=\"_blank\">opção 1</a> ou <a href=\"https://gerencianet.com.br/wp-content/uploads/2017/10/payee_code_p.png\" target=\"_blank\">opção 2</a>. <strong class=\"descricao-atributo\"><span class=\"atributo\">Padrão: Identificador da sua própria conta. String.</span></strong></div>", "1-2": "Não", "1-3": "Array", "2-0": "<code>metadata</code>", "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>", "2-2": "Não", "2-3": "Object" }, "cols": 4, "rows": 3 } [/block] <br /> *Objeto **Payment*** [block:parameters] { "data": { "h-0": "Atributo", "h-1": "Descrição", "h-2": "Obrigatório", "h-3": "Tipo", "0-3": "Objeto **Credit_Card**", "0-2": "Sim", "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-0": "<code>credit_card</code>" }, "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-3": "Object", "0-2": "Sim", "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>", "0-0": "<code>customer</code>", "1-0": "<code>installments</code>", "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>", "1-2": "Não", "1-3": "Integer", "2-0": "<code>discount</code>", "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>", "2-2": "Não", "2-3": "Object", "3-0": "<code>billing_address</code>", "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>", "3-2": "Sim", "3-3": "Object", "4-0": "<code>payment_token</code>", "4-1": "Token único de pagamento obtido na primeira etapa da geração da transação.", "4-2": "Sim", "4-3": "String", "5-0": "<code>message</code>", "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\">Até 4 linhas contendo 100 caracteres em cada linha. String.\n\nO operador <code>\\n</code> é utilizado para efetuar a quebra de linha.</span></strong>", "5-2": "Não", "5-3": "String" }, "cols": 4, "rows": 6 } [/block] <strong class="atributo-obrigatorio-texto">* valor obrigatório</strong> <br> # 2. Criação de transação por cartão de crédito em *Two Steps* (Dois passos) Nesta opção é necessário que o *body* da requisição contenha todos os atributos mínimos obrigatórios para a emissão do titulo. Abaixo temos os exemplos de implementação utilizando as SDK's disponíveis: 2.1. [Crie a transação](https://dev.gerencianet.com.br/docs/pagamento-com-cart%C3%A3o#section-2-1-criar-transa-o), informando o item/produto/serviço, valor, quantidade, etc; 2.2. [Associe à forma de pagamento via cartão](https://dev.gerencianet.com.br/docs/pagamento-com-cart%C3%A3o#section-2-2-associe-forma-de-pagamento-via-cart-o), informando o <code>charge_id</code> da transação criada e os dados do cliente; 2.3. [Obtenção do payment_token](https://dev.gerencianet.com.br/v1/docs/pagamento-com-cart%C3%A3o#section-2-3-obten-o-do-payment_token) (via JavaScript, único por transação); 2.4. [Pagando com cartão](https://dev.gerencianet.com.br/v1/docs/pagamento-com-cart%C3%A3o#section-2-4-pagando-com-cart-o). 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 3.1 e 3.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 de que a SDK da Gerencianet foi instalada](https://dev.gerencianet.com.br/docs/instalacao-da-api). <hr> ## 2.1. Criar transação Primeiramente, precisamos gerar a transação (também chamada de "cobrança"). É neste momento que será informado o nome do item/produto/serviço, valor da transação, quantidade, dentre outras informações possíveis. Após criá-la, será retornado o <code>charge_id</code>, que é o identificador único da transação e que será utilizado para associar à forma de pagamento. Assim que essa transação é criada, ela recebe o status <code>new</code>, que significa que a cobrança foi gerada e está aguardando definição da forma de pagamento. Essa cobrança somente terá seu status alterado quando o integrador definir sua forma de pagamento. Para gerar uma transação, você deve enviar uma requisição <code>POST</code> para a rota <code>/v1/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>. O exemplo abaixo mostra como isto pode ser feito, utilizando as SDK's disponíveis: [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 = 'informe_seu_client_id'; // insira seu Client_Id, conforme o ambiente (Des ou Prod)\n$clientSecret = 'informe_seu_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) (Obs: É possível a criação de itens com valores negativos. Porém, o valor total da fatura deve ser superior ao valor mínimo para geração de transações.)\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\"\nrequire_relative \"./credentials\"\n\noptions = {\n client_id: CREDENTIALS::CLIENT_ID,\n client_secret: CREDENTIALS::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)\nputs gerencianet.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" }, { "code": "// No código de exemplo de uso da SDK de Go, definimos as credenciais de acesso à API (Client_Id e Client_Secret) e o ambiente a ser usado (sandbox como 'true' ou 'false') dentro de um arquivo específico (configs.go), que está localizado no diretório \"_examples/configs\". Essas credenciais são exportadas através da variável 'Credentials'.\n\npackage main\n\nimport (\n\t\"fmt\"\n\t\"github.com/gerencianet/gn-api-sdk-go/gerencianet\"\n\t\"github.com/gerencianet/gn-api-sdk-go/_examples/configs\"\n)\n\nfunc main(){\n\t\n\tcredentials := configs.Credentials\n\tgn := gerencianet.NewGerencianet(credentials)\n\n\tbody := map[string]interface{} {\n\t\t\"items\": []map[string]interface{}{\n\t\t\t{\n\t\t\t\t\"name\": \"Product 1\",\n\t\t\t\t\"value\": 1000,\n\t\t\t\t\"amount\": 2,\n\t\t\t},\n\t\t},\n\t\t\"shippings\": []map[string]interface{} {\n\t\t\t{\n\t\t\t\t\"name\": \"Default Shipping Cost\",\n\t\t\t\t\"value\": 100,\n\t\t\t},\n\t\t},\n\t}\n\n\tres, err := gn.CreateCharge(body)\n\n\tif err != nil {\n\t\tfmt.Println(err)\n\t} else {\n\t\tfmt.Println(res)\n\t}\n}", "language": "go" } ] } [/block] <br> ## a) Estrutura hierárquica dos atributos do Schema que podem ser utilizados: <pre>"id": "/Charge" "items" "name" "value" "amount" "marketplace" "payee_code" "percentage" "shippings" "name" "value" "payee_code" "metadata" "custom_id" "notification_url"</pre> Para verificar mais detalhes, <a href="https://dev.gerencianet.com.br/docs/playground-transacoes#charge" target="_blank">acesse aqui</a> e explore em nosso Playground. <br> ## b) Atributos que podem ser utilizados para criar uma transação: [block:parameters] { "data": { "h-0": "Atributo", "h-1": "Descrição", "h-2": "Obrigatório", "h-3": "Tipo", "0-0": "<code>items</code>", "1-0": "<code>shippings</code>", "2-0": "<code>metadata</code>", "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> (código identificador da conta Gerencianet, único por conta - veja <a href=\"https://s3-sa-east-1.amazonaws.com/pe85007/portal/wp-content/uploads/2017/10/payee_code_p.png\" target=\"_blank\">onde localizá-lo</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> // código identificador da conta Gerencianet, único por conta - confira onde localizá-lo, de acordo com o layout de sua plataforma - <a href=\"https://gerencianet.com.br/wp-content/uploads/2017/10/payee_code_n.png\" target=\"_blank\">opção 1</a> ou <a href=\"https://gerencianet.com.br/wp-content/uploads/2017/10/payee_code_p.png\" target=\"_blank\">opção 2</a>. <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> <br> <hr> ## 2.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 - SOBRE O PAYMENT_TOKEN", "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>/v1/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.3. Obtenção do payment_token [block:html] { "html": "<p>Com a transação criada, vamos associá-la à forma de pagamento desejada, que neste caso, será cartão de crédito.</p>\n\n<p>Inicialmente, vamos realizar a primeira etapa, que é a obtenção do <code>payment_token</code>. Para tal, você necessitará de um código JavaScript específico de sua conta Gerencianet. Para gerá-lo, siga os passos:</p>\n \n<ul>\n <li><a href=\"https://usuario.gerencianet.com.br/login\" target=\"_blank\">Efetue login</a> em sua conta Gerencianet e acesse <code>Minha Conta</code> (canto superior direito)</li>\n <li>Copie seu <code>Identificador de Conta</code> (<a href=\"https://s3-sa-east-1.amazonaws.com/pe85007/portal/wp-content/uploads/2017/10/payee_code_p.png\" target=\"_blank\">veja onde</a>)</li>\n <li>Cole no campo abaixo e clique no botão <code>Gerar</code></li>\n</ul> \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": "warning", "title": "IMPORTANTE", "body": "Lembre-se que, após informar seu identificador de conta, serão gerados 2 (dois) códigos JavaScript distintos.\n\nCopie 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": "<code>callback</code>", "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": "<code>card_data</code>", "1-0": "<code>callback</code>", "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": "<code>total</code>", "1-0": "<code>brand</code>", "2-0": "<code>callback</code>", "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>diners</code> // Bandeira Dinners</div>\n\n<div class=\"tab2\"><code>amex</code> // Bandeira AmericanExpress</div>\n\n<div class=\"tab2\"><code>elo</code> // Bandeira Elo</div>\n\n<div class=\"tab2\"><code>hipercard</code> // Bandeira Hipercard</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.4. 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. Assim que o pagamento for confirmado, a transação terá o status alterado de <code>waiting</code> para <code>paid</code>. Mas, se por alguma razão não for possível confirmar o pagamento, o status será alterado para <code>unpaid</code>. O exemplo abaixo mostra como isto pode ser feito, utilizando as SDK's disponíveis: [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 = 'informe_seu_client_id'; // insira seu Client_Id, conforme o ambiente (Des ou Prod)\n$clientSecret = 'informe_seu_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" }, { "code": "// No código de exemplo de uso da SDK de Go, definimos as credenciais de acesso à API (Client_Id e Client_Secret) e o ambiente a ser usado (sandbox como 'true' ou 'false') dentro de um arquivo específico (configs.go), que está localizado no diretório \"_examples/configs\". Essas credenciais são exportadas através da variável 'Credentials'.\n\npackage main\n\nimport (\n\t\"fmt\"\n\t\"github.com/gerencianet/gn-api-sdk-go/gerencianet\"\n\t\"github.com/gerencianet/gn-api-sdk-go/_examples/configs\"\n)\n\nfunc main(){\n\t\n\tcredentials := configs.Credentials\n\tgn := gerencianet.NewGerencianet(credentials)\n\n\tpaymentToken := \"payment_token\";\n\n\tcustomer := map[string]interface{}{\n\t\t\"name\": \"Gorbadoc Oldbuck\",\n\t\t\"cpf\": \"04267484171\",\n\t\t\"phone_number\": \"5144916523\",\n\t\t\"email\": \"oldbuck@gerencianet.com.br\",\n\t\t\"birth\": \"1977-01-15\",\n\t}\n\n\tbillingAddress := map[string]interface{} {\n\t\t\"street\": \"Av JK\",\n\t\t\"number\": 909,\n\t\t\"neighborhood\": \"Bauxita\",\n\t\t\"zipcode\": \"35400000\",\n\t\t\"city\": \"Ouro Preto\",\n\t\t\"state\": \"MG\",\n\t}\n\n\tbody := map[string]interface{} {\n\t\t\"payment\": map[string]interface{} {\n\t\t\t\"credit_card\": map[string]interface{} {\n\t\t\t\t\"installments\": 1,\n\t\t\t\t\"billing_address\": billingAddress,\n\t\t\t\t\"payment_token\": paymentToken,\n\t\t\t\t\"customer\": customer,\n\t\t\t},\n\t\t},\n\t}\n\n\tres, err := gn.PayCharge(1, body) // no lugar do 1 coloque o charge_id certo\n\n\tif err != nil {\n\t\tfmt.Println(err)\n\t} else {\n\t\tfmt.Println(res)\n\t}\n}", "language": "go" } ] } [/block] <br> ## a) Estrutura hierárquica dos atributos do Schema que podem ser utilizados: <pre>"id": "/Pay", "payment" "credit_card" "customer" "name" "cpf" "email" "phone_number" "birth" "address" "street" "number" "neighborhood" "zipcode" "city" "complement" "state" "juridical_person" "corporate_name" "cnpj" "installments" "discount" "type" "percentage", "currency" "value" "billing_address" "street" "number" "neighborhood" "zipcode" "city" "complement" "state" "payment_token" "message"</pre> Para verificar mais detalhes, <a href="https://dev.gerencianet.com.br/docs/playground-transacoes#charge_id_pay" target="_blank">acesse aqui</a> e explore em nosso Playground. <br> ## 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": "<code>id</code>", "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": "<code>payment</code>", "0-2": "Sim", "0-3": "Objeto **Payment**", "0-1": "Tag raiz" }, "cols": 4, "rows": 1 } [/block] <br /> *Objeto **Payment*** [block:parameters] { "data": { "0-0": "<code>credit_card</code>", "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": "<code>customer</code>", "0-2": "Sim", "1-0": "<code>installments</code>", "2-0": "<code>discount</code>", "3-0": "<code>billing_address</code>", "4-0": "<code>payment_token</code>", "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": "<code>message</code>", "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\">Até 4 linhas contendo 100 caracteres em cada linha. String.\n\nO operador <code>\\n</code> é utilizado para efetuar a quebra de linha.</span></strong>", "5-2": "Não", "5-3": "String" }, "cols": 4, "rows": 6 } [/block] <strong class="atributo-obrigatorio-texto">* valor obrigatório</strong> <br> [block:callout] { "type": "info", "title": "Pagamento realizado como Pessoa Jurídica (PJ)", "body": "O cliente associado à transação pode ser uma Pessoa Jurídica. Nesse caso, devem ser informados a Razão Social e o CNPJ da empresa pagadora dentro do atributo <code>juridical_person</code>.\n\n<a href=\"https://dev.gerencianet.com.br/docs/pagar-com-pessoa-juridica\" target=\"_blank\" title=\"Link Interno\">Veja detalhes neste link</a> sobre como gerar um pagamento cuja forma de pagamento seja \"cartão de crédito\" para um cliente que seja Pessoa Jurídica (PJ)." } [/block] [block:callout] { "type": "info", "title": "Relação de todos os possíveis status de uma transação", "body": "Todas as transações possuem status, que representa a \"situação\" dessa transação. Portanto, é importante conhecer os possíveis status na API para fornecer as devidas tratativas em seu sistema.\n\nConfira <a href=\"https://dev.gerencianet.com.br/docs/transacoes\" target=\"_blank\" title=\"Link Interno\">neste link</a> todos os detalhes dos possíveis status das transações." } [/block] [block:callout] { "type": "warning", "body": "As notificações permitem que você seja informado quando uma transação tiver seu status alterado. Dessa forma, você poderá identificar quando uma cobrança for paga, por exemplo.\n\nConfira <a href=\"https://dev.gerencianet.com.br/docs/notificacoes-recebendo\" target=\"_blank\" title=\"Link Interno\">neste link</a> todos os detalhes sobre como implementar a sua URL de notificação.", "title": "Callbacks (notificações) das transações da API para seu sistema" } [/block] <br> <hr> # 3. Outros endpoints Existem outros endpoints e métodos relacionados a pagamento via cartão de crédito que estão disponíveis na API e podem ser explorados pelo integrador. Confira a relação completa: - [Cancelar determinada transação](https://dev.gerencianet.com.br/docs/pagar-cartao-outros-endpoints#section-1-cancelar-determinada-transa-o) - [Alterar URL de notificação (notification_url) e/ou custom_id de transação](https://dev.gerencianet.com.br/docs/pagar-cartao-outros-endpoints#section-2-alterar-url-de-notifica-o-notification_url-e-ou-custom_id-de-transa-o) - [Acrescentar informações ao histórico da transação](https://dev.gerencianet.com.br/docs/pagar-cartao-outros-endpoints#section-3-acrescentar-informa-es-ao-hist-rico-da-transa-o) - [Retornar informações sobre transação](https://dev.gerencianet.com.br/docs/pagar-cartao-outros-endpoints#section-4-retornar-informa-es-sobre-transa-o) - [Listar parcelas, de acordo com a bandeira do cartão de crédito](https://dev.gerencianet.com.br/docs/pagar-cartao-outros-endpoints#section-5-listar-parcelas-de-acordo-com-a-bandeira-do-cart-o-de-cr-dito) <br> <hr> # 4. 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". ## 4.1. 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] <br> ## 4.2. 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] <br> ## 4.3. 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] <br> [block:callout] { "type": "info", "title": "DICA", "body": "Para acesso as demais aulas, de outros assuntos, acesse a página <a href=\"https://dev.gerencianet.com.br/docs/curso-online-gerencianet\" title=\"Link Interno\">Curso Online de Integrações</a>." } [/block] <br> <hr> # 5. Próximos Passos Existem outras soluções da API que permitem a utilização de pagamento por cartão de crédito, quer conhecê-las? - <a href="https://dev.gerencianet.com.br/docs/criando-assinaturas" title="Link Interno">Assinaturas (cobrança recorrente)</a> - <a href="https://dev.gerencianet.com.br/docs/marketplace-recebimentos" title="Link Interno">Marketplace (split)</a> - <a href="https://dev.gerencianet.com.br/docs/link-pagamento-criando" title="Link Interno">Link de Pagamento</a> - <a href="https://gerencianet.com.br/artigo/sistemas-integrados/" title="Link Interno">Módulos e Plugins Gerencianet</a>