{"_id":"58405583e3e04b230055c6b7","version":{"_id":"575aeffae12cf20e002f306f","project":"575aeffae12cf20e002f306c","__v":30,"createdAt":"2016-06-10T16:51:06.080Z","releaseDate":"2016-06-10T16:51:06.080Z","categories":["575aeffae12cf20e002f3070","575af039a083950e004487f7","575af5c7ba4ed70e000ca288","57602fe5b82256240055c657","57602ff6c811102000cef302","576030909b1a9a220067ca40","57604518b82256240055c722","5761a63d207db7170022fc14","5761b9a2b65324200072d79e","576832939f0bf4190014ffdf","576832c09f0bf4190014ffe1","576832cba151c10e004316f0","576832d5bb15f40e00a288ec","576832e107b1f30e0039c645","577680bf3cee3a0e00a000bc","577ff3b1ff48990e000c6806","5783f78c5cbce30e0074e2b7","5783f86292edb92200e6101c","5783f86dbfbba719003f0d8b","5783f8755cbce30e0074e2b8","5783f8b65cbce30e0074e2b9","5783f8bf5cbce30e0074e2ba","5783f8d8ce802f0e0087d574","578529f887c9280e0090394b","57852aeb87c9280e0090394d","57866e72b2f4060e00fa39ca","57ab6d5c39c2fd1900191879","57f39451ab0ee12000bef915","582499a0d90fa027009b259e","58c29df1258e5a1900b60478"],"is_deprecated":false,"is_hidden":false,"is_beta":false,"is_stable":true,"codename":"2016","version_clean":"1.0.0","version":"1"},"project":"575aeffae12cf20e002f306c","__v":0,"user":"57601a13af3e090e00108059","parentDoc":null,"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":"","githubsync":"","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 que a SDK da Gerencianet foi instalada](https://dev.gerencianet.com.br/docs#section-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\nSegue abaixo um exemplo de utilização:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"<?php\\n \\nrequire __DIR__.'/../../vendor/autoload.php'; // caminho relacionado a SDK\\n \\nuse Gerencianet\\\\Exception\\\\GerencianetException;\\nuse Gerencianet\\\\Gerencianet;\\n \\n$clientId = 'your_client_id'; // insira seu Client_Id, conforme o ambiente (Des ou Prod)\\n$clientSecret = 'your_client_secret'; // insira seu Client_Secret, conforme o ambiente (Des ou Prod)\\n \\n$options = [\\n  'client_id' => $clientId,\\n  'client_secret' => $clientSecret,\\n  'sandbox' => true // altere conforme o ambiente (true = desenvolvimento e false = producao)\\n];\\n \\n$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}\n[/block]\n<br>\n\n## a) Estrutura hierárquica dos atributos 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>.\n\n<br>\n\n## b) Atributos que podem ser usados 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\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\nSegue abaixo um exemplo de utilização:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"<?php\\n \\nrequire __DIR__.'/../../vendor/autoload.php'; // caminho relacionado a SDK\\n \\nuse Gerencianet\\\\Exception\\\\GerencianetException;\\nuse Gerencianet\\\\Gerencianet;\\n \\n$clientId = 'your_client_id'; // insira seu Client_Id, conforme o ambiente (Des ou Prod)\\n$clientSecret = 'your_client_secret'; // insira seu Client_Secret, conforme o ambiente (Des ou Prod)\\n \\n$options = [\\n  'client_id' => $clientId,\\n  'client_secret' => $clientSecret,\\n  'sandbox' => true // altere conforme o ambiente (true = desenvolvimento e false = producao)\\n];\\n \\n$item_1 = [\\n    'name' => 'Item 1', // nome do item, produto ou serviço\\n    'amount' => 1, // quantidade\\n    'value' => 1000 // valor (1000 = R$ 10,00)\\n];\\n \\n$item_2 = [\\n    'name' => 'Item 2' // nome do item, produto ou serviço\\n    'amount' => 2, // quantidade\\n    'value' => 2000 // valor (2000 = R$ 20,00)\\n];\\n \\n$items =  [\\n    $item_1,\\n    $item_2\\n];\\n//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');\\n \\nvar clientId = 'your_client_id';\\nvar clientSecret = 'your_client_secret';\\n \\nvar options = {\\n  client_id: clientId,\\n  client_secret: clientSecret,\\n  sandbox: true\\n}\\n \\nvar params = {\\n  name: 'My plan',\\n  limit: 20,\\n  offset: 0\\n}\\n \\nvar gerencianet = new Gerencianet(options);\\n \\ngerencianet\\n  .getPlans(params)\\n  .then(console.log)\\n  .catch(console.log)\\n  .done();\\n\",\n      \"language\": \"javascript\",\n      \"name\": \"NodeJS\"\n    },\n    {\n      \"code\": \"\\nrequire \\\"gerencianet\\\"\\nrequire_relative \\\"./credentials\\\"\\n \\noptions = {\\n  client_id: \\\"client_id\\\",\\n  client_secret: \\\"client_secret\\\",\\n  sandbox: true\\n}\\n \\nparams = {\\n  name: \\\"My Plan\\\",\\n  limit: 1,\\n  offset: 0\\n}\\n \\ngerencianet = Gerencianet.new(options)\\ngerencianet.get_plans(params: params)\\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 \\nparams = {\\n\\t'name': \\\"My Plan\\\",\\n\\t'limit': 1,\\n\\t'offset': 0\\n}\\n \\ngn.get_plans(params=params)\\n\",\n      \"language\": \"python\"\n    },\n    {\n      \"code\": \"\\ndynamic endpoints = new Endpoints(\\\"client_id\\\", \\\"client_secret\\\", true);\\n \\nvar params = new\\n{\\n    name = \\\"My Plan\\\",\\n    limit = 20,\\n    offset = 0\\n};\\n \\nvar response = endpoints.GetPlans(params);\\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}\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>.\n\n<br>\n\n## b) Atributos que podem ser usados para associar uma assinatura à 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\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\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\nSegue abaixo um exemplo de utilização:\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}\n[/block]\n<br>\n\n## a) Estrutura hierárquica dos atributos do Schema:\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            \"configurations\"\n                \"fine\"\n                \"interest\"\n            \"message\"\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>.\n\n<br>\n\n## b) Atributos que podem ser usados:\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    \"9-0\": \"<code>configurations</code>\",\n    \"9-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    \"9-2\": \"Não\",\n    \"9-3\": \"Object\",\n    \"10-0\": \"<code>message</code>\",\n    \"10-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    \"10-2\": \"Não\",\n    \"10-3\": \"String\"\n  },\n  \"cols\": 4,\n  \"rows\": 11\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  },\n  \"cols\": 4,\n  \"rows\": 5\n}\n[/block]\n<strong class=\"atributo-obrigatorio-texto\">* valor obrigatório</strong>\n\n<br>\n\n<hr>\n\n# 4. Outros endpoints e métodos\n[block:html]\n{\n  \"html\": \"<p>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:</p>\\n\\n<a href=\\\"https://dev.gerencianet.com.br/docs/assinaturas-outros-endpoints#section-1-listar-os-planos-de-assinatura-existentes\\\" title=\\\"Link Interno\\\"><button type=\\\"button\\\" class=\\\"btn btn-default navbar-btn\\\">4.1 - Listar os planos de assinatura existentes</button></a>\\n<br>\\n<a href=\\\"https://dev.gerencianet.com.br/docs/assinaturas-outros-endpoints#section-2-cancela-um-plano-de-assinatura\\\" title=\\\"Link Interno\\\"><button type=\\\"button\\\" class=\\\"btn btn-default navbar-btn\\\">4.2 - Cancela um plano de assinatura</button></a>\\n<br>\\n<a href=\\\"https://dev.gerencianet.com.br/docs/assinaturas-outros-endpoints#section-3-retorna-informa-es-de-uma-assinatura-vinculada-a-um-plano\\\" title=\\\"Link Interno\\\"><button type=\\\"button\\\" class=\\\"btn btn-default navbar-btn\\\">4.3 - Retorna informações de uma assinatura vinculada a um plano</button></a>\\n<br>\\n<a href=\\\"https://dev.gerencianet.com.br/docs/assinaturas-outros-endpoints#section-4-cancelar-assinaturas-ativas-em-um-plano\\\" title=\\\"Link Interno\\\"><button type=\\\"button\\\" class=\\\"btn btn-default navbar-btn\\\">4.4 - Cancelar assinaturas ativas em um plano</button></a>\\n<br>\\n<a href=\\\"https://dev.gerencianet.com.br/docs/assinaturas-outros-endpoints#section-5-alterando-notification_url-e-ou-custom_id-de-assinaturas\\\" title=\\\"Link Interno\\\"><button type=\\\"button\\\" class=\\\"btn btn-default navbar-btn\\\">4.5 - Alterando notification_url e/ou custom_id de assinaturas</button></a>\\n<br>\\n<a href=\\\"https://dev.gerencianet.com.br/docs/listar-parcelas-cartao\\\" title=\\\"Link Interno\\\"><button type=\\\"button\\\" class=\\\"btn btn-default navbar-btn\\\">4.6 - Listar parcelas, de acordo com a bandeira do cartão de crédito</button></a>\\n<br>\\n<a href=\\\"https://dev.gerencianet.com.br/docs/endpoints#section-rela-o-entre-os-endpoints-playground-com-o-nome-das-fun-es-utilizadas-pelas-sdks\\\" title=\\\"Link Interno\\\"><button type=\\\"button\\\" class=\\\"btn btn-default navbar-btn\\\">4.7 - Relação entre os endpoints (Playground) com o nome das funções utilizadas pelas SDKs</button></a>\"\n}\n[/block]\n<br>\n\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\": \"DICA\",\n  \"body\": \"Para acesso as demais aulas, de outros assuntos, acesse a página <a href=\\\"https://dev.gerencianet.com.br/docs/curso-online-gerencianet\\\" title=\\\"Link Interno\\\">Curso Online de Integrações</a>.\"\n}\n[/block]\n<br>\n\n<hr>\n\n# 6. Próximos Passos\n[block:html]\n{\n  \"html\": \"<p>Com as assinaturas criadas, vamos ler como funciona o mecanismo das assinaturas da API?</p>\\n\\n<a href=\\\"https://dev.gerencianet.com.br/docs/assinaturas-como-funcionam\\\" title=\\\"Link Interno\\\"><button type=\\\"button\\\" class=\\\"btn btn-default navbar-btn\\\">Como funcionam as assinaturas?</button></a>\"\n}\n[/block]","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 que a SDK da Gerencianet foi instalada](https://dev.gerencianet.com.br/docs#section-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>. Segue abaixo um exemplo de utilização: [block:code] { "codes": [ { "code": "<?php\n \nrequire __DIR__.'/../../vendor/autoload.php'; // caminho relacionado a SDK\n \nuse Gerencianet\\Exception\\GerencianetException;\nuse Gerencianet\\Gerencianet;\n \n$clientId = 'your_client_id'; // insira seu Client_Id, conforme o ambiente (Des ou Prod)\n$clientSecret = 'your_client_secret'; // insira seu Client_Secret, conforme o ambiente (Des ou Prod)\n \n$options = [\n 'client_id' => $clientId,\n 'client_secret' => $clientSecret,\n 'sandbox' => true // altere conforme o ambiente (true = desenvolvimento e false = producao)\n];\n \n$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" } ] } [/block] <br> ## a) Estrutura hierárquica dos atributos 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>. <br> ## b) Atributos que podem ser usados 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>. Segue abaixo um exemplo de utilização: [block:code] { "codes": [ { "code": "<?php\n \nrequire __DIR__.'/../../vendor/autoload.php'; // caminho relacionado a SDK\n \nuse Gerencianet\\Exception\\GerencianetException;\nuse Gerencianet\\Gerencianet;\n \n$clientId = 'your_client_id'; // insira seu Client_Id, conforme o ambiente (Des ou Prod)\n$clientSecret = 'your_client_secret'; // insira seu Client_Secret, conforme o ambiente (Des ou Prod)\n \n$options = [\n 'client_id' => $clientId,\n 'client_secret' => $clientSecret,\n 'sandbox' => true // altere conforme o ambiente (true = desenvolvimento e false = producao)\n];\n \n$item_1 = [\n 'name' => 'Item 1', // nome do item, produto ou serviço\n 'amount' => 1, // quantidade\n 'value' => 1000 // valor (1000 = R$ 10,00)\n];\n \n$item_2 = [\n 'name' => 'Item 2' // nome do item, produto ou serviço\n 'amount' => 2, // quantidade\n 'value' => 2000 // valor (2000 = R$ 20,00)\n];\n \n$items = [\n $item_1,\n $item_2\n];\n//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');\n \nvar clientId = 'your_client_id';\nvar clientSecret = 'your_client_secret';\n \nvar options = {\n client_id: clientId,\n client_secret: clientSecret,\n sandbox: true\n}\n \nvar params = {\n name: 'My plan',\n limit: 20,\n offset: 0\n}\n \nvar gerencianet = new Gerencianet(options);\n \ngerencianet\n .getPlans(params)\n .then(console.log)\n .catch(console.log)\n .done();\n", "language": "javascript", "name": "NodeJS" }, { "code": "\nrequire \"gerencianet\"\nrequire_relative \"./credentials\"\n \noptions = {\n client_id: \"client_id\",\n client_secret: \"client_secret\",\n sandbox: true\n}\n \nparams = {\n name: \"My Plan\",\n limit: 1,\n offset: 0\n}\n \ngerencianet = Gerencianet.new(options)\ngerencianet.get_plans(params: params)\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 \nparams = {\n\t'name': \"My Plan\",\n\t'limit': 1,\n\t'offset': 0\n}\n \ngn.get_plans(params=params)\n", "language": "python" }, { "code": "\ndynamic endpoints = new Endpoints(\"client_id\", \"client_secret\", true);\n \nvar params = new\n{\n name = \"My Plan\",\n limit = 20,\n offset = 0\n};\n \nvar response = endpoints.GetPlans(params);\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" } ] } [/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>. <br> ## b) Atributos que podem ser usados para associar uma assinatura à 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. 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>. Segue abaixo um exemplo de utilização: [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" } ] } [/block] <br> ## a) Estrutura hierárquica dos atributos do Schema: <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" "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>. <br> ## b) Atributos que podem ser usados: [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", "9-0": "<code>configurations</code>", "9-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>", "9-2": "Não", "9-3": "Object", "10-0": "<code>message</code>", "10-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>", "10-2": "Não", "10-3": "String" }, "cols": 4, "rows": 11 } [/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" }, "cols": 4, "rows": 5 } [/block] <strong class="atributo-obrigatorio-texto">* valor obrigatório</strong> <br> <hr> # 4. Outros endpoints e métodos [block:html] { "html": "<p>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:</p>\n\n<a href=\"https://dev.gerencianet.com.br/docs/assinaturas-outros-endpoints#section-1-listar-os-planos-de-assinatura-existentes\" title=\"Link Interno\"><button type=\"button\" class=\"btn btn-default navbar-btn\">4.1 - Listar os planos de assinatura existentes</button></a>\n<br>\n<a href=\"https://dev.gerencianet.com.br/docs/assinaturas-outros-endpoints#section-2-cancela-um-plano-de-assinatura\" title=\"Link Interno\"><button type=\"button\" class=\"btn btn-default navbar-btn\">4.2 - Cancela um plano de assinatura</button></a>\n<br>\n<a href=\"https://dev.gerencianet.com.br/docs/assinaturas-outros-endpoints#section-3-retorna-informa-es-de-uma-assinatura-vinculada-a-um-plano\" title=\"Link Interno\"><button type=\"button\" class=\"btn btn-default navbar-btn\">4.3 - Retorna informações de uma assinatura vinculada a um plano</button></a>\n<br>\n<a href=\"https://dev.gerencianet.com.br/docs/assinaturas-outros-endpoints#section-4-cancelar-assinaturas-ativas-em-um-plano\" title=\"Link Interno\"><button type=\"button\" class=\"btn btn-default navbar-btn\">4.4 - Cancelar assinaturas ativas em um plano</button></a>\n<br>\n<a href=\"https://dev.gerencianet.com.br/docs/assinaturas-outros-endpoints#section-5-alterando-notification_url-e-ou-custom_id-de-assinaturas\" title=\"Link Interno\"><button type=\"button\" class=\"btn btn-default navbar-btn\">4.5 - Alterando notification_url e/ou custom_id de assinaturas</button></a>\n<br>\n<a href=\"https://dev.gerencianet.com.br/docs/listar-parcelas-cartao\" title=\"Link Interno\"><button type=\"button\" class=\"btn btn-default navbar-btn\">4.6 - Listar parcelas, de acordo com a bandeira do cartão de crédito</button></a>\n<br>\n<a href=\"https://dev.gerencianet.com.br/docs/endpoints#section-rela-o-entre-os-endpoints-playground-com-o-nome-das-fun-es-utilizadas-pelas-sdks\" title=\"Link Interno\"><button type=\"button\" class=\"btn btn-default navbar-btn\">4.7 - Relação entre os endpoints (Playground) com o nome das funções utilizadas pelas SDKs</button></a>" } [/block] <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": "DICA", "body": "Para acesso as demais aulas, de outros assuntos, acesse a página <a href=\"https://dev.gerencianet.com.br/docs/curso-online-gerencianet\" title=\"Link Interno\">Curso Online de Integrações</a>." } [/block] <br> <hr> # 6. Próximos Passos [block:html] { "html": "<p>Com as assinaturas criadas, vamos ler como funciona o mecanismo das assinaturas da API?</p>\n\n<a href=\"https://dev.gerencianet.com.br/docs/assinaturas-como-funcionam\" title=\"Link Interno\"><button type=\"button\" class=\"btn btn-default navbar-btn\">Como funcionam as assinaturas?</button></a>" } [/block]