{"_id":"58405583e3e04b230055c6b7","version":{"_id":"575aeffae12cf20e002f306f","project":"575aeffae12cf20e002f306c","__v":31,"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"],"is_deprecated":false,"is_hidden":false,"is_beta":false,"is_stable":true,"codename":"2016","version_clean":"1.0.0","version":"1"},"project":"575aeffae12cf20e002f306c","__v":0,"user":"57601a13af3e090e00108059","parentDoc":null,"githubsync":"","category":{"_id":"5783f8b65cbce30e0074e2b9","__v":0,"project":"575aeffae12cf20e002f306c","version":"575aeffae12cf20e002f306f","sync":{"url":"","isSync":false},"reference":false,"createdAt":"2016-07-11T19:51:18.983Z","from_sync":false,"order":5,"slug":"assinaturas","title":"Assinaturas (Recorrência)"},"updates":[],"next":{"pages":[],"description":""},"createdAt":"2016-12-01T16:53:23.073Z","link_external":false,"link_url":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[]},"settings":"","auth":"required","params":[],"url":""},"isReference":false,"order":1,"body":"Saiba como gerar um conjunto de cobranças recorrentes para seus clientes. Para criar uma assinatura, é bem simples e requer apenas três passos:\n\n1. [Crie o plano de assinatura](https://dev.gerencianet.com.br/docs/criando-assinaturas#section-1-crie-o-plano-de-assinatura), definindo a periodicidade e quantas cobranças devem ser geradas;\n\n2. [Crie inscrições (assinaturas) para vincular ao plano](https://dev.gerencianet.com.br/docs/criando-assinaturas#section-2-crie-inscri-es-assinaturas-para-vincular-ao-plano);\n\n3. [Defina a forma de pagamento da assinatura e os dados do cliente](https://dev.gerencianet.com.br/docs/criando-assinaturas#section-3-defina-a-forma-de-pagamento-da-assinatura-e-os-dados-do-cliente).\n\nDepois de criar o(s) plano(s) de assinatura desejado(s), você só precisará executar o segundo e terceiro passo para cada inscrição subsequente.\n\nO restante desta página apresenta as três etapas detalhadas, mas você precisa instalar uma de nossas bibliotecas em seu servidor para executar os códigos de exemplo. [Certifique-se de que a SDK da Gerencianet foi instalada](https://dev.gerencianet.com.br/docs#section-2-bibliotecas).\n\n<hr>\n\n# 1. Crie o plano de assinatura\n\nInicialmente, será criado o **plano de assinatura**, em que o integrador poderá definir três informações:\n\n- Nome do plano;\n- Periodicidade da cobrança (por exemplo, <code>1</code> para mensal);\n- Quantas cobranças devem ser geradas.\n\nPara criar um plano de assinatura, você deve enviar uma requisição <code>POST</code> para a rota <code>/plan</code>.\n\nCaso queira, pode explorar e conhecer mais sobre este recurso <a href=\"https://dev.gerencianet.com.br/docs/playground-assinaturas#plan\" 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$body = [\\n  'name' => 'Meu Plano de Assinatura', // nome do plano de assinatura\\n  'interval' => 1, // periodicidade da cobrança (em meses) - informe 1 para assinatura mensal\\n  'repeats' => null // número de vezes que a cobrança deve ser gerada (padrão: null, que significa que a cobrança é gerada por tempo indeterminado ou até que o plano seja cancelado)\\n];\\n \\ntry {\\n    $api = new Gerencianet($options);\\n    $plan = $api->createPlan([], $body);\\n \\n    print_r($plan);\\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');\\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  name: 'Meu Plano de Assinatura',\\n  repeats: null,\\n  interval: 1\\n}\\n \\nvar gerencianet = new Gerencianet(options);\\n \\ngerencianet\\n  .createPlan({}, 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  name: \\\"Meu Plano de Assinatura\\\",\\n  repeats: null,\\n  interval: 1\\n}\\n \\ngerencianet = Gerencianet.new(options)\\ngerencianet.create_plan(body: body)\\n\",\n      \"language\": \"ruby\"\n    },\n    {\n      \"code\": \"\\nfrom 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    'name': \\\"Meu Plano de Assinatura\\\",\\n    'repeats': null,\\n    'interval': 1\\n}\\n \\nplan =  gn.create_plan(body=body)\\n\",\n      \"language\": \"python\"\n    },\n    {\n      \"code\": \"dynamic endpoints = new Endpoints(\\\"client_id\\\", \\\"client_secret\\\", true);\\n \\nvar body = new {\\n    name = \\\"Meu Plano de Assinatura\\\",\\n    repeats = null,\\n    interval = 1\\n};\\n \\nvar planResponse = endpoints.CreatePlan(null, body);\\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/subscriptions/json/CreatePlan.java\\n\\n\\nMap<String, Object>\\n\\nhttps://github.com/gerencianet/gn-api-sdk-java-examples/blob/master/src/main/java/br/com/gerencianet/subscriptions/map/CreatePlan.java\\n\\n*/\",\n      \"language\": \"java\"\n    },\n    {\n      \"code\": \"interface\\nfunction CreatePlan: String;\\n\\nimplementation\\nuses uGerenciaClient, uGerenciaNetClientUtilities;\\n{... your code ... }\\n\\nfunction CreatePlan: String;\\nvar\\n  Body: String;\\nbegin\\n    Body :=\\n    '{\\\"name\\\": \\\"my_plan\\\",'+\\n     '\\\"interval\\\": 2,'+\\n     '\\\"repeats\\\": 2}';\\n\\n    EnableService( 'GerenciaNet.dll' ); \\n    ConfigureService( ToPAnsiChar( 'client_id' ),ToPAnsiChar( 'client_secret' ),'sandbox','config.json',''); \\n    GerenciaNetAuthorize(); \\n\\n    Result := ExecuteGerenciaNetRequest( 'createPlan','','', 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\\\"name\\\": \\\"My plan\\\",\\n\\t\\t\\\"interval\\\": 2,\\n\\t\\t\\\"repeats\\\": nil,\\n\\t}\\n\\n\\tres, err := gn.CreatePlan(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\": \"/Plan\"\n    \"name\"\n    \"interval\"\n    \"repeats\"</pre>\n\nPara verificar mais detalhes, <a href=\"https://dev.gerencianet.com.br/docs/playground-assinaturas#plan\" target=\"_blank\">acesse aqui</a> e explore em nosso Playground.\n\n<br>\n\n## b) Atributos que podem ser utilizados para criar plano de assinatura:\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>name</code>\",\n    \"1-0\": \"<code>interval</code>\",\n    \"2-0\": \"<code>repeats</code>\",\n    \"0-1\": \"**Nome do plano** de assinatura.\\n<strong class=\\\"descricao-atributo\\\"><span class=\\\"atributo\\\">Mínimo de 1 caractere e máximo de 255 caracteres.</span></strong>\",\n    \"1-1\": \"**Periodicidade da cobrança**. Determina o intervalo, **em meses**, que a cobrança da assinatura deve ser gerada. Informe <code>1</code> para assinatura mensal.\\n\\nExemplo 1: se <code>interval = 1</code> e <code>repeats = null</code>, será gerada 1 (uma) cobrança por mês, ou seja, a cobrança recorrente será mensal, de acordo com a primeira data de vencimento escolhida e gerada indefinidamente.\\n\\nExemplo 2: se <code>interval = 6</code> e <code>repeats = 2</code>, será gerada 1 (uma) cobrança a cada 6 (seis) meses, totalizando 2 (duas) cobranças em 12 meses (uma no 6º mês e outra no 12º mês).\\n\\n<strong class=\\\"descricao-atributo\\\"><span class=\\\"atributo\\\">Mínimo de 1 mês e máximo de 24 meses.</span></strong>\",\n    \"2-1\": \"**Quantas cobranças devem ser geradas**. Determina o número de vezes que a cobrança deve ser gerada. Se nada for enviado, a cobrança é gerada por tempo indeterminado ou até que o plano seja cancelado.\\n\\nExemplo 1: se <code>interval = 1</code> e <code>repeats = null</code>, será gerada 1 (uma) cobrança por mês, ou seja, a cobrança recorrente será mensal, de acordo com a primeira data de vencimento escolhida.\\n\\nExemplo 2: se <code>interval = 6</code> e <code>repeats = 2</code>, será gerada 1 (uma) cobrança a cada 6 (seis) meses, totalizando 2 (duas) cobranças em 12 meses (uma no 6º mês e outra no 12º mês).\\n\\n<strong class=\\\"descricao-atributo\\\"><span class=\\\"atributo\\\">Padrão: Ilimitado.\\nMínimo de 2 e máximo de 120.</span></strong>\",\n    \"0-2\": \"Sim\",\n    \"1-2\": \"Sim\",\n    \"2-2\": \"Não\",\n    \"0-3\": \"String\",\n    \"1-3\": \"Integer\",\n    \"2-3\": \"Integer\"\n  },\n  \"cols\": 4,\n  \"rows\": 3\n}\n[/block]\n<br>\n<hr>\n\n# 2. Crie inscrições (assinaturas) para vincular ao plano\n\nCom o plano criado, é o momento de criar assinaturas associando-as a plano(s). Assinaturas são aplicáveis quando você precisa cobrar de forma recorrente seus clientes. Desta forma, os custos subsequentes serão criados automaticamente com base na configuração do plano.\n\nCabe ressaltar que deve ser informado o <code>plan_id</code> do plano criado previamente no qual deseja associar.\n\nPara associar assinaturas a planos, você deve enviar uma requisição <code>POST</code> para a rota <code>/plan/:id/subscription</code>, onde <code>:id</code> é o <code>plan_id</code> do plano que deseja atrelar à assinatura.\n\nCaso queira, pode explorar e conhecer mais sobre este recurso <a href=\"https://dev.gerencianet.com.br/docs/playground-assinaturas#plan_id_subscription\" 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)\\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// 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//    'metadata' => $metadata\\n// ];\\n\\n$body  =  [\\n    'items' => $items\\n];\\n\\n// $plan_id refere-se ao ID do plano criado anteriormente\\n\\n$params = [\\n  'id' => $plan_id\\n];\\n \\ntry {\\n    $api = new Gerencianet($options);\\n    $subscription = $api->createSubscription($params, $body);\\n \\n    print_r($subscription);\\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');\\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 planBody = {\\n  name: 'My first plan',\\n  repeats: 24,\\n  interval: 2\\n}\\n\\nvar subscriptionBody = {\\n  items: [{\\n    name: 'Product 1',\\n    value: 1000,\\n    amount: 2\\n  }]\\n}\\n\\nvar gerencianet = new Gerencianet(options);\\n\\nvar createSubscription = function (response) {\\n  var params = {\\n    id: response.data.plan_id\\n  }\\n\\n  return gerencianet.createSubscription(params, subscriptionBody);\\n}\\n\\ngerencianet\\n  .createPlan({}, planBody)\\n  .then(createSubscription)\\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\\nplan = {\\n  name: \\\"My first plan\\\",\\n  repeats: 24,\\n  interval: 2\\n}\\n\\nsubscription = {\\n  items: [{\\n    name: \\\"Product 1\\\",\\n    value: 1000,\\n    amount: 2\\n  }]\\n}\\n\\ngerencianet = Gerencianet.new(options)\\nplan = gerencianet.create_plan(body: plan)\\n\\nparams = {\\n  id: plan[\\\"data\\\"][\\\"plan_id\\\"]\\n}\\n\\nputs gerencianet.create_subscription(params: params, body: subscription)\",\n      \"language\": \"ruby\"\n    },\n    {\n      \"code\": \"# encoding: utf-8\\n\\nfrom gerencianet import Gerencianet\\nfrom credentials import CREDENTIALS\\n\\ngn = Gerencianet(CREDENTIALS)\\n\\nparams = {\\n    'id': 1\\n}\\n\\nbody = {\\n    'items': [{\\n        'name': \\\"Product 1\\\",\\n        'value': 1000,\\n        'amount': 2\\n    }]\\n}\\n\\nresponse =  gn.create_subscription(params=params, body=body)\\nprint(response)\",\n      \"language\": \"python\"\n    },\n    {\n      \"code\": \"using System;\\n\\nnamespace Gerencianet.SDK.Examples\\n{\\n    class CreateSubscription\\n    {\\n        public static void Execute()\\n        {\\n            dynamic endpoints = new Endpoints(Credentials.Default.ClientId, Credentials.Default.ClientSecret, Credentials.Default.Sandbox);\\n\\n            var planBody = new {\\n                name = \\\"My first plan\\\",\\n                repeats = 24,\\n                interval = 2\\n            };\\n            \\n            var subscriptionBody = new\\n            {\\n                items = new[] {\\n                    new {\\n                        name = \\\"Product 1\\\",\\n                        value = 1000,\\n                        amount = 2\\n                    }\\n                }\\n            };\\n\\n            try\\n            {\\n                var planResponse = endpoints.CreatePlan(null, planBody);\\n\\n                var subscriptionParam = new {\\n                    id = planResponse.data.plan_id\\n                };\\n                var subscriptionResponse = endpoints.CreateSubscription(subscriptionParam, subscriptionBody);\\n                Console.WriteLine(subscriptionResponse);\\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/subscriptions/json/CreateSubscription.java\\n\\n\\nMap<String, Object>\\n\\nhttps://github.com/gerencianet/gn-api-sdk-java-examples/blob/master/src/main/java/br/com/gerencianet/subscriptions/map/CreateSubscription.java\\n\\n*/\",\n      \"language\": \"java\"\n    },\n    {\n      \"code\": \"interface\\nfunction CreateSubscription(Id: String): String;\\n\\nimplementation\\nuses uGerenciaClient, uGerenciaNetClientUtilities;\\n{... your code ... }\\n\\nfunction CreateSubscription(Id: String): String;\\nvar\\n  Params: String;\\n  Body: String;\\nbegin\\n    Params := CreateRequestParams( [ 'id='+Id ] ).Text;\\n    Body :=\\n    '{\\\"items\\\": ['+\\n      '{\\\"name\\\": \\\"Item 1\\\",'+\\n       '\\\"amount\\\": 1,'+\\n       '\\\"value\\\": 2000}'+\\n    ']}';\\n\\n    EnableService( 'GerenciaNet.dll' ); \\n    ConfigureService( ToPAnsiChar( 'client_id' ),ToPAnsiChar( 'client_secret' ),'sandbox','config.json',''); \\n    GerenciaNetAuthorize(); \\n\\n    Result := ExecuteGerenciaNetRequest( 'createSubscription',Params,'', 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}\\n\\n\\tres, err := gn.CreateSubscription(1, body) // no lugar do 1 coloque o plan_id correto\\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\": \"/Subscription\"\n    \"items\"\n        \"name\"\n        \"value\"\n        \"amount\"\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-assinaturas#plan_id_subscription\" target=\"_blank\">acesse aqui</a> e explore em nosso Playground.\n\n<br>\n\n## b) Atributos que podem ser utilizados para associar uma assinatura a um plano:\n[block:parameters]\n{\n  \"data\": {\n    \"0-0\": \"<code>items</code>\",\n    \"0-1\": \"Contém as informações dos itens.\\n\\n<span class=\\\"tab1\\\"><em>Atributos de items</em></span>\\n\\n<div class=\\\"tab2\\\">\\n<code>name*</code> // Nome da inscrição associada ao plano de assinatura.\\n<strong class=\\\"descricao-atributo\\\"><span class=\\\"atributo\\\">Mínimo de 1 caractere e máximo de 255 caracteres (String).</span></strong></div>\\n<div class=\\\"tab2\\\">\\n<code>value*</code> // Valor da inscrição associada ao plano de assinatura.\\n<strong class=\\\"descricao-atributo\\\"><span class=\\\"atributo\\\">(Integer).</span></strong></div>\\n<div class=\\\"tab2\\\">\\n<code>amount</code> // Quantidade.\\n<strong class=\\\"descricao-atributo\\\"><span class=\\\"atributo\\\">Mínimo de 1 (Integer).</span></strong></div>\",\n    \"0-2\": \"Sim\",\n    \"0-3\": \"Array\",\n    \"h-0\": \"Atributo\",\n    \"h-1\": \"Descrição\",\n    \"h-2\": \"Obrigatório\",\n    \"h-3\": \"Tipo\",\n    \"1-0\": \"<code>shippings</code>\",\n    \"2-0\": \"<code>metadata</code>\",\n    \"1-1\": \"Contém as informações de envio.\\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> // Código \\\"Identificador da Conta\\\", ú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 assinatura.\\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    \"1-2\": \"Não\",\n    \"2-2\": \"Não\",\n    \"2-3\": \"Array\",\n    \"1-3\": \"Array\"\n  },\n  \"cols\": 4,\n  \"rows\": 3\n}\n[/block]\n<br>\n<hr>\n\n# 3. Defina a forma de pagamento da assinatura e os dados do cliente\n\nApós criar o plano de assinatura e associar assinaturas à planos, é o momento de associar a forma de pagamento recorrente das assinaturas, que pode ser <code>banking_billet</code> (boleto bancário) ou <code>credit_card</code> (cartão de crédito).\n\n* **Cartão de Crédito**: seu cliente realiza o pagamento, de acordo com a periodicidade que você definiu (mensal, trimestral, etc) no plano, sendo o mesmo valor cobrado automaticamente no cartão de crédito de seu cliente. Na recorrência por cartão, seu cliente digita os dados do cartão apenas no primeiro pagamento, depois a cobrança é realizada automaticamente sem que ele precise informar os dados novamente;\n\n* **Boleto Bancário**: será gerado conforme o número de repetições definido pelo plano, podendo ser enviado por e-mail. O assinante ou o vendedor podem cancelar a assinatura a qualquer momento. Quando isso ocorre, os dois são avisados via e-mail, com todos os detalhes do cancelamento.\n[block:callout]\n{\n  \"type\": \"info\",\n  \"title\": \"Atributo \\\"trial_days\\\" que permite conceder um período de teste\",\n  \"body\": \"A API disponibiliza o atributo <code>trial_days</code>, que permite definir uma quantidade de dias para teste gratuito do plano de assinatura. Atributo disponível somente quando o pagamento for <code>credit_card</code>.\\n\\nPara detalhes, consulte a tabela mais abaixo: <code>Objeto Credit_Card (\\\"cartão de crédito\\\")</code>\"\n}\n[/block]\nPara associar assinaturas à forma de pagamento, você deve enviar uma requisição <code>POST</code> para a rota <code>/subscription/:id/pay</code>, onde <code>:id</code> é o <code>subscription_id</code> da assinatura desejada.\n\nCaso queira, pode explorar e conhecer mais sobre este recurso <a href=\"https://dev.gerencianet.com.br/docs/playground-assinaturas#subscription_id_pay\" 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\": \"// Função paySubscription\\n\\n// Forma de pagamento por boleto bancário (\\\"banking_billet\\\")\\n\\n$params = ['id' => $subscription_id];\\n\\n$customer = [\\n    'name' => 'Gorbadoc Oldbuck',\\n    'cpf' => '94271564656',\\n    'phone_number' => '5144916523'\\n];\\n\\n$body = [\\n    'payment' => [\\n        'banking_billet' => [\\n            'expire_at' => '2018-12-12',\\n            'customer' => $customer\\n        ]\\n    ]\\n];\\n\\ntry {\\n    $api = new Gerencianet($options);\\n    $subscription = $api->paySubscription($params, $body);\\n\\n    print_r($subscription);\\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\\n\\n// Forma de pagamento por cartão de crédito (\\\"credit_card\\\")\\n\\n$params = ['id' => $subscription_id];\\n\\n$paymentToken = 'payment_token';\\n\\n$customer = [\\n    'name' => 'Gorbadoc Oldbuck',\\n    'cpf' => '94271564656',\\n    'phone_number' => '5144916523',\\n    'email' => 'oldbuck:::at:::gerencianet.com.br',\\n    'birth' => '1977-01-15'\\n];\\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\\n$body = [\\n    'payment' => [\\n        'credit_card' => [\\n            'billing_address' => $billingAddress,\\n            'payment_token' => $paymentToken,\\n            'customer' => $customer\\n        ]\\n    ]\\n];\\n\\ntry {\\n    $api = new Gerencianet($options);\\n    $subscription = $api->paySubscription($params, $body);\\n\\n    print_r($subscription);\\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\": \"// Função paySubscription\\n\\n// Forma de pagamento por boleto bancário (\\\"banking_billet\\\")\\n\\nvar tenDaysFromNow = moment()\\n  .add(10, 'days')\\n  .format('YYYY-MM-DD 00:00:00');\\n\\nvar params = {\\n  id: 1000 // informe o charge_id\\n}\\n\\nvar body = {\\n  payment: {\\n    banking_billet: {\\n      expire_at: tenDaysFromNow,\\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\\ngerencianet\\n  .paySubscription(params, body)\\n  .then(console.log)\\n  .catch(console.log)\\n  .done();\\n\\n\\n// Forma de pagamento por cartão de crédito (\\\"credit_card\\\")\\n\\nvar params = {\\n  id: 1000 // informe o charge_id\\n}\\n\\nvar body = {\\n  payment: {\\n    credit_card: {\\n      payment_token: 'payment_token_aqui',\\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\\ngerencianet\\n  .paySubscription(params, body)\\n  .then(console.log)\\n  .catch(console.log)\\n  .done();\",\n      \"language\": \"javascript\",\n      \"name\": \"NodeJS\"\n    },\n    {\n      \"code\": \"# Função pay_subscription\\n\\n# Forma de pagamento por boleto bancário (\\\"banking_billet\\\")\\n\\nparams = {\\n  id: 1113 # informe o charge_id\\n}\\n\\nvar body = {\\n  payment: {\\n    banking_billet: {\\n      expire_at: \\\"2016-12-12\\\",\\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\\ngerencianet = Gerencianet.new(options)\\ngerencianet.pay_subscription(params: params, body: body)\\n\\n\\n# Forma de pagamento por cartão de crédito (\\\"credit_card\\\")\\n\\nparams = {\\n  id: 1113 # informe o charge_id\\n}\\n\\nbody = {\\n  payment: {\\n    credit_card: {\\n      payment_token: \\\"e0c210bb679fea225a586256234f8ce179fd16c5\\\",\\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\\ngerencianet = Gerencianet.new(options)\\ngerencianet.pay_subscription(params: params, body: body)\",\n      \"language\": \"ruby\"\n    },\n    {\n      \"code\": \"# Função pay_subscription\\n\\n# Forma de pagamento por boleto bancário (\\\"banking_billet\\\")\\n# encoding: utf-8\\n\\nfrom gerencianet import Gerencianet\\n\\ncredentials = {\\n    'client_id': 'client_id',\\n    'client_secret': 'client_secret',\\n    'sandbox': True\\n}\\n\\ngn = Gerencianet(credentials)\\n\\nbody = {\\n    'payment': {\\n        'banking_billet': {\\n            'expire_at': '2016-12-12',\\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\\nparams = {\\n    'id': charge['data']['charge_id'] # informe o charge_id\\n}\\n\\nresponse = gn.pay_subscription(params=params, body=body)\\nprint(response)\\n\\n\\n# Forma de pagamento por cartão de crédito (\\\"credit_card\\\")\\n# encoding: utf-8\\n\\nfrom gerencianet import Gerencianet\\n\\ncredentials = {\\n    'client_id': 'client_id',\\n    'client_secret': 'client_secret',\\n    'sandbox': True\\n}\\n\\ngn = Gerencianet(credentials)\\n\\nparams = {\\n    'id': 123 # informe o charge_id\\n}\\n\\nbody = {\\n    'payment': {\\n        'credit_card': {\\n            'installments': 1,\\n            'payment_token': \\\"\\\", #see credit card flow to see how to get this\\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\\nresponse =  gn.pay_subscription(params=params, body=payment)\\nprint(response)\",\n      \"language\": \"python\"\n    },\n    {\n      \"code\": \"<%-- Função PaySubscription --%>\\n\\n<%-- Forma de pagamento por boleto bancário (\\\"banking_billet\\\") --%>\\n\\nusing Gerencianet.SDK;\\n...\\ndynamic endpoints = new Endpoints(\\\"client_id\\\", \\\"client_secret\\\", true);\\n\\nvar body = new {\\n    payment = new {\\n        banking_billet = new {\\n            expire_at = \\\"2016-12-12\\\",\\n            customer = new {\\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\\nvar param = new {\\n    id = chargeResult.data.charge_id # <%-- informe o charge_id --%>\\n};\\n\\nvar response = endpoints.PaySubscription(param, body);\\nConsole.WriteLine(response);\\n\\n\\n<%-- Forma de pagamento por cartão de crédito (\\\"credit_card\\\") --%>\\n\\nusing Gerencianet.SDK;\\n...\\ndynamic endpoints = new Endpoints(\\\"client_id\\\", \\\"client_secret\\\", true);\\n\\nvar param = {\\n    id = 123 <%-- informe o charge_id --%>\\n};\\n\\nvar body = new {\\n    payment = new {\\n        credit_card = new {\\n            installments = 1,\\n            payment_token = \\\"\\\", // see credit card flow to see how to get this\\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 = \\\"04267484171\\\",\\n                birth = \\\"1977-01-15\\\",\\n                phone_number = \\\"5144916523\\\"\\n            }\\n        }\\n    }\\n};\\n\\nvar response = endpoints.PaySubscription(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/subscriptions/json/PaySubscription.java\\n\\n\\nMap<String, Object>\\n\\nhttps://github.com/gerencianet/gn-api-sdk-java-examples/blob/master/src/main/java/br/com/gerencianet/subscriptions/map/PaySubscription.java\\n\\n*/\",\n      \"language\": \"java\"\n    },\n    {\n      \"code\": \"// Função paySubscription\\n\\n// Forma de pagamento por boleto bancário (\\\"banking_billet\\\")\\n\\ninterface\\nfunction PaySubscription(Id: String): String;\\n\\nimplementation\\nuses uGerenciaClient, uGerenciaNetClientUtilities;\\n{... your code ... }\\n\\nfunction PaySubscription(Id: String): String;\\nvar\\n   Body : String;\\n   PaymentParams: String;\\n   \\nconst BodyText = '{'+\\n  '\\\"payment\\\": {'+\\n    '\\\"banking_billet\\\": {'+\\n      '\\\"customer\\\": {'+\\n        '\\\"email\\\": \\\"email_do_cliente@servidor.com.br\\\",'+\\n        '\\\"phone_number\\\": \\\"5144916523\\\",'+\\n        '\\\"birth\\\": \\\"1977-07-17\\\",'+\\n        '\\\"address\\\": {'+\\n          '\\\"street\\\": \\\"Av. JK\\\",'+\\n          '\\\"number\\\": 909,'+\\n          '\\\"neighborhood\\\": \\\"Bauxita\\\",'+\\n          '\\\"complement\\\": \\\"\\\",'+\\n          '\\\"city\\\": \\\"Ouro Preto\\\",'+\\n          '\\\"state\\\": \\\"MG\\\",'+\\n          '\\\"zipcode\\\": \\\"35400000\\\"'+\\n        '},'+\\n        '\\\"name\\\": \\\"Gorbadoc Oldbuck\\\",'+\\n        '\\\"cpf\\\": \\\"94271564656\\\"'+\\n      '},'+\\n      '\\\"message\\\": \\\"Test\\\",'+\\n      '\\\"expire_at\\\": \\\"2019-02-21\\\"'+\\n    '}'+\\n  '}'+\\n'}';\\n\\nbegin\\n  PaymentParams := CreateRequestParams( [ 'id='+id ] ).Text;\\n  Body := BodyText;\\n\\n  EnableService( 'GerenciaNet.dll' ); \\n  ConfigureService( ToPAnsiChar( 'client_id' ),ToPAnsiChar( 'client_secret' ),'sandbox','config.json',''); \\n  GerenciaNetAuthorize(); \\n\\n  Result := ExecuteGerenciaNetRequest( 'paySubscription',PaymentParams,'',Body );\\nend;\\n\\n\\n\\n// Forma de pagamento por cartão de crédito (\\\"credit_card\\\")\\n\\n\\ninterface\\nfunction PaySubscriptionWithCreditCard(Id, Token: String): String;\\n\\nimplementation\\nuses uGerenciaClient, uGerenciaNetClientUtilities;\\n{... your code ... }\\n\\nfunction PaySubscriptionWithCreditCard(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  PaymentParams := CreateRequestParams( [ 'id='+id ] ).Text;\\n\\n  EnableService( 'GerenciaNet.dll' ); \\n  ConfigureService( ToPAnsiChar( 'client_id' ),ToPAnsiChar( 'client_secret' ),'sandbox','config.json',''); \\n  GerenciaNetAuthorize(); \\n\\n  Result := ExecuteGerenciaNetRequest( 'paySubscription',PaymentParams,'',Body );\\nend;\\n\",\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\\tcustomer := map[string]interface{}{\\n\\t\\t\\\"name\\\": \\\"Gorbadoc Oldbuck\\\",\\n\\t\\t\\\"cpf\\\": \\\"04267484171\\\",\\n\\t\\t\\\"phone_number\\\": \\\"5144916523\\\",\\n\\t}\\n\\n\\tbody := map[string]interface{} {\\n\\t\\t\\\"payment\\\": map[string]interface{} {\\n\\t\\t\\t\\\"banking_billet\\\": map[string]interface{} {\\n\\t\\t\\t\\t\\\"expire_at\\\": \\\"2018-12-12\\\",\\n\\t\\t\\t\\t\\\"customer\\\": customer,\\n\\t\\t\\t},\\n\\t\\t},\\n\\t}\\n\\n\\tres, err := gn.PaySubscription(1, body) // no lugar do 1 coloque o subscription_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\": \"/SubscriptionPay\"\n    \"payment\"\n        \"banking_billet\"\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            \"expire_at\"\n            \"discount\"\n                \"type\"\n                    \"percentage\"\n                    \"currency\"\n                \"value\"\n            \"conditional_discount\"\n                \"type\"\n                    \"percentage\",\n                    \"currency\"\n                \"value\"\n                \"until_date\"\n            \"configurations\"\n                \"fine\"\n                \"interest\"\n            \"message\"\n\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            \"billing_address\"\n                \"street\"\n                \"number\"\n                \"neighborhood\"\n                \"zipcode\"\n                \"city\"\n                \"complement\"\n                \"state\"\n            \"payment_token\"\n            \"discount\"\n                \"type\"\n                    \"percentage\"\n                    \"currency\"\n                \"value\"\n            \"message\"\n            \"trial_days\"</pre>\n\nPara verificar mais detalhes, <a href=\"https://dev.gerencianet.com.br/docs/playground-assinaturas#subscription_id_pay\" target=\"_blank\">acesse aqui</a> e explore em nosso Playground.\n\n<br>\n\n## b) Atributos que podem ser usados para definir a forma de pagamento da assinatura:\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-1\": \"Tag raiz\",\n    \"0-2\": \"Sim\",\n    \"0-3\": \"Objeto **Payment**\"\n  },\n  \"cols\": 4,\n  \"rows\": 1\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-0\": \"<code>banking_billet</code>\",\n    \"0-1\": \"Forma de pagamento através de \\\"boleto bancário\\\"\",\n    \"0-2\": \"Sim<strong class=\\\"atributo-obrigatorio\\\">**</strong>\",\n    \"1-2\": \"Sim<strong class=\\\"atributo-obrigatorio\\\">**</strong>\",\n    \"1-1\": \"Forma de pagamento através de \\\"cartão de crédito\\\"\",\n    \"1-0\": \"<code>credit_card</code>\",\n    \"0-3\": \"Object\",\n    \"1-3\": \"Object\"\n  },\n  \"cols\": 4,\n  \"rows\": 2\n}\n[/block]\n<strong class=\"atributo-obrigatorio-texto\">** O atributo relacionado à forma de pagamento é obrigatória e pode ser boleto bancário ou cartão de crédito</strong>\n\n<br />\n*Objeto **Banking_Billet*** (\"boleto bancário\")\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>name</code>\",\n    \"1-0\": \"<code>cpf</code>\",\n    \"2-0\": \"<code>email</code>\",\n    \"3-0\": \"<code>phone_number</code>\",\n    \"4-0\": \"<code>birth</code>\",\n    \"5-0\": \"<code>address</code>\",\n    \"6-0\": \"<code>juridical_person</code>\",\n    \"7-0\": \"<code>expire_at</code>\",\n    \"8-0\": \"<code>discount</code>\",\n    \"0-1\": \"Nome do cliente.\\n<strong class=\\\"descricao-atributo\\\"><span class=\\\"atributo\\\">Mínimo de 1 caractere e máximo de 255.</span></strong>\",\n    \"1-1\": \"CPF válido do cliente (sem pontos, vírgulas ou hífen).\\n<strong class=\\\"descricao-atributo\\\"><span class=\\\"atributo\\\">Tamanho: 11 caracteres.</span></strong>\",\n    \"2-1\": \"Email do cliente.\\n<strong class=\\\"descricao-atributo\\\"><span class=\\\"atributo\\\">Máximo de 255 caracteres</span></strong>\",\n    \"3-1\": \"Telefone do cliente.\\n<strong class=\\\"descricao-atributo\\\"><span class=\\\"atributo\\\">Exemplo: 31996458785</span></strong>\",\n    \"4-1\": \"Data de nascimento.\\n<strong class=\\\"descricao-atributo\\\"><span class=\\\"atributo\\\">Formato: YYYY-MM-DD</span></strong>\",\n    \"5-1\": \"Endereço do cliente.\\n\\n<span class=\\\"tab1\\\">*Atributos de 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    \"6-1\": \"Dados de pessoa jurídica\\n\\n<span class=\\\"tab1\\\">*Atributos de juridical_person*</span>\\n\\n<div class=\\\"tab2\\\">\\n<code>corporate_name<strong class=\\\"atributo-obrigatorio\\\">*</strong></code> // Nome da razão social. <strong class=\\\"descricao-atributo\\\"><span class=\\\"atributo\\\">Mínimo de 1 caractere e máximo de 255. String.</strong></span></div>\\n\\n<div class=\\\"tab2\\\">\\n<code>cnpj<strong class=\\\"atributo-obrigatorio\\\">*</strong></code> // CNPJ da empresa. <strong class=\\\"descricao-atributo\\\"><span class=\\\"atributo\\\">Tamanho: 14 caracteres. String.</strong></span>\\n</div>\",\n    \"7-1\": \"Data de vencimento do boleto.\\n<strong class=\\\"descricao-atributo\\\"><span class=\\\"atributo\\\">Formato: YYYY-MM-DD</span></strong>\",\n    \"8-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 será dado em centavos. Caso o tipo do desconto seja <code>percentage</code>, o valor deverá ser multiplicado por 100. Exemplos:\\n1) <code>currency</code> // valor desta tag para desconto de R$ 5,99 é 599;\\n2) <code>percentage</code> // valor desta tag para desconto de 15% é 1500.</strong>\\n</div>\",\n    \"0-2\": \"Sim\\n\\n*Obs: Para Pessoa Jurídica não serão obrigatórios o nome e CPF, apenas os demais dados do cliente.*\",\n    \"1-2\": \"Sim\\n\\n*Obs: Para Pessoa Jurídica não serão obrigatórios o nome e CPF, apenas os demais dados do cliente.*\",\n    \"2-2\": \"Não\",\n    \"3-2\": \"Sim\",\n    \"4-2\": \"Não\",\n    \"5-2\": \"Não\",\n    \"6-2\": \"Não\",\n    \"7-2\": \"Sim\",\n    \"8-2\": \"Não\",\n    \"0-3\": \"String\",\n    \"1-3\": \"String\",\n    \"2-3\": \"String\",\n    \"3-3\": \"String\",\n    \"4-3\": \"String\",\n    \"5-3\": \"Object\",\n    \"6-3\": \"Object\",\n    \"7-3\": \"String\",\n    \"8-3\": \"String\",\n    \"10-0\": \"<code>configurations</code>\",\n    \"10-1\": \"Permite incluir no boleto multa e juros caso seja pago após o vencimento.\\n\\n<span class=\\\"tab1\\\">*Atributos de configurations*</span>\\n\\n<div class=\\\"tab2\\\">\\n<strong class=\\\"descricao-atributo\\\"><span class=\\\"atributo\\\">fine</span>, // valor cobrado de multa após o vencimento. Por exemplo: se você quiser 2%, você deve informar <code>200</code>. <strong class=\\\"descricao-atributo\\\"><span class=\\\"atributo\\\">Mínimo de 0 e máximo de 1000. Integer. \\n\\nCaso você possua configurações de multa ativada no Fortunus e queira gerar emissões na API sem multa, utilize <code>0</code> como valor do atributo <code>fine</code></strong></span></div>\\n</strong>\\n</div>\\n\\n<div class=\\\"tab2\\\">\\n<strong class=\\\"descricao-atributo\\\"><span class=\\\"atributo\\\">interest</span>, // valor cobrado de juros por dia após a data de vencimento. Por exemplo: se você quiser 0,033%, você deve informar <code>33</code>. <strong class=\\\"descricao-atributo\\\"><span class=\\\"atributo\\\">Mínimo de 0 e máximo de 330. Integer.\\n\\nCaso você possua configurações de multa ativada no Fortunus e queira gerar emissões na API sem juros, utilize <code>0</code> como valor do atributo <code>interest</code></strong></span></div>\\n</strong>\\n</div>\",\n    \"10-2\": \"Não\",\n    \"10-3\": \"Object\",\n    \"11-0\": \"<code>message</code>\",\n    \"11-1\": \"Permite incluir no boleto uma \\\"observação\\\", ou em outras palavras, uma mensagem para o cliente. Essa mensagem poderá ser vista nos e-mails relacionados à cobrança, no boleto ou carnê.\\n<strong class=\\\"descricao-atributo\\\"><span class=\\\"atributo\\\">Máximo de 80 caracteres. String.</span></strong>\",\n    \"11-2\": \"Não\",\n    \"11-3\": \"String\",\n    \"9-0\": \"<code>conditional_discount</code>\",\n    \"9-1\": \"Define desconto condicional que é válido até uma data específica. Se o pagamento não for efetuado até aquela data, o desconto é invalidado.\\n\\n<span class=\\\"tab1\\\">*Atributos de conditional_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>.</strong></div>\\n\\n<div class=\\\"tab2\\\">\\n<strong class=\\\"descricao-atributo\\\"><span class=\\\"atributo\\\">until_date<strong class=\\\"atributo-obrigatorio\\\">*</strong></span>, // Data máxima que o desconto será concedido. (String). </strong><strong class=\\\"descricao-atributo\\\"><span class=\\\"atributo\\\">Formato: YYYY-MM-DD</span></strong></div>\",\n    \"9-2\": \"Não\",\n    \"9-3\": \"Object\"\n  },\n  \"cols\": 4,\n  \"rows\": 12\n}\n[/block]\n<br />\n*Objeto **Credit_Card*** (\"cartão de crédito\")\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-1\": \"Dados pessoais do pagador.\\n\\n<span class=\\\"tab1\\\">*Atributos de customer*</span>\\n\\n<div class=\\\"tab2\\\"><code>name<strong class=\\\"atributo-obrigatorio\\\">*</strong></code> // nome <strong class=\\\"descricao-atributo\\\"><span class=\\\"atributo\\\">(String)</strong></span></div>\\n\\n<div class=\\\"tab2\\\"><code>cpf<strong class=\\\"atributo-obrigatorio\\\">*</strong></code> // CPF do cliente (sem pontos, vírgulas ou hífen) <strong class=\\\"descricao-atributo\\\"><span class=\\\"atributo\\\">(String)</strong></span></div>\\n\\n<div class=\\\"tab2\\\"><code>email<strong class=\\\"atributo-obrigatorio\\\">*</strong></code> // Endereço de email válido do cliente <strong class=\\\"descricao-atributo\\\"><span class=\\\"atributo\\\">(String)</strong></span></div>\\n\\n<div class=\\\"tab2\\\"><code>phone_number<strong class=\\\"atributo-obrigatorio\\\">*</strong></code> // Telefone válido do cliente, sem caracteres especiais <strong class=\\\"descricao-atributo\\\"><span class=\\\"atributo\\\">(String)</strong></span></div>\\n\\n<div class=\\\"tab2\\\"><code>birth<strong class=\\\"atributo-obrigatorio\\\">*</strong></code> // Data de Nascimento (data válida em formato YYYY-MM-DD) <strong class=\\\"descricao-atributo\\\"><span class=\\\"atributo\\\">(String)</strong></span></div>\\n\\n<div class=\\\"tab2\\\"><code>address</code> // Endereço de Entrega <strong class=\\\"descricao-atributo\\\"><span class=\\\"atributo\\\">(Object)</strong></span> (<a href=\\\"https://dev.gerencianet.com.br/docs/definir-enderecos\\\" target=\\\"_blank\\\">mais informações</a>)</div>\\n\\n<div class=\\\"tab2\\\"><code>juridical_person</code> // Dados de pessoa jurídica <strong class=\\\"descricao-atributo\\\"><span class=\\\"atributo\\\">(Object) (<a href=\\\"https://dev.gerencianet.com.br/docs/pagar-com-pessoa-juridica\\\" target=\\\"_blank\\\">mais informações</a>)</strong></span></div>\",\n    \"0-2\": \"Sim\",\n    \"0-3\": \"Object\",\n    \"1-3\": \"Object\",\n    \"2-3\": \"Object\",\n    \"3-3\": \"String\",\n    \"3-0\": \"<code>payment_token</code>\",\n    \"2-0\": \"<code>billing_address</code>\",\n    \"1-0\": \"<code>discount</code>\",\n    \"2-2\": \"Sim\",\n    \"1-2\": \"Não\",\n    \"3-2\": \"Sim\",\n    \"1-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 será dado em centavos. Caso o tipo do desconto seja <code>percentage</code>, o valor deverá ser multiplicado por 100. Exemplos:\\n1) <code>currency</code> // valor desta tag para desconto de R$ 5,99 é 599;\\n2) <code>percentage</code> // valor desta tag para desconto de 15% é 1500.</strong>\\n</div>\",\n    \"3-1\": \"Token único de pagamento obtido na primeira etapa da geração da transação.\",\n    \"2-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    \"4-0\": \"<code>message</code>\",\n    \"4-1\": \"Permite incluir no boleto uma \\\"observação\\\", ou em outras palavras, uma mensagem para o cliente. Essa mensagem poderá ser vista nos e-mails relacionados à cobrança, no boleto ou carnê.\\n<strong class=\\\"descricao-atributo\\\"><span class=\\\"atributo\\\">Máximo de 80 caracteres. String.</span></strong>\",\n    \"4-2\": \"Não\",\n    \"4-3\": \"String\",\n    \"5-0\": \"<code>trial_days</code>\",\n    \"5-2\": \"Não\",\n    \"5-3\": \"Integer\",\n    \"5-1\": \"Permite definir uma quantidade de dias para teste gratuito do plano de assinatura. O período para a avaliação gratuita, definido em <code>trial_days</code>, começa a contar a partir do dia seguinte ao dia da realização da assinatura. Atributo disponível somente quando o pagamento for <code>credit_card</code>.\\n<strong class=\\\"descricao-atributo\\\"><span class=\\\"atributo\\\">Mínimo de 1 dia e máximo de 365 dias.</span></strong>\\n<strong class=\\\"descricao-atributo\\\"><span class=\\\"atributo\\\">Por exemplo: Criei um plano de assinatura em 25/09/2017 e defini <code>trial_days: 7</code>. Isso significa que o primeiro pagamento será cobrado no dia 02/10/2017, e se for cancelado antes de 02/10/2017, então nada será cobrado.</span></strong>\"\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 à assinatura 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 uma assinatura (recorrência) 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 assinatura\",\n  \"body\": \"Todas as assinaturas possuem status, que representam a \\\"situação\\\" dessa assinatura. 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 assinaturas.\"\n}\n[/block]\n\n[block:callout]\n{\n  \"type\": \"warning\",\n  \"title\": \"Callbacks (notificações) das assinaturas da API para seu sistema\",\n  \"body\": \"As notificações permitem que você seja informado quando uma assinatura tiver seu status alterado. Dessa forma, você poderá identificar quando a 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}\n[/block]\n<br>\n<hr>\n\n# 4. Outros endpoints e métodos\n\nExistem outros endpoints e métodos relacionados a assinaturas (cobrança recorrente) que estão disponíveis na API e podem ser explorados pelo integrador. Confira a relação completa:\n\n- [Listar os planos de assinatura existentes](https://dev.gerencianet.com.br/docs/assinaturas-outros-endpoints#section-1-listar-os-planos-de-assinatura-existentes)\n\n- [Cancelar plano de assinatura](https://dev.gerencianet.com.br/docs/assinaturas-outros-endpoints#section-2-cancelar-plano-de-assinatura)\n\n- [Retornar informações de assinatura vinculada a um plano](https://dev.gerencianet.com.br/docs/assinaturas-outros-endpoints#section-3-retornar-informa-es-de-assinatura-vinculada-a-um-plano)\n\n- [Cancelar assinaturas ativas em um plano](https://dev.gerencianet.com.br/docs/assinaturas-outros-endpoints#section-4-cancelar-assinaturas-ativas-em-um-plano)\n\n- [Alterar URL de notificação (notification_url) e/ou custom_id de assinaturas](https://dev.gerencianet.com.br/docs/assinaturas-outros-endpoints#section-5-alterar-url-de-notifica-o-notification_url-e-ou-custom_id-de-assinaturas)\n\n- [Listar parcelas, de acordo com a bandeira do cartão de crédito](https://dev.gerencianet.com.br/docs/assinaturas-outros-endpoints#section-6-listar-parcelas-de-acordo-com-a-bandeira-do-cart-o-de-cr-dito)\n\n- [Acrescentar informações ao histórico da assinatura](https://dev.gerencianet.com.br/docs/assinaturas-outros-endpoints#section-7-acrescentar-informa-es-ao-hist-rico-da-assinatura)\n\n- [Editar nome do plano de assinatura](https://dev.gerencianet.com.br/v1/docs/assinaturas-outros-endpoints#section-8-editar-nome-do-plano-de-assinatura)\n\n<br>\n<hr>\n\n# 5. Vídeo: Criando Assinaturas (cobrança recorrente)\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 um plano de assinatura e associar à forma de pagamento (boleto ou cartão) para cobrar seu cliente de forma recorrente.\n\n## 5.1. Criando assinaturas (cobrança recorrente) pela API de integração Gerencianet\n[block:html]\n{\n  \"html\": \"<iframe width=\\\"560\\\" height=\\\"315\\\" src=\\\"https://www.youtube.com/embed/xrRUBi6wG2Y\\\" frameborder=\\\"0\\\" allowfullscreen></iframe>\"\n}\n[/block]\n<br>\n[block:callout]\n{\n  \"type\": \"info\",\n  \"title\": \"Curso Completo de Integração com a API Gerencianet\",\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<hr>\n\n# 6. Próximos Passos\n\nCom as assinaturas criadas, é importante conhecer [todos os endpoints](https://dev.gerencianet.com.br/docs/assinaturas-outros-endpoints) que podem ser utilizados. Além disso, caso tenha ficado com alguma dúvida sobre o mecanismo das assinaturas, veja [como ela funciona](https://dev.gerencianet.com.br/docs/assinaturas-como-funcionam).","excerpt":"Você está em: *\"Assinaturas (Recorrência) > Criando assinaturas\"*","slug":"criando-assinaturas","type":"basic","title":"Criando assinaturas"}

