{"_id":"5841a846a9032b3900386c7a","__v":0,"parentDoc":null,"project":"575aeffae12cf20e002f306c","user":"57601a13af3e090e00108059","version":{"_id":"575aeffae12cf20e002f306f","project":"575aeffae12cf20e002f306c","__v":30,"createdAt":"2016-06-10T16:51:06.080Z","releaseDate":"2016-06-10T16:51:06.080Z","categories":["575aeffae12cf20e002f3070","575af039a083950e004487f7","575af5c7ba4ed70e000ca288","57602fe5b82256240055c657","57602ff6c811102000cef302","576030909b1a9a220067ca40","57604518b82256240055c722","5761a63d207db7170022fc14","5761b9a2b65324200072d79e","576832939f0bf4190014ffdf","576832c09f0bf4190014ffe1","576832cba151c10e004316f0","576832d5bb15f40e00a288ec","576832e107b1f30e0039c645","577680bf3cee3a0e00a000bc","577ff3b1ff48990e000c6806","5783f78c5cbce30e0074e2b7","5783f86292edb92200e6101c","5783f86dbfbba719003f0d8b","5783f8755cbce30e0074e2b8","5783f8b65cbce30e0074e2b9","5783f8bf5cbce30e0074e2ba","5783f8d8ce802f0e0087d574","578529f887c9280e0090394b","57852aeb87c9280e0090394d","57866e72b2f4060e00fa39ca","57ab6d5c39c2fd1900191879","57f39451ab0ee12000bef915","582499a0d90fa027009b259e","58c29df1258e5a1900b60478"],"is_deprecated":false,"is_hidden":false,"is_beta":false,"is_stable":true,"codename":"2016","version_clean":"1.0.0","version":"1"},"category":{"_id":"582499a0d90fa027009b259e","__v":0,"project":"575aeffae12cf20e002f306c","version":"575aeffae12cf20e002f306f","sync":{"url":"","isSync":false},"reference":false,"createdAt":"2016-11-10T16:00:32.392Z","from_sync":false,"order":7,"slug":"link-de-pagamento","title":"Link de Pagamento"},"updates":[],"next":{"pages":[],"description":""},"createdAt":"2016-12-02T16:58:46.659Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"settings":"","results":{"codes":[]},"auth":"required","params":[],"url":""},"isReference":false,"order":1,"body":"Saiba como criar um link para uma tela de pagamento da Gerencianet para seus clientes efetuarem os pagamentos. Para criar, é bem simples e requer apenas dois passos:\n\n1. Primeiramente, [crie a transação](https://dev.gerencianet.com.br/docs/link-pagamento-criando#section-1-crie-a-transa-o);\n\n2. Agora, para [criar o link de pagamento](https://dev.gerencianet.com.br/docs/link-pagamento-criando#section-2-criando-um-link-de-pagamento), informe o número da transação criada anteriormente.\n\nO restante desta página apresenta os procedimentos detalhados, mas você precisa instalar uma de nossas bibliotecas em seu servidor para executar os códigos de exemplo. [Certifique-se que a SDK da Gerencianet foi instalada](https://dev.gerencianet.com.br/docs#section-bibliotecas).\n\n<hr>\n\n# 1. Crie a transação\n\nInicialmente, será gerada uma transação e que estará com o status de <code>new</code> (novo).\n\nApós criar a cobrança, será retornado o <code>charge_id</code>, que é o identificador único da transação e que será utilizado para criar o link de pagamento.\n\nPara gerar uma transação, você deve enviar uma requisição <code>POST</code> para a rota <code>/charge</code>.\n\nCaso queira, pode explorar e conhecer mais sobre este recurso <a href=\"https://dev.gerencianet.com.br/docs/playground-transacoes#charge\" target=\"_blank\">usando nosso Playground</a>.\n\nA seguir um exemplo de utilização:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"<?php\\n \\nrequire __DIR__.'/../../vendor/autoload.php'; // caminho relacionado a SDK\\n \\nuse Gerencianet\\\\Exception\\\\GerencianetException;\\nuse Gerencianet\\\\Gerencianet;\\n \\n$clientId = 'your_client_id'; // insira seu Client_Id, conforme o ambiente (Des ou Prod)\\n$clientSecret = 'your_client_secret'; // insira seu Client_Secret, conforme o ambiente (Des ou Prod)\\n \\n$options = [\\n  'client_id' => $clientId,\\n  'client_secret' => $clientSecret,\\n  'sandbox' => true // altere conforme o ambiente (true = desenvolvimento e false = producao)\\n];\\n \\n$item_1 = [\\n    'name' => 'Item 1', // nome do item, produto ou serviço\\n    'amount' => 1, // quantidade\\n    'value' => 1000 // valor (1000 = R$ 10,00)\\n];\\n \\n$item_2 = [\\n    'name' => 'Item 2', // nome do item, produto ou serviço\\n    'amount' => 2, // quantidade\\n    'value' => 2000 // valor (2000 = R$ 20,00)\\n];\\n \\n$items =  [\\n    $item_1,\\n    $item_2\\n];\\n\\n//Exemplo para receber notificações da alteração do status da transação.\\n//$metadata = ['notification_url'=>'sua_url_de_notificacao_.com.br']\\n//Outros detalhes em: https://dev.gerencianet.com.br/docs/notificacoes\\n\\n//Como enviar seu $body com o $metadata\\n//$body  =  [\\n//    'items' => $items,\\n//\\t\\t'metadata' => $metadata\\n//];\\n\\n$body  =  [\\n    'items' => $items\\n];\\n\\ntry {\\n    $api = new Gerencianet($options);\\n    $charge = $api->createCharge([], $body);\\n \\n    print_r($charge);\\n} catch (GerencianetException $e) {\\n    print_r($e->code);\\n    print_r($e->error);\\n    print_r($e->errorDescription);\\n} catch (Exception $e) {\\n    print_r($e->getMessage());\\n}\",\n      \"language\": \"php\"\n    },\n    {\n      \"code\": \"'use strict';\\n \\nvar Gerencianet = require('gn-api-sdk-node');\\n \\nvar clientId = 'your_client_id';\\nvar clientSecret = 'your_client_secret';\\n \\nvar options = {\\n  client_id: clientId,\\n  client_secret: clientSecret,\\n  sandbox: true\\n}\\n \\nvar body = {\\n  items: [{\\n    name: 'Product 1',\\n    value: 1000,\\n    amount: 2\\n  }],\\n  shippings: [{\\n    name: 'Default Shipping Cost',\\n    value: 100\\n  }]\\n}\\n \\nvar gerencianet = new Gerencianet(options);\\n \\ngerencianet\\n  .createCharge({}, body)\\n  .then(console.log)\\n  .catch(console.log)\\n  .done();\",\n      \"language\": \"javascript\",\n      \"name\": \"NodeJS\"\n    },\n    {\n      \"code\": \"require \\\"gerencianet\\\"\\n \\noptions = {\\n  client_id: \\\"client_id\\\",\\n  client_secret: \\\"client_secret\\\",\\n  sandbox: true\\n}\\n \\nbody = {\\n  items: [{\\n    name: \\\"Product 1\\\",\\n    value: 1000,\\n    amount: 2\\n  }],\\n  shippings: [{\\n    name: \\\"Default Shipping Cost\\\",\\n    value: 100\\n  }]\\n}\\n \\ngerencianet = Gerencianet.new(options)\\ngerencianet.create_charge(body: body)\",\n      \"language\": \"ruby\"\n    },\n    {\n      \"code\": \"from gerencianet import Gerencianet\\n \\noptions = {\\n    'client_id': 'client_id',\\n    'client_secret': 'client_secret',\\n    'sandbox': True\\n}\\n \\ngn = Gerencianet(options)\\n \\nbody = {\\n    'items': [{\\n        'name': \\\"Product 1\\\",\\n        'value': 1000,\\n        'amount': 2\\n    }],\\n    'shippings': [{\\n        'name': \\\"Default Shipping Cost\\\",\\n        'value': 100\\n    }]\\n}\\n \\ngn.create_charge(body=body)\",\n      \"language\": \"python\"\n    },\n    {\n      \"code\": \"dynamic endpoints = new Endpoints(\\\"client_id\\\", \\\"client_secret\\\", true);\\n \\nvar body = new\\n{\\n    items = new[] {\\n        new {\\n            name = \\\"Product 1\\\",\\n            value = 1000,\\n            amount = 2\\n        }\\n    },\\n    shippings = new[] {\\n        new {\\n            name = \\\"Default Shipping Cost\\\",\\n            value = 100\\n        }\\n    }\\n};\\n \\nvar response = endpoints.CreateCharge(null, body);\\nConsole.WriteLine(response);\",\n      \"language\": \"asp\",\n      \"name\": \".NET\"\n    },\n    {\n      \"code\": \"/* Para que a SDK Java funcione corretamente, é necessário que a instanciação do módulo seja feita através da criação de um objeto do tipo Gerencianet.\\n\\nSempre que quisermos chamar uma função da API, basta invocar o método call do objeto Gerencianet, passando como parâmetro o nome do método, os parâmetros da requisição (sempre será um HashMap<String, String>), e o \\\"body\\\", que consiste nas propriedades a serem passadas como argumento na chamada de um função da SDK. O \\\"body\\\" pode ser declarado de duas formas: um JSONObject ou um Map<String, Object>.\\n\\nEsta estrutura é necessária para representar o corpo da requisição http que é enviada à um determinado endpoint. Se o \\\"body\\\" for um JSONObject, o retorno do método call será um JSONObject, se for um Map<String, Object>, o retorno do método call será um Map<String, Object>\\n\\nA seguir, disponibilizamos links de nosso Github mostrando duas formas diferentes de retorno: JSONObject\\ne Map<String, Object>\\n\\n\\nJSONObject\\n\\nhttps://github.com/gerencianet/gn-api-sdk-java-examples/blob/master/src/main/java/br/com/gerencianet/charge/json/CreateCharge.java\\n\\n\\nMap<String, Object>\\n\\nhttps://github.com/gerencianet/gn-api-sdk-java-examples/blob/master/src/main/java/br/com/gerencianet/charge/map/CreateCharge.java\\n\\n*/\",\n      \"language\": \"java\"\n    },\n    {\n      \"code\": \"interface\\nfunction CreateCharge: String;\\n\\nimplementation\\nuses uGerenciaClient, uGerenciaNetClientUtilities;\\n{... your code ... }\\n\\nfunction CreateCharge: String;\\nvar \\nBody :  String;\\n\\nbegin  \\n  EnableService( 'GerenciaNet.dll' ); \\n  ConfigureService( ToPAnsiChar( 'client_id' ),ToPAnsiChar( 'client_secret' ),'sandbox','config.json',''); \\n  GerenciaNetAuthorize(); \\n\\n  Body := \\n  '{'+\\n    '\\\"items\\\":'+\\n      '['+\\n        '{'+\\n          '\\\"name\\\":\\\"test article\\\",'+\\n          '\\\"value\\\":1900,'+\\n          '\\\"amount\\\":2'+\\n        '},'+\\n        '{'+\\n          '\\\"name\\\":\\\"test article 2\\\",'+\\n          '\\\"value\\\":3000,'+\\n          '\\\"amount\\\":1'+\\n        '}'+\\n      ']'+\\n  '}';\\n\\n  Result := ExecuteGerenciaNetRequest( 'createCharge','','',Body );\\nend;\",\n      \"language\": \"json\",\n      \"name\": \"Delphi\"\n    }\n  ]\n}\n[/block]\n<br>\n\n## a) Estrutura hierárquica dos atributos 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>.\n\n<br>\n\n## b) Atributos que podem ser usados para criar uma transação:\n[block:parameters]\n{\n  \"data\": {\n    \"h-0\": \"Atributo\",\n    \"h-1\": \"Descrição\",\n    \"h-2\": \"Obrigatório\",\n    \"h-3\": \"Tipo\",\n    \"0-0\": \"<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> (<a href=\\\"http://image.prntscr.com/image/cabe13e1e5b64449b942cf31139150ba.png\\\" target=\\\"_blank\\\">código identificador da conta Gerencianet</a> - String).\\n<code>*percentage*</code> (porcentagem de repasse, sendo que 9000 equivale a 90% - Integer).</span></div>\",\n    \"1-1\": \"Determina o(s) valor(es) de frete(s) de uma transação. Uma mesma transação pode possuir ilimitados valores de frete.\\n\\n<span class=\\\"tab1\\\"><em>Atributos de shippings</em></span>\\n\\n<div class=\\\"tab2\\\"><code>name<strong class=\\\"atributo-obrigatorio\\\">*</strong></code> // Rótulo do frete. <strong class=\\\"descricao-atributo\\\"><span class=\\\"atributo\\\">Máximo de 255 caracteres. String.</span></strong></div>\\n\\n<div class=\\\"tab2\\\"><code>value<strong class=\\\"atributo-obrigatorio\\\">*</strong></code> // Valor do frete, em centavos (1990 equivale a R$19,90). <strong class=\\\"descricao-atributo\\\"><span class=\\\"atributo\\\">Integer.</span></strong></div>\\n\\n<div class=\\\"tab2\\\"><code>payeeCode</code> // <a href=\\\"http://image.prntscr.com/image/cabe13e1e5b64449b942cf31139150ba.png\\\" target=\\\"_blank\\\">Código identificador da conta Gerencianet</a>, único por conta. <strong class=\\\"descricao-atributo\\\"><span class=\\\"atributo\\\">Padrão: Identificador da sua própria conta. String.</span></strong></div>\",\n    \"2-1\": \"Define dados específicos da transação.\\n\\n<span class=\\\"tab1\\\"><em>Atributos de metadata</em></span>\\n\\n<div class=\\\"tab2\\\"><code>custom_id</code> // Permite associar uma transação Gerencianet a uma ID específica de seu sistema ou aplicação, permitindo identificá-la caso você possua uma identificação específica e queira mantê-la. <strong class=\\\"descricao-atributo\\\"><span class=\\\"atributo\\\">Máximo de 255 caracteres. String/null.</span></strong></div>\\n\\n<div class=\\\"tab2\\\"><code>notification_url</code> // Endereço de sua URL válida que receberá as notificações de mudanças de status das transações. <strong class=\\\"descricao-atributo\\\"><span class=\\\"atributo\\\">Máximo de 255 caracteres. String/null.</span></strong></div>\",\n    \"0-2\": \"Sim\",\n    \"1-2\": \"Não\",\n    \"2-2\": \"Não\",\n    \"0-3\": \"Array\",\n    \"1-3\": \"Array\",\n    \"2-3\": \"Object\"\n  },\n  \"cols\": 4,\n  \"rows\": 3\n}\n[/block]\n<strong class=\"atributo-obrigatorio-texto\">* valor obrigatório</strong>\n<br>\nAgora que a transação já foi criada e você já possui o <code>charge_id</code>, é preciso associá-lo para obter o link de pagamento.\n\n<br>\n\n<hr>\n\n# 2. Criando um link de pagamento\n\nPara criar um link de pagamento, você precisa ter [gerado a transação](https://dev.gerencianet.com.br/docs/link-pagamento-criando#section-1-crie-a-transa-o), ou seja, que você já tenha o identificador <code>charge_id</code> da cobrança, pois será necessário informá-lo.\n\nEm seguida, basta enviar uma requisição <code>POST</code> para a rota <code>/charge/:id/link</code> para gerar um link de pagamento, onde o <code>:id</code> corresponde ao <code>charge_id</code> da transação criada.\n\nCaso queira, pode explorar e conhecer mais sobre este recurso <a href=\"https://dev.gerencianet.com.br/docs/playground-transacoes#charge_id_link\" target=\"_blank\">usando nosso Playground</a>.\n\nA seguir um exemplo de utilização:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"<?php\\n\\nrequire __DIR__.'/../../vendor/autoload.php'; // caminho relacionado a SDK\\n\\nuse Gerencianet\\\\Exception\\\\GerencianetException;\\nuse Gerencianet\\\\Gerencianet;\\n\\n$file = file_get_contents(__DIR__.'/../config.json');\\n\\n$options = json_decode($file, true);\\n\\n// $charge_id refere-se ao ID da transação gerada anteriormente\\n$params = [\\n  'id' => $charge_id\\n];\\n\\n$body = [\\n  'billet_discount' => 5000, // desconto, em reais, caso o pagador escolha boleto (5000 equivale a R$ 50,00)\\n  'card_discount' => 3000, // desconto, em reais, caso o pagador escolha cartão (3000 equivale a R$ 30,00)\\n  'message' => '', // mensagem para o pagador com até 80 caracteres\\n  'expire_at' => '2018-12-20', // data de vencimento da tela de pagamento e do próprio boleto\\n  'request_delivery_address' => false, // solicitar endereço de entrega do comprador?\\n  'payment_method' => 'all' // formas de pagamento disponíveis\\n];\\n\\ntry {\\n  $api = new Gerencianet($options);\\n  $response = $api->linkCharge($params, $body);\\n  print_r($response);\\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 moment = require('moment');\\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 expireAt = moment()\\n  .add(3, 'days')\\n  .format('YYYY-MM-DD');\\n\\nvar params = {\\n  id: 0\\n};\\n\\nvar body = {\\n  billet_discount: 0,\\n  card_discount: 0,\\n  message: '',\\n  expire_at: expireAt,\\n  request_delivery_address: false,\\n  payment_method: 'all'\\n};\\n\\nvar gerencianet = new Gerencianet(options);\\n\\ngerencianet\\n  .linkCharge(params, body)\\n  .then(console.log)\\n  .catch(console.log)\\n  .done();\",\n      \"language\": \"javascript\",\n      \"name\": \"NodeJS\"\n    },\n    {\n      \"code\": \"require \\\"gerencianet\\\"\\nrequire \\\"date\\\"\\nrequire_relative \\\"./credentials\\\"\\n\\noptions = {\\n  client_id: CREDENTIALS::CLIENT_ID,\\n  client_secret: CREDENTIALS::CLIENT_SECRET,\\n  sandbox: true\\n}\\n\\nexpireAt = Date.today + 3\\n\\nparams = {\\n  id: 1000\\n}\\n\\nbody = {\\n  billet_discount: 0,\\n  card_discount: 0,\\n  message: \\\"\\\",\\n  expire_at: expireAt.strftime,\\n  request_delivery_address: false,\\n  payment_method: \\\"all\\\"\\n}\\n\\ngerencianet = Gerencianet.new(options)\\nputs gerencianet.link_charge(params: params, body: body)\",\n      \"language\": \"ruby\"\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}\\n\\nlink = {\\n    'billet_discount': 0,\\n    'card_discount': 0,\\n    'message': '',\\n    'expire_at': '2017-12-12',\\n    'request_delivery_address': false,\\n    'payment_method': 'all'\\n}\\n\\n\\ncharge = gn.create_charge(body=body)\\n\\nparams = {\\n    'id': charge['data']['charge_id']\\n}\\n\\nresponse = gn.link_charge(params=params, body=link)\\nprint(response)\",\n      \"language\": \"python\"\n    },\n    {\n      \"code\": \"using System;\\n\\nnamespace Gerencianet.SDK.Examples\\n{\\n    class LinkCharge\\n    {\\n        public static void Execute()\\n        {\\n            dynamic endpoints = new Endpoints(Credentials.Default.ClientId, Credentials.Default.ClientSecret, Credentials.Default.Sandbox);\\n\\n            var param = new\\n            {\\n                id = 1000\\n            };\\n\\n            var body = new\\n            {\\n                billet_discount = 0,\\n                card_discount = 0,\\n                message = \\\"\\\",\\n                expire_at = DateTime.Now.AddDays(3).ToString(\\\"yyyy-MM-dd\\\"),\\n                request_delivery_address = false,\\n                payment_method = \\\"all\\\"\\n            };\\n\\n            try\\n            {\\n                var response = endpoints.LinkCharge(param, 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\": \"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/Link.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/Link.java\\n\\n*/\",\n      \"language\": \"java\"\n    },\n    {\n      \"code\": \"interface\\nfunction LinkCharge(Id: String): String;\\n\\nimplementation\\nuses uGerenciaClient, uGerenciaNetClientUtilities;\\n{... your code ... }\\n\\nfunction LinkCharge(Id: String): String;\\nvar\\n  Params: String;\\n  Body : String;\\nbegin\\n    EnableService( 'GerenciaNet.dll' ); \\n    ConfigureService( ToPAnsiChar( 'client_id' ),ToPAnsiChar( 'client_secret' ),'sandbox','config.json',''); \\n    GerenciaNetAuthorize();\\n\\n    Params := CreateRequestParams( [ 'id='+Id ] ).Text;\\n    Body := '{\\\"billet_discount\\\": 10,'+\\n     '\\\"card_discount\\\": 10,'+\\n     '\\\"message\\\": \\\"link test\\\",'+\\n     '\\\"expire_at\\\": \\\"2018-12-12\\\",'+\\n     '\\\"request_delivery_address\\\": false,'+\\n     '\\\"payment_method\\\": \\\"all\\\"}';\\n    Result := ExecuteGerenciaNetRequest( 'linkCharge',Params, '', Body );\\nend;\",\n      \"language\": \"json\",\n      \"name\": \"Delphi\"\n    }\n  ]\n}\n[/block]\n<br>\n\n## a) Atributos que podem ser utilizados para criar um link de pagamento:\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>billet_discount</code>\",\n    \"1-0\": \"<code>card_discount</code>\",\n    \"2-0\": \"<code>message</code>\",\n    \"3-0\": \"<code>expire_at</code>\",\n    \"4-0\": \"<code>request_delivery_address</code>\",\n    \"5-0\": \"<code>payment_method</code>\",\n    \"3-2\": \"Sim\",\n    \"4-2\": \"Sim\",\n    \"5-2\": \"Sim\",\n    \"0-2\": \"Não\",\n    \"1-2\": \"Não\",\n    \"2-2\": \"Não\",\n    \"0-3\": \"Integer\",\n    \"1-3\": \"Integer\",\n    \"2-3\": \"String\",\n    \"3-3\": \"String\",\n    \"4-3\": \"Boolean\",\n    \"5-3\": \"Object\",\n    \"5-1\": \"Define as formas de pagamento que devem ficar disponíveis na tela para seu cliente escolher, podendo ser:\\n\\n- <code>banking_billet</code> (boleto bancário);\\n- <code>credit_card</code> (cartão de crédito) ou;\\n- <code>all</code> (permitir pagamento via boleto e cartão).\",\n    \"4-1\": \"Define se a tela de pagamento deve solicitar que o pagador informe um endereço de entrega. Há dois possíveis valores:\\n\\n- <code>true</code> (equivale a \\\"sim\\\") ou;\\n- <code>false</code> (equivale a \\\"não\\\").\",\n    \"3-1\": \"Define a data de vencimento da tela de pagamento e do próprio boleto, caso esta seja a forma de pagamento escolhida.\\n<strong class=\\\"descricao-atributo\\\"><span class=\\\"atributo\\\">Formato: YYYY-MM-DD</span></strong>\",\n    \"2-1\": \"Define uma mensagem para o pagador. A mensagem aparece na tela de pagamento, nos e-mails relacionados à cobrança e no boleto, caso esta seja a forma de pagamento escolhida.\\n<strong class=\\\"descricao-atributo\\\"><span class=\\\"atributo\\\">Mínimo de 3 e máximo de 80 caracteres.</span></strong>\",\n    \"1-1\": \"Define um desconto, em reais, caso o pagador escolha cartão de crédito como forma de pagamento (informar valor Inteiro).\\n<strong class=\\\"descricao-atributo\\\"><span class=\\\"atributo\\\">5000 equivale a R$ 50,00</span></strong>\",\n    \"0-1\": \"Define um desconto, em reais, caso o pagador escolha boleto bancário como forma de pagamento (informar valor inteiro, em reais).\\n<strong class=\\\"descricao-atributo\\\"><span class=\\\"atributo\\\">5000 equivale a R$ 50,00</span></strong>\"\n  },\n  \"cols\": 4,\n  \"rows\": 6\n}\n[/block]\n<br>\n\nAo consumir o endpoint <code>/charge/:id/link</code>, ou através do Playground, a cobrança ganha o status <code>link</code>. Desta forma, o integrador consegue distinguir cobranças comuns que ainda não tiveram forma de pagamento definida (status <code>new</code>) de cobranças que foram associadas a um link de pagamento (status <code>link</code>).\n\nO integrador só precisa redirecionar o pagador para o link retornado na tag <code>payment_url</code> e todo o resto será realizado na tela de pagamento da Gerencianet.\n\nA seguir, através da aba \"Dados de Entrada\", um JSON simples que pode ser utilizado para criar o link de pagamento. Além disso, é possível observar a saída prevista e o schema de validação com todas as tags (obrigatórias e opcionais) disponíveis para este método. Lembrando que também é preciso informar o parâmetro de entrada <code>charge_id</code> da transação criada:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"{\\n  \\\"message\\\": \\\"Escreva aqui, se quiser, uma mensagem ao seu cliente, limite de 80 caracteres\\\",\\n  \\\"payment_method\\\": \\\"all\\\",\\n  \\\"expire_at\\\": \\\"2016-12-20\\\",\\n  \\\"request_delivery_address\\\": false,\\n  \\\"billet_discount\\\": 5000,\\n  \\\"card_discount\\\": 3000\\n}\",\n      \"language\": \"json\",\n      \"name\": \"Dados de Entrada\"\n    },\n    {\n      \"code\": \"{\\n  \\\"code\\\": 200,\\n  \\\"data\\\": {\\n    \\\"charge_id\\\": 148003,\\n    \\\"status\\\": \\\"link\\\",\\n    \\\"total\\\": 5990,\\n    \\\"custom_id\\\": null,\\n    \\\"payment_url\\\": \\\"https://pagamento.gerencianet.com.br/:identificador\\\",\\n    \\\"payment_method\\\": \\\"all\\\",\\n    \\\"created_at\\\": \\\"2016-12-14 11:31:37\\\"\\n  }\\n}\",\n      \"language\": \"json\",\n      \"name\": \"Dados de Saída\"\n    },\n    {\n      \"code\": \"{\\n  \\\"id\\\": \\\"/ChargeLink\\\",\\n  \\\"type\\\": \\\"object\\\",\\n  \\\"properties\\\": {\\n    \\\"billet_discount\\\": {\\n      \\\"type\\\": \\\"integer\\\",\\n      \\\"minimum\\\": 1,\\n      \\\"maximum\\\": 99999999\\n    },\\n    \\\"card_discount\\\": {\\n      \\\"type\\\": \\\"integer\\\",\\n      \\\"minimum\\\": 1,\\n      \\\"maximum\\\": 99999999\\n    },\\n    \\\"message\\\": {\\n      \\\"type\\\": \\\"string\\\",\\n      \\\"minLength\\\": 3,\\n      \\\"maxLength\\\": 80\\n    },\\n    \\\"expire_at\\\": {\\n      \\\"type\\\": \\\"string\\\",\\n      \\\"pattern\\\": \\\"^[12][0-9]{3}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12][0-9]|3[01])$\\\"\\n    },\\n    \\\"request_delivery_address\\\": {\\n      \\\"type\\\": \\\"boolean\\\"\\n    },\\n    \\\"payment_method\\\": {\\n      \\\"enum\\\": [\\n        \\\"banking_billet\\\",\\n        \\\"credit_card\\\",\\n        \\\"all\\\"\\n      ]\\n    }\\n  },\\n  \\\"required\\\": [\\n    \\\"request_delivery_address\\\",\\n    \\\"expire_at\\\",\\n    \\\"payment_method\\\"\\n  ]\\n}\",\n      \"language\": \"json\",\n      \"name\": \"Schema\"\n    }\n  ]\n}\n[/block]\nEsse JSON, presente na aba \"Dados de Entrada\", define as seguintes informações ao criar o link de pagamento:\n\n- <code>message</code>: define uma mensagem para o pagador. A mensagem aparece na tela de pagamento, nos e-mails relacionados à cobrança e no boleto, caso esta seja a forma de pagamento escolhida (máximo de 80 caracteres);\n\n- <code>payment_method</code>: define as formas de pagamento que devem ficar disponíveis na tela (<code>banking_billet</code>, <code>credit_card</code> ou <code>all</code>);\n\n- <code>expire_at</code>: define a data de vencimento da tela de pagamento e do próprio boleto, caso esta seja a forma de pagamento escolhida;\n\n- <code>request_delivery_address</code>: define se a tela de pagamento deve solicitar que o pagador informe um endereço de entrega (<code>true</code> ou <code>false</code>);\n\n- <code>billet_discount</code>: define um desconto, em centavos, caso o pagador escolha boleto bancário como forma de pagamento (informar valor Inteiro);\n\n- <code>card_discount</code>: define um desconto, em centavos, caso o pagador escolha cartão de crédito como forma de pagamento (informar valor Inteiro).\n\n<br>\n\n## b) Estrutura hierárquica dos atributos que podem ser utilizados:\n\n<pre>\"id\": \"/ChargeLink\"\n    \"billet_discount\"\n    \"card_discount\"\n    \"message\"\n    \"expire_at\"\n    \"request_delivery_address\"\n    \"payment_method\"\n        \"banking_billet\"\n        \"credit_card\"\n        \"all\"</pre>\n\nPara verificar mais detalhes, <a href=\"https://dev.gerencianet.com.br/docs/playground-transacoes#charge_id_link\" target=\"_blank\" title=\"Link Interno\">acesse aqui</a>.\n\n<br>\n\n## c) Personalizando sua tela de pagamento:\n\nÉ possível definir uma cor e um logo para sua tela. Para isso, <a href=\"https://gerencianet.com.br/#login\" target=\"_blank\" title=\"Logue em sua conta Gerencianet\">logue em sua conta Gerencianet</a> e acesse o menu <code>Minha Conta > Tela de Pagamento</code>.\n\nMesmo que prefira utilizar sua própria tela, as informações definidas aqui serão utilizadas também nos e-mails disparados pela API. Então recomendamos que faça a personalização de qualquer forma.\n[block:image]\n{\n  \"images\": [\n    {\n      \"image\": [\n        \"https://files.readme.io/16d5888-imagem-link-pagamento-1.png\",\n        \"imagem-link-pagamento-[1].png\",\n        480,\n        421,\n        \"#178a83\"\n      ]\n    }\n  ]\n}\n[/block]\n## d) Testando em ambiente de testes (Playground):\n\nPara criar um link de pagamento, primeiro é necessário criar uma cobrança na API, consumindo o endpoint <code>POST /charge</code>. Este endpoint retorna, dentre outras informações, um identificador para a cobrança. O status inicial de uma cobrança é <code>new</code>:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"{   \\n    \\\"items\\\":  [\\n        {\\n            \\\"name\\\": \\\"Produto exemplo\\\",\\n            \\\"value\\\": 1000,\\n            \\\"amount\\\": 1\\n         }\\n    ]\\n}\",\n      \"language\": \"json\",\n      \"name\": \"Entrada\"\n    }\n  ]\n}\n[/block]\n<br>\n\nLogo abaixo, os dados de saída previstos de acordo com a entrada realizada acima:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"{  \\n   \\\"code\\\":200,\\n   \\\"data\\\":{  \\n      \\\"charge_id\\\":121062,\\n      \\\"status\\\":\\\"new\\\",\\n      \\\"total\\\":1000,\\n      \\\"custom_id\\\":null,\\n      \\\"created_at\\\":\\\"2016-10-31 10:43:57\\\"\\n   }\\n}\",\n      \"language\": \"json\",\n      \"name\": \"Saída\"\n    }\n  ]\n}\n[/block]\n<br>\n\nConhecendo o identificador da cobrança, basta consumir o endpoint <code>POST /charge/:id/link</code> para gerar um link de pagamento.\n\n<hr>\n\n# 3. Vídeo: Criando transação via Playground (ambiente de testes/sandbox)\n\nPensando em oferecer novos meios de transmitir informações, a Gerencianet disponibiliza o vídeo a seguir com o objetivo de explicar, de maneira clara e objetiva, como criar uma transação via playground (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[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]","excerpt":"Você está em: *\"Link de Pagamento > Criando link de pagamento\"*","slug":"link-pagamento-criando","type":"basic","title":"Criando link de pagamento"}

Criando link de pagamento

Você está em: *"Link de Pagamento > Criando link de pagamento"*

Saiba como criar um link para uma tela de pagamento da Gerencianet para seus clientes efetuarem os pagamentos. Para criar, é bem simples e requer apenas dois passos: 1. Primeiramente, [crie a transação](https://dev.gerencianet.com.br/docs/link-pagamento-criando#section-1-crie-a-transa-o); 2. Agora, para [criar o link de pagamento](https://dev.gerencianet.com.br/docs/link-pagamento-criando#section-2-criando-um-link-de-pagamento), informe o número da transação criada anteriormente. O restante desta página apresenta os procedimentos detalhados, mas você precisa instalar uma de nossas bibliotecas em seu servidor para executar os códigos de exemplo. [Certifique-se que a SDK da Gerencianet foi instalada](https://dev.gerencianet.com.br/docs#section-bibliotecas). <hr> # 1. Crie a transação Inicialmente, será gerada uma transação e que estará com o status de <code>new</code> (novo). Após criar a cobrança, será retornado o <code>charge_id</code>, que é o identificador único da transação e que será utilizado para criar o link de pagamento. Para gerar uma transação, você deve enviar uma requisição <code>POST</code> para a rota <code>/charge</code>. Caso queira, pode explorar e conhecer mais sobre este recurso <a href="https://dev.gerencianet.com.br/docs/playground-transacoes#charge" target="_blank">usando nosso Playground</a>. A seguir um exemplo de utilização: [block:code] { "codes": [ { "code": "<?php\n \nrequire __DIR__.'/../../vendor/autoload.php'; // caminho relacionado a SDK\n \nuse Gerencianet\\Exception\\GerencianetException;\nuse Gerencianet\\Gerencianet;\n \n$clientId = 'your_client_id'; // insira seu Client_Id, conforme o ambiente (Des ou Prod)\n$clientSecret = 'your_client_secret'; // insira seu Client_Secret, conforme o ambiente (Des ou Prod)\n \n$options = [\n 'client_id' => $clientId,\n 'client_secret' => $clientSecret,\n 'sandbox' => true // altere conforme o ambiente (true = desenvolvimento e false = producao)\n];\n \n$item_1 = [\n 'name' => 'Item 1', // nome do item, produto ou serviço\n 'amount' => 1, // quantidade\n 'value' => 1000 // valor (1000 = R$ 10,00)\n];\n \n$item_2 = [\n 'name' => 'Item 2', // nome do item, produto ou serviço\n 'amount' => 2, // quantidade\n 'value' => 2000 // valor (2000 = R$ 20,00)\n];\n \n$items = [\n $item_1,\n $item_2\n];\n\n//Exemplo para receber notificações da alteração do status da transação.\n//$metadata = ['notification_url'=>'sua_url_de_notificacao_.com.br']\n//Outros detalhes em: https://dev.gerencianet.com.br/docs/notificacoes\n\n//Como enviar seu $body com o $metadata\n//$body = [\n// 'items' => $items,\n//\t\t'metadata' => $metadata\n//];\n\n$body = [\n 'items' => $items\n];\n\ntry {\n $api = new Gerencianet($options);\n $charge = $api->createCharge([], $body);\n \n print_r($charge);\n} catch (GerencianetException $e) {\n print_r($e->code);\n print_r($e->error);\n print_r($e->errorDescription);\n} catch (Exception $e) {\n print_r($e->getMessage());\n}", "language": "php" }, { "code": "'use strict';\n \nvar Gerencianet = require('gn-api-sdk-node');\n \nvar clientId = 'your_client_id';\nvar clientSecret = 'your_client_secret';\n \nvar options = {\n client_id: clientId,\n client_secret: clientSecret,\n sandbox: true\n}\n \nvar body = {\n items: [{\n name: 'Product 1',\n value: 1000,\n amount: 2\n }],\n shippings: [{\n name: 'Default Shipping Cost',\n value: 100\n }]\n}\n \nvar gerencianet = new Gerencianet(options);\n \ngerencianet\n .createCharge({}, body)\n .then(console.log)\n .catch(console.log)\n .done();", "language": "javascript", "name": "NodeJS" }, { "code": "require \"gerencianet\"\n \noptions = {\n client_id: \"client_id\",\n client_secret: \"client_secret\",\n sandbox: true\n}\n \nbody = {\n items: [{\n name: \"Product 1\",\n value: 1000,\n amount: 2\n }],\n shippings: [{\n name: \"Default Shipping Cost\",\n value: 100\n }]\n}\n \ngerencianet = Gerencianet.new(options)\ngerencianet.create_charge(body: body)", "language": "ruby" }, { "code": "from gerencianet import Gerencianet\n \noptions = {\n 'client_id': 'client_id',\n 'client_secret': 'client_secret',\n 'sandbox': True\n}\n \ngn = Gerencianet(options)\n \nbody = {\n 'items': [{\n 'name': \"Product 1\",\n 'value': 1000,\n 'amount': 2\n }],\n 'shippings': [{\n 'name': \"Default Shipping Cost\",\n 'value': 100\n }]\n}\n \ngn.create_charge(body=body)", "language": "python" }, { "code": "dynamic endpoints = new Endpoints(\"client_id\", \"client_secret\", true);\n \nvar body = new\n{\n items = new[] {\n new {\n name = \"Product 1\",\n value = 1000,\n amount = 2\n }\n },\n shippings = new[] {\n new {\n name = \"Default Shipping Cost\",\n value = 100\n }\n }\n};\n \nvar response = endpoints.CreateCharge(null, body);\nConsole.WriteLine(response);", "language": "asp", "name": ".NET" }, { "code": "/* Para que a SDK Java funcione corretamente, é necessário que a instanciação do módulo seja feita através da criação de um objeto do tipo Gerencianet.\n\nSempre que quisermos chamar uma função da API, basta invocar o método call do objeto Gerencianet, passando como parâmetro o nome do método, os parâmetros da requisição (sempre será um HashMap<String, String>), e o \"body\", que consiste nas propriedades a serem passadas como argumento na chamada de um função da SDK. O \"body\" pode ser declarado de duas formas: um JSONObject ou um Map<String, Object>.\n\nEsta estrutura é necessária para representar o corpo da requisição http que é enviada à um determinado endpoint. Se o \"body\" for um JSONObject, o retorno do método call será um JSONObject, se for um Map<String, Object>, o retorno do método call será um Map<String, Object>\n\nA seguir, disponibilizamos links de nosso Github mostrando duas formas diferentes de retorno: JSONObject\ne Map<String, Object>\n\n\nJSONObject\n\nhttps://github.com/gerencianet/gn-api-sdk-java-examples/blob/master/src/main/java/br/com/gerencianet/charge/json/CreateCharge.java\n\n\nMap<String, Object>\n\nhttps://github.com/gerencianet/gn-api-sdk-java-examples/blob/master/src/main/java/br/com/gerencianet/charge/map/CreateCharge.java\n\n*/", "language": "java" }, { "code": "interface\nfunction CreateCharge: String;\n\nimplementation\nuses uGerenciaClient, uGerenciaNetClientUtilities;\n{... your code ... }\n\nfunction CreateCharge: String;\nvar \nBody : String;\n\nbegin \n EnableService( 'GerenciaNet.dll' ); \n ConfigureService( ToPAnsiChar( 'client_id' ),ToPAnsiChar( 'client_secret' ),'sandbox','config.json',''); \n GerenciaNetAuthorize(); \n\n Body := \n '{'+\n '\"items\":'+\n '['+\n '{'+\n '\"name\":\"test article\",'+\n '\"value\":1900,'+\n '\"amount\":2'+\n '},'+\n '{'+\n '\"name\":\"test article 2\",'+\n '\"value\":3000,'+\n '\"amount\":1'+\n '}'+\n ']'+\n '}';\n\n Result := ExecuteGerenciaNetRequest( 'createCharge','','',Body );\nend;", "language": "json", "name": "Delphi" } ] } [/block] <br> ## a) Estrutura hierárquica dos atributos 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>. <br> ## b) Atributos que podem ser usados para criar uma transação: [block:parameters] { "data": { "h-0": "Atributo", "h-1": "Descrição", "h-2": "Obrigatório", "h-3": "Tipo", "0-0": "<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> (<a href=\"http://image.prntscr.com/image/cabe13e1e5b64449b942cf31139150ba.png\" target=\"_blank\">código identificador da conta Gerencianet</a> - String).\n<code>*percentage*</code> (porcentagem de repasse, sendo que 9000 equivale a 90% - Integer).</span></div>", "1-1": "Determina o(s) valor(es) de frete(s) de uma transação. Uma mesma transação pode possuir ilimitados valores de frete.\n\n<span class=\"tab1\"><em>Atributos de shippings</em></span>\n\n<div class=\"tab2\"><code>name<strong class=\"atributo-obrigatorio\">*</strong></code> // Rótulo do frete. <strong class=\"descricao-atributo\"><span class=\"atributo\">Máximo de 255 caracteres. String.</span></strong></div>\n\n<div class=\"tab2\"><code>value<strong class=\"atributo-obrigatorio\">*</strong></code> // Valor do frete, em centavos (1990 equivale a R$19,90). <strong class=\"descricao-atributo\"><span class=\"atributo\">Integer.</span></strong></div>\n\n<div class=\"tab2\"><code>payeeCode</code> // <a href=\"http://image.prntscr.com/image/cabe13e1e5b64449b942cf31139150ba.png\" target=\"_blank\">Código identificador da conta Gerencianet</a>, único por conta. <strong class=\"descricao-atributo\"><span class=\"atributo\">Padrão: Identificador da sua própria conta. String.</span></strong></div>", "2-1": "Define dados específicos da transação.\n\n<span class=\"tab1\"><em>Atributos de metadata</em></span>\n\n<div class=\"tab2\"><code>custom_id</code> // Permite associar uma transação Gerencianet a uma ID específica de seu sistema ou aplicação, permitindo identificá-la caso você possua uma identificação específica e queira mantê-la. <strong class=\"descricao-atributo\"><span class=\"atributo\">Máximo de 255 caracteres. String/null.</span></strong></div>\n\n<div class=\"tab2\"><code>notification_url</code> // Endereço de sua URL válida que receberá as notificações de mudanças de status das transações. <strong class=\"descricao-atributo\"><span class=\"atributo\">Máximo de 255 caracteres. String/null.</span></strong></div>", "0-2": "Sim", "1-2": "Não", "2-2": "Não", "0-3": "Array", "1-3": "Array", "2-3": "Object" }, "cols": 4, "rows": 3 } [/block] <strong class="atributo-obrigatorio-texto">* valor obrigatório</strong> <br> Agora que a transação já foi criada e você já possui o <code>charge_id</code>, é preciso associá-lo para obter o link de pagamento. <br> <hr> # 2. Criando um link de pagamento Para criar um link de pagamento, você precisa ter [gerado a transação](https://dev.gerencianet.com.br/docs/link-pagamento-criando#section-1-crie-a-transa-o), ou seja, que você já tenha o identificador <code>charge_id</code> da cobrança, pois será necessário informá-lo. Em seguida, basta enviar uma requisição <code>POST</code> para a rota <code>/charge/:id/link</code> para gerar um link de pagamento, onde o <code>:id</code> corresponde ao <code>charge_id</code> da transação criada. Caso queira, pode explorar e conhecer mais sobre este recurso <a href="https://dev.gerencianet.com.br/docs/playground-transacoes#charge_id_link" target="_blank">usando nosso Playground</a>. A seguir um exemplo de utilização: [block:code] { "codes": [ { "code": "<?php\n\nrequire __DIR__.'/../../vendor/autoload.php'; // caminho relacionado a SDK\n\nuse Gerencianet\\Exception\\GerencianetException;\nuse Gerencianet\\Gerencianet;\n\n$file = file_get_contents(__DIR__.'/../config.json');\n\n$options = json_decode($file, true);\n\n// $charge_id refere-se ao ID da transação gerada anteriormente\n$params = [\n 'id' => $charge_id\n];\n\n$body = [\n 'billet_discount' => 5000, // desconto, em reais, caso o pagador escolha boleto (5000 equivale a R$ 50,00)\n 'card_discount' => 3000, // desconto, em reais, caso o pagador escolha cartão (3000 equivale a R$ 30,00)\n 'message' => '', // mensagem para o pagador com até 80 caracteres\n 'expire_at' => '2018-12-20', // data de vencimento da tela de pagamento e do próprio boleto\n 'request_delivery_address' => false, // solicitar endereço de entrega do comprador?\n 'payment_method' => 'all' // formas de pagamento disponíveis\n];\n\ntry {\n $api = new Gerencianet($options);\n $response = $api->linkCharge($params, $body);\n print_r($response);\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 moment = require('moment');\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 expireAt = moment()\n .add(3, 'days')\n .format('YYYY-MM-DD');\n\nvar params = {\n id: 0\n};\n\nvar body = {\n billet_discount: 0,\n card_discount: 0,\n message: '',\n expire_at: expireAt,\n request_delivery_address: false,\n payment_method: 'all'\n};\n\nvar gerencianet = new Gerencianet(options);\n\ngerencianet\n .linkCharge(params, body)\n .then(console.log)\n .catch(console.log)\n .done();", "language": "javascript", "name": "NodeJS" }, { "code": "require \"gerencianet\"\nrequire \"date\"\nrequire_relative \"./credentials\"\n\noptions = {\n client_id: CREDENTIALS::CLIENT_ID,\n client_secret: CREDENTIALS::CLIENT_SECRET,\n sandbox: true\n}\n\nexpireAt = Date.today + 3\n\nparams = {\n id: 1000\n}\n\nbody = {\n billet_discount: 0,\n card_discount: 0,\n message: \"\",\n expire_at: expireAt.strftime,\n request_delivery_address: false,\n payment_method: \"all\"\n}\n\ngerencianet = Gerencianet.new(options)\nputs gerencianet.link_charge(params: params, body: body)", "language": "ruby" }, { "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}\n\nlink = {\n 'billet_discount': 0,\n 'card_discount': 0,\n 'message': '',\n 'expire_at': '2017-12-12',\n 'request_delivery_address': false,\n 'payment_method': 'all'\n}\n\n\ncharge = gn.create_charge(body=body)\n\nparams = {\n 'id': charge['data']['charge_id']\n}\n\nresponse = gn.link_charge(params=params, body=link)\nprint(response)", "language": "python" }, { "code": "using System;\n\nnamespace Gerencianet.SDK.Examples\n{\n class LinkCharge\n {\n public static void Execute()\n {\n dynamic endpoints = new Endpoints(Credentials.Default.ClientId, Credentials.Default.ClientSecret, Credentials.Default.Sandbox);\n\n var param = new\n {\n id = 1000\n };\n\n var body = new\n {\n billet_discount = 0,\n card_discount = 0,\n message = \"\",\n expire_at = DateTime.Now.AddDays(3).ToString(\"yyyy-MM-dd\"),\n request_delivery_address = false,\n payment_method = \"all\"\n };\n\n try\n {\n var response = endpoints.LinkCharge(param, 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": "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/Link.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/Link.java\n\n*/", "language": "java" }, { "code": "interface\nfunction LinkCharge(Id: String): String;\n\nimplementation\nuses uGerenciaClient, uGerenciaNetClientUtilities;\n{... your code ... }\n\nfunction LinkCharge(Id: String): String;\nvar\n Params: String;\n Body : String;\nbegin\n EnableService( 'GerenciaNet.dll' ); \n ConfigureService( ToPAnsiChar( 'client_id' ),ToPAnsiChar( 'client_secret' ),'sandbox','config.json',''); \n GerenciaNetAuthorize();\n\n Params := CreateRequestParams( [ 'id='+Id ] ).Text;\n Body := '{\"billet_discount\": 10,'+\n '\"card_discount\": 10,'+\n '\"message\": \"link test\",'+\n '\"expire_at\": \"2018-12-12\",'+\n '\"request_delivery_address\": false,'+\n '\"payment_method\": \"all\"}';\n Result := ExecuteGerenciaNetRequest( 'linkCharge',Params, '', Body );\nend;", "language": "json", "name": "Delphi" } ] } [/block] <br> ## a) Atributos que podem ser utilizados para criar um link de pagamento: [block:parameters] { "data": { "h-0": "Atributo", "h-1": "Descrição", "h-2": "Obrigatório", "h-3": "Tipo", "0-0": "<code>billet_discount</code>", "1-0": "<code>card_discount</code>", "2-0": "<code>message</code>", "3-0": "<code>expire_at</code>", "4-0": "<code>request_delivery_address</code>", "5-0": "<code>payment_method</code>", "3-2": "Sim", "4-2": "Sim", "5-2": "Sim", "0-2": "Não", "1-2": "Não", "2-2": "Não", "0-3": "Integer", "1-3": "Integer", "2-3": "String", "3-3": "String", "4-3": "Boolean", "5-3": "Object", "5-1": "Define as formas de pagamento que devem ficar disponíveis na tela para seu cliente escolher, podendo ser:\n\n- <code>banking_billet</code> (boleto bancário);\n- <code>credit_card</code> (cartão de crédito) ou;\n- <code>all</code> (permitir pagamento via boleto e cartão).", "4-1": "Define se a tela de pagamento deve solicitar que o pagador informe um endereço de entrega. Há dois possíveis valores:\n\n- <code>true</code> (equivale a \"sim\") ou;\n- <code>false</code> (equivale a \"não\").", "3-1": "Define a data de vencimento da tela de pagamento e do próprio boleto, caso esta seja a forma de pagamento escolhida.\n<strong class=\"descricao-atributo\"><span class=\"atributo\">Formato: YYYY-MM-DD</span></strong>", "2-1": "Define uma mensagem para o pagador. A mensagem aparece na tela de pagamento, nos e-mails relacionados à cobrança e no boleto, caso esta seja a forma de pagamento escolhida.\n<strong class=\"descricao-atributo\"><span class=\"atributo\">Mínimo de 3 e máximo de 80 caracteres.</span></strong>", "1-1": "Define um desconto, em reais, caso o pagador escolha cartão de crédito como forma de pagamento (informar valor Inteiro).\n<strong class=\"descricao-atributo\"><span class=\"atributo\">5000 equivale a R$ 50,00</span></strong>", "0-1": "Define um desconto, em reais, caso o pagador escolha boleto bancário como forma de pagamento (informar valor inteiro, em reais).\n<strong class=\"descricao-atributo\"><span class=\"atributo\">5000 equivale a R$ 50,00</span></strong>" }, "cols": 4, "rows": 6 } [/block] <br> Ao consumir o endpoint <code>/charge/:id/link</code>, ou através do Playground, a cobrança ganha o status <code>link</code>. Desta forma, o integrador consegue distinguir cobranças comuns que ainda não tiveram forma de pagamento definida (status <code>new</code>) de cobranças que foram associadas a um link de pagamento (status <code>link</code>). O integrador só precisa redirecionar o pagador para o link retornado na tag <code>payment_url</code> e todo o resto será realizado na tela de pagamento da Gerencianet. A seguir, através da aba "Dados de Entrada", um JSON simples que pode ser utilizado para criar o link de pagamento. Além disso, é possível observar a saída prevista e o schema de validação com todas as tags (obrigatórias e opcionais) disponíveis para este método. Lembrando que também é preciso informar o parâmetro de entrada <code>charge_id</code> da transação criada: [block:code] { "codes": [ { "code": "{\n \"message\": \"Escreva aqui, se quiser, uma mensagem ao seu cliente, limite de 80 caracteres\",\n \"payment_method\": \"all\",\n \"expire_at\": \"2016-12-20\",\n \"request_delivery_address\": false,\n \"billet_discount\": 5000,\n \"card_discount\": 3000\n}", "language": "json", "name": "Dados de Entrada" }, { "code": "{\n \"code\": 200,\n \"data\": {\n \"charge_id\": 148003,\n \"status\": \"link\",\n \"total\": 5990,\n \"custom_id\": null,\n \"payment_url\": \"https://pagamento.gerencianet.com.br/:identificador\",\n \"payment_method\": \"all\",\n \"created_at\": \"2016-12-14 11:31:37\"\n }\n}", "language": "json", "name": "Dados de Saída" }, { "code": "{\n \"id\": \"/ChargeLink\",\n \"type\": \"object\",\n \"properties\": {\n \"billet_discount\": {\n \"type\": \"integer\",\n \"minimum\": 1,\n \"maximum\": 99999999\n },\n \"card_discount\": {\n \"type\": \"integer\",\n \"minimum\": 1,\n \"maximum\": 99999999\n },\n \"message\": {\n \"type\": \"string\",\n \"minLength\": 3,\n \"maxLength\": 80\n },\n \"expire_at\": {\n \"type\": \"string\",\n \"pattern\": \"^[12][0-9]{3}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12][0-9]|3[01])$\"\n },\n \"request_delivery_address\": {\n \"type\": \"boolean\"\n },\n \"payment_method\": {\n \"enum\": [\n \"banking_billet\",\n \"credit_card\",\n \"all\"\n ]\n }\n },\n \"required\": [\n \"request_delivery_address\",\n \"expire_at\",\n \"payment_method\"\n ]\n}", "language": "json", "name": "Schema" } ] } [/block] Esse JSON, presente na aba "Dados de Entrada", define as seguintes informações ao criar o link de pagamento: - <code>message</code>: define uma mensagem para o pagador. A mensagem aparece na tela de pagamento, nos e-mails relacionados à cobrança e no boleto, caso esta seja a forma de pagamento escolhida (máximo de 80 caracteres); - <code>payment_method</code>: define as formas de pagamento que devem ficar disponíveis na tela (<code>banking_billet</code>, <code>credit_card</code> ou <code>all</code>); - <code>expire_at</code>: define a data de vencimento da tela de pagamento e do próprio boleto, caso esta seja a forma de pagamento escolhida; - <code>request_delivery_address</code>: define se a tela de pagamento deve solicitar que o pagador informe um endereço de entrega (<code>true</code> ou <code>false</code>); - <code>billet_discount</code>: define um desconto, em centavos, caso o pagador escolha boleto bancário como forma de pagamento (informar valor Inteiro); - <code>card_discount</code>: define um desconto, em centavos, caso o pagador escolha cartão de crédito como forma de pagamento (informar valor Inteiro). <br> ## b) Estrutura hierárquica dos atributos que podem ser utilizados: <pre>"id": "/ChargeLink" "billet_discount" "card_discount" "message" "expire_at" "request_delivery_address" "payment_method" "banking_billet" "credit_card" "all"</pre> Para verificar mais detalhes, <a href="https://dev.gerencianet.com.br/docs/playground-transacoes#charge_id_link" target="_blank" title="Link Interno">acesse aqui</a>. <br> ## c) Personalizando sua tela de pagamento: É possível definir uma cor e um logo para sua tela. Para isso, <a href="https://gerencianet.com.br/#login" target="_blank" title="Logue em sua conta Gerencianet">logue em sua conta Gerencianet</a> e acesse o menu <code>Minha Conta > Tela de Pagamento</code>. Mesmo que prefira utilizar sua própria tela, as informações definidas aqui serão utilizadas também nos e-mails disparados pela API. Então recomendamos que faça a personalização de qualquer forma. [block:image] { "images": [ { "image": [ "https://files.readme.io/16d5888-imagem-link-pagamento-1.png", "imagem-link-pagamento-[1].png", 480, 421, "#178a83" ] } ] } [/block] ## d) Testando em ambiente de testes (Playground): Para criar um link de pagamento, primeiro é necessário criar uma cobrança na API, consumindo o endpoint <code>POST /charge</code>. Este endpoint retorna, dentre outras informações, um identificador para a cobrança. O status inicial de uma cobrança é <code>new</code>: [block:code] { "codes": [ { "code": "{ \n \"items\": [\n {\n \"name\": \"Produto exemplo\",\n \"value\": 1000,\n \"amount\": 1\n }\n ]\n}", "language": "json", "name": "Entrada" } ] } [/block] <br> Logo abaixo, os dados de saída previstos de acordo com a entrada realizada acima: [block:code] { "codes": [ { "code": "{ \n \"code\":200,\n \"data\":{ \n \"charge_id\":121062,\n \"status\":\"new\",\n \"total\":1000,\n \"custom_id\":null,\n \"created_at\":\"2016-10-31 10:43:57\"\n }\n}", "language": "json", "name": "Saída" } ] } [/block] <br> Conhecendo o identificador da cobrança, basta consumir o endpoint <code>POST /charge/:id/link</code> para gerar um link de pagamento. <hr> # 3. Vídeo: Criando transação via Playground (ambiente de testes/sandbox) Pensando em oferecer novos meios de transmitir informações, a Gerencianet disponibiliza o vídeo a seguir com o objetivo de explicar, de maneira clara e objetiva, como criar uma transação via playground (sandbox). [block:html] { "html": "<iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/ylqJUpHqwfY\" 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]