Criando assinaturas

Você está em: *"Assinaturas (Recorrência) > Criando assinaturas"*

Saiba como gerar um conjunto de cobranças recorrentes para seus clientes. Para criar uma assinatura, é bem simples e requer apenas três passos: 1. [Crie o plano de assinatura](https://dev.gerencianet.com.br/docs/criando-assinaturas#section-1-crie-o-plano-de-assinatura), definindo a periodicidade e quantas cobranças devem ser geradas; 2. [Crie inscrições (assinaturas) para vincular ao plano](https://dev.gerencianet.com.br/docs/criando-assinaturas#section-2-crie-inscri-es-assinaturas-para-vincular-ao-plano); 3. [Defina a forma de pagamento da assinatura e os dados do cliente](https://dev.gerencianet.com.br/docs/criando-assinaturas#section-3-defina-a-forma-de-pagamento-da-assinatura-e-os-dados-do-cliente). Depois de criar o(s) plano(s) de assinatura desejado(s), você só precisará executar o segundo e terceiro passo para cada inscrição subsequente. O restante desta página apresenta as três etapas detalhadas, mas você precisa instalar uma de nossas bibliotecas em seu servidor para executar os códigos de exemplo. [Certifique-se de que a SDK da Gerencianet foi instalada](https://dev.gerencianet.com.br/docs#section-2-bibliotecas). <hr> # 1. Crie o plano de assinatura Inicialmente, será criado o **plano de assinatura**, em que o integrador poderá definir três informações: - Nome do plano; - Periodicidade da cobrança (por exemplo, <code>1</code> para mensal); - Quantas cobranças devem ser geradas. Para criar um plano de assinatura, você deve enviar uma requisição <code>POST</code> para a rota <code>/plan</code>. Caso queira, pode explorar e conhecer mais sobre este recurso <a href="https://dev.gerencianet.com.br/docs/playground-assinaturas#plan" 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$body = [\n 'name' => 'Meu Plano de Assinatura', // nome do plano de assinatura\n 'interval' => 1, // periodicidade da cobrança (em meses) - informe 1 para assinatura mensal\n 'repeats' => null // número de vezes que a cobrança deve ser gerada (padrão: null, que significa que a cobrança é gerada por tempo indeterminado ou até que o plano seja cancelado)\n];\n \ntry {\n $api = new Gerencianet($options);\n $plan = $api->createPlan([], $body);\n \n print_r($plan);\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');\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 name: 'Meu Plano de Assinatura',\n repeats: null,\n interval: 1\n}\n \nvar gerencianet = new Gerencianet(options);\n \ngerencianet\n .createPlan({}, 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 name: \"Meu Plano de Assinatura\",\n repeats: null,\n interval: 1\n}\n \ngerencianet = Gerencianet.new(options)\ngerencianet.create_plan(body: body)\n", "language": "ruby" }, { "code": "\nfrom 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 'name': \"Meu Plano de Assinatura\",\n 'repeats': null,\n 'interval': 1\n}\n \nplan = gn.create_plan(body=body)\n", "language": "python" }, { "code": "dynamic endpoints = new Endpoints(\"client_id\", \"client_secret\", true);\n \nvar body = new {\n name = \"Meu Plano de Assinatura\",\n repeats = null,\n interval = 1\n};\n \nvar planResponse = endpoints.CreatePlan(null, body);\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/subscriptions/json/CreatePlan.java\n\n\nMap<String, Object>\n\nhttps://github.com/gerencianet/gn-api-sdk-java-examples/blob/master/src/main/java/br/com/gerencianet/subscriptions/map/CreatePlan.java\n\n*/", "language": "java" }, { "code": "interface\nfunction CreatePlan: String;\n\nimplementation\nuses uGerenciaClient, uGerenciaNetClientUtilities;\n{... your code ... }\n\nfunction CreatePlan: String;\nvar\n Body: String;\nbegin\n Body :=\n '{\"name\": \"my_plan\",'+\n '\"interval\": 2,'+\n '\"repeats\": 2}';\n\n EnableService( 'GerenciaNet.dll' ); \n ConfigureService( ToPAnsiChar( 'client_id' ),ToPAnsiChar( 'client_secret' ),'sandbox','config.json',''); \n GerenciaNetAuthorize(); \n\n Result := ExecuteGerenciaNetRequest( 'createPlan','','', 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\"name\": \"My plan\",\n\t\t\"interval\": 2,\n\t\t\"repeats\": nil,\n\t}\n\n\tres, err := gn.CreatePlan(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": "/Plan" "name" "interval" "repeats"</pre> Para verificar mais detalhes, <a href="https://dev.gerencianet.com.br/docs/playground-assinaturas#plan" target="_blank">acesse aqui</a> e explore em nosso Playground. <br> ## b) Atributos que podem ser utilizados para criar plano de assinatura: [block:parameters] { "data": { "h-0": "Atributo", "h-1": "Descrição", "h-2": "Obrigatório", "h-3": "Tipo", "0-0": "<code>name</code>", "1-0": "<code>interval</code>", "2-0": "<code>repeats</code>", "0-1": "**Nome do plano** de assinatura.\n<strong class=\"descricao-atributo\"><span class=\"atributo\">Mínimo de 1 caractere e máximo de 255 caracteres.</span></strong>", "1-1": "**Periodicidade da cobrança**. Determina o intervalo, **em meses**, que a cobrança da assinatura deve ser gerada. Informe <code>1</code> para assinatura mensal.\n\nExemplo 1: se <code>interval = 1</code> e <code>repeats = null</code>, será gerada 1 (uma) cobrança por mês, ou seja, a cobrança recorrente será mensal, de acordo com a primeira data de vencimento escolhida e gerada indefinidamente.\n\nExemplo 2: se <code>interval = 6</code> e <code>repeats = 2</code>, será gerada 1 (uma) cobrança a cada 6 (seis) meses, totalizando 2 (duas) cobranças em 12 meses (uma no 6º mês e outra no 12º mês).\n\n<strong class=\"descricao-atributo\"><span class=\"atributo\">Mínimo de 1 mês e máximo de 24 meses.</span></strong>", "2-1": "**Quantas cobranças devem ser geradas**. Determina o número de vezes que a cobrança deve ser gerada. Se nada for enviado, a cobrança é gerada por tempo indeterminado ou até que o plano seja cancelado.\n\nExemplo 1: se <code>interval = 1</code> e <code>repeats = null</code>, será gerada 1 (uma) cobrança por mês, ou seja, a cobrança recorrente será mensal, de acordo com a primeira data de vencimento escolhida.\n\nExemplo 2: se <code>interval = 6</code> e <code>repeats = 2</code>, será gerada 1 (uma) cobrança a cada 6 (seis) meses, totalizando 2 (duas) cobranças em 12 meses (uma no 6º mês e outra no 12º mês).\n\n<strong class=\"descricao-atributo\"><span class=\"atributo\">Padrão: Ilimitado.\nMínimo de 2 e máximo de 120.</span></strong>", "0-2": "Sim", "1-2": "Sim", "2-2": "Não", "0-3": "String", "1-3": "Integer", "2-3": "Integer" }, "cols": 4, "rows": 3 } [/block] <br> <hr> # 2. Crie inscrições (assinaturas) para vincular ao plano Com o plano criado, é o momento de criar assinaturas associando-as a plano(s). Assinaturas são aplicáveis quando você precisa cobrar de forma recorrente seus clientes. Desta forma, os custos subsequentes serão criados automaticamente com base na configuração do plano. Cabe ressaltar que deve ser informado o <code>plan_id</code> do plano criado previamente no qual deseja associar. Para associar assinaturas a planos, você deve enviar uma requisição <code>POST</code> para a rota <code>/plan/:id/subscription</code>, onde <code>:id</code> é o <code>plan_id</code> do plano que deseja atrelar à assinatura. Caso queira, pode explorar e conhecer mais sobre este recurso <a href="https://dev.gerencianet.com.br/docs/playground-assinaturas#plan_id_subscription" 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)\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// 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// 'metadata' => $metadata\n// ];\n\n$body = [\n 'items' => $items\n];\n\n// $plan_id refere-se ao ID do plano criado anteriormente\n\n$params = [\n 'id' => $plan_id\n];\n \ntry {\n $api = new Gerencianet($options);\n $subscription = $api->createSubscription($params, $body);\n \n print_r($subscription);\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');\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 planBody = {\n name: 'My first plan',\n repeats: 24,\n interval: 2\n}\n\nvar subscriptionBody = {\n items: [{\n name: 'Product 1',\n value: 1000,\n amount: 2\n }]\n}\n\nvar gerencianet = new Gerencianet(options);\n\nvar createSubscription = function (response) {\n var params = {\n id: response.data.plan_id\n }\n\n return gerencianet.createSubscription(params, subscriptionBody);\n}\n\ngerencianet\n .createPlan({}, planBody)\n .then(createSubscription)\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\nplan = {\n name: \"My first plan\",\n repeats: 24,\n interval: 2\n}\n\nsubscription = {\n items: [{\n name: \"Product 1\",\n value: 1000,\n amount: 2\n }]\n}\n\ngerencianet = Gerencianet.new(options)\nplan = gerencianet.create_plan(body: plan)\n\nparams = {\n id: plan[\"data\"][\"plan_id\"]\n}\n\nputs gerencianet.create_subscription(params: params, body: subscription)", "language": "ruby" }, { "code": "# encoding: utf-8\n\nfrom gerencianet import Gerencianet\nfrom credentials import CREDENTIALS\n\ngn = Gerencianet(CREDENTIALS)\n\nparams = {\n 'id': 1\n}\n\nbody = {\n 'items': [{\n 'name': \"Product 1\",\n 'value': 1000,\n 'amount': 2\n }]\n}\n\nresponse = gn.create_subscription(params=params, body=body)\nprint(response)", "language": "python" }, { "code": "using System;\n\nnamespace Gerencianet.SDK.Examples\n{\n class CreateSubscription\n {\n public static void Execute()\n {\n dynamic endpoints = new Endpoints(Credentials.Default.ClientId, Credentials.Default.ClientSecret, Credentials.Default.Sandbox);\n\n var planBody = new {\n name = \"My first plan\",\n repeats = 24,\n interval = 2\n };\n \n var subscriptionBody = new\n {\n items = new[] {\n new {\n name = \"Product 1\",\n value = 1000,\n amount = 2\n }\n }\n };\n\n try\n {\n var planResponse = endpoints.CreatePlan(null, planBody);\n\n var subscriptionParam = new {\n id = planResponse.data.plan_id\n };\n var subscriptionResponse = endpoints.CreateSubscription(subscriptionParam, subscriptionBody);\n Console.WriteLine(subscriptionResponse);\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/subscriptions/json/CreateSubscription.java\n\n\nMap<String, Object>\n\nhttps://github.com/gerencianet/gn-api-sdk-java-examples/blob/master/src/main/java/br/com/gerencianet/subscriptions/map/CreateSubscription.java\n\n*/", "language": "java" }, { "code": "interface\nfunction CreateSubscription(Id: String): String;\n\nimplementation\nuses uGerenciaClient, uGerenciaNetClientUtilities;\n{... your code ... }\n\nfunction CreateSubscription(Id: String): String;\nvar\n Params: String;\n Body: String;\nbegin\n Params := CreateRequestParams( [ 'id='+Id ] ).Text;\n Body :=\n '{\"items\": ['+\n '{\"name\": \"Item 1\",'+\n '\"amount\": 1,'+\n '\"value\": 2000}'+\n ']}';\n\n EnableService( 'GerenciaNet.dll' ); \n ConfigureService( ToPAnsiChar( 'client_id' ),ToPAnsiChar( 'client_secret' ),'sandbox','config.json',''); \n GerenciaNetAuthorize(); \n\n Result := ExecuteGerenciaNetRequest( 'createSubscription',Params,'', 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}\n\n\tres, err := gn.CreateSubscription(1, body) // no lugar do 1 coloque o plan_id correto\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": "/Subscription" "items" "name" "value" "amount" "shippings" "name" "value" "payee_code" "metadata" "custom_id" "notification_url"</pre> Para verificar mais detalhes, <a href="https://dev.gerencianet.com.br/docs/playground-assinaturas#plan_id_subscription" target="_blank">acesse aqui</a> e explore em nosso Playground. <br> ## b) Atributos que podem ser utilizados para associar uma assinatura a um plano: [block:parameters] { "data": { "0-0": "<code>items</code>", "0-1": "Contém as informações dos itens.\n\n<span class=\"tab1\"><em>Atributos de items</em></span>\n\n<div class=\"tab2\">\n<code>name*</code> // Nome da inscrição associada ao plano de assinatura.\n<strong class=\"descricao-atributo\"><span class=\"atributo\">Mínimo de 1 caractere e máximo de 255 caracteres (String).</span></strong></div>\n<div class=\"tab2\">\n<code>value*</code> // Valor da inscrição associada ao plano de assinatura.\n<strong class=\"descricao-atributo\"><span class=\"atributo\">(Integer).</span></strong></div>\n<div class=\"tab2\">\n<code>amount</code> // Quantidade.\n<strong class=\"descricao-atributo\"><span class=\"atributo\">Mínimo de 1 (Integer).</span></strong></div>", "0-2": "Sim", "0-3": "Array", "h-0": "Atributo", "h-1": "Descrição", "h-2": "Obrigatório", "h-3": "Tipo", "1-0": "<code>shippings</code>", "2-0": "<code>metadata</code>", "1-1": "Contém as informações de envio.\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> // Código \"Identificador da Conta\", ú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 assinatura.\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>", "1-2": "Não", "2-2": "Não", "2-3": "Array", "1-3": "Array" }, "cols": 4, "rows": 3 } [/block] <br> <hr> # 3. Defina a forma de pagamento da assinatura e os dados do cliente Após criar o plano de assinatura e associar assinaturas à planos, é o momento de associar a forma de pagamento recorrente das assinaturas, que pode ser <code>banking_billet</code> (boleto bancário) ou <code>credit_card</code> (cartão de crédito). * **Cartão de Crédito**: seu cliente realiza o pagamento, de acordo com a periodicidade que você definiu (mensal, trimestral, etc) no plano, sendo o mesmo valor cobrado automaticamente no cartão de crédito de seu cliente. Na recorrência por cartão, seu cliente digita os dados do cartão apenas no primeiro pagamento, depois a cobrança é realizada automaticamente sem que ele precise informar os dados novamente; * **Boleto Bancário**: será gerado conforme o número de repetições definido pelo plano, podendo ser enviado por e-mail. O assinante ou o vendedor podem cancelar a assinatura a qualquer momento. Quando isso ocorre, os dois são avisados via e-mail, com todos os detalhes do cancelamento. [block:callout] { "type": "info", "title": "Atributo \"trial_days\" que permite conceder um período de teste", "body": "A API disponibiliza o atributo <code>trial_days</code>, que permite definir uma quantidade de dias para teste gratuito do plano de assinatura. Atributo disponível somente quando o pagamento for <code>credit_card</code>.\n\nPara detalhes, consulte a tabela mais abaixo: <code>Objeto Credit_Card (\"cartão de crédito\")</code>" } [/block] Para associar assinaturas à forma de pagamento, você deve enviar uma requisição <code>POST</code> para a rota <code>/subscription/:id/pay</code>, onde <code>:id</code> é o <code>subscription_id</code> da assinatura desejada. Caso queira, pode explorar e conhecer mais sobre este recurso <a href="https://dev.gerencianet.com.br/docs/playground-assinaturas#subscription_id_pay" 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": "// Função paySubscription\n\n// Forma de pagamento por boleto bancário (\"banking_billet\")\n\n$params = ['id' => $subscription_id];\n\n$customer = [\n 'name' => 'Gorbadoc Oldbuck',\n 'cpf' => '94271564656',\n 'phone_number' => '5144916523'\n];\n\n$body = [\n 'payment' => [\n 'banking_billet' => [\n 'expire_at' => '2018-12-12',\n 'customer' => $customer\n ]\n ]\n];\n\ntry {\n $api = new Gerencianet($options);\n $subscription = $api->paySubscription($params, $body);\n\n print_r($subscription);\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\n\n// Forma de pagamento por cartão de crédito (\"credit_card\")\n\n$params = ['id' => $subscription_id];\n\n$paymentToken = 'payment_token';\n\n$customer = [\n 'name' => 'Gorbadoc Oldbuck',\n 'cpf' => '94271564656',\n 'phone_number' => '5144916523',\n 'email' => 'oldbuck@gerencianet.com.br',\n 'birth' => '1977-01-15'\n];\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\n$body = [\n 'payment' => [\n 'credit_card' => [\n 'billing_address' => $billingAddress,\n 'payment_token' => $paymentToken,\n 'customer' => $customer\n ]\n ]\n];\n\ntry {\n $api = new Gerencianet($options);\n $subscription = $api->paySubscription($params, $body);\n\n print_r($subscription);\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": "// Função paySubscription\n\n// Forma de pagamento por boleto bancário (\"banking_billet\")\n\nvar tenDaysFromNow = moment()\n .add(10, 'days')\n .format('YYYY-MM-DD 00:00:00');\n\nvar params = {\n id: 1000 // informe o charge_id\n}\n\nvar body = {\n payment: {\n banking_billet: {\n expire_at: tenDaysFromNow,\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\ngerencianet\n .paySubscription(params, body)\n .then(console.log)\n .catch(console.log)\n .done();\n\n\n// Forma de pagamento por cartão de crédito (\"credit_card\")\n\nvar params = {\n id: 1000 // informe o charge_id\n}\n\nvar body = {\n payment: {\n credit_card: {\n payment_token: 'payment_token_aqui',\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\ngerencianet\n .paySubscription(params, body)\n .then(console.log)\n .catch(console.log)\n .done();", "language": "javascript", "name": "NodeJS" }, { "code": "# Função pay_subscription\n\n# Forma de pagamento por boleto bancário (\"banking_billet\")\n\nparams = {\n id: 1113 # informe o charge_id\n}\n\nvar body = {\n payment: {\n banking_billet: {\n expire_at: \"2016-12-12\",\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\ngerencianet = Gerencianet.new(options)\ngerencianet.pay_subscription(params: params, body: body)\n\n\n# Forma de pagamento por cartão de crédito (\"credit_card\")\n\nparams = {\n id: 1113 # informe o charge_id\n}\n\nbody = {\n payment: {\n credit_card: {\n payment_token: \"e0c210bb679fea225a586256234f8ce179fd16c5\",\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\ngerencianet = Gerencianet.new(options)\ngerencianet.pay_subscription(params: params, body: body)", "language": "ruby" }, { "code": "# Função pay_subscription\n\n# Forma de pagamento por boleto bancário (\"banking_billet\")\n# encoding: utf-8\n\nfrom gerencianet import Gerencianet\n\ncredentials = {\n 'client_id': 'client_id',\n 'client_secret': 'client_secret',\n 'sandbox': True\n}\n\ngn = Gerencianet(credentials)\n\nbody = {\n 'payment': {\n 'banking_billet': {\n 'expire_at': '2016-12-12',\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\nparams = {\n 'id': charge['data']['charge_id'] # informe o charge_id\n}\n\nresponse = gn.pay_subscription(params=params, body=body)\nprint(response)\n\n\n# Forma de pagamento por cartão de crédito (\"credit_card\")\n# encoding: utf-8\n\nfrom gerencianet import Gerencianet\n\ncredentials = {\n 'client_id': 'client_id',\n 'client_secret': 'client_secret',\n 'sandbox': True\n}\n\ngn = Gerencianet(credentials)\n\nparams = {\n 'id': 123 # informe o charge_id\n}\n\nbody = {\n 'payment': {\n 'credit_card': {\n 'installments': 1,\n 'payment_token': \"\", #see credit card flow to see how to get this\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\nresponse = gn.pay_subscription(params=params, body=payment)\nprint(response)", "language": "python" }, { "code": "<%-- Função PaySubscription --%>\n\n<%-- Forma de pagamento por boleto bancário (\"banking_billet\") --%>\n\nusing Gerencianet.SDK;\n...\ndynamic endpoints = new Endpoints(\"client_id\", \"client_secret\", true);\n\nvar body = new {\n payment = new {\n banking_billet = new {\n expire_at = \"2016-12-12\",\n customer = new {\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\nvar param = new {\n id = chargeResult.data.charge_id # <%-- informe o charge_id --%>\n};\n\nvar response = endpoints.PaySubscription(param, body);\nConsole.WriteLine(response);\n\n\n<%-- Forma de pagamento por cartão de crédito (\"credit_card\") --%>\n\nusing Gerencianet.SDK;\n...\ndynamic endpoints = new Endpoints(\"client_id\", \"client_secret\", true);\n\nvar param = {\n id = 123 <%-- informe o charge_id --%>\n};\n\nvar body = new {\n payment = new {\n credit_card = new {\n installments = 1,\n payment_token = \"\", // see credit card flow to see how to get this\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 = \"04267484171\",\n birth = \"1977-01-15\",\n phone_number = \"5144916523\"\n }\n }\n }\n};\n\nvar response = endpoints.PaySubscription(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/subscriptions/json/PaySubscription.java\n\n\nMap<String, Object>\n\nhttps://github.com/gerencianet/gn-api-sdk-java-examples/blob/master/src/main/java/br/com/gerencianet/subscriptions/map/PaySubscription.java\n\n*/", "language": "java" }, { "code": "// Função paySubscription\n\n// Forma de pagamento por boleto bancário (\"banking_billet\")\n\ninterface\nfunction PaySubscription(Id: String): String;\n\nimplementation\nuses uGerenciaClient, uGerenciaNetClientUtilities;\n{... your code ... }\n\nfunction PaySubscription(Id: String): String;\nvar\n Body : String;\n PaymentParams: String;\n \nconst BodyText = '{'+\n '\"payment\": {'+\n '\"banking_billet\": {'+\n '\"customer\": {'+\n '\"email\": \"email_do_cliente@servidor.com.br\",'+\n '\"phone_number\": \"5144916523\",'+\n '\"birth\": \"1977-07-17\",'+\n '\"address\": {'+\n '\"street\": \"Av. JK\",'+\n '\"number\": 909,'+\n '\"neighborhood\": \"Bauxita\",'+\n '\"complement\": \"\",'+\n '\"city\": \"Ouro Preto\",'+\n '\"state\": \"MG\",'+\n '\"zipcode\": \"35400000\"'+\n '},'+\n '\"name\": \"Gorbadoc Oldbuck\",'+\n '\"cpf\": \"94271564656\"'+\n '},'+\n '\"message\": \"Test\",'+\n '\"expire_at\": \"2019-02-21\"'+\n '}'+\n '}'+\n'}';\n\nbegin\n PaymentParams := CreateRequestParams( [ 'id='+id ] ).Text;\n Body := BodyText;\n\n EnableService( 'GerenciaNet.dll' ); \n ConfigureService( ToPAnsiChar( 'client_id' ),ToPAnsiChar( 'client_secret' ),'sandbox','config.json',''); \n GerenciaNetAuthorize(); \n\n Result := ExecuteGerenciaNetRequest( 'paySubscription',PaymentParams,'',Body );\nend;\n\n\n\n// Forma de pagamento por cartão de crédito (\"credit_card\")\n\n\ninterface\nfunction PaySubscriptionWithCreditCard(Id, Token: String): String;\n\nimplementation\nuses uGerenciaClient, uGerenciaNetClientUtilities;\n{... your code ... }\n\nfunction PaySubscriptionWithCreditCard(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 PaymentParams := CreateRequestParams( [ 'id='+id ] ).Text;\n\n EnableService( 'GerenciaNet.dll' ); \n ConfigureService( ToPAnsiChar( 'client_id' ),ToPAnsiChar( 'client_secret' ),'sandbox','config.json',''); \n GerenciaNetAuthorize(); \n\n Result := ExecuteGerenciaNetRequest( 'paySubscription',PaymentParams,'',Body );\nend;\n", "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\tcustomer := map[string]interface{}{\n\t\t\"name\": \"Gorbadoc Oldbuck\",\n\t\t\"cpf\": \"04267484171\",\n\t\t\"phone_number\": \"5144916523\",\n\t}\n\n\tbody := map[string]interface{} {\n\t\t\"payment\": map[string]interface{} {\n\t\t\t\"banking_billet\": map[string]interface{} {\n\t\t\t\t\"expire_at\": \"2018-12-12\",\n\t\t\t\t\"customer\": customer,\n\t\t\t},\n\t\t},\n\t}\n\n\tres, err := gn.PaySubscription(1, body) // no lugar do 1 coloque o subscription_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": "/SubscriptionPay" "payment" "banking_billet" "customer" "name" "cpf" "email" "phone_number" "birth" "address" "street" "number" "neighborhood" "zipcode" "city" "complement" "state" "juridical_person" "corporate_name" "cnpj" "expire_at" "discount" "type" "percentage" "currency" "value" "conditional_discount" "type" "percentage", "currency" "value" "until_date" "configurations" "fine" "interest" "message" "credit_card" "customer" "name" "cpf" "email" "phone_number" "birth" "address" "street" "number" "neighborhood" "zipcode" "city" "complement" "state" "juridical_person" "corporate_name" "cnpj" "billing_address" "street" "number" "neighborhood" "zipcode" "city" "complement" "state" "payment_token" "discount" "type" "percentage" "currency" "value" "message" "trial_days"</pre> Para verificar mais detalhes, <a href="https://dev.gerencianet.com.br/docs/playground-assinaturas#subscription_id_pay" target="_blank">acesse aqui</a> e explore em nosso Playground. <br> ## b) Atributos que podem ser usados para definir a forma de pagamento da assinatura: [block:parameters] { "data": { "h-0": "Atributo", "h-1": "Descrição", "h-2": "Obrigatório", "h-3": "Tipo", "0-0": "<code>payment</code>", "0-1": "Tag raiz", "0-2": "Sim", "0-3": "Objeto **Payment**" }, "cols": 4, "rows": 1 } [/block] <br> *Objeto **Payment*** [block:parameters] { "data": { "h-0": "Atributo", "h-1": "Descrição", "h-2": "Obrigatório", "h-3": "Tipo", "0-0": "<code>banking_billet</code>", "0-1": "Forma de pagamento através de \"boleto bancário\"", "0-2": "Sim<strong class=\"atributo-obrigatorio\">**</strong>", "1-2": "Sim<strong class=\"atributo-obrigatorio\">**</strong>", "1-1": "Forma de pagamento através de \"cartão de crédito\"", "1-0": "<code>credit_card</code>", "0-3": "Object", "1-3": "Object" }, "cols": 4, "rows": 2 } [/block] <strong class="atributo-obrigatorio-texto">** O atributo relacionado à forma de pagamento é obrigatória e pode ser boleto bancário ou cartão de crédito</strong> <br /> *Objeto **Banking_Billet*** ("boleto bancário") [block:parameters] { "data": { "h-0": "Atributo", "h-1": "Descrição", "h-2": "Obrigatório", "h-3": "Tipo", "0-0": "<code>name</code>", "1-0": "<code>cpf</code>", "2-0": "<code>email</code>", "3-0": "<code>phone_number</code>", "4-0": "<code>birth</code>", "5-0": "<code>address</code>", "6-0": "<code>juridical_person</code>", "7-0": "<code>expire_at</code>", "8-0": "<code>discount</code>", "0-1": "Nome do cliente.\n<strong class=\"descricao-atributo\"><span class=\"atributo\">Mínimo de 1 caractere e máximo de 255.</span></strong>", "1-1": "CPF válido do cliente (sem pontos, vírgulas ou hífen).\n<strong class=\"descricao-atributo\"><span class=\"atributo\">Tamanho: 11 caracteres.</span></strong>", "2-1": "Email do cliente.\n<strong class=\"descricao-atributo\"><span class=\"atributo\">Máximo de 255 caracteres</span></strong>", "3-1": "Telefone do cliente.\n<strong class=\"descricao-atributo\"><span class=\"atributo\">Exemplo: 31996458785</span></strong>", "4-1": "Data de nascimento.\n<strong class=\"descricao-atributo\"><span class=\"atributo\">Formato: YYYY-MM-DD</span></strong>", "5-1": "Endereço do cliente.\n\n<span class=\"tab1\">*Atributos de 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>", "6-1": "Dados de pessoa jurídica\n\n<span class=\"tab1\">*Atributos de juridical_person*</span>\n\n<div class=\"tab2\">\n<code>corporate_name<strong class=\"atributo-obrigatorio\">*</strong></code> // Nome da razão social. <strong class=\"descricao-atributo\"><span class=\"atributo\">Mínimo de 1 caractere e máximo de 255. String.</strong></span></div>\n\n<div class=\"tab2\">\n<code>cnpj<strong class=\"atributo-obrigatorio\">*</strong></code> // CNPJ da empresa. <strong class=\"descricao-atributo\"><span class=\"atributo\">Tamanho: 14 caracteres. String.</strong></span>\n</div>", "7-1": "Data de vencimento do boleto.\n<strong class=\"descricao-atributo\"><span class=\"atributo\">Formato: YYYY-MM-DD</span></strong>", "8-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 será dado em centavos. Caso o tipo do desconto seja <code>percentage</code>, o valor deverá ser multiplicado por 100. Exemplos:\n1) <code>currency</code> // valor desta tag para desconto de R$ 5,99 é 599;\n2) <code>percentage</code> // valor desta tag para desconto de 15% é 1500.</strong>\n</div>", "0-2": "Sim\n\n*Obs: Para Pessoa Jurídica não serão obrigatórios o nome e CPF, apenas os demais dados do cliente.*", "1-2": "Sim\n\n*Obs: Para Pessoa Jurídica não serão obrigatórios o nome e CPF, apenas os demais dados do cliente.*", "2-2": "Não", "3-2": "Sim", "4-2": "Não", "5-2": "Não", "6-2": "Não", "7-2": "Sim", "8-2": "Não", "0-3": "String", "1-3": "String", "2-3": "String", "3-3": "String", "4-3": "String", "5-3": "Object", "6-3": "Object", "7-3": "String", "8-3": "String", "10-0": "<code>configurations</code>", "10-1": "Permite incluir no boleto multa e juros caso seja pago após o vencimento.\n\n<span class=\"tab1\">*Atributos de configurations*</span>\n\n<div class=\"tab2\">\n<strong class=\"descricao-atributo\"><span class=\"atributo\">fine</span>, // valor cobrado de multa após o vencimento. Por exemplo: se você quiser 2%, você deve informar <code>200</code>. <strong class=\"descricao-atributo\"><span class=\"atributo\">Mínimo de 0 e máximo de 1000. Integer. \n\nCaso você possua configurações de multa ativada no Fortunus e queira gerar emissões na API sem multa, utilize <code>0</code> como valor do atributo <code>fine</code></strong></span></div>\n</strong>\n</div>\n\n<div class=\"tab2\">\n<strong class=\"descricao-atributo\"><span class=\"atributo\">interest</span>, // valor cobrado de juros por dia após a data de vencimento. Por exemplo: se você quiser 0,033%, você deve informar <code>33</code>. <strong class=\"descricao-atributo\"><span class=\"atributo\">Mínimo de 0 e máximo de 330. Integer.\n\nCaso você possua configurações de multa ativada no Fortunus e queira gerar emissões na API sem juros, utilize <code>0</code> como valor do atributo <code>interest</code></strong></span></div>\n</strong>\n</div>", "10-2": "Não", "10-3": "Object", "11-0": "<code>message</code>", "11-1": "Permite incluir no boleto uma \"observação\", ou em outras palavras, uma mensagem para o cliente. Essa mensagem poderá ser vista nos e-mails relacionados à cobrança, no boleto ou carnê.\n<strong class=\"descricao-atributo\"><span class=\"atributo\">Máximo de 80 caracteres. String.</span></strong>", "11-2": "Não", "11-3": "String", "9-0": "<code>conditional_discount</code>", "9-1": "Define desconto condicional que é válido até uma data específica. Se o pagamento não for efetuado até aquela data, o desconto é invalidado.\n\n<span class=\"tab1\">*Atributos de conditional_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>.</strong></div>\n\n<div class=\"tab2\">\n<strong class=\"descricao-atributo\"><span class=\"atributo\">until_date<strong class=\"atributo-obrigatorio\">*</strong></span>, // Data máxima que o desconto será concedido. (String). </strong><strong class=\"descricao-atributo\"><span class=\"atributo\">Formato: YYYY-MM-DD</span></strong></div>", "9-2": "Não", "9-3": "Object" }, "cols": 4, "rows": 12 } [/block] <br /> *Objeto **Credit_Card*** ("cartão de crédito") [block:parameters] { "data": { "h-0": "Atributo", "h-1": "Descrição", "h-2": "Obrigatório", "h-3": "Tipo", "0-0": "<code>customer</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 (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-2": "Sim", "0-3": "Object", "1-3": "Object", "2-3": "Object", "3-3": "String", "3-0": "<code>payment_token</code>", "2-0": "<code>billing_address</code>", "1-0": "<code>discount</code>", "2-2": "Sim", "1-2": "Não", "3-2": "Sim", "1-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 será dado em centavos. Caso o tipo do desconto seja <code>percentage</code>, o valor deverá ser multiplicado por 100. Exemplos:\n1) <code>currency</code> // valor desta tag para desconto de R$ 5,99 é 599;\n2) <code>percentage</code> // valor desta tag para desconto de 15% é 1500.</strong>\n</div>", "3-1": "Token único de pagamento obtido na primeira etapa da geração da transação.", "2-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>", "4-0": "<code>message</code>", "4-1": "Permite incluir no boleto uma \"observação\", ou em outras palavras, uma mensagem para o cliente. Essa mensagem poderá ser vista nos e-mails relacionados à cobrança, no boleto ou carnê.\n<strong class=\"descricao-atributo\"><span class=\"atributo\">Máximo de 80 caracteres. String.</span></strong>", "4-2": "Não", "4-3": "String", "5-0": "<code>trial_days</code>", "5-2": "Não", "5-3": "Integer", "5-1": "Permite definir uma quantidade de dias para teste gratuito do plano de assinatura. O período para a avaliação gratuita, definido em <code>trial_days</code>, começa a contar a partir do dia seguinte ao dia da realização da assinatura. Atributo disponível somente quando o pagamento for <code>credit_card</code>.\n<strong class=\"descricao-atributo\"><span class=\"atributo\">Mínimo de 1 dia e máximo de 365 dias.</span></strong>\n<strong class=\"descricao-atributo\"><span class=\"atributo\">Por exemplo: Criei um plano de assinatura em 25/09/2017 e defini <code>trial_days: 7</code>. Isso significa que o primeiro pagamento será cobrado no dia 02/10/2017, e se for cancelado antes de 02/10/2017, então nada será cobrado.</span></strong>" }, "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 à assinatura 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 uma assinatura (recorrência) 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 assinatura", "body": "Todas as assinaturas possuem status, que representam a \"situação\" dessa assinatura. 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 assinaturas." } [/block] [block:callout] { "type": "warning", "title": "Callbacks (notificações) das assinaturas da API para seu sistema", "body": "As notificações permitem que você seja informado quando uma assinatura tiver seu status alterado. Dessa forma, você poderá identificar quando a 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." } [/block] <br> <hr> # 4. Outros endpoints e métodos Existem outros endpoints e métodos relacionados a assinaturas (cobrança recorrente) que estão disponíveis na API e podem ser explorados pelo integrador. Confira a relação completa: - [Listar os planos de assinatura existentes](https://dev.gerencianet.com.br/docs/assinaturas-outros-endpoints#section-1-listar-os-planos-de-assinatura-existentes) - [Cancelar plano de assinatura](https://dev.gerencianet.com.br/docs/assinaturas-outros-endpoints#section-2-cancelar-plano-de-assinatura) - [Retornar informações de assinatura vinculada a um plano](https://dev.gerencianet.com.br/docs/assinaturas-outros-endpoints#section-3-retornar-informa-es-de-assinatura-vinculada-a-um-plano) - [Cancelar assinaturas ativas em um plano](https://dev.gerencianet.com.br/docs/assinaturas-outros-endpoints#section-4-cancelar-assinaturas-ativas-em-um-plano) - [Alterar URL de notificação (notification_url) e/ou custom_id de assinaturas](https://dev.gerencianet.com.br/docs/assinaturas-outros-endpoints#section-5-alterar-url-de-notifica-o-notification_url-e-ou-custom_id-de-assinaturas) - [Listar parcelas, de acordo com a bandeira do cartão de crédito](https://dev.gerencianet.com.br/docs/assinaturas-outros-endpoints#section-6-listar-parcelas-de-acordo-com-a-bandeira-do-cart-o-de-cr-dito) - [Acrescentar informações ao histórico da assinatura](https://dev.gerencianet.com.br/docs/assinaturas-outros-endpoints#section-7-acrescentar-informa-es-ao-hist-rico-da-assinatura) - [Editar nome do plano de assinatura](https://dev.gerencianet.com.br/v1/docs/assinaturas-outros-endpoints#section-8-editar-nome-do-plano-de-assinatura) <br> <hr> # 5. Vídeo: Criando Assinaturas (cobrança recorrente) 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 um plano de assinatura e associar à forma de pagamento (boleto ou cartão) para cobrar seu cliente de forma recorrente. ## 5.1. Criando assinaturas (cobrança recorrente) pela API de integração Gerencianet [block:html] { "html": "<iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/xrRUBi6wG2Y\" frameborder=\"0\" allowfullscreen></iframe>" } [/block] <br> [block:callout] { "type": "info", "title": "Curso Completo de Integração com a API Gerencianet", "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> # 6. Próximos Passos Com as assinaturas criadas, é importante conhecer [todos os endpoints](https://dev.gerencianet.com.br/docs/assinaturas-outros-endpoints) que podem ser utilizados. Além disso, caso tenha ficado com alguma dúvida sobre o mecanismo das assinaturas, veja [como ela funciona](https://dev.gerencianet.com.br/docs/assinaturas-como-funcionam).