{"_id":"58403d83c0507319000634f3","project":"58403d83c0507319000634ed","slug":"getting-started","user":"57ea79f61780cd170064f273","order":0,"api":{"url":"","auth":"required","params":[],"results":{"codes":[]},"settings":""},"isReference":false,"link_external":false,"link_url":"","parentDoc":null,"title":"Introdução SDK Android","type":"basic","__v":2,"version":"58403d83c0507319000634f0","updates":["59adb5d4487c8f000fe24bc9","59c042f735e4940028efb516"],"createdAt":"2016-12-01T15:10:59.334Z","githubsync":"","hidden":false,"sync_unique":"","body":"[block:api-header]\n{\n  \"title\": \"Introdução\"\n}\n[/block]\nEssa SDK permite que soluções móveis Android disponibilizem meio de pagamento direto em sua plataforma, via transações realizadas com cartão de crédito e débito.  Ela possui também provedores específicos para serem utilizados em POS Android.\n\nA documentação a seguir descreve como deve ser feita a integração.","category":"5aabfe3048b5a200123095e1","excerpt":"","next":{"pages":[],"description":""},"childrenPages":[{"_id":"58403f85cee8ec1900c457d2","createdAt":"2016-12-01T15:19:33.167Z","githubsync":"","project":"58403d83c0507319000634ed","title":"Como funciona o SDK v2","type":"basic","user":"57ea79f61780cd170064f273","body":"O SDK V2 segue a esturura da imagem abaixo:\n[block:image]\n{\n  \"images\": [\n    {\n      \"image\": [\n        \"https://files.readme.io/e0ab39c-estrutura.PNG\",\n        \"estrutura.PNG\",\n        631,\n        410,\n        \"#f25d92\"\n      ]\n    }\n  ]\n}\n[/block]\nO SDK foi dividido em 4 módulos:\n\n* Providers\n\n* Utils\n\n* Comandos\n\n* Outros","hidden":false,"isReference":false,"link_url":"","sync_unique":"","api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","auth":"required","params":[],"url":""},"excerpt":"","parentDoc":"58403d83c0507319000634f3","slug":"como-funciona-o-sdk-v2","version":"58403d83c0507319000634f0","category":"5aabfe3048b5a200123095e1","order":0,"next":{"pages":[],"description":""},"updates":[],"__v":0,"link_external":false},{"_id":"58403fc9cee8ec1900c457d3","next":{"pages":[],"description":""},"updates":[],"category":"5aabfe3048b5a200123095e1","slug":"providers","link_url":"","order":1,"__v":0,"api":{"url":"","results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","auth":"required","params":[]},"createdAt":"2016-12-01T15:20:41.634Z","excerpt":"","hidden":false,"isReference":false,"project":"58403d83c0507319000634ed","title":"Providers","user":"57ea79f61780cd170064f273","type":"basic","version":"58403d83c0507319000634f0","body":"Todos os providers seguem o mesmo modelo. Todos herdam de uma classe modelo que extende da classe AsyncTask do Android. Então toda escrita e leitura de comandos com o Pinpad, requisições de transações e ativações, conexões e etc, serão executadas em uma thread secundária do método ‘doInBackground’.\nTodas podem rodar em background ou com um simples feedback para o seu usuário (um dialog com um título e uma mensagem de sua escolha). Após a execução do provider, ele realizará uma chamada de retorno para a sua aplicação (Callback), posteriormente iremos ver um exemplo de como isso funciona.\n\n\n**Métodos genéricos dos Providers:**\n\n\n[block:parameters]\n{\n  \"data\": {\n    \"h-0\": \"Método\",\n    \"h-1\": \"Função\",\n    \"0-0\": \"setWorkInBackground (boolean)\",\n    \"0-1\": \"Com este método você irá informar se o provider deverá ou não ser executado em segundo plano. Todos rodam em background por default.\",\n    \"1-0\": \"setActivity(Activity)\",\n    \"1-1\": \"Para que uma mensagem de feedback seja exibida (caso você passe false no método setWorkInBackground) o Android irá pedir uma activity. Desta forma, ele exibá o Dialog para o usuário com a sua mensagem.\",\n    \"2-0\": \"setDialogMessage(String)\",\n    \"2-1\": \"Esse método informa qual mensagem será exibida no Dialog de feedback.\",\n    \"3-0\": \"setDialogTitle(String)\",\n    \"3-1\": \"Esse método informa qual mensagem será exibida no título do Dialog de feedback.\",\n    \"4-0\": \"setConnectionCallback(StoneCallbackInterface)\",\n    \"4-1\": \"Cria uma classe anônima que possui dois métodos onSuccess (método chamado se o provider for executado com sucesso) e onError (método que será chamado se ocorrer uma Exception).\",\n    \"5-0\": \"getListOfErrors()\",\n    \"5-1\": \"Esse método retornará uma lista com os erros que ocorreram.\"\n  },\n  \"cols\": 2,\n  \"rows\": 6\n}\n[/block]\n**Lista de Providers disponíveis:**\n\n\n[block:parameters]\n{\n  \"data\": {\n    \"h-0\": \"Provider\",\n    \"h-1\": \"Função\",\n    \"0-0\": \"ActiveApplicationProvider\",\n    \"0-1\": \"Responsável por ativar a sua aplicação.\",\n    \"1-0\": \"BluetoothConnectionProvider\",\n    \"1-1\": \"Responsável por criar conexão bluetooth com um pinpad a partir de um mac address.\",\n    \"2-0\": \"CancellationProvider\",\n    \"2-1\": \"Responsável por realizar um cancelamento de uma transação.\",\n    \"3-0\": \"DisplayMessageProvider\",\n    \"3-1\": \"Exibe uma mensagem de até 32 caracteres na tela do Pinpad.\",\n    \"4-0\": \"DownloadTablesProvider\",\n    \"4-1\": \"Responsável por acessar os servidores da Stone e fazer o download das tabelas AIDs e CAPKs.\",\n    \"5-0\": \"LoadTablesProvider\",\n    \"6-0\": \"PrintProvider\",\n    \"7-0\": \"PrintReceipterProvider\",\n    \"8-0\": \"SendEmailProvider\",\n    \"9-0\": \"TransactionProvider\",\n    \"10-0\": \"ValidateTransactionByCardProvider\",\n    \"5-1\": \"Responsável por enviar as tabelas AIDs e CAPKs para os pinpads, utilize esse provedor caso a transação dê erro 20.\",\n    \"6-1\": \"Responsável por realizar impressões nos Pinpads que possuem suporte para impressão.\",\n    \"7-1\": \"Responsável por realizar impressões de comprovantes de vendas nos Pinpad que possum suporte para impressão.\",\n    \"8-1\": \"Responsável por enviar uma nota eletrônica por email.\",\n    \"9-1\": \"Responsável por realizar a captura dos cartões, enviar as transações e manipular as mesmas no banco de transações do dispositivo.\",\n    \"10-1\": \"Verifica se existe transação para o cartão utilizado no TransactionDAO.\"\n  },\n  \"cols\": 2,\n  \"rows\": 11\n}\n[/block]","githubsync":"","link_external":false,"parentDoc":"58403d83c0507319000634f3","sync_unique":""},{"_id":"58403fd1cee8ec1900c457d4","api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","auth":"required","params":[],"url":""},"createdAt":"2016-12-01T15:20:49.959Z","excerpt":"","hidden":false,"isReference":false,"link_external":false,"order":2,"project":"58403d83c0507319000634ed","slug":"utils","body":"No módulo Utils, você possui ferramentas que podem lhe ajudar na criação da sua aplicação.\nCom esse modulo você terá as seguintes ferramentas:\n[block:parameters]\n{\n  \"data\": {\n    \"h-0\": \"Ferramenta\",\n    \"h-1\": \"Função\",\n    \"0-0\": \"ConnectionValidator\",\n    \"1-0\": \"Utilities\",\n    \"2-0\": \"GlobalInformations\",\n    \"3-0\": \"StopWatch\",\n    \"4-0\": \"Criptografia e descriptografia\",\n    \"5-0\": \"ConnectionPost\",\n    \"6-0\": \"TransactionDAO\",\n    \"7-0\": \"PinpadDAO\",\n    \"8-0\": \"ApplicationCache\",\n    \"0-1\": \"Teste de conexão.\",\n    \"1-1\": \"Utilitários para a sua aplicação, por exemplo, nomalizador de Strings.\",\n    \"2-1\": \"Informações que ficam compartilhadas entre a sua aplicação e a SDK.\",\n    \"3-1\": \"Um simples cronômetro para benchmark.\",\n    \"5-1\": \"Realiza post para uma aplicação REST utilizando XML.\",\n    \"6-1\": \"Banco de transações, as transação são salvas e atualizadas durante a execução do TransactionProvider.\",\n    \"7-1\": \"Banco de pinpads já conectados.\",\n    \"8-1\": \"CRUD para a sua aplicação, ele trabalha na pasta ‘file’ da sua aplicação.\"\n  },\n  \"cols\": 2,\n  \"rows\": 9\n}\n[/block]","category":"5aabfe3048b5a200123095e1","next":{"pages":[],"description":""},"parentDoc":"58403d83c0507319000634f3","title":"Utils","version":"58403d83c0507319000634f0","__v":0,"githubsync":"","sync_unique":"","user":"57ea79f61780cd170064f273","link_url":"","type":"basic","updates":[]},{"_id":"58403fdb29e3ff0f000d85cb","body":"Esse módulo contém os comandos de leitura e escrita que são utilizados para se comunicar com os Pinpads.\nOs mesmos utilizados pelos Providers sempre que necessário.","createdAt":"2016-12-01T15:20:59.048Z","githubsync":"","link_external":false,"order":3,"slug":"comandos-e-outros","__v":0,"excerpt":"","title":"Comandos e outros","type":"basic","updates":[],"version":"58403d83c0507319000634f0","category":"5aabfe3048b5a200123095e1","project":"58403d83c0507319000634ed","sync_unique":"","api":{"params":[],"url":"","results":{"codes":[{"code":"{}","name":"","status":200,"language":"json"},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","auth":"required"},"hidden":false,"isReference":false,"link_url":"","next":{"pages":[],"description":""},"parentDoc":"58403d83c0507319000634f3","user":"57ea79f61780cd170064f273"}]}

Introdução SDK Android


[block:api-header] { "title": "Introdução" } [/block] Essa SDK permite que soluções móveis Android disponibilizem meio de pagamento direto em sua plataforma, via transações realizadas com cartão de crédito e débito. Ela possui também provedores específicos para serem utilizados em POS Android. A documentação a seguir descreve como deve ser feita a integração.
[block:api-header] { "title": "Introdução" } [/block] Essa SDK permite que soluções móveis Android disponibilizem meio de pagamento direto em sua plataforma, via transações realizadas com cartão de crédito e débito. Ela possui também provedores específicos para serem utilizados em POS Android. A documentação a seguir descreve como deve ser feita a integração.
{"_id":"59db822f9df755001a3ae9a5","project":"58403d83c0507319000634ed","version":"58403d83c0507319000634f0","category":"5aabfe3048b5a200123095e1","user":"58dcf4b604ea0f0f00fbdfcb","updates":[],"next":{"pages":[],"description":""},"createdAt":"2017-10-09T14:05:35.526Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","auth":"required","params":[],"url":""},"isReference":false,"order":1,"body":"O SDK Android (Software Development Kit), é um conjunto de ferramentas de aplicações, assim o desenvolvedor não precisa se preocupar em programar a parte do meios de pagamentos, como a captura e processamento dos dados da transação, se preocupando apenas de fazer a aplicação de negócio conforme suas necessidades.","excerpt":"","slug":"objetivo","type":"basic","title":"Objetivo","__v":0,"parentDoc":null,"childrenPages":[]}

Objetivo


O SDK Android (Software Development Kit), é um conjunto de ferramentas de aplicações, assim o desenvolvedor não precisa se preocupar em programar a parte do meios de pagamentos, como a captura e processamento dos dados da transação, se preocupando apenas de fazer a aplicação de negócio conforme suas necessidades.
O SDK Android (Software Development Kit), é um conjunto de ferramentas de aplicações, assim o desenvolvedor não precisa se preocupar em programar a parte do meios de pagamentos, como a captura e processamento dos dados da transação, se preocupando apenas de fazer a aplicação de negócio conforme suas necessidades.
{"_id":"58582d0ebfc4771b008054bd","parentDoc":null,"project":"58403d83c0507319000634ed","__v":0,"category":"5aabfe3048b5a200123095e1","link_external":false,"next":{"pages":[],"description":""},"isReference":false,"order":2,"title":"Solução SDK Android","type":"basic","sync_unique":"","updates":[],"api":{"url":"","results":{"codes":[{"language":"json","code":"{}","name":"","status":200},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","auth":"required","params":[]},"githubsync":"","hidden":false,"slug":"como-funciona-o-sdk-v2-1","link_url":"","user":"57ea79f61780cd170064f273","version":"58403d83c0507319000634f0","body":"A Solução SDK Android é um sistema que permite que o portador do cartão realize transações financeiras utilizando um mobile Android em conjuto com um PinPad mobile, normalmente conectados via Bluetooth.\n\n\nO SDK v2 segue a estrutura da imagem abaixo:\n\nO SDK foi dividida em 4 módulos:\n\n* Providers \n\n* Utils\n\n* Comandos\n\n* Outros\n[block:image]\n{\n  \"images\": [\n    {\n      \"image\": [\n        \"https://files.readme.io/1ad4d58-estrutura.PNG\",\n        \"estrutura.PNG\",\n        631,\n        410,\n        \"#f25d92\"\n      ]\n    }\n  ]\n}\n[/block]","createdAt":"2016-12-19T18:55:10.807Z","excerpt":"","childrenPages":[]}

Solução SDK Android


A Solução SDK Android é um sistema que permite que o portador do cartão realize transações financeiras utilizando um mobile Android em conjuto com um PinPad mobile, normalmente conectados via Bluetooth. O SDK v2 segue a estrutura da imagem abaixo: O SDK foi dividida em 4 módulos: * Providers * Utils * Comandos * Outros [block:image] { "images": [ { "image": [ "https://files.readme.io/1ad4d58-estrutura.PNG", "estrutura.PNG", 631, 410, "#f25d92" ] } ] } [/block]
A Solução SDK Android é um sistema que permite que o portador do cartão realize transações financeiras utilizando um mobile Android em conjuto com um PinPad mobile, normalmente conectados via Bluetooth. O SDK v2 segue a estrutura da imagem abaixo: O SDK foi dividida em 4 módulos: * Providers * Utils * Comandos * Outros [block:image] { "images": [ { "image": [ "https://files.readme.io/1ad4d58-estrutura.PNG", "estrutura.PNG", 631, 410, "#f25d92" ] } ] } [/block]
{"_id":"59e89219f40fb0001a130404","project":"58403d83c0507319000634ed","version":"58403d83c0507319000634f0","category":"5aabfe3048b5a200123095e1","user":"59de082aed35e800383f94b6","updates":[],"next":{"pages":[],"description":""},"createdAt":"2017-10-19T11:52:57.673Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","auth":"required","params":[],"url":""},"isReference":false,"order":3,"body":"[block:api-header]\n{\n  \"title\": \"Providers(Provedores)\"\n}\n[/block]\nOs Provedores de conteúdo gerenciam o acesso a um conjunto estruturado de dados. Assim, com uma simples chamada é possível Ativar a aplicação, Enviar e-mail, Enviar uma transação, etc.\n[block:callout]\n{\n  \"type\": \"info\",\n  \"body\": \"Para saber mais, veja a seção [**Providers**](doc:providers-1)\"\n}\n[/block]\n\n[block:api-header]\n{\n  \"title\": \"Utils(Utilitários)\"\n}\n[/block]\nNo módulo Utils, você possui ferramentas que podem lhe ajudar na criação da sua aplicação, essas ferramentas ajudam durante o desenvolvimento, como o teste de conexão, cronometro de benchmarck, pinpadsconectados etc.\n\n[block:callout]\n{\n  \"type\": \"info\",\n  \"body\": \"Para saber mais, veja a seção [**Utils**](doc:utils-1)\"\n}\n[/block]\n\n[block:api-header]\n{\n  \"title\": \"Comandos e Outros\"\n}\n[/block]\nEsse módulo contém os comandos de leitura e escrita (CRUD) que são utilizados para se comunicar com os Pinpads.\n\nOs mesmos utilizados pelos Providers sempre que necessário.","excerpt":"","slug":"componentes","type":"basic","title":"Componentes","__v":0,"parentDoc":null,"childrenPages":[]}

Componentes


[block:api-header] { "title": "Providers(Provedores)" } [/block] Os Provedores de conteúdo gerenciam o acesso a um conjunto estruturado de dados. Assim, com uma simples chamada é possível Ativar a aplicação, Enviar e-mail, Enviar uma transação, etc. [block:callout] { "type": "info", "body": "Para saber mais, veja a seção [**Providers**](doc:providers-1)" } [/block] [block:api-header] { "title": "Utils(Utilitários)" } [/block] No módulo Utils, você possui ferramentas que podem lhe ajudar na criação da sua aplicação, essas ferramentas ajudam durante o desenvolvimento, como o teste de conexão, cronometro de benchmarck, pinpadsconectados etc. [block:callout] { "type": "info", "body": "Para saber mais, veja a seção [**Utils**](doc:utils-1)" } [/block] [block:api-header] { "title": "Comandos e Outros" } [/block] Esse módulo contém os comandos de leitura e escrita (CRUD) que são utilizados para se comunicar com os Pinpads. Os mesmos utilizados pelos Providers sempre que necessário.
[block:api-header] { "title": "Providers(Provedores)" } [/block] Os Provedores de conteúdo gerenciam o acesso a um conjunto estruturado de dados. Assim, com uma simples chamada é possível Ativar a aplicação, Enviar e-mail, Enviar uma transação, etc. [block:callout] { "type": "info", "body": "Para saber mais, veja a seção [**Providers**](doc:providers-1)" } [/block] [block:api-header] { "title": "Utils(Utilitários)" } [/block] No módulo Utils, você possui ferramentas que podem lhe ajudar na criação da sua aplicação, essas ferramentas ajudam durante o desenvolvimento, como o teste de conexão, cronometro de benchmarck, pinpadsconectados etc. [block:callout] { "type": "info", "body": "Para saber mais, veja a seção [**Utils**](doc:utils-1)" } [/block] [block:api-header] { "title": "Comandos e Outros" } [/block] Esse módulo contém os comandos de leitura e escrita (CRUD) que são utilizados para se comunicar com os Pinpads. Os mesmos utilizados pelos Providers sempre que necessário.
{"_id":"59db8e3ae59eec0010781914","project":"58403d83c0507319000634ed","version":"58403d83c0507319000634f0","category":"5aabfe3048b5a200123095e1","user":"58dcf4b604ea0f0f00fbdfcb","updates":[],"next":{"pages":[],"description":""},"createdAt":"2017-10-09T14:56:58.552Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","auth":"required","params":[],"url":""},"isReference":false,"order":4,"body":"O protocolo de comunicação utilizado para se conectar a Stone é o HTTPS. Para o ambiente de transações (Autorização/Cancelamento/Diagnóstico), as mensagens são baseadas na versão 2.0 do protocolo EPAS/ISO 20022 CAPE (Card Payment Exchanges).\nPara o ambiente de TMS (Terminal Management) via Https, as mensagens utilizam a versão 2.0 do protocolo EPAS/ISO 20022 TMS","excerpt":"","slug":"comunicação-bluetooth","type":"basic","title":"Comunicação Stone","__v":0,"parentDoc":null,"childrenPages":[]}

Comunicação Stone


O protocolo de comunicação utilizado para se conectar a Stone é o HTTPS. Para o ambiente de transações (Autorização/Cancelamento/Diagnóstico), as mensagens são baseadas na versão 2.0 do protocolo EPAS/ISO 20022 CAPE (Card Payment Exchanges). Para o ambiente de TMS (Terminal Management) via Https, as mensagens utilizam a versão 2.0 do protocolo EPAS/ISO 20022 TMS
O protocolo de comunicação utilizado para se conectar a Stone é o HTTPS. Para o ambiente de transações (Autorização/Cancelamento/Diagnóstico), as mensagens são baseadas na versão 2.0 do protocolo EPAS/ISO 20022 CAPE (Card Payment Exchanges). Para o ambiente de TMS (Terminal Management) via Https, as mensagens utilizam a versão 2.0 do protocolo EPAS/ISO 20022 TMS
{"_id":"59db84744c45e300106031b9","project":"58403d83c0507319000634ed","version":"58403d83c0507319000634f0","category":"5aabfe3048b5a200123095e1","user":"58dcf4b604ea0f0f00fbdfcb","updates":[],"next":{"pages":[],"description":""},"createdAt":"2017-10-09T14:15:16.177Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","auth":"required","params":[],"url":""},"isReference":false,"order":5,"body":"Os dados que são trafegados entre o SDK Mobile Android e adquirente: número do cartão, trilhas, senha (sempre trafega criptografado), podem estar protegidos por criptografia.","excerpt":"","slug":"segurança","type":"basic","title":"Segurança","__v":0,"parentDoc":null,"childrenPages":[]}

Segurança


Os dados que são trafegados entre o SDK Mobile Android e adquirente: número do cartão, trilhas, senha (sempre trafega criptografado), podem estar protegidos por criptografia.
Os dados que são trafegados entre o SDK Mobile Android e adquirente: número do cartão, trilhas, senha (sempre trafega criptografado), podem estar protegidos por criptografia.
{"_id":"59e795ccd099830024a9ff4c","project":"58403d83c0507319000634ed","version":"58403d83c0507319000634f0","category":"5aabfe3048b5a200123095e1","user":"59de082aed35e800383f94b6","updates":[],"next":{"pages":[],"description":""},"createdAt":"2017-10-18T17:56:28.004Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","auth":"required","params":[],"url":""},"isReference":false,"order":6,"body":"Na Stone temos um ambiente de homologação onde o desenvolvedor terá a oportunidade de testar o funcionamento da aplicação de negócio em conjunto com o SDK, podendo simular transações e avaliar o comportamento da sua aplicação.","excerpt":"Sandbox e Produção","slug":"ambientes-stone","type":"basic","title":"Ambiente Stone","__v":0,"parentDoc":null,"childrenPages":[]}

Ambiente Stone

Sandbox e Produção

Na Stone temos um ambiente de homologação onde o desenvolvedor terá a oportunidade de testar o funcionamento da aplicação de negócio em conjunto com o SDK, podendo simular transações e avaliar o comportamento da sua aplicação.
Na Stone temos um ambiente de homologação onde o desenvolvedor terá a oportunidade de testar o funcionamento da aplicação de negócio em conjunto com o SDK, podendo simular transações e avaliar o comportamento da sua aplicação.
{"_id":"59e893f2f40fb0001a13041e","project":"58403d83c0507319000634ed","version":"58403d83c0507319000634f0","category":"5aabfe3048b5a200123095e1","user":"59de082aed35e800383f94b6","updates":[],"next":{"pages":[],"description":""},"createdAt":"2017-10-19T12:00:50.376Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","auth":"required","params":[],"url":""},"isReference":false,"order":7,"body":"[block:api-header]\n{\n  \"title\": \"Sandbox\"\n}\n[/block]\nPara obter sua chave para integração em nosso ambiente Sandbox (TESTE), solicite sua credencial de acesso ao nosso time de integrações pelo e-mail [integracoes@stone.com.br](mailto:integracoes@stone.com.br)  \n\nLhe encaminharemos a chaves vinculada ao produto SDK Android:\n\n**StoneCode**\n\nLembrando que o StoneCode também deve ser de conhecimento do desenvolvedor/estabelecimento.\n\n[block:api-header]\n{\n  \"title\": \"Produção\"\n}\n[/block]\nUma vez que a etapa de homologação for concluída você precisará de uma credencial de **PRODUÇÃO** .\n\nPara solicitar, encaminhe um e-mail para o nosso time [meajuda@stone.com.br](meajuda@stone.com.br)  lhe auxiliar no processo de credenciamento.","excerpt":"","slug":"como-começar-a-usar","type":"basic","title":"Credenciais de Acesso","__v":0,"parentDoc":null,"childrenPages":[]}

Credenciais de Acesso


[block:api-header] { "title": "Sandbox" } [/block] Para obter sua chave para integração em nosso ambiente Sandbox (TESTE), solicite sua credencial de acesso ao nosso time de integrações pelo e-mail [integracoes@stone.com.br](mailto:integracoes@stone.com.br) Lhe encaminharemos a chaves vinculada ao produto SDK Android: **StoneCode** Lembrando que o StoneCode também deve ser de conhecimento do desenvolvedor/estabelecimento. [block:api-header] { "title": "Produção" } [/block] Uma vez que a etapa de homologação for concluída você precisará de uma credencial de **PRODUÇÃO** . Para solicitar, encaminhe um e-mail para o nosso time [meajuda@stone.com.br](meajuda@stone.com.br) lhe auxiliar no processo de credenciamento.
[block:api-header] { "title": "Sandbox" } [/block] Para obter sua chave para integração em nosso ambiente Sandbox (TESTE), solicite sua credencial de acesso ao nosso time de integrações pelo e-mail [integracoes@stone.com.br](mailto:integracoes@stone.com.br) Lhe encaminharemos a chaves vinculada ao produto SDK Android: **StoneCode** Lembrando que o StoneCode também deve ser de conhecimento do desenvolvedor/estabelecimento. [block:api-header] { "title": "Produção" } [/block] Uma vez que a etapa de homologação for concluída você precisará de uma credencial de **PRODUÇÃO** . Para solicitar, encaminhe um e-mail para o nosso time [meajuda@stone.com.br](meajuda@stone.com.br) lhe auxiliar no processo de credenciamento.
{"_id":"58582d5757d2ec2f00717109","link_external":false,"order":1,"slug":"preparando-aplicacao","updates":["5ad788a9f7096b0003956967"],"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","auth":"required","params":[],"url":""},"excerpt":"","githubsync":"","project":"58403d83c0507319000634ed","sync_unique":"","type":"basic","user":"57ea79f61780cd170064f273","link_url":"","next":{"pages":[],"description":""},"parentDoc":null,"category":"58403d83c0507319000634f1","createdAt":"2016-12-19T18:56:23.737Z","hidden":false,"isReference":false,"title":"Preparando sua aplicação","__v":1,"body":"Para você iniciar a integração com a Stone, existe um repositório no [GitHub](https://github.com/stone-pagamentos/sdk-android-V2) no qual você pode obter o nosso app demo que te ajudará a integrar de uma forma rápida com a SDK.\n\nPrimeiro, adicione o nosso repositório no build.gradle do seu projeto:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"repositories {\\n  maven { url \\\"https://packagecloud.io/stone/sdk-android/maven2\\\" }\\n}\",\n      \"language\": \"javascript\"\n    }\n  ]\n}\n[/block]\n\ndepois, adicione como dependência no módulo desejado:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"dependencies {\\n  compile \\\"br.com.stone:stone-sdk:$stone_sdk_version\\\"\\n}\\n\",\n      \"language\": \"java\"\n    }\n  ]\n}\n[/block]\n\n[block:api-header]\n{\n  \"title\": \"Primeiros passos\"\n}\n[/block]\nApós adicionar o repositório e dependência de integração no seu projeto, é importante que você chame o método na Main do seu projeto:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"StoneStart.init( [SUA MAIN ACTIVITY] )\",\n      \"language\": \"java\"\n    }\n  ]\n}\n[/block]\nEsse método irá retornar uma lista de objetos do tipo UserModel.\n\nUserModel representa o seu usuário, ele irá carregar as informações em cache (estas informações são utilizadas constantemente pela SDK). Caso esse método retorne null, indica que você não fez a chamada do provider ActiveApplicationProvider, como temos de exemplo o código abaixo:\n\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"// Este deve ser, obrigatoriamente, o primeiro método a ser chamado. É um método que trabalha com sessão.\\nList<UserModel> listOfUser = StoneStart.init(SUA_MAIN_ACTIVITY_AQUI);\\n\\n// Se retornar nulo, você provavelmente não ativou o SDK ou as informações do Stone SDK foram excluídos.\\nif (listOfUser == null) {\\n  List<String> stoneCodeToActiveList = new ArrayList<String>();\\n  stoneCodeToActiveList.add(STONE_PRODUCT_KEY);\\n\\n  ActiveApplicationProvider activeApplicationProvider = new ActiveApplicationProvider(SUA_MAIN_ACTIVITY_AQUI, stoneCodeToActiveList); // Você deve colocar seu StoneCode aqui.\\n  activeApplicationProvider.setDialogMessage(\\\"Ativando o aplicativo\\\");\\n  activeApplicationProvider.setDialogTitle(\\\"Aguarde\\\");\\n  activeApplicationProvider.useDefaultUI(true) // Informa se este provider irá rodar em background ou não.\\n  activeApplicationProvider.setConnectionCallback(new StoneCallbackInterface() {\\n     /* Sempre que utilizar um provider, instancie esta interface.\\n      * Ela irá lhe informar se o provider foi executado com sucesso ou não. */\\n\\n     // Método chamado se for executado sem erros\\n     public void onSuccess() {\\n       Toast.makeText(getApplicationContext(), \\\"Ativado com sucesso, iniciando o aplicativo\\\", Toast.LENGTH_SHORT).show();\\n       continueApplication();\\n     }\\n\\n     // Método chamado caso ocorra alguma exceção\\n     public void onError() {\\n       Toast.makeText(getApplicationContext(), \\\"Erro na ativação do aplicativo, verifique a lista de erros do provider\\\", Toast.LENGTH_SHORT).show();\\n       // Chame o método abaixo para verificar a lista de erros. Para mais detalhes, leia a documentação.\\n       activeApplicationProvider.getListOfErrors();\\n     }\\n  });\\n  activeApplicationProvider.execute();\\n} else {\\n  // Caso já tenha as informações do SDK e chamado o ActiveApplicationProvider anteriormente, sua aplicação poderá seguir o fluxo normal.\\n  continueApplication();\\n}\",\n      \"language\": \"java\"\n    }\n  ]\n}\n[/block]\nFeito isso e sua SDK estando ativada, você está pronto para iniciar suas transações.\n[block:callout]\n{\n  \"type\": \"info\",\n  \"body\": \"Veja a tabela [**Transações Financeiras**](doc:transações-financeiras) para saber sobre as possíveis transações financeiras.\"\n}\n[/block]","version":"58403d83c0507319000634f0","childrenPages":[]}

Preparando sua aplicação


Para você iniciar a integração com a Stone, existe um repositório no [GitHub](https://github.com/stone-pagamentos/sdk-android-V2) no qual você pode obter o nosso app demo que te ajudará a integrar de uma forma rápida com a SDK. Primeiro, adicione o nosso repositório no build.gradle do seu projeto: [block:code] { "codes": [ { "code": "repositories {\n maven { url \"https://packagecloud.io/stone/sdk-android/maven2\" }\n}", "language": "javascript" } ] } [/block] depois, adicione como dependência no módulo desejado: [block:code] { "codes": [ { "code": "dependencies {\n compile \"br.com.stone:stone-sdk:$stone_sdk_version\"\n}\n", "language": "java" } ] } [/block] [block:api-header] { "title": "Primeiros passos" } [/block] Após adicionar o repositório e dependência de integração no seu projeto, é importante que você chame o método na Main do seu projeto: [block:code] { "codes": [ { "code": "StoneStart.init( [SUA MAIN ACTIVITY] )", "language": "java" } ] } [/block] Esse método irá retornar uma lista de objetos do tipo UserModel. UserModel representa o seu usuário, ele irá carregar as informações em cache (estas informações são utilizadas constantemente pela SDK). Caso esse método retorne null, indica que você não fez a chamada do provider ActiveApplicationProvider, como temos de exemplo o código abaixo: [block:code] { "codes": [ { "code": "// Este deve ser, obrigatoriamente, o primeiro método a ser chamado. É um método que trabalha com sessão.\nList<UserModel> listOfUser = StoneStart.init(SUA_MAIN_ACTIVITY_AQUI);\n\n// Se retornar nulo, você provavelmente não ativou o SDK ou as informações do Stone SDK foram excluídos.\nif (listOfUser == null) {\n List<String> stoneCodeToActiveList = new ArrayList<String>();\n stoneCodeToActiveList.add(STONE_PRODUCT_KEY);\n\n ActiveApplicationProvider activeApplicationProvider = new ActiveApplicationProvider(SUA_MAIN_ACTIVITY_AQUI, stoneCodeToActiveList); // Você deve colocar seu StoneCode aqui.\n activeApplicationProvider.setDialogMessage(\"Ativando o aplicativo\");\n activeApplicationProvider.setDialogTitle(\"Aguarde\");\n activeApplicationProvider.useDefaultUI(true) // Informa se este provider irá rodar em background ou não.\n activeApplicationProvider.setConnectionCallback(new StoneCallbackInterface() {\n /* Sempre que utilizar um provider, instancie esta interface.\n * Ela irá lhe informar se o provider foi executado com sucesso ou não. */\n\n // Método chamado se for executado sem erros\n public void onSuccess() {\n Toast.makeText(getApplicationContext(), \"Ativado com sucesso, iniciando o aplicativo\", Toast.LENGTH_SHORT).show();\n continueApplication();\n }\n\n // Método chamado caso ocorra alguma exceção\n public void onError() {\n Toast.makeText(getApplicationContext(), \"Erro na ativação do aplicativo, verifique a lista de erros do provider\", Toast.LENGTH_SHORT).show();\n // Chame o método abaixo para verificar a lista de erros. Para mais detalhes, leia a documentação.\n activeApplicationProvider.getListOfErrors();\n }\n });\n activeApplicationProvider.execute();\n} else {\n // Caso já tenha as informações do SDK e chamado o ActiveApplicationProvider anteriormente, sua aplicação poderá seguir o fluxo normal.\n continueApplication();\n}", "language": "java" } ] } [/block] Feito isso e sua SDK estando ativada, você está pronto para iniciar suas transações. [block:callout] { "type": "info", "body": "Veja a tabela [**Transações Financeiras**](doc:transações-financeiras) para saber sobre as possíveis transações financeiras." } [/block]
Para você iniciar a integração com a Stone, existe um repositório no [GitHub](https://github.com/stone-pagamentos/sdk-android-V2) no qual você pode obter o nosso app demo que te ajudará a integrar de uma forma rápida com a SDK. Primeiro, adicione o nosso repositório no build.gradle do seu projeto: [block:code] { "codes": [ { "code": "repositories {\n maven { url \"https://packagecloud.io/stone/sdk-android/maven2\" }\n}", "language": "javascript" } ] } [/block] depois, adicione como dependência no módulo desejado: [block:code] { "codes": [ { "code": "dependencies {\n compile \"br.com.stone:stone-sdk:$stone_sdk_version\"\n}\n", "language": "java" } ] } [/block] [block:api-header] { "title": "Primeiros passos" } [/block] Após adicionar o repositório e dependência de integração no seu projeto, é importante que você chame o método na Main do seu projeto: [block:code] { "codes": [ { "code": "StoneStart.init( [SUA MAIN ACTIVITY] )", "language": "java" } ] } [/block] Esse método irá retornar uma lista de objetos do tipo UserModel. UserModel representa o seu usuário, ele irá carregar as informações em cache (estas informações são utilizadas constantemente pela SDK). Caso esse método retorne null, indica que você não fez a chamada do provider ActiveApplicationProvider, como temos de exemplo o código abaixo: [block:code] { "codes": [ { "code": "// Este deve ser, obrigatoriamente, o primeiro método a ser chamado. É um método que trabalha com sessão.\nList<UserModel> listOfUser = StoneStart.init(SUA_MAIN_ACTIVITY_AQUI);\n\n// Se retornar nulo, você provavelmente não ativou o SDK ou as informações do Stone SDK foram excluídos.\nif (listOfUser == null) {\n List<String> stoneCodeToActiveList = new ArrayList<String>();\n stoneCodeToActiveList.add(STONE_PRODUCT_KEY);\n\n ActiveApplicationProvider activeApplicationProvider = new ActiveApplicationProvider(SUA_MAIN_ACTIVITY_AQUI, stoneCodeToActiveList); // Você deve colocar seu StoneCode aqui.\n activeApplicationProvider.setDialogMessage(\"Ativando o aplicativo\");\n activeApplicationProvider.setDialogTitle(\"Aguarde\");\n activeApplicationProvider.useDefaultUI(true) // Informa se este provider irá rodar em background ou não.\n activeApplicationProvider.setConnectionCallback(new StoneCallbackInterface() {\n /* Sempre que utilizar um provider, instancie esta interface.\n * Ela irá lhe informar se o provider foi executado com sucesso ou não. */\n\n // Método chamado se for executado sem erros\n public void onSuccess() {\n Toast.makeText(getApplicationContext(), \"Ativado com sucesso, iniciando o aplicativo\", Toast.LENGTH_SHORT).show();\n continueApplication();\n }\n\n // Método chamado caso ocorra alguma exceção\n public void onError() {\n Toast.makeText(getApplicationContext(), \"Erro na ativação do aplicativo, verifique a lista de erros do provider\", Toast.LENGTH_SHORT).show();\n // Chame o método abaixo para verificar a lista de erros. Para mais detalhes, leia a documentação.\n activeApplicationProvider.getListOfErrors();\n }\n });\n activeApplicationProvider.execute();\n} else {\n // Caso já tenha as informações do SDK e chamado o ActiveApplicationProvider anteriormente, sua aplicação poderá seguir o fluxo normal.\n continueApplication();\n}", "language": "java" } ] } [/block] Feito isso e sua SDK estando ativada, você está pronto para iniciar suas transações. [block:callout] { "type": "info", "body": "Veja a tabela [**Transações Financeiras**](doc:transações-financeiras) para saber sobre as possíveis transações financeiras." } [/block]
{"_id":"5aac03f2e5b13a005acf7c0d","project":"58403d83c0507319000634ed","version":"58403d83c0507319000634f0","category":"58403d83c0507319000634f1","user":"59de082aed35e800383f94b6","updates":[],"next":{"pages":[],"description":""},"createdAt":"2018-03-16T17:50:42.292Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","auth":"required","params":[],"url":""},"isReference":false,"order":2,"body":"A conexão Bluetooth é realizada também pela SDK, você deverá utilizar o BluetoothConnectionProvider para criar conexões com os Pinpads.\n\nNós recomendamos que você liste todos os aparelhos que já foram conectados com o dispositivo na sua aplicação com a função “BluetoothAdapter.getBondedDevices()” do Android. Ela retornará o histórico de aparelhos do Bluetooth.\n\nPara utilizar o BluetoothConnectionProvider, você precisará passar um parâmetro do tipo PinpadObject.\n\n\n[block:callout]\n{\n  \"type\": \"info\",\n  \"body\": \"Veja os atributos desse objeto na seção [**PinpadObject**](doc:conexão-bluetooth-1).\"\n}\n[/block]\n\n[block:api-header]\n{\n  \"title\": \"Criando a conexão\"\n}\n[/block]\nPara criar uma conexão, basta instanciar um objeto do tipo PinpadObject e informar o nome e o mac address do dispositivo. Estas informações pode ser obtidas com os itens que são retornados da função BluetoothAdapter.getBondedDevices();” do Android.\n\nFeito isso e a conexão realizada com sucesso, o Pinpad será adicionado em uma lista de Pinpads conectados na classe Stone. Para obter a lista você pode utilizar o método Stone.getPinpadListSize(). Esse método pode te retornar null caso o Bluetooth esteja desligado ou caso não haja conexão.\n\nSempre que a SDK solicitar um Pinpad como parâmetro, você pode passar Stone .getPinpadFromListAt(0), **se você estiver conectado somente com um pinpad.**\n\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"/* Função do android que retorna todos os aparelhos \\n *que ja foram conectados com o dispositivo. \\n *Usada para obter as informações como \\\"nome\\\" e \\\"mac address\\\" do dispositivo, \\n *que serão atribúidos ao PinpadObject*/\\nBluetoothAdapter.getBondedDevices();\\n\\n/*Retorna a lista de Pinpads conectados. \\n *Retorna null caso o Bluetooth esteja desligado*/\\nStone.getPinpadListSize();\\n  \\n/*Pode ser usado sempre que a SDK solicitar um Pinpad como parâmetro, \\n *e você estiver conectado somente com UM pinpad*/\\nStone.getPinpadFromListAt(0);\",\n      \"language\": \"java\"\n    }\n  ]\n}\n[/block]","excerpt":"","slug":"provedor-bluetooth","type":"basic","title":"Provider de conexão Bluetooth","__v":0,"parentDoc":null,"childrenPages":[]}

Provider de conexão Bluetooth


A conexão Bluetooth é realizada também pela SDK, você deverá utilizar o BluetoothConnectionProvider para criar conexões com os Pinpads. Nós recomendamos que você liste todos os aparelhos que já foram conectados com o dispositivo na sua aplicação com a função “BluetoothAdapter.getBondedDevices()” do Android. Ela retornará o histórico de aparelhos do Bluetooth. Para utilizar o BluetoothConnectionProvider, você precisará passar um parâmetro do tipo PinpadObject. [block:callout] { "type": "info", "body": "Veja os atributos desse objeto na seção [**PinpadObject**](doc:conexão-bluetooth-1)." } [/block] [block:api-header] { "title": "Criando a conexão" } [/block] Para criar uma conexão, basta instanciar um objeto do tipo PinpadObject e informar o nome e o mac address do dispositivo. Estas informações pode ser obtidas com os itens que são retornados da função BluetoothAdapter.getBondedDevices();” do Android. Feito isso e a conexão realizada com sucesso, o Pinpad será adicionado em uma lista de Pinpads conectados na classe Stone. Para obter a lista você pode utilizar o método Stone.getPinpadListSize(). Esse método pode te retornar null caso o Bluetooth esteja desligado ou caso não haja conexão. Sempre que a SDK solicitar um Pinpad como parâmetro, você pode passar Stone .getPinpadFromListAt(0), **se você estiver conectado somente com um pinpad.** [block:code] { "codes": [ { "code": "/* Função do android que retorna todos os aparelhos \n *que ja foram conectados com o dispositivo. \n *Usada para obter as informações como \"nome\" e \"mac address\" do dispositivo, \n *que serão atribúidos ao PinpadObject*/\nBluetoothAdapter.getBondedDevices();\n\n/*Retorna a lista de Pinpads conectados. \n *Retorna null caso o Bluetooth esteja desligado*/\nStone.getPinpadListSize();\n \n/*Pode ser usado sempre que a SDK solicitar um Pinpad como parâmetro, \n *e você estiver conectado somente com UM pinpad*/\nStone.getPinpadFromListAt(0);", "language": "java" } ] } [/block]
A conexão Bluetooth é realizada também pela SDK, você deverá utilizar o BluetoothConnectionProvider para criar conexões com os Pinpads. Nós recomendamos que você liste todos os aparelhos que já foram conectados com o dispositivo na sua aplicação com a função “BluetoothAdapter.getBondedDevices()” do Android. Ela retornará o histórico de aparelhos do Bluetooth. Para utilizar o BluetoothConnectionProvider, você precisará passar um parâmetro do tipo PinpadObject. [block:callout] { "type": "info", "body": "Veja os atributos desse objeto na seção [**PinpadObject**](doc:conexão-bluetooth-1)." } [/block] [block:api-header] { "title": "Criando a conexão" } [/block] Para criar uma conexão, basta instanciar um objeto do tipo PinpadObject e informar o nome e o mac address do dispositivo. Estas informações pode ser obtidas com os itens que são retornados da função BluetoothAdapter.getBondedDevices();” do Android. Feito isso e a conexão realizada com sucesso, o Pinpad será adicionado em uma lista de Pinpads conectados na classe Stone. Para obter a lista você pode utilizar o método Stone.getPinpadListSize(). Esse método pode te retornar null caso o Bluetooth esteja desligado ou caso não haja conexão. Sempre que a SDK solicitar um Pinpad como parâmetro, você pode passar Stone .getPinpadFromListAt(0), **se você estiver conectado somente com um pinpad.** [block:code] { "codes": [ { "code": "/* Função do android que retorna todos os aparelhos \n *que ja foram conectados com o dispositivo. \n *Usada para obter as informações como \"nome\" e \"mac address\" do dispositivo, \n *que serão atribúidos ao PinpadObject*/\nBluetoothAdapter.getBondedDevices();\n\n/*Retorna a lista de Pinpads conectados. \n *Retorna null caso o Bluetooth esteja desligado*/\nStone.getPinpadListSize();\n \n/*Pode ser usado sempre que a SDK solicitar um Pinpad como parâmetro, \n *e você estiver conectado somente com UM pinpad*/\nStone.getPinpadFromListAt(0);", "language": "java" } ] } [/block]
{"_id":"58582d793ed9a719000c12ae","next":{"pages":[],"description":""},"order":3,"project":"58403d83c0507319000634ed","user":"57ea79f61780cd170064f273","api":{"url":"","results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","auth":"required","params":[]},"createdAt":"2016-12-19T18:56:57.141Z","excerpt":"","hidden":false,"isReference":false,"link_external":false,"sync_unique":"","title":"Provedor de transação","type":"basic","updates":["59c045eb0d8fd20030a30012"],"version":"58403d83c0507319000634f0","githubsync":"","link_url":"","parentDoc":null,"slug":"provedor-de-transacao","__v":1,"body":"Passar transações com a nova SDK é simples e rápido. A primeira coisa que deve ser feita é instanciar um objeto do tipo TransactionObject.\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"final TransactionObject transaction = new TransactionObject();\",\n      \"language\": \"java\"\n    }\n  ]\n}\n[/block]\nA seguir, deve-se popular o objeto:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"//Definir o valor da transação em centavos\\ntransaction.setAmount(\\\"10\\\");\\n\\ntransaction.setRequestId(null);\\n\\n/* AVISO IMPORTANTE: Não é recomendado alterar o campo abaixo do ITK,\\n * pois ele gera um valor único. Contudo, caso seja necessário\\n * faça conforme a linha a seguir. */\\ntransaction.setInitiatorTransactionKey(\\\"SEU_IDENTIFICADOR_UNICO_AQUI\\\");\\n\\n//Informar a quantidade de parcelas, veja a tabela de valores para o InstalmentTransactionEnum\\ntransaction.setInstalmentTransaction(InstalmentTransactionEnum.ONE_INSTALMENT);\\n\\n//Definir forma de pagamento\\ntransaction.setTypeOfTransaction(TypeOfTransactionEnum.CREDIT);\\n\\n//Define se transação será feita com captura ou não.\\ntransaction.setCapture(true); \",\n      \"language\": \"java\",\n      \"name\": null\n    }\n  ]\n}\n[/block]\n\n[block:callout]\n{\n  \"type\": \"info\",\n  \"body\": \"Veja os atributos deste objeto na seção [**TransactionObject**](doc:transaction-object)\"\n}\n[/block]\nPara a TransactionObject, a quantidade de parcelas é passada por um enum chamado InstalmentTransactionEnum\n[block:callout]\n{\n  \"type\": \"info\",\n  \"body\": \"Veja detalhes do *InstalmentTransactionEnum*  na seção [**Parcelas**](doc:parcelas)\"\n}\n[/block]\nApós instanciar e popular o objeto TransactionObject, você poderá passar o mesmo para o TransactionProvider, que será o responsável por enviar a transação para o autorizador e trabalhar com a inserção e atualização no TransactionDAO.\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"// Processo para envio da transação\\n\\n// Stone.getUserModel(0) é o usuário atual do aplicativo, que está na posição zero.\\n/* Passe o Pinpad que você está conectado. Apenas para lembrar, se você estiver conectado\\n * com apenas UM Pinpad, você deve passar \\\"Stone.getPinpadFromListAt(0)\\\" */\\nfinal TransactionProvider provider = new TransactionProvider(\\\"SUA_ACTIVITY_AQUI\\\", transaction, \\\"USUARIO_DO_APLICATIVO_AQUI\\\", \\\"SEU_PINPAD_AQUI\\\");\\n\\nprovider.useDefaultUI(true);\\nprovider.setDialogTitle(\\\"Aguarde\\\"); // Título do Dialog\\nprovider.setDialogMessage(\\\"Enviando...\\\"); // Mensagem do Dialog\\n\\nprovider.setConnectionCallback(new StoneCallbackInterface() {\\n  public void onSucess() {\\n    // Transação enviada com sucesso e salva no banco. Para acessar, use o TransactionDAO\\n  }\\n  public void OnError() {\\n    // Erro na transação\\n  }\\n});\",\n      \"language\": \"java\"\n    }\n  ]\n}\n[/block]\nLembrando que TransactionProvider segue a mesma estrutura do ActiveApplicationProvider, BluetoothConnectionProvider e os demais. Esse provider pede uma Activity e a TransactionObject que foi criada anteriormente.\n\nPara a TransactionObject, a quantidade de parcelas é passada por um enum chamado InstalmentTransactionEnum.\n\nApós a execução do provider, a sua aplicação receberá uma chamada no método onSuccess() ou onError(). \n\nPara ter acesso ao status da transação, você deve utilizar o método:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"getTransactionStatus();\",\n      \"language\": \"java\"\n    }\n  ]\n}\n[/block]\nEm caso de REJECTED e DECLINED, você pode capturar a mensagem do autorizador com o método.\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"getMessageFromAuthorize()\",\n      \"language\": \"java\"\n    }\n  ]\n}\n[/block]\nMensagens como por exemplo: “Saldo insuficiente”, “Cartão inválido”, “Violação de segurança”, etc.\n[block:callout]\n{\n  \"type\": \"info\",\n  \"body\": \"Veja detalhes do método *getTransactionStatus()* na seção [**Status da transação**](doc:status-da-transação)\"\n}\n[/block]\n\n[block:callout]\n{\n  \"type\": \"warning\",\n  \"body\": \"O Pinpad que será utilizado na transação é o que foi passado como parâmetro na instância do TransactionProvider.\"\n}\n[/block]","category":"58403d83c0507319000634f1","childrenPages":[]}

Provedor de transação


Passar transações com a nova SDK é simples e rápido. A primeira coisa que deve ser feita é instanciar um objeto do tipo TransactionObject. [block:code] { "codes": [ { "code": "final TransactionObject transaction = new TransactionObject();", "language": "java" } ] } [/block] A seguir, deve-se popular o objeto: [block:code] { "codes": [ { "code": "//Definir o valor da transação em centavos\ntransaction.setAmount(\"10\");\n\ntransaction.setRequestId(null);\n\n/* AVISO IMPORTANTE: Não é recomendado alterar o campo abaixo do ITK,\n * pois ele gera um valor único. Contudo, caso seja necessário\n * faça conforme a linha a seguir. */\ntransaction.setInitiatorTransactionKey(\"SEU_IDENTIFICADOR_UNICO_AQUI\");\n\n//Informar a quantidade de parcelas, veja a tabela de valores para o InstalmentTransactionEnum\ntransaction.setInstalmentTransaction(InstalmentTransactionEnum.ONE_INSTALMENT);\n\n//Definir forma de pagamento\ntransaction.setTypeOfTransaction(TypeOfTransactionEnum.CREDIT);\n\n//Define se transação será feita com captura ou não.\ntransaction.setCapture(true); ", "language": "java", "name": null } ] } [/block] [block:callout] { "type": "info", "body": "Veja os atributos deste objeto na seção [**TransactionObject**](doc:transaction-object)" } [/block] Para a TransactionObject, a quantidade de parcelas é passada por um enum chamado InstalmentTransactionEnum [block:callout] { "type": "info", "body": "Veja detalhes do *InstalmentTransactionEnum* na seção [**Parcelas**](doc:parcelas)" } [/block] Após instanciar e popular o objeto TransactionObject, você poderá passar o mesmo para o TransactionProvider, que será o responsável por enviar a transação para o autorizador e trabalhar com a inserção e atualização no TransactionDAO. [block:code] { "codes": [ { "code": "// Processo para envio da transação\n\n// Stone.getUserModel(0) é o usuário atual do aplicativo, que está na posição zero.\n/* Passe o Pinpad que você está conectado. Apenas para lembrar, se você estiver conectado\n * com apenas UM Pinpad, você deve passar \"Stone.getPinpadFromListAt(0)\" */\nfinal TransactionProvider provider = new TransactionProvider(\"SUA_ACTIVITY_AQUI\", transaction, \"USUARIO_DO_APLICATIVO_AQUI\", \"SEU_PINPAD_AQUI\");\n\nprovider.useDefaultUI(true);\nprovider.setDialogTitle(\"Aguarde\"); // Título do Dialog\nprovider.setDialogMessage(\"Enviando...\"); // Mensagem do Dialog\n\nprovider.setConnectionCallback(new StoneCallbackInterface() {\n public void onSucess() {\n // Transação enviada com sucesso e salva no banco. Para acessar, use o TransactionDAO\n }\n public void OnError() {\n // Erro na transação\n }\n});", "language": "java" } ] } [/block] Lembrando que TransactionProvider segue a mesma estrutura do ActiveApplicationProvider, BluetoothConnectionProvider e os demais. Esse provider pede uma Activity e a TransactionObject que foi criada anteriormente. Para a TransactionObject, a quantidade de parcelas é passada por um enum chamado InstalmentTransactionEnum. Após a execução do provider, a sua aplicação receberá uma chamada no método onSuccess() ou onError(). Para ter acesso ao status da transação, você deve utilizar o método: [block:code] { "codes": [ { "code": "getTransactionStatus();", "language": "java" } ] } [/block] Em caso de REJECTED e DECLINED, você pode capturar a mensagem do autorizador com o método. [block:code] { "codes": [ { "code": "getMessageFromAuthorize()", "language": "java" } ] } [/block] Mensagens como por exemplo: “Saldo insuficiente”, “Cartão inválido”, “Violação de segurança”, etc. [block:callout] { "type": "info", "body": "Veja detalhes do método *getTransactionStatus()* na seção [**Status da transação**](doc:status-da-transação)" } [/block] [block:callout] { "type": "warning", "body": "O Pinpad que será utilizado na transação é o que foi passado como parâmetro na instância do TransactionProvider." } [/block]
Passar transações com a nova SDK é simples e rápido. A primeira coisa que deve ser feita é instanciar um objeto do tipo TransactionObject. [block:code] { "codes": [ { "code": "final TransactionObject transaction = new TransactionObject();", "language": "java" } ] } [/block] A seguir, deve-se popular o objeto: [block:code] { "codes": [ { "code": "//Definir o valor da transação em centavos\ntransaction.setAmount(\"10\");\n\ntransaction.setRequestId(null);\n\n/* AVISO IMPORTANTE: Não é recomendado alterar o campo abaixo do ITK,\n * pois ele gera um valor único. Contudo, caso seja necessário\n * faça conforme a linha a seguir. */\ntransaction.setInitiatorTransactionKey(\"SEU_IDENTIFICADOR_UNICO_AQUI\");\n\n//Informar a quantidade de parcelas, veja a tabela de valores para o InstalmentTransactionEnum\ntransaction.setInstalmentTransaction(InstalmentTransactionEnum.ONE_INSTALMENT);\n\n//Definir forma de pagamento\ntransaction.setTypeOfTransaction(TypeOfTransactionEnum.CREDIT);\n\n//Define se transação será feita com captura ou não.\ntransaction.setCapture(true); ", "language": "java", "name": null } ] } [/block] [block:callout] { "type": "info", "body": "Veja os atributos deste objeto na seção [**TransactionObject**](doc:transaction-object)" } [/block] Para a TransactionObject, a quantidade de parcelas é passada por um enum chamado InstalmentTransactionEnum [block:callout] { "type": "info", "body": "Veja detalhes do *InstalmentTransactionEnum* na seção [**Parcelas**](doc:parcelas)" } [/block] Após instanciar e popular o objeto TransactionObject, você poderá passar o mesmo para o TransactionProvider, que será o responsável por enviar a transação para o autorizador e trabalhar com a inserção e atualização no TransactionDAO. [block:code] { "codes": [ { "code": "// Processo para envio da transação\n\n// Stone.getUserModel(0) é o usuário atual do aplicativo, que está na posição zero.\n/* Passe o Pinpad que você está conectado. Apenas para lembrar, se você estiver conectado\n * com apenas UM Pinpad, você deve passar \"Stone.getPinpadFromListAt(0)\" */\nfinal TransactionProvider provider = new TransactionProvider(\"SUA_ACTIVITY_AQUI\", transaction, \"USUARIO_DO_APLICATIVO_AQUI\", \"SEU_PINPAD_AQUI\");\n\nprovider.useDefaultUI(true);\nprovider.setDialogTitle(\"Aguarde\"); // Título do Dialog\nprovider.setDialogMessage(\"Enviando...\"); // Mensagem do Dialog\n\nprovider.setConnectionCallback(new StoneCallbackInterface() {\n public void onSucess() {\n // Transação enviada com sucesso e salva no banco. Para acessar, use o TransactionDAO\n }\n public void OnError() {\n // Erro na transação\n }\n});", "language": "java" } ] } [/block] Lembrando que TransactionProvider segue a mesma estrutura do ActiveApplicationProvider, BluetoothConnectionProvider e os demais. Esse provider pede uma Activity e a TransactionObject que foi criada anteriormente. Para a TransactionObject, a quantidade de parcelas é passada por um enum chamado InstalmentTransactionEnum. Após a execução do provider, a sua aplicação receberá uma chamada no método onSuccess() ou onError(). Para ter acesso ao status da transação, você deve utilizar o método: [block:code] { "codes": [ { "code": "getTransactionStatus();", "language": "java" } ] } [/block] Em caso de REJECTED e DECLINED, você pode capturar a mensagem do autorizador com o método. [block:code] { "codes": [ { "code": "getMessageFromAuthorize()", "language": "java" } ] } [/block] Mensagens como por exemplo: “Saldo insuficiente”, “Cartão inválido”, “Violação de segurança”, etc. [block:callout] { "type": "info", "body": "Veja detalhes do método *getTransactionStatus()* na seção [**Status da transação**](doc:status-da-transação)" } [/block] [block:callout] { "type": "warning", "body": "O Pinpad que será utilizado na transação é o que foi passado como parâmetro na instância do TransactionProvider." } [/block]
{"_id":"58582da1e286ba2500cca583","slug":"provedor-de-impressao-pinpad","updates":[],"category":"58403d83c0507319000634f1","link_external":false,"link_url":"","sync_unique":"","body":"O provedor de impressão, PrintProvider, pode ser utilizado apenas com pinpads que possuem suporte a print. Na assinatura do construtor, o PrintProvider irá pedir três parâmetros, uma Activity, uma lista de PrintObject e o Pinpad que irá imprimir o seu comprovante.\n\nPrintObject representa cada linha que será impressa pelo PrintProvider.\n\n\n[block:parameters]\n{\n  \"data\": {\n    \"h-0\": \"Tipo\",\n    \"h-1\": \"Nome\",\n    \"h-2\": \"Função\",\n    \"0-0\": \"String\",\n    \"1-0\": \"Integer\",\n    \"2-0\": \"Integer\",\n    \"0-1\": \"message\",\n    \"1-1\": \"size\",\n    \"2-1\": \"align\",\n    \"0-2\": \"Mensagem que será impressa (por linha).\",\n    \"1-2\": \"Tamanho da impressão, SMALL, MEDIUM ou BIG, todos dentro do objeto PrintObject.\",\n    \"2-2\": \"Alinhamento da impressão, LEFT, CENTER ou RIGHT, todos dentro do objeto PrintObject.\"\n  },\n  \"cols\": 3,\n  \"rows\": 3\n}\n[/block]\n\n[block:callout]\n{\n  \"type\": \"warning\",\n  \"body\": \"Para impressão de QR Code, é necessário passar ‘TAG_PRINT’ como size e align. Sua mensagem que será enviada dentro do QR Code deve conter no máximo 512 caracteres.\"\n}\n[/block]\n\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"// Declara a lista de impressão, lembrando que cada item representa uma linha.\\nList<PrintObject> listToPrint = new ArrayList<PrintObject>();\\nfor (int i = 0; i < 10; i++) {\\n    listToPrint.add(new PrintObject(\\\"Teste de impressão linha \\\" + i, PrintObject.MEDIUM, PrintObject.CENTER));\\n}\\n\\nfinal PrintProvider printProvider = new PrintProvider(\\\"SUA_ACTIVITY_AQUI\\\", listToPrint, \\\"PINPAD_QUE_VOCÊ_DESEJA_UTILIZAR\\\");\\nprintProvider.useDefaultUI(true);\\nprintProvider.setDialogMessage(\\\"Imprimindo...\\\");\\nprintProvider.setConnectionCallback(new StoneCallbackInterface() {\\n    public void onSuccess() {\\n        // Notinha impressa com sucesso.\\n    }\\n    public void onError() {\\n        // Ocorreu um erro na impressão.\\n    }\\n});\\nprintProvider.execute();\",\n      \"language\": \"java\"\n    }\n  ]\n}\n[/block]\nCom o código que tivemos de exemplo anteriormente, nós teremos o seguinte comprovante:\n[block:image]\n{\n  \"images\": [\n    {\n      \"image\": [\n        \"https://files.readme.io/24a5c21-comprovante.PNG\",\n        \"comprovante.PNG\",\n        250,\n        339,\n        \"#f4de9d\"\n      ]\n    }\n  ]\n}\n[/block]\nA SDK irá interpreter cada item da sua lista (cada PrintObject) como uma linha a ser impressa. Com o código que foi passado na imagem anterior, ele rodará um laço \"for\" e criará 10 linhas de impressão. O provider será executado e terá o resultado visto acima.\n\nPor padrão, todas as notinhas são impressas com a logo da Stone.+\n[block:api-header]\n{\n  \"title\": \"Exemplo de comprovantes\"\n}\n[/block]\n\n[block:api-header]\n{\n  \"title\": \"Via do Estabelecimento\"\n}\n[/block]\n| ID | | 123456789012345678901234567890123456789 |\n| -- | | --------------------------------------- |  \n| 1 | | STONE – Via Estabelecimento |\n| 2 | | VVVVVVVVVVVVVVVVVVVVVVV |\n| 3 | | ***************1234 DD/MM/YY HH:MM |\n| 4 | | EC:2100490717 AUT:\n| 6 | | DOC:012345624112016151100 |\n| 7 | | Stone Id:4598785265485698 |\n| 8 | | AC:XXXXXXXXXXXXXXXX XXX-YYY |\n| 9 | | AID: A000000003101005 |\n| 10 | | VISA CREDIT 3 APROVADO |\n| 11 | | CNE: XXXXXXXXXXXXXXXX |\n| 12 | | PARCELADO XXX JUROS: NN PARCELAS |\n| 13 | | TOTAL R$ 9,999,999,999.99 |\n| 14 | | TOTAL ESTORNO: R$ 9.999.999.999,99 |\n| 15 | | -------------------------------------- |\n| 16 | | NOME DO PORTADOR |\n| 17 | | RECONHEÇO E PAGAREI A DÍVIDA |\n| 18 | | AQUI REPRESENTADA |\n| 19 | | TRANSAÇÃO APROVADA COM SENHA |\n[block:api-header]\n{\n  \"title\": \"Via do Portador\"\n}\n[/block]\n| ID | | 12345678901234567890123456789012345678 |\n| -- | | --------------------------------------- | \n| 1 | | STONE – VIA CLIENTE |\n| 2 | | VVVVVVVVVVVVVVVVVVVVVVV |\n| 3 | | 123456*********1234 DD/MM/YY HH:MM |\n| 6 | | DOC: 012345624112016151100 |\n| 20 | | AUT:000000 XXX-YYY |\n| 12 | | PARCELADO XXX JUROS: NN PARCELAS |\n| 13 | | TOTAL: R$ 9.999.999.999,99 |\n| 14 | | TOTAL ESTORNO: R$ 9.999.999.999,99 |\n| 21 | | SALDO DISPONÍVEL: R$ 9.999.999,99 |","createdAt":"2016-12-19T18:57:37.453Z","githubsync":"","next":{"pages":[],"description":""},"project":"58403d83c0507319000634ed","title":"Provedor de impressão","user":"57ea79f61780cd170064f273","__v":0,"api":{"auth":"required","params":[],"url":"","results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"name":"","status":400,"language":"json","code":"{}"}]},"settings":""},"isReference":false,"parentDoc":null,"version":"58403d83c0507319000634f0","excerpt":"","hidden":false,"order":4,"type":"basic","childrenPages":[]}

Provedor de impressão


O provedor de impressão, PrintProvider, pode ser utilizado apenas com pinpads que possuem suporte a print. Na assinatura do construtor, o PrintProvider irá pedir três parâmetros, uma Activity, uma lista de PrintObject e o Pinpad que irá imprimir o seu comprovante. PrintObject representa cada linha que será impressa pelo PrintProvider. [block:parameters] { "data": { "h-0": "Tipo", "h-1": "Nome", "h-2": "Função", "0-0": "String", "1-0": "Integer", "2-0": "Integer", "0-1": "message", "1-1": "size", "2-1": "align", "0-2": "Mensagem que será impressa (por linha).", "1-2": "Tamanho da impressão, SMALL, MEDIUM ou BIG, todos dentro do objeto PrintObject.", "2-2": "Alinhamento da impressão, LEFT, CENTER ou RIGHT, todos dentro do objeto PrintObject." }, "cols": 3, "rows": 3 } [/block] [block:callout] { "type": "warning", "body": "Para impressão de QR Code, é necessário passar ‘TAG_PRINT’ como size e align. Sua mensagem que será enviada dentro do QR Code deve conter no máximo 512 caracteres." } [/block] [block:code] { "codes": [ { "code": "// Declara a lista de impressão, lembrando que cada item representa uma linha.\nList<PrintObject> listToPrint = new ArrayList<PrintObject>();\nfor (int i = 0; i < 10; i++) {\n listToPrint.add(new PrintObject(\"Teste de impressão linha \" + i, PrintObject.MEDIUM, PrintObject.CENTER));\n}\n\nfinal PrintProvider printProvider = new PrintProvider(\"SUA_ACTIVITY_AQUI\", listToPrint, \"PINPAD_QUE_VOCÊ_DESEJA_UTILIZAR\");\nprintProvider.useDefaultUI(true);\nprintProvider.setDialogMessage(\"Imprimindo...\");\nprintProvider.setConnectionCallback(new StoneCallbackInterface() {\n public void onSuccess() {\n // Notinha impressa com sucesso.\n }\n public void onError() {\n // Ocorreu um erro na impressão.\n }\n});\nprintProvider.execute();", "language": "java" } ] } [/block] Com o código que tivemos de exemplo anteriormente, nós teremos o seguinte comprovante: [block:image] { "images": [ { "image": [ "https://files.readme.io/24a5c21-comprovante.PNG", "comprovante.PNG", 250, 339, "#f4de9d" ] } ] } [/block] A SDK irá interpreter cada item da sua lista (cada PrintObject) como uma linha a ser impressa. Com o código que foi passado na imagem anterior, ele rodará um laço "for" e criará 10 linhas de impressão. O provider será executado e terá o resultado visto acima. Por padrão, todas as notinhas são impressas com a logo da Stone.+ [block:api-header] { "title": "Exemplo de comprovantes" } [/block] [block:api-header] { "title": "Via do Estabelecimento" } [/block] | ID | | 123456789012345678901234567890123456789 | | -- | | --------------------------------------- | | 1 | | STONE – Via Estabelecimento | | 2 | | VVVVVVVVVVVVVVVVVVVVVVV | | 3 | | ***************1234 DD/MM/YY HH:MM | | 4 | | EC:2100490717 AUT: | 6 | | DOC:012345624112016151100 | | 7 | | Stone Id:4598785265485698 | | 8 | | AC:XXXXXXXXXXXXXXXX XXX-YYY | | 9 | | AID: A000000003101005 | | 10 | | VISA CREDIT 3 APROVADO | | 11 | | CNE: XXXXXXXXXXXXXXXX | | 12 | | PARCELADO XXX JUROS: NN PARCELAS | | 13 | | TOTAL R$ 9,999,999,999.99 | | 14 | | TOTAL ESTORNO: R$ 9.999.999.999,99 | | 15 | | -------------------------------------- | | 16 | | NOME DO PORTADOR | | 17 | | RECONHEÇO E PAGAREI A DÍVIDA | | 18 | | AQUI REPRESENTADA | | 19 | | TRANSAÇÃO APROVADA COM SENHA | [block:api-header] { "title": "Via do Portador" } [/block] | ID | | 12345678901234567890123456789012345678 | | -- | | --------------------------------------- | | 1 | | STONE – VIA CLIENTE | | 2 | | VVVVVVVVVVVVVVVVVVVVVVV | | 3 | | 123456*********1234 DD/MM/YY HH:MM | | 6 | | DOC: 012345624112016151100 | | 20 | | AUT:000000 XXX-YYY | | 12 | | PARCELADO XXX JUROS: NN PARCELAS | | 13 | | TOTAL: R$ 9.999.999.999,99 | | 14 | | TOTAL ESTORNO: R$ 9.999.999.999,99 | | 21 | | SALDO DISPONÍVEL: R$ 9.999.999,99 |
O provedor de impressão, PrintProvider, pode ser utilizado apenas com pinpads que possuem suporte a print. Na assinatura do construtor, o PrintProvider irá pedir três parâmetros, uma Activity, uma lista de PrintObject e o Pinpad que irá imprimir o seu comprovante. PrintObject representa cada linha que será impressa pelo PrintProvider. [block:parameters] { "data": { "h-0": "Tipo", "h-1": "Nome", "h-2": "Função", "0-0": "String", "1-0": "Integer", "2-0": "Integer", "0-1": "message", "1-1": "size", "2-1": "align", "0-2": "Mensagem que será impressa (por linha).", "1-2": "Tamanho da impressão, SMALL, MEDIUM ou BIG, todos dentro do objeto PrintObject.", "2-2": "Alinhamento da impressão, LEFT, CENTER ou RIGHT, todos dentro do objeto PrintObject." }, "cols": 3, "rows": 3 } [/block] [block:callout] { "type": "warning", "body": "Para impressão de QR Code, é necessário passar ‘TAG_PRINT’ como size e align. Sua mensagem que será enviada dentro do QR Code deve conter no máximo 512 caracteres." } [/block] [block:code] { "codes": [ { "code": "// Declara a lista de impressão, lembrando que cada item representa uma linha.\nList<PrintObject> listToPrint = new ArrayList<PrintObject>();\nfor (int i = 0; i < 10; i++) {\n listToPrint.add(new PrintObject(\"Teste de impressão linha \" + i, PrintObject.MEDIUM, PrintObject.CENTER));\n}\n\nfinal PrintProvider printProvider = new PrintProvider(\"SUA_ACTIVITY_AQUI\", listToPrint, \"PINPAD_QUE_VOCÊ_DESEJA_UTILIZAR\");\nprintProvider.useDefaultUI(true);\nprintProvider.setDialogMessage(\"Imprimindo...\");\nprintProvider.setConnectionCallback(new StoneCallbackInterface() {\n public void onSuccess() {\n // Notinha impressa com sucesso.\n }\n public void onError() {\n // Ocorreu um erro na impressão.\n }\n});\nprintProvider.execute();", "language": "java" } ] } [/block] Com o código que tivemos de exemplo anteriormente, nós teremos o seguinte comprovante: [block:image] { "images": [ { "image": [ "https://files.readme.io/24a5c21-comprovante.PNG", "comprovante.PNG", 250, 339, "#f4de9d" ] } ] } [/block] A SDK irá interpreter cada item da sua lista (cada PrintObject) como uma linha a ser impressa. Com o código que foi passado na imagem anterior, ele rodará um laço "for" e criará 10 linhas de impressão. O provider será executado e terá o resultado visto acima. Por padrão, todas as notinhas são impressas com a logo da Stone.+ [block:api-header] { "title": "Exemplo de comprovantes" } [/block] [block:api-header] { "title": "Via do Estabelecimento" } [/block] | ID | | 123456789012345678901234567890123456789 | | -- | | --------------------------------------- | | 1 | | STONE – Via Estabelecimento | | 2 | | VVVVVVVVVVVVVVVVVVVVVVV | | 3 | | ***************1234 DD/MM/YY HH:MM | | 4 | | EC:2100490717 AUT: | 6 | | DOC:012345624112016151100 | | 7 | | Stone Id:4598785265485698 | | 8 | | AC:XXXXXXXXXXXXXXXX XXX-YYY | | 9 | | AID: A000000003101005 | | 10 | | VISA CREDIT 3 APROVADO | | 11 | | CNE: XXXXXXXXXXXXXXXX | | 12 | | PARCELADO XXX JUROS: NN PARCELAS | | 13 | | TOTAL R$ 9,999,999,999.99 | | 14 | | TOTAL ESTORNO: R$ 9.999.999.999,99 | | 15 | | -------------------------------------- | | 16 | | NOME DO PORTADOR | | 17 | | RECONHEÇO E PAGAREI A DÍVIDA | | 18 | | AQUI REPRESENTADA | | 19 | | TRANSAÇÃO APROVADA COM SENHA | [block:api-header] { "title": "Via do Portador" } [/block] | ID | | 12345678901234567890123456789012345678 | | -- | | --------------------------------------- | | 1 | | STONE – VIA CLIENTE | | 2 | | VVVVVVVVVVVVVVVVVVVVVVV | | 3 | | 123456*********1234 DD/MM/YY HH:MM | | 6 | | DOC: 012345624112016151100 | | 20 | | AUT:000000 XXX-YYY | | 12 | | PARCELADO XXX JUROS: NN PARCELAS | | 13 | | TOTAL: R$ 9.999.999.999,99 | | 14 | | TOTAL ESTORNO: R$ 9.999.999.999,99 | | 21 | | SALDO DISPONÍVEL: R$ 9.999.999,99 |
{"_id":"58582dcebfc4771b008054be","sync_unique":"","user":"57ea79f61780cd170064f273","body":"O provedor de Cancelamento, CancellationProvider, é um dos provedores mais simples. Para efetuar um cancelamento, você deve instanciar o CancellationProvider e passar sua Activity e o ID da transação que deseja passar (você pode obter todos os IDs das transações com o TransactionDAO).\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"//Construtor\\nCancellationProvider('SUA_ACTIVITY_AQUI', TransactionObject transaction);\\n\\n//Método que retorna o actionCode do cancelamento\\ngetActionCode();\\n\\n//Método que retorna o status do cancelamento\\ngetResponseCodeEnum();\",\n      \"language\": \"java\"\n    }\n  ]\n}\n[/block]\n\n[block:callout]\n{\n  \"type\": \"info\",\n  \"body\": \"Veja a tabela **Código de retorno**, para os possíveis retornos do método *getActionCode();*\\nVeja a tabela **Status do cancelamento**, para os possíveis retornos do método *getResponseCodeEnum()*;\"\n}\n[/block]\n\n[block:callout]\n{\n  \"type\": \"warning\",\n  \"body\": \"Use o ValidateTransactionByCardProvider() para validar se a transação que será cancelada foi realizada com o mesmo cartão que consta no TransactionDAO.\"\n}\n[/block]","githubsync":"","link_external":false,"next":{"pages":[],"description":""},"parentDoc":null,"api":{"url":"","results":{"codes":[{"language":"json","code":"{}","name":"","status":200},{"code":"{}","name":"","status":400,"language":"json"}]},"settings":"","auth":"required","params":[]},"category":"58403d83c0507319000634f1","project":"58403d83c0507319000634ed","slug":"provedor-de-cancelamento-1","version":"58403d83c0507319000634f0","title":"Provedor de cancelamento","updates":[],"createdAt":"2016-12-19T18:58:22.950Z","excerpt":"","hidden":false,"link_url":"","__v":0,"isReference":false,"order":5,"type":"basic","childrenPages":[]}

Provedor de cancelamento


O provedor de Cancelamento, CancellationProvider, é um dos provedores mais simples. Para efetuar um cancelamento, você deve instanciar o CancellationProvider e passar sua Activity e o ID da transação que deseja passar (você pode obter todos os IDs das transações com o TransactionDAO). [block:code] { "codes": [ { "code": "//Construtor\nCancellationProvider('SUA_ACTIVITY_AQUI', TransactionObject transaction);\n\n//Método que retorna o actionCode do cancelamento\ngetActionCode();\n\n//Método que retorna o status do cancelamento\ngetResponseCodeEnum();", "language": "java" } ] } [/block] [block:callout] { "type": "info", "body": "Veja a tabela **Código de retorno**, para os possíveis retornos do método *getActionCode();*\nVeja a tabela **Status do cancelamento**, para os possíveis retornos do método *getResponseCodeEnum()*;" } [/block] [block:callout] { "type": "warning", "body": "Use o ValidateTransactionByCardProvider() para validar se a transação que será cancelada foi realizada com o mesmo cartão que consta no TransactionDAO." } [/block]
O provedor de Cancelamento, CancellationProvider, é um dos provedores mais simples. Para efetuar um cancelamento, você deve instanciar o CancellationProvider e passar sua Activity e o ID da transação que deseja passar (você pode obter todos os IDs das transações com o TransactionDAO). [block:code] { "codes": [ { "code": "//Construtor\nCancellationProvider('SUA_ACTIVITY_AQUI', TransactionObject transaction);\n\n//Método que retorna o actionCode do cancelamento\ngetActionCode();\n\n//Método que retorna o status do cancelamento\ngetResponseCodeEnum();", "language": "java" } ] } [/block] [block:callout] { "type": "info", "body": "Veja a tabela **Código de retorno**, para os possíveis retornos do método *getActionCode();*\nVeja a tabela **Status do cancelamento**, para os possíveis retornos do método *getResponseCodeEnum()*;" } [/block] [block:callout] { "type": "warning", "body": "Use o ValidateTransactionByCardProvider() para validar se a transação que será cancelada foi realizada com o mesmo cartão que consta no TransactionDAO." } [/block]
{"_id":"5ab1b1e7e63d5200d2d4877e","project":"58403d83c0507319000634ed","version":"58403d83c0507319000634f0","category":"58403d83c0507319000634f1","user":"59de082aed35e800383f94b6","updates":[],"next":{"pages":[],"description":""},"createdAt":"2018-03-21T01:14:15.920Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","auth":"required","params":[],"url":""},"isReference":false,"order":6,"body":"Uma transação pode ser realizada sem a captura, quando define-se a captura como \"false\", conforme segue:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"final TransactionObject transaction = new TransactionObject();\\n\\n// Define se transação será feita com captura ou não.\\ntransaction.setCapture(false); \",\n      \"language\": \"java\"\n    }\n  ]\n}\n[/block]\nPodemos buscar uma transação da seguinte forma:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"// Cria uma lista com todas as transacoes\\ntransactionObjects = transactionDAO.getAllTransactionsOrderByIdDesc();\\n\\n/* Seleciona uma transação da lista\\n * transactionObjects.get(0) retorna a transação localizada na posição 0 */\\nfinal TransactionObject selectedTransaction = transactionObjects.get(0);\",\n      \"language\": \"java\"\n    }\n  ]\n}\n[/block]\nPara verificar se a transação já foi capturada, você pode utilizar o método a seguir, que retornará \"false\" caso a transação não tenha sido capturada.\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"//Retorna \\\"false\\\" se a transação ainda não foi capturada\\nselectedTransaction.isCapture();\",\n      \"language\": \"java\"\n    }\n  ]\n}\n[/block]\nPara finalmente realizar a captura posterior, você deve fornecer a este provider uma Activity e um TransactionObject, que se trata da sua transação a ser capturada.\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"//Captura da transação selecionada\\nfinal CaptureTransactionProvider provider = new CaptureTransactionProvider(\\\"SUA_ACTIVITY_AQUI\\\", selectedTransaction);\\nprovider.useDefaultUI(true);\\nprovider.setDialogMessage(\\\"Efetuando Captura...\\\");\\nprovider.setConnectionCallback(new StoneCallbackInterface() {\\n\\t@Override\\n\\tpublic void onSuccess() {\\n\\t\\t//Transação Capturada com sucesso\\n  }\\n\\t@Override\\n\\tpublic void onError() {\\n\\t\\t//Ocorreu um erro na captura da transacao\\n  }\\n});\",\n      \"language\": \"java\"\n    }\n  ]\n}\n[/block]\n\n[block:callout]\n{\n  \"type\": \"info\",\n  \"body\": \"Quando é realizada uma transação com captura e a SDK detecta que a bandeira do cartão inserido é **Sodexo**, é realizada uma transação sem captura e uma captura posterior logo em seguida.\"\n}\n[/block]","excerpt":"","slug":"provedor-de-captura-posterior","type":"basic","title":"Provedor de captura posterior","__v":0,"parentDoc":null,"childrenPages":[]}

Provedor de captura posterior


Uma transação pode ser realizada sem a captura, quando define-se a captura como "false", conforme segue: [block:code] { "codes": [ { "code": "final TransactionObject transaction = new TransactionObject();\n\n// Define se transação será feita com captura ou não.\ntransaction.setCapture(false); ", "language": "java" } ] } [/block] Podemos buscar uma transação da seguinte forma: [block:code] { "codes": [ { "code": "// Cria uma lista com todas as transacoes\ntransactionObjects = transactionDAO.getAllTransactionsOrderByIdDesc();\n\n/* Seleciona uma transação da lista\n * transactionObjects.get(0) retorna a transação localizada na posição 0 */\nfinal TransactionObject selectedTransaction = transactionObjects.get(0);", "language": "java" } ] } [/block] Para verificar se a transação já foi capturada, você pode utilizar o método a seguir, que retornará "false" caso a transação não tenha sido capturada. [block:code] { "codes": [ { "code": "//Retorna \"false\" se a transação ainda não foi capturada\nselectedTransaction.isCapture();", "language": "java" } ] } [/block] Para finalmente realizar a captura posterior, você deve fornecer a este provider uma Activity e um TransactionObject, que se trata da sua transação a ser capturada. [block:code] { "codes": [ { "code": "//Captura da transação selecionada\nfinal CaptureTransactionProvider provider = new CaptureTransactionProvider(\"SUA_ACTIVITY_AQUI\", selectedTransaction);\nprovider.useDefaultUI(true);\nprovider.setDialogMessage(\"Efetuando Captura...\");\nprovider.setConnectionCallback(new StoneCallbackInterface() {\n\t@Override\n\tpublic void onSuccess() {\n\t\t//Transação Capturada com sucesso\n }\n\t@Override\n\tpublic void onError() {\n\t\t//Ocorreu um erro na captura da transacao\n }\n});", "language": "java" } ] } [/block] [block:callout] { "type": "info", "body": "Quando é realizada uma transação com captura e a SDK detecta que a bandeira do cartão inserido é **Sodexo**, é realizada uma transação sem captura e uma captura posterior logo em seguida." } [/block]
Uma transação pode ser realizada sem a captura, quando define-se a captura como "false", conforme segue: [block:code] { "codes": [ { "code": "final TransactionObject transaction = new TransactionObject();\n\n// Define se transação será feita com captura ou não.\ntransaction.setCapture(false); ", "language": "java" } ] } [/block] Podemos buscar uma transação da seguinte forma: [block:code] { "codes": [ { "code": "// Cria uma lista com todas as transacoes\ntransactionObjects = transactionDAO.getAllTransactionsOrderByIdDesc();\n\n/* Seleciona uma transação da lista\n * transactionObjects.get(0) retorna a transação localizada na posição 0 */\nfinal TransactionObject selectedTransaction = transactionObjects.get(0);", "language": "java" } ] } [/block] Para verificar se a transação já foi capturada, você pode utilizar o método a seguir, que retornará "false" caso a transação não tenha sido capturada. [block:code] { "codes": [ { "code": "//Retorna \"false\" se a transação ainda não foi capturada\nselectedTransaction.isCapture();", "language": "java" } ] } [/block] Para finalmente realizar a captura posterior, você deve fornecer a este provider uma Activity e um TransactionObject, que se trata da sua transação a ser capturada. [block:code] { "codes": [ { "code": "//Captura da transação selecionada\nfinal CaptureTransactionProvider provider = new CaptureTransactionProvider(\"SUA_ACTIVITY_AQUI\", selectedTransaction);\nprovider.useDefaultUI(true);\nprovider.setDialogMessage(\"Efetuando Captura...\");\nprovider.setConnectionCallback(new StoneCallbackInterface() {\n\t@Override\n\tpublic void onSuccess() {\n\t\t//Transação Capturada com sucesso\n }\n\t@Override\n\tpublic void onError() {\n\t\t//Ocorreu um erro na captura da transacao\n }\n});", "language": "java" } ] } [/block] [block:callout] { "type": "info", "body": "Quando é realizada uma transação com captura e a SDK detecta que a bandeira do cartão inserido é **Sodexo**, é realizada uma transação sem captura e uma captura posterior logo em seguida." } [/block]
{"_id":"58582de1b0fe4f2500259b5d","slug":"provedor-de-display-1","title":"Provedor de display","type":"basic","updates":[],"link_url":"","parentDoc":null,"body":"DisplayMessageProvider exibe uma mensagem de até 32 caracteres a tela do Pinpad.","category":"58403d83c0507319000634f1","link_external":false,"next":{"description":"","pages":[]},"order":7,"__v":0,"githubsync":"","hidden":false,"project":"58403d83c0507319000634ed","sync_unique":"","api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","auth":"required","params":[],"url":""},"createdAt":"2016-12-19T18:58:41.426Z","user":"57ea79f61780cd170064f273","version":"58403d83c0507319000634f0","excerpt":"","isReference":false,"childrenPages":[]}

Provedor de display


DisplayMessageProvider exibe uma mensagem de até 32 caracteres a tela do Pinpad.
DisplayMessageProvider exibe uma mensagem de até 32 caracteres a tela do Pinpad.
{"_id":"58582df2bfc4771b008054bf","excerpt":"","githubsync":"","link_url":"","isReference":false,"link_external":false,"slug":"provedor-de-email-1","title":"Provedor de Email","__v":0,"hidden":false,"next":{"pages":[],"description":""},"order":8,"parentDoc":null,"updates":[],"api":{"params":[],"url":"","results":{"codes":[{"name":"","status":200,"language":"json","code":"{}"},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","auth":"required"},"category":"58403d83c0507319000634f1","createdAt":"2016-12-19T18:58:58.080Z","project":"58403d83c0507319000634ed","sync_unique":"","type":"basic","user":"57ea79f61780cd170064f273","version":"58403d83c0507319000634f0","body":"SendEmailProvider é o provedor responsável pelo envio do email. Ele serve apenas para enviar um email, não o comprovante eletrônico da sua transação.\n\nEsse provider pedirá um objeto do tipo EmailClient, esse objeto represente o seu client de noReply SMTP. Configurando ele de forma correta, o provedor funcioná normalmente.\n\n\n[block:parameters]\n{\n  \"data\": {\n    \"h-0\": \"Tipo\",\n    \"h-1\": \"Nome\",\n    \"h-2\": \"Função\",\n    \"0-0\": \"String\",\n    \"1-0\": \"String\",\n    \"2-0\": \"String\",\n    \"3-0\": \"String\",\n    \"4-0\": \"String\",\n    \"5-0\": \"String\",\n    \"6-0\": \"String\",\n    \"7-0\": \"String\",\n    \"8-0\": \"String\",\n    \"0-1\": \"smtpHost\",\n    \"0-2\": \"Host do seu cliente de email.\",\n    \"1-1\": \"smtpPort\",\n    \"1-2\": \"Porta do host (default: 587).\",\n    \"2-1\": \"sport\",\n    \"2-2\": \"Secure port do host (default: 587).\",\n    \"3-1\": \"user\",\n    \"3-2\": \"Seu usuário de login.\",\n    \"4-1\": \"password\",\n    \"4-2\": \"Sua senha de login.\",\n    \"5-1\": \"from\",\n    \"5-2\": \"Seu email.\",\n    \"6-1\": \"sendTo\",\n    \"6-2\": \"Email do seu cliente.\",\n    \"7-1\": \"subject\",\n    \"7-2\": \"Assunto do email.\",\n    \"8-1\": \"messageToSent\",\n    \"8-2\": \"Mensagem que será enviada.\"\n  },\n  \"cols\": 3,\n  \"rows\": 9\n}\n[/block]\n\n[block:callout]\n{\n  \"type\": \"warning\",\n  \"body\": \"Por questões de esclarecimento, a Stone não faz nenhum log dos e-mails enviados. Ou seja, seu login e senha utilizados para enviar o e-mail, não serão salvos em momento nenhum por parte do SDK.\"\n}\n[/block]\nPara criar o comprovante eletrônico, o seu objeto de EmailClient possui um método chamado receiptAsHtml(Context, transactionId). Ele retornará uma String e a mesma deve ser passada como parâmetro no SendEmailProvider como mensagem para enviar.","childrenPages":[]}

Provedor de Email


SendEmailProvider é o provedor responsável pelo envio do email. Ele serve apenas para enviar um email, não o comprovante eletrônico da sua transação. Esse provider pedirá um objeto do tipo EmailClient, esse objeto represente o seu client de noReply SMTP. Configurando ele de forma correta, o provedor funcioná normalmente. [block:parameters] { "data": { "h-0": "Tipo", "h-1": "Nome", "h-2": "Função", "0-0": "String", "1-0": "String", "2-0": "String", "3-0": "String", "4-0": "String", "5-0": "String", "6-0": "String", "7-0": "String", "8-0": "String", "0-1": "smtpHost", "0-2": "Host do seu cliente de email.", "1-1": "smtpPort", "1-2": "Porta do host (default: 587).", "2-1": "sport", "2-2": "Secure port do host (default: 587).", "3-1": "user", "3-2": "Seu usuário de login.", "4-1": "password", "4-2": "Sua senha de login.", "5-1": "from", "5-2": "Seu email.", "6-1": "sendTo", "6-2": "Email do seu cliente.", "7-1": "subject", "7-2": "Assunto do email.", "8-1": "messageToSent", "8-2": "Mensagem que será enviada." }, "cols": 3, "rows": 9 } [/block] [block:callout] { "type": "warning", "body": "Por questões de esclarecimento, a Stone não faz nenhum log dos e-mails enviados. Ou seja, seu login e senha utilizados para enviar o e-mail, não serão salvos em momento nenhum por parte do SDK." } [/block] Para criar o comprovante eletrônico, o seu objeto de EmailClient possui um método chamado receiptAsHtml(Context, transactionId). Ele retornará uma String e a mesma deve ser passada como parâmetro no SendEmailProvider como mensagem para enviar.
SendEmailProvider é o provedor responsável pelo envio do email. Ele serve apenas para enviar um email, não o comprovante eletrônico da sua transação. Esse provider pedirá um objeto do tipo EmailClient, esse objeto represente o seu client de noReply SMTP. Configurando ele de forma correta, o provedor funcioná normalmente. [block:parameters] { "data": { "h-0": "Tipo", "h-1": "Nome", "h-2": "Função", "0-0": "String", "1-0": "String", "2-0": "String", "3-0": "String", "4-0": "String", "5-0": "String", "6-0": "String", "7-0": "String", "8-0": "String", "0-1": "smtpHost", "0-2": "Host do seu cliente de email.", "1-1": "smtpPort", "1-2": "Porta do host (default: 587).", "2-1": "sport", "2-2": "Secure port do host (default: 587).", "3-1": "user", "3-2": "Seu usuário de login.", "4-1": "password", "4-2": "Sua senha de login.", "5-1": "from", "5-2": "Seu email.", "6-1": "sendTo", "6-2": "Email do seu cliente.", "7-1": "subject", "7-2": "Assunto do email.", "8-1": "messageToSent", "8-2": "Mensagem que será enviada." }, "cols": 3, "rows": 9 } [/block] [block:callout] { "type": "warning", "body": "Por questões de esclarecimento, a Stone não faz nenhum log dos e-mails enviados. Ou seja, seu login e senha utilizados para enviar o e-mail, não serão salvos em momento nenhum por parte do SDK." } [/block] Para criar o comprovante eletrônico, o seu objeto de EmailClient possui um método chamado receiptAsHtml(Context, transactionId). Ele retornará uma String e a mesma deve ser passada como parâmetro no SendEmailProvider como mensagem para enviar.
{"_id":"58582e07b0fe4f2500259b5e","version":"58403d83c0507319000634f0","__v":0,"parentDoc":null,"slug":"provedor-de-tabelas-aid-e-capk-e-carga-de-tabelas-para-os-pinpads-1","hidden":false,"isReference":false,"link_url":"","type":"basic","updates":[],"api":{"results":{"codes":[{"language":"json","code":"{}","name":"","status":200},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","auth":"required","params":[],"url":""},"body":"O DownloadTablesProvider é o provedor de tabelas, isso é muito importante de ser chamado sempre na Main da sua aplicação. As tabelas AID e CAPK, resumidamente falando, são tabelas que ficam armazenadas nos Pinpads e os dizem como trabalhar com cada tipo de cartão. Esse provider só possui a função de acessar os serviços da Stone e baixalas para o dispositivo. Utilize um objeto do tipo ApplicationCache (módulo Utils) para verificar se existem ou não as tabelas.\n\nSegue o exemplo:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"// IMPORTANTE: Mantenha esse provider na sua MAIN, pois ele irá baixar as tabelas AIDs e CAPKs dos servidores da Stone e sera utilizada quando necessário.\\nApplicationCache applicationCache = new ApplicationCache(getApplicationContext());\\nif (applicationCache.checkIfHasTables() == false) {\\n    // Realiza processo de download das tabelas em sua totalidade.\\n    DownloadTablesProvider downloadTablesProvider = new DownloadTablesProvider(SUA_ACTIVITY_AQUI);\\n    downloadTablesProvider.setDialogMessage(\\\"Baixando as tabelas, por favor aguarde\\\");\\n    downloadTablesProvider.useDefaultUI(true); // para dar feedback ao usuario ou nao.\\n    downloadTablesProvider.setConnectionCallback(new StoneCallbackInterface() {\\n        public void onSuccess() {\\n            // Tabelas baixadas com sucesso.\\n        }\\n        public void onError() {\\n            // Erro no download das tabelas.\\n        }\\n    });\\n    downloadTablesProvider.execute();\\n}\",\n      \"language\": \"java\"\n    }\n  ]\n}\n[/block]\nÉ importante deixar claro também que esse provider só possui a função de baixar as tabelas. A função de carregar astabelas nos Pinpads é responsabilidade do LoadTablesProvider. Este deve ser chamado, caso o TransactionProvider retorne um erro de DIFFERENT_TABLES_EMV (veremos logo o que isso quer dizer).","link_external":false,"next":{"pages":[],"description":""},"project":"58403d83c0507319000634ed","title":"Provedor de tabelas AID e CAPK e carga de tabelas para os Pinpads","category":"58403d83c0507319000634f1","createdAt":"2016-12-19T18:59:19.131Z","githubsync":"","user":"57ea79f61780cd170064f273","excerpt":"","order":9,"sync_unique":"","childrenPages":[]}

Provedor de tabelas AID e CAPK e carga de tabelas para os Pinpads


O DownloadTablesProvider é o provedor de tabelas, isso é muito importante de ser chamado sempre na Main da sua aplicação. As tabelas AID e CAPK, resumidamente falando, são tabelas que ficam armazenadas nos Pinpads e os dizem como trabalhar com cada tipo de cartão. Esse provider só possui a função de acessar os serviços da Stone e baixalas para o dispositivo. Utilize um objeto do tipo ApplicationCache (módulo Utils) para verificar se existem ou não as tabelas. Segue o exemplo: [block:code] { "codes": [ { "code": "// IMPORTANTE: Mantenha esse provider na sua MAIN, pois ele irá baixar as tabelas AIDs e CAPKs dos servidores da Stone e sera utilizada quando necessário.\nApplicationCache applicationCache = new ApplicationCache(getApplicationContext());\nif (applicationCache.checkIfHasTables() == false) {\n // Realiza processo de download das tabelas em sua totalidade.\n DownloadTablesProvider downloadTablesProvider = new DownloadTablesProvider(SUA_ACTIVITY_AQUI);\n downloadTablesProvider.setDialogMessage(\"Baixando as tabelas, por favor aguarde\");\n downloadTablesProvider.useDefaultUI(true); // para dar feedback ao usuario ou nao.\n downloadTablesProvider.setConnectionCallback(new StoneCallbackInterface() {\n public void onSuccess() {\n // Tabelas baixadas com sucesso.\n }\n public void onError() {\n // Erro no download das tabelas.\n }\n });\n downloadTablesProvider.execute();\n}", "language": "java" } ] } [/block] É importante deixar claro também que esse provider só possui a função de baixar as tabelas. A função de carregar astabelas nos Pinpads é responsabilidade do LoadTablesProvider. Este deve ser chamado, caso o TransactionProvider retorne um erro de DIFFERENT_TABLES_EMV (veremos logo o que isso quer dizer).
O DownloadTablesProvider é o provedor de tabelas, isso é muito importante de ser chamado sempre na Main da sua aplicação. As tabelas AID e CAPK, resumidamente falando, são tabelas que ficam armazenadas nos Pinpads e os dizem como trabalhar com cada tipo de cartão. Esse provider só possui a função de acessar os serviços da Stone e baixalas para o dispositivo. Utilize um objeto do tipo ApplicationCache (módulo Utils) para verificar se existem ou não as tabelas. Segue o exemplo: [block:code] { "codes": [ { "code": "// IMPORTANTE: Mantenha esse provider na sua MAIN, pois ele irá baixar as tabelas AIDs e CAPKs dos servidores da Stone e sera utilizada quando necessário.\nApplicationCache applicationCache = new ApplicationCache(getApplicationContext());\nif (applicationCache.checkIfHasTables() == false) {\n // Realiza processo de download das tabelas em sua totalidade.\n DownloadTablesProvider downloadTablesProvider = new DownloadTablesProvider(SUA_ACTIVITY_AQUI);\n downloadTablesProvider.setDialogMessage(\"Baixando as tabelas, por favor aguarde\");\n downloadTablesProvider.useDefaultUI(true); // para dar feedback ao usuario ou nao.\n downloadTablesProvider.setConnectionCallback(new StoneCallbackInterface() {\n public void onSuccess() {\n // Tabelas baixadas com sucesso.\n }\n public void onError() {\n // Erro no download das tabelas.\n }\n });\n downloadTablesProvider.execute();\n}", "language": "java" } ] } [/block] É importante deixar claro também que esse provider só possui a função de baixar as tabelas. A função de carregar astabelas nos Pinpads é responsabilidade do LoadTablesProvider. Este deve ser chamado, caso o TransactionProvider retorne um erro de DIFFERENT_TABLES_EMV (veremos logo o que isso quer dizer).
{"_id":"58582e173ed9a719000c12af","slug":"provedor-de-validacao-de-transacao","sync_unique":"","version":"58403d83c0507319000634f0","__v":0,"order":10,"user":"57ea79f61780cd170064f273","link_external":false,"githubsync":"","hidden":false,"isReference":false,"project":"58403d83c0507319000634ed","title":"Provedor de validação de transação","updates":[],"category":"58403d83c0507319000634f1","excerpt":"","createdAt":"2016-12-19T18:59:35.618Z","link_url":"","next":{"pages":[],"description":""},"parentDoc":null,"type":"basic","api":{"settings":"","auth":"required","params":[],"url":"","results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]}},"body":"O ValidateTransactionByCardProvider é o provedor de que verifica se existe no TransactionDAO, transaçõesrealizadas para um determinado cartão.\n\nNa assinatura do construtor, o ValidateTransactionByCardProvider irá pedir dois parâmetros, um Context, um PinpadObject (Pinpad em que será inserido o cartão).\n\n\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"final ValidateTransactionByCardProvider validateTransactionByCardProvider = new ValidateTransactionByCardProvider(SUA_ACTIVITY_AQUI, PINPAD_QUE_VOCÊ_DESEJA_UTILIZAR);\\nvalidateTransactionByCardProvider.setDialogMessage(\\\"Validando transação\\\");\\nvalidateTransactionByCardProvider.useDefaultUI(true); // Informa se este provider irá rodar em background ou não.\\nvalidateTransactionByCardProvider.setDialogTitle(\\\"Aguarde\\\");\\nvalidateTransactionByCardProvider.setConnectionCallback( new StoneCallbackInterface() {\\n  public void onSuccess() {\\n    // Para saber se existem transações com esse cartão:\\n    List<TransactionObject> transactionWithThisCard = validateTransactionByCardProvider.getTransactionWithCurrentCard();\\n  }\\n\\n  public void onError() {\\n    // Erro na execução do provider\\n  }\\n});\",\n      \"language\": \"java\"\n    }\n  ]\n}\n[/block]","childrenPages":[]}

Provedor de validação de transação


O ValidateTransactionByCardProvider é o provedor de que verifica se existe no TransactionDAO, transaçõesrealizadas para um determinado cartão. Na assinatura do construtor, o ValidateTransactionByCardProvider irá pedir dois parâmetros, um Context, um PinpadObject (Pinpad em que será inserido o cartão). [block:code] { "codes": [ { "code": "final ValidateTransactionByCardProvider validateTransactionByCardProvider = new ValidateTransactionByCardProvider(SUA_ACTIVITY_AQUI, PINPAD_QUE_VOCÊ_DESEJA_UTILIZAR);\nvalidateTransactionByCardProvider.setDialogMessage(\"Validando transação\");\nvalidateTransactionByCardProvider.useDefaultUI(true); // Informa se este provider irá rodar em background ou não.\nvalidateTransactionByCardProvider.setDialogTitle(\"Aguarde\");\nvalidateTransactionByCardProvider.setConnectionCallback( new StoneCallbackInterface() {\n public void onSuccess() {\n // Para saber se existem transações com esse cartão:\n List<TransactionObject> transactionWithThisCard = validateTransactionByCardProvider.getTransactionWithCurrentCard();\n }\n\n public void onError() {\n // Erro na execução do provider\n }\n});", "language": "java" } ] } [/block]
O ValidateTransactionByCardProvider é o provedor de que verifica se existe no TransactionDAO, transaçõesrealizadas para um determinado cartão. Na assinatura do construtor, o ValidateTransactionByCardProvider irá pedir dois parâmetros, um Context, um PinpadObject (Pinpad em que será inserido o cartão). [block:code] { "codes": [ { "code": "final ValidateTransactionByCardProvider validateTransactionByCardProvider = new ValidateTransactionByCardProvider(SUA_ACTIVITY_AQUI, PINPAD_QUE_VOCÊ_DESEJA_UTILIZAR);\nvalidateTransactionByCardProvider.setDialogMessage(\"Validando transação\");\nvalidateTransactionByCardProvider.useDefaultUI(true); // Informa se este provider irá rodar em background ou não.\nvalidateTransactionByCardProvider.setDialogTitle(\"Aguarde\");\nvalidateTransactionByCardProvider.setConnectionCallback( new StoneCallbackInterface() {\n public void onSuccess() {\n // Para saber se existem transações com esse cartão:\n List<TransactionObject> transactionWithThisCard = validateTransactionByCardProvider.getTransactionWithCurrentCard();\n }\n\n public void onError() {\n // Erro na execução do provider\n }\n});", "language": "java" } ] } [/block]
{"_id":"58582e259988d00f005506b2","createdAt":"2016-12-19T18:59:49.784Z","title":"Um pouco sobre Response","hidden":false,"link_external":false,"link_url":"","next":{"pages":[],"description":""},"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","auth":"required","params":[],"url":""},"body":"Quando nos referimos a “Response”, não estamos falando exatamente de response de algum Request para os servidores da Stone. Vamos dividir o assunto entre responses da biblioteca compartilhada e responses do SDK.\n\nObservando a seguinte imagem:\n\n\n[block:image]\n{\n  \"images\": [\n    {\n      \"image\": [\n        \"https://files.readme.io/835b0d7-comunicacao.PNG\",\n        \"comunicacao.PNG\",\n        535,\n        319,\n        \"#d2cfcd\"\n      ]\n    }\n  ]\n}\n[/block]\nOs Status de comandos são referentes as respostas que são dadas pela biblioteca compartilhada, mais abaixo você verá uma lista com as possíveis respostas e o que cada uma significa.\n\nOs Status do Provider são referentes aos erros que podem ter durante a execução de determinados Providers.","category":"58403d83c0507319000634f1","githubsync":"","project":"58403d83c0507319000634ed","type":"basic","__v":0,"excerpt":"","order":12,"updates":[],"user":"57ea79f61780cd170064f273","version":"58403d83c0507319000634f0","isReference":false,"parentDoc":null,"slug":"um-pouco-sobre-response-1","sync_unique":"","childrenPages":[]}

Um pouco sobre Response


Quando nos referimos a “Response”, não estamos falando exatamente de response de algum Request para os servidores da Stone. Vamos dividir o assunto entre responses da biblioteca compartilhada e responses do SDK. Observando a seguinte imagem: [block:image] { "images": [ { "image": [ "https://files.readme.io/835b0d7-comunicacao.PNG", "comunicacao.PNG", 535, 319, "#d2cfcd" ] } ] } [/block] Os Status de comandos são referentes as respostas que são dadas pela biblioteca compartilhada, mais abaixo você verá uma lista com as possíveis respostas e o que cada uma significa. Os Status do Provider são referentes aos erros que podem ter durante a execução de determinados Providers.
Quando nos referimos a “Response”, não estamos falando exatamente de response de algum Request para os servidores da Stone. Vamos dividir o assunto entre responses da biblioteca compartilhada e responses do SDK. Observando a seguinte imagem: [block:image] { "images": [ { "image": [ "https://files.readme.io/835b0d7-comunicacao.PNG", "comunicacao.PNG", 535, 319, "#d2cfcd" ] } ] } [/block] Os Status de comandos são referentes as respostas que são dadas pela biblioteca compartilhada, mais abaixo você verá uma lista com as possíveis respostas e o que cada uma significa. Os Status do Provider são referentes aos erros que podem ter durante a execução de determinados Providers.
{"_id":"5a97048889442e002041164f","project":"58403d83c0507319000634ed","version":"58403d83c0507319000634f0","category":"58403d83c0507319000634f1","user":"59de082aed35e800383f94b6","updates":[],"next":{"pages":[],"description":""},"createdAt":"2018-02-28T19:35:36.791Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","auth":"required","params":[],"url":""},"isReference":false,"order":13,"body":"Caso uma transação não tenha uma resposta do Autorizador Stone e retorno timeout o SDK Android  marcará a transação com o status WITH_ERROR, com isso será enviado um desfazimento logo em seguida. Se o cancelamento for efetuado com sucesso, o timeout será atualizado para Cancelled e o provider finalizado como erro Timeout.\nSe o cancelamento também der Timeout, será retornado o status \"WITH_ERROR\".\n\n\n[block:api-header]\n{\n  \"title\": \"ReversalProvider\"\n}\n[/block]\nEsse provider deve ser utilizado para os casos em que existem transações com desfazimento pendente, a mesma varrerá o banco procurando por transações com esse status para cancelar.","excerpt":"Como funciona?","slug":"retentativa","type":"basic","title":"Retentativa","__v":0,"parentDoc":null,"childrenPages":[]}

Retentativa

Como funciona?

Caso uma transação não tenha uma resposta do Autorizador Stone e retorno timeout o SDK Android marcará a transação com o status WITH_ERROR, com isso será enviado um desfazimento logo em seguida. Se o cancelamento for efetuado com sucesso, o timeout será atualizado para Cancelled e o provider finalizado como erro Timeout. Se o cancelamento também der Timeout, será retornado o status "WITH_ERROR". [block:api-header] { "title": "ReversalProvider" } [/block] Esse provider deve ser utilizado para os casos em que existem transações com desfazimento pendente, a mesma varrerá o banco procurando por transações com esse status para cancelar.
Caso uma transação não tenha uma resposta do Autorizador Stone e retorno timeout o SDK Android marcará a transação com o status WITH_ERROR, com isso será enviado um desfazimento logo em seguida. Se o cancelamento for efetuado com sucesso, o timeout será atualizado para Cancelled e o provider finalizado como erro Timeout. Se o cancelamento também der Timeout, será retornado o status "WITH_ERROR". [block:api-header] { "title": "ReversalProvider" } [/block] Esse provider deve ser utilizado para os casos em que existem transações com desfazimento pendente, a mesma varrerá o banco procurando por transações com esse status para cancelar.
{"_id":"58582e5c57d2ec2f0071710c","isReference":false,"parentDoc":null,"slug":"atualizacao-de-versao","title":"Atualização de versão","__v":0,"api":{"auth":"required","params":[],"url":"","results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","examples":{"codes":[]}},"link_url":"","next":{"pages":[],"description":""},"order":16,"type":"basic","category":"58403d83c0507319000634f1","hidden":false,"githubsync":"","sync_unique":"","user":"57ea79f61780cd170064f273","createdAt":"2016-12-19T19:00:44.751Z","excerpt":"","link_external":false,"project":"58403d83c0507319000634ed","updates":[],"version":"58403d83c0507319000634f0","body":"Para atualizar o seu projeto para a ultima versão você pode mudar as dependências de uma forma simples e rápida!\n\nPrimeiro, adicione o nosso repositório no build.gradle do seu projeto:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"repositories {\\n  maven { url \\\"https://packagecloud.io/stone/sdk-android/maven2\\\" }\\n}\",\n      \"language\": \"text\"\n    }\n  ]\n}\n[/block]\ndepois, adicione como dependência no módulo desejado:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"dependencies {\\n  compile \\\"br.com.stone:stone-sdk:$stone_sdk_version\\\"\\n}\",\n      \"language\": \"text\"\n    }\n  ]\n}\n[/block]\n\n[block:callout]\n{\n  \"type\": \"warning\",\n  \"title\": \"Nota\",\n  \"body\": \"O trecho:  deve ser substituído pela versão desejada.\\nEx: A versão atual é a 2.4.8, então o $stone_sdk_version deve ser substituído por stone-sdk:2.4.8, quando sair futuramente a versão 2.4.9, é só alterar de stone-sdk:2.4.8 para stone-sdk:2.4.9.\"\n}\n[/block]\nAgora você pode definir qual ambiente você quer usar em runtime, usando:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"// para integração\\nStone.setEnvironment(Environment.SANDBOX)\",\n      \"language\": \"java\",\n      \"name\": \"code\"\n    }\n  ]\n}\n[/block]\n\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"// produção\\nStone.setEnvironment(Environment.PRODUCTION)\",\n      \"language\": \"java\",\n      \"name\": \"code\"\n    }\n  ]\n}\n[/block]\nPara versões anteriores a 2.3.1\n\nVocê chama a StoneStart.init no início do seu projeto e iniciar o projeto como parceiro (Partner), esse é um perfil que roda na sessão do SDK. Isso permite que ao passar uma transação ou executar um cancelamento, apontando para os ambientes de homologação da Stone (a troca de endpoint é feita dentro do próprio SDK, o desenvolvedor parceiro não precisa se preocupar em trocar os endpoints).\n\nComo trocar de Usuário final para modo desenvolvedor?\n\nDa seguinte forma:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"// habilitando o modo de desenvolvedor\\nStone.developerMode();\",\n      \"language\": \"java\"\n    }\n  ]\n}\n[/block]\n\n[block:callout]\n{\n  \"type\": \"warning\",\n  \"body\": \"Não esqueça de colocar este código APENAS na sua build de debug, NUNCA suba o seu código com esse modo em produção.\"\n}\n[/block]","childrenPages":[]}

Atualização de versão


Para atualizar o seu projeto para a ultima versão você pode mudar as dependências de uma forma simples e rápida! Primeiro, adicione o nosso repositório no build.gradle do seu projeto: [block:code] { "codes": [ { "code": "repositories {\n maven { url \"https://packagecloud.io/stone/sdk-android/maven2\" }\n}", "language": "text" } ] } [/block] depois, adicione como dependência no módulo desejado: [block:code] { "codes": [ { "code": "dependencies {\n compile \"br.com.stone:stone-sdk:$stone_sdk_version\"\n}", "language": "text" } ] } [/block] [block:callout] { "type": "warning", "title": "Nota", "body": "O trecho: deve ser substituído pela versão desejada.\nEx: A versão atual é a 2.4.8, então o $stone_sdk_version deve ser substituído por stone-sdk:2.4.8, quando sair futuramente a versão 2.4.9, é só alterar de stone-sdk:2.4.8 para stone-sdk:2.4.9." } [/block] Agora você pode definir qual ambiente você quer usar em runtime, usando: [block:code] { "codes": [ { "code": "// para integração\nStone.setEnvironment(Environment.SANDBOX)", "language": "java", "name": "code" } ] } [/block] [block:code] { "codes": [ { "code": "// produção\nStone.setEnvironment(Environment.PRODUCTION)", "language": "java", "name": "code" } ] } [/block] Para versões anteriores a 2.3.1 Você chama a StoneStart.init no início do seu projeto e iniciar o projeto como parceiro (Partner), esse é um perfil que roda na sessão do SDK. Isso permite que ao passar uma transação ou executar um cancelamento, apontando para os ambientes de homologação da Stone (a troca de endpoint é feita dentro do próprio SDK, o desenvolvedor parceiro não precisa se preocupar em trocar os endpoints). Como trocar de Usuário final para modo desenvolvedor? Da seguinte forma: [block:code] { "codes": [ { "code": "// habilitando o modo de desenvolvedor\nStone.developerMode();", "language": "java" } ] } [/block] [block:callout] { "type": "warning", "body": "Não esqueça de colocar este código APENAS na sua build de debug, NUNCA suba o seu código com esse modo em produção." } [/block]
Para atualizar o seu projeto para a ultima versão você pode mudar as dependências de uma forma simples e rápida! Primeiro, adicione o nosso repositório no build.gradle do seu projeto: [block:code] { "codes": [ { "code": "repositories {\n maven { url \"https://packagecloud.io/stone/sdk-android/maven2\" }\n}", "language": "text" } ] } [/block] depois, adicione como dependência no módulo desejado: [block:code] { "codes": [ { "code": "dependencies {\n compile \"br.com.stone:stone-sdk:$stone_sdk_version\"\n}", "language": "text" } ] } [/block] [block:callout] { "type": "warning", "title": "Nota", "body": "O trecho: deve ser substituído pela versão desejada.\nEx: A versão atual é a 2.4.8, então o $stone_sdk_version deve ser substituído por stone-sdk:2.4.8, quando sair futuramente a versão 2.4.9, é só alterar de stone-sdk:2.4.8 para stone-sdk:2.4.9." } [/block] Agora você pode definir qual ambiente você quer usar em runtime, usando: [block:code] { "codes": [ { "code": "// para integração\nStone.setEnvironment(Environment.SANDBOX)", "language": "java", "name": "code" } ] } [/block] [block:code] { "codes": [ { "code": "// produção\nStone.setEnvironment(Environment.PRODUCTION)", "language": "java", "name": "code" } ] } [/block] Para versões anteriores a 2.3.1 Você chama a StoneStart.init no início do seu projeto e iniciar o projeto como parceiro (Partner), esse é um perfil que roda na sessão do SDK. Isso permite que ao passar uma transação ou executar um cancelamento, apontando para os ambientes de homologação da Stone (a troca de endpoint é feita dentro do próprio SDK, o desenvolvedor parceiro não precisa se preocupar em trocar os endpoints). Como trocar de Usuário final para modo desenvolvedor? Da seguinte forma: [block:code] { "codes": [ { "code": "// habilitando o modo de desenvolvedor\nStone.developerMode();", "language": "java" } ] } [/block] [block:callout] { "type": "warning", "body": "Não esqueça de colocar este código APENAS na sua build de debug, NUNCA suba o seu código com esse modo em produção." } [/block]
{"_id":"5ab1810f825cbc0077aba9f4","project":"58403d83c0507319000634ed","version":"58403d83c0507319000634f0","category":"5aaadbfb7ca8c7002d78792a","user":"59de082aed35e800383f94b6","updates":[],"next":{"pages":[],"description":""},"createdAt":"2018-03-20T21:45:51.468Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","auth":"required","params":[],"url":""},"isReference":false,"order":0,"body":"Aqui se encontram provedores específicos para quando o meio de captura utilizado for o POS Android","excerpt":"","slug":"providers-para-pos-android","type":"basic","title":"Providers para POS Android","__v":0,"parentDoc":null,"childrenPages":[]}

Providers para POS Android


Aqui se encontram provedores específicos para quando o meio de captura utilizado for o POS Android
Aqui se encontram provedores específicos para quando o meio de captura utilizado for o POS Android
{"_id":"5aaacb5a3ab96b00302f7aec","project":"58403d83c0507319000634ed","version":"58403d83c0507319000634f0","category":"5aaadbfb7ca8c7002d78792a","user":"59de082aed35e800383f94b6","updates":[],"next":{"pages":[],"description":""},"createdAt":"2018-03-15T19:36:58.617Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"settings":"","results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":""},"isReference":false,"order":1,"body":"O PosTransactionProvider é o provedor de transação direcionado a terminais POS que utilizam o Android como sistema operacional. \n\nPara passar uma transação, a primeira coisa a ser feita é instanciar um objeto do tipo TransactionObject\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"final TransactionObject transaction = new TransactionObject();\",\n      \"language\": \"java\"\n    }\n  ]\n}\n[/block]\n\n[block:callout]\n{\n  \"type\": \"info\",\n  \"body\": \"Veja os atributos deste objeto na seção **TransactionObject** do menu **Tabelas**\"\n}\n[/block]\nA seguir, deve-se popular o objeto\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"//Valor da transação em centavos\\ntransaction.setAmount(\\\"10\\\");//Valor da transação em centavos\\n\\ntransaction.setRequestId(null);\\n/* AVISO IMPORTANTE: Não é recomendado alterar o campo abaixo do ITK,\\n * pois ele gera um valor único. Contudo, caso seja necessário\\n * faça conforme a linha a seguir. */\\ntransaction.setInitiatorTransactionKey(\\\"SEU_IDENTIFICADOR_UNICO_AQUI\\\");\\n\\n//Informa a quantidade de parcelas, veja a tabela de valores para o InstalmentTransactionEnum\\ntransaction.setInstalmentTransaction(InstalmentTransactionEnum.ONE_INSTALMENT);\\n\\n//Definir forma de pagamento\\ntransaction.setTypeOfTransaction(TypeOfTransactionEnum.CREDIT);\\n\\n// Define se transação será feita com captura ou não.\\ntransaction.setCapture(true); \\n\",\n      \"language\": \"java\"\n    }\n  ]\n}\n[/block]\nPara a TransactionObject, a quantidade de parcelas é passada por um enum chamado InstalmentTransactionEnum\n[block:callout]\n{\n  \"type\": \"info\",\n  \"body\": \"Veja detalhes do *InstalmentTransactionEnum* na seção **Parcelas** do menu **Tabelas**\"\n}\n[/block]\nApós instanciar e popular o objeto TransactionObject, você poderá passar o mesmo para o PosTransactionProvider, que será o responsável por enviar a transação para o autorizador e trabalhar com a inserção e atualização no TransactionDAO.\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"//Processo para envio da transação\\n// Stone.getUserModel(0) é o usuário atual do aplicativo, que está na posição zero.\\nfinal PosTransactionProvider provider = new PosTransactionProvider(\\\"SUA_ACTIVITY_AQUI\\\", transaction, \\\"USUARIO_DO_APLICATIVO_AQUI\\\");\\n\\nprovider.setDialogTitle(\\\"Aguarde\\\"); // Título do Dialog\\nprovider.setDialogMessage(\\\"Enviando...\\\"); // Mensagem do Dialog\\nprovider.useDefaultUI(true); //Para usar o dialog padrão da SDK\\n\\nprovider.setConnectionCallback(new StoneCallbackInterface() {\\n  public void onSucess() {\\n    // Transação enviada com sucesso e salva no banco. Para acessar, use o TransactionDAO\\n  }\\n  public void OnError() {\\n    // Erro na transação\\n  }\\n});\",\n      \"language\": \"java\"\n    }\n  ]\n}\n[/block]\nLembrando que o PosTransactionProvider segue a mesma estrutura do ActiveApplicationProvider, BluetoothConnectionProvider e os demais. Esse provider pede uma Activity, o TransactionObject que foi criada anteriormente e o usuário do aplicativo.\n\nApós a execução do provider, a sua aplicação receberá uma chamada no método onSuccess() ou onError().\n\nPara ter acesso ao status da transação, você deve utilizar o método:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"getTransactionStatus();\",\n      \"language\": \"java\"\n    }\n  ]\n}\n[/block]\nEm caso de REJECTED e DECLINED, você pode capturar a mensagem do autorizador, utilizando o método:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"getMessageFromAuthorize();\",\n      \"language\": \"java\"\n    }\n  ]\n}\n[/block]\nMensagens como, por exemplo: “Saldo insuficiente”, “Cartão inválido”, “Violação de segurança”, etc.","excerpt":"","slug":"provedor-de-transacao-pos","type":"basic","title":"Provedor de transação - POS Android","__v":0,"parentDoc":null,"childrenPages":[]}

Provedor de transação - POS Android


O PosTransactionProvider é o provedor de transação direcionado a terminais POS que utilizam o Android como sistema operacional. Para passar uma transação, a primeira coisa a ser feita é instanciar um objeto do tipo TransactionObject [block:code] { "codes": [ { "code": "final TransactionObject transaction = new TransactionObject();", "language": "java" } ] } [/block] [block:callout] { "type": "info", "body": "Veja os atributos deste objeto na seção **TransactionObject** do menu **Tabelas**" } [/block] A seguir, deve-se popular o objeto [block:code] { "codes": [ { "code": "//Valor da transação em centavos\ntransaction.setAmount(\"10\");//Valor da transação em centavos\n\ntransaction.setRequestId(null);\n/* AVISO IMPORTANTE: Não é recomendado alterar o campo abaixo do ITK,\n * pois ele gera um valor único. Contudo, caso seja necessário\n * faça conforme a linha a seguir. */\ntransaction.setInitiatorTransactionKey(\"SEU_IDENTIFICADOR_UNICO_AQUI\");\n\n//Informa a quantidade de parcelas, veja a tabela de valores para o InstalmentTransactionEnum\ntransaction.setInstalmentTransaction(InstalmentTransactionEnum.ONE_INSTALMENT);\n\n//Definir forma de pagamento\ntransaction.setTypeOfTransaction(TypeOfTransactionEnum.CREDIT);\n\n// Define se transação será feita com captura ou não.\ntransaction.setCapture(true); \n", "language": "java" } ] } [/block] Para a TransactionObject, a quantidade de parcelas é passada por um enum chamado InstalmentTransactionEnum [block:callout] { "type": "info", "body": "Veja detalhes do *InstalmentTransactionEnum* na seção **Parcelas** do menu **Tabelas**" } [/block] Após instanciar e popular o objeto TransactionObject, você poderá passar o mesmo para o PosTransactionProvider, que será o responsável por enviar a transação para o autorizador e trabalhar com a inserção e atualização no TransactionDAO. [block:code] { "codes": [ { "code": "//Processo para envio da transação\n// Stone.getUserModel(0) é o usuário atual do aplicativo, que está na posição zero.\nfinal PosTransactionProvider provider = new PosTransactionProvider(\"SUA_ACTIVITY_AQUI\", transaction, \"USUARIO_DO_APLICATIVO_AQUI\");\n\nprovider.setDialogTitle(\"Aguarde\"); // Título do Dialog\nprovider.setDialogMessage(\"Enviando...\"); // Mensagem do Dialog\nprovider.useDefaultUI(true); //Para usar o dialog padrão da SDK\n\nprovider.setConnectionCallback(new StoneCallbackInterface() {\n public void onSucess() {\n // Transação enviada com sucesso e salva no banco. Para acessar, use o TransactionDAO\n }\n public void OnError() {\n // Erro na transação\n }\n});", "language": "java" } ] } [/block] Lembrando que o PosTransactionProvider segue a mesma estrutura do ActiveApplicationProvider, BluetoothConnectionProvider e os demais. Esse provider pede uma Activity, o TransactionObject que foi criada anteriormente e o usuário do aplicativo. Após a execução do provider, a sua aplicação receberá uma chamada no método onSuccess() ou onError(). Para ter acesso ao status da transação, você deve utilizar o método: [block:code] { "codes": [ { "code": "getTransactionStatus();", "language": "java" } ] } [/block] Em caso de REJECTED e DECLINED, você pode capturar a mensagem do autorizador, utilizando o método: [block:code] { "codes": [ { "code": "getMessageFromAuthorize();", "language": "java" } ] } [/block] Mensagens como, por exemplo: “Saldo insuficiente”, “Cartão inválido”, “Violação de segurança”, etc.
O PosTransactionProvider é o provedor de transação direcionado a terminais POS que utilizam o Android como sistema operacional. Para passar uma transação, a primeira coisa a ser feita é instanciar um objeto do tipo TransactionObject [block:code] { "codes": [ { "code": "final TransactionObject transaction = new TransactionObject();", "language": "java" } ] } [/block] [block:callout] { "type": "info", "body": "Veja os atributos deste objeto na seção **TransactionObject** do menu **Tabelas**" } [/block] A seguir, deve-se popular o objeto [block:code] { "codes": [ { "code": "//Valor da transação em centavos\ntransaction.setAmount(\"10\");//Valor da transação em centavos\n\ntransaction.setRequestId(null);\n/* AVISO IMPORTANTE: Não é recomendado alterar o campo abaixo do ITK,\n * pois ele gera um valor único. Contudo, caso seja necessário\n * faça conforme a linha a seguir. */\ntransaction.setInitiatorTransactionKey(\"SEU_IDENTIFICADOR_UNICO_AQUI\");\n\n//Informa a quantidade de parcelas, veja a tabela de valores para o InstalmentTransactionEnum\ntransaction.setInstalmentTransaction(InstalmentTransactionEnum.ONE_INSTALMENT);\n\n//Definir forma de pagamento\ntransaction.setTypeOfTransaction(TypeOfTransactionEnum.CREDIT);\n\n// Define se transação será feita com captura ou não.\ntransaction.setCapture(true); \n", "language": "java" } ] } [/block] Para a TransactionObject, a quantidade de parcelas é passada por um enum chamado InstalmentTransactionEnum [block:callout] { "type": "info", "body": "Veja detalhes do *InstalmentTransactionEnum* na seção **Parcelas** do menu **Tabelas**" } [/block] Após instanciar e popular o objeto TransactionObject, você poderá passar o mesmo para o PosTransactionProvider, que será o responsável por enviar a transação para o autorizador e trabalhar com a inserção e atualização no TransactionDAO. [block:code] { "codes": [ { "code": "//Processo para envio da transação\n// Stone.getUserModel(0) é o usuário atual do aplicativo, que está na posição zero.\nfinal PosTransactionProvider provider = new PosTransactionProvider(\"SUA_ACTIVITY_AQUI\", transaction, \"USUARIO_DO_APLICATIVO_AQUI\");\n\nprovider.setDialogTitle(\"Aguarde\"); // Título do Dialog\nprovider.setDialogMessage(\"Enviando...\"); // Mensagem do Dialog\nprovider.useDefaultUI(true); //Para usar o dialog padrão da SDK\n\nprovider.setConnectionCallback(new StoneCallbackInterface() {\n public void onSucess() {\n // Transação enviada com sucesso e salva no banco. Para acessar, use o TransactionDAO\n }\n public void OnError() {\n // Erro na transação\n }\n});", "language": "java" } ] } [/block] Lembrando que o PosTransactionProvider segue a mesma estrutura do ActiveApplicationProvider, BluetoothConnectionProvider e os demais. Esse provider pede uma Activity, o TransactionObject que foi criada anteriormente e o usuário do aplicativo. Após a execução do provider, a sua aplicação receberá uma chamada no método onSuccess() ou onError(). Para ter acesso ao status da transação, você deve utilizar o método: [block:code] { "codes": [ { "code": "getTransactionStatus();", "language": "java" } ] } [/block] Em caso de REJECTED e DECLINED, você pode capturar a mensagem do autorizador, utilizando o método: [block:code] { "codes": [ { "code": "getMessageFromAuthorize();", "language": "java" } ] } [/block] Mensagens como, por exemplo: “Saldo insuficiente”, “Cartão inválido”, “Violação de segurança”, etc.
{"_id":"5aaacc11cedfa70012781abf","project":"58403d83c0507319000634ed","version":"58403d83c0507319000634f0","category":"5aaadbfb7ca8c7002d78792a","user":"59de082aed35e800383f94b6","updates":[],"next":{"pages":[],"description":""},"createdAt":"2018-03-15T19:40:01.755Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"settings":"","results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":""},"isReference":false,"order":2,"body":"O PosPrintProvider é direcionado a terminais POS que utilizam o Android como sistema operacional. Ele pede dois parâmetros, um Context e o transactionObject. \n\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"final PosPrintProvider posPrintProvider = new PosPrintProvider('SUA_ACTIVITY_AQUI', transactionObject);\\nposprintProvider.setDialogMessage(\\\"Imprimindo...\\\");\\nposPrintProvider.setConnectionCallback(new StoneCallbackInterface() {\\n   public void onSuccess() {\\n        // Notinha impressa com sucesso.\\n    }\\n    public void onError() {\\n        // Ocorreu um erro na impressão.\\n    }\\n});\\nposPrintProvider.execute();\",\n      \"language\": \"java\"\n    }\n  ]\n}\n[/block]","excerpt":"","slug":"provedor-de-impressao-pos","type":"basic","title":"Provedor de Impressão - POS Android","__v":0,"parentDoc":null,"childrenPages":[]}

Provedor de Impressão - POS Android


O PosPrintProvider é direcionado a terminais POS que utilizam o Android como sistema operacional. Ele pede dois parâmetros, um Context e o transactionObject. [block:code] { "codes": [ { "code": "final PosPrintProvider posPrintProvider = new PosPrintProvider('SUA_ACTIVITY_AQUI', transactionObject);\nposprintProvider.setDialogMessage(\"Imprimindo...\");\nposPrintProvider.setConnectionCallback(new StoneCallbackInterface() {\n public void onSuccess() {\n // Notinha impressa com sucesso.\n }\n public void onError() {\n // Ocorreu um erro na impressão.\n }\n});\nposPrintProvider.execute();", "language": "java" } ] } [/block]
O PosPrintProvider é direcionado a terminais POS que utilizam o Android como sistema operacional. Ele pede dois parâmetros, um Context e o transactionObject. [block:code] { "codes": [ { "code": "final PosPrintProvider posPrintProvider = new PosPrintProvider('SUA_ACTIVITY_AQUI', transactionObject);\nposprintProvider.setDialogMessage(\"Imprimindo...\");\nposPrintProvider.setConnectionCallback(new StoneCallbackInterface() {\n public void onSuccess() {\n // Notinha impressa com sucesso.\n }\n public void onError() {\n // Ocorreu um erro na impressão.\n }\n});\nposPrintProvider.execute();", "language": "java" } ] } [/block]
{"_id":"58582dbc57d2ec2f0071710b","project":"58403d83c0507319000634ed","slug":"layout-do-comprovante-pos","hidden":false,"next":{"pages":[],"description":""},"type":"basic","version":"58403d83c0507319000634f0","githubsync":"","title":"Layout do Comprovante","category":"5aaadbfb7ca8c7002d78792a","order":3,"parentDoc":null,"sync_unique":"","updates":[],"__v":0,"body":"[block:api-header]\n{\n  \"title\": \"TransactionObject\"\n}\n[/block]\nPara fazer um layout personalizado é possível acessar o transactionObject e obter todos os campos para moldar o comprovante.\n\nÉ possível obter uma transação do transactionDAO utilizando os métodos a seguir:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"TransactionDao transactionDao = new TransactionDAO();\\n\\n//Retorna uma transação pelo ITK\\ntransactionDao.findTransactionWithInitiatorTransactionKey(\\\"ITK DA TRANSAÇÃO\\\")\\n  \\n//Retorna uma transação pelo ID no banco\\ntransactionDao.findTransactionWithId(\\\"ID DA TRANSAÇÃO NO BANCO\\\")\\n  \\n//Retorna uma transação pelo código de autorização\\ntransactionDao.findTransactionWithAuthorizationCode(\\\"AUTH CODE DA TRANSAÇÃO\\\")\\n  \\n//Retorna transações de acordo com os filtros definido\\ntransactionDAO.findTransactionByFilter(\\\"SEUS FILTROS AQUI\\\");\\n\\n//Retorna lista de transações canceladas\\nHashMap<String, String> filters = new HashMap<>();\\nfilters.put(TransactionRepository.STATUS_OF_TRANSACTION, \\\"CANCELLED\\\"));\\nList<TransactionObject> cancelledTransactions = transactionDAO.findTransactionByFilter(filters);\",\n      \"language\": \"java\"\n    }\n  ]\n}\n[/block]\nSeguindo o exemplo abaixo:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"TransactionDAO transactionDAO = new TransactionDAO(getBaseContext());\\nTransactionObject transaction = transactionDAO.findTransactionWithId(transactionDAO.getLastTransactionId());\\nLog.i(\\\"TRANSACTION\\\", transaction.toString());\",\n      \"language\": \"java\",\n      \"name\": \"TransactionObject\"\n    }\n  ]\n}\n[/block]\nNeste caso estamos acessando o TransactionDAO, instanciando um objeto do tipo TransactionObject e localizando as transações por ID passando como parâmetro o ID da ultima transação, neste exemplo salvamos os dados da ultima transação no Log para visualizar todos os campos.\n\nApós instanciar e popular o objeto transactionObject com sua transação, basta passá-lo ao [provedor de impressão](doc:provedor-de-impressao-pos).\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"PosPrintProvider posPrintProvider = new PosPrintProvider('SUA_ACTIVITY_AQUI', transaction);\",\n      \"language\": \"java\"\n    }\n  ]\n}\n[/block]\nO SDK montará todo o comprovante automaticamente (de acordo com o id de transação fornecido e contato que o transação exista no TransactionDAO).\n\nPor padrão, todas as notinhas são impressas com a logo da Stone.\n[block:image]\n{\n  \"images\": [\n    {\n      \"image\": [\n        \"https://files.readme.io/a72d3af-recibo.PNG\",\n        \"recibo.PNG\",\n        330,\n        357,\n        \"#f3f3db\"\n      ]\n    }\n  ]\n}\n[/block]","createdAt":"2016-12-19T18:58:04.158Z","excerpt":"","isReference":false,"link_external":false,"link_url":"","user":"57ea79f61780cd170064f273","api":{"auth":"required","params":[],"url":"","results":{"codes":[{"language":"json","code":"{}","name":"","status":200},{"status":400,"language":"json","code":"{}","name":""}]},"settings":""},"childrenPages":[]}

Layout do Comprovante


[block:api-header] { "title": "TransactionObject" } [/block] Para fazer um layout personalizado é possível acessar o transactionObject e obter todos os campos para moldar o comprovante. É possível obter uma transação do transactionDAO utilizando os métodos a seguir: [block:code] { "codes": [ { "code": "TransactionDao transactionDao = new TransactionDAO();\n\n//Retorna uma transação pelo ITK\ntransactionDao.findTransactionWithInitiatorTransactionKey(\"ITK DA TRANSAÇÃO\")\n \n//Retorna uma transação pelo ID no banco\ntransactionDao.findTransactionWithId(\"ID DA TRANSAÇÃO NO BANCO\")\n \n//Retorna uma transação pelo código de autorização\ntransactionDao.findTransactionWithAuthorizationCode(\"AUTH CODE DA TRANSAÇÃO\")\n \n//Retorna transações de acordo com os filtros definido\ntransactionDAO.findTransactionByFilter(\"SEUS FILTROS AQUI\");\n\n//Retorna lista de transações canceladas\nHashMap<String, String> filters = new HashMap<>();\nfilters.put(TransactionRepository.STATUS_OF_TRANSACTION, \"CANCELLED\"));\nList<TransactionObject> cancelledTransactions = transactionDAO.findTransactionByFilter(filters);", "language": "java" } ] } [/block] Seguindo o exemplo abaixo: [block:code] { "codes": [ { "code": "TransactionDAO transactionDAO = new TransactionDAO(getBaseContext());\nTransactionObject transaction = transactionDAO.findTransactionWithId(transactionDAO.getLastTransactionId());\nLog.i(\"TRANSACTION\", transaction.toString());", "language": "java", "name": "TransactionObject" } ] } [/block] Neste caso estamos acessando o TransactionDAO, instanciando um objeto do tipo TransactionObject e localizando as transações por ID passando como parâmetro o ID da ultima transação, neste exemplo salvamos os dados da ultima transação no Log para visualizar todos os campos. Após instanciar e popular o objeto transactionObject com sua transação, basta passá-lo ao [provedor de impressão](doc:provedor-de-impressao-pos). [block:code] { "codes": [ { "code": "PosPrintProvider posPrintProvider = new PosPrintProvider('SUA_ACTIVITY_AQUI', transaction);", "language": "java" } ] } [/block] O SDK montará todo o comprovante automaticamente (de acordo com o id de transação fornecido e contato que o transação exista no TransactionDAO). Por padrão, todas as notinhas são impressas com a logo da Stone. [block:image] { "images": [ { "image": [ "https://files.readme.io/a72d3af-recibo.PNG", "recibo.PNG", 330, 357, "#f3f3db" ] } ] } [/block]
[block:api-header] { "title": "TransactionObject" } [/block] Para fazer um layout personalizado é possível acessar o transactionObject e obter todos os campos para moldar o comprovante. É possível obter uma transação do transactionDAO utilizando os métodos a seguir: [block:code] { "codes": [ { "code": "TransactionDao transactionDao = new TransactionDAO();\n\n//Retorna uma transação pelo ITK\ntransactionDao.findTransactionWithInitiatorTransactionKey(\"ITK DA TRANSAÇÃO\")\n \n//Retorna uma transação pelo ID no banco\ntransactionDao.findTransactionWithId(\"ID DA TRANSAÇÃO NO BANCO\")\n \n//Retorna uma transação pelo código de autorização\ntransactionDao.findTransactionWithAuthorizationCode(\"AUTH CODE DA TRANSAÇÃO\")\n \n//Retorna transações de acordo com os filtros definido\ntransactionDAO.findTransactionByFilter(\"SEUS FILTROS AQUI\");\n\n//Retorna lista de transações canceladas\nHashMap<String, String> filters = new HashMap<>();\nfilters.put(TransactionRepository.STATUS_OF_TRANSACTION, \"CANCELLED\"));\nList<TransactionObject> cancelledTransactions = transactionDAO.findTransactionByFilter(filters);", "language": "java" } ] } [/block] Seguindo o exemplo abaixo: [block:code] { "codes": [ { "code": "TransactionDAO transactionDAO = new TransactionDAO(getBaseContext());\nTransactionObject transaction = transactionDAO.findTransactionWithId(transactionDAO.getLastTransactionId());\nLog.i(\"TRANSACTION\", transaction.toString());", "language": "java", "name": "TransactionObject" } ] } [/block] Neste caso estamos acessando o TransactionDAO, instanciando um objeto do tipo TransactionObject e localizando as transações por ID passando como parâmetro o ID da ultima transação, neste exemplo salvamos os dados da ultima transação no Log para visualizar todos os campos. Após instanciar e popular o objeto transactionObject com sua transação, basta passá-lo ao [provedor de impressão](doc:provedor-de-impressao-pos). [block:code] { "codes": [ { "code": "PosPrintProvider posPrintProvider = new PosPrintProvider('SUA_ACTIVITY_AQUI', transaction);", "language": "java" } ] } [/block] O SDK montará todo o comprovante automaticamente (de acordo com o id de transação fornecido e contato que o transação exista no TransactionDAO). Por padrão, todas as notinhas são impressas com a logo da Stone. [block:image] { "images": [ { "image": [ "https://files.readme.io/a72d3af-recibo.PNG", "recibo.PNG", 330, 357, "#f3f3db" ] } ] } [/block]
{"_id":"5ab180515ea56a0012dcfe8f","project":"58403d83c0507319000634ed","version":"58403d83c0507319000634f0","category":"5aabfd4591cb63004de5eab6","user":"59de082aed35e800383f94b6","updates":[],"next":{"pages":[],"description":""},"createdAt":"2018-03-20T21:42:41.142Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","auth":"required","params":[],"url":""},"isReference":false,"order":0,"body":"Aqui você encontra as tabelas citadas ao longo da documentação, contendo informações sobre os Providers, Objetos, Códigos de retorno, Status, entre outras.","excerpt":"","slug":"tabelas","type":"basic","title":"Tabelas","__v":0,"parentDoc":null,"childrenPages":[]}

Tabelas


Aqui você encontra as tabelas citadas ao longo da documentação, contendo informações sobre os Providers, Objetos, Códigos de retorno, Status, entre outras.
Aqui você encontra as tabelas citadas ao longo da documentação, contendo informações sobre os Providers, Objetos, Códigos de retorno, Status, entre outras.
{"_id":"59dbad5f4c45e30010603782","project":"58403d83c0507319000634ed","version":"58403d83c0507319000634f0","category":"5aabfd4591cb63004de5eab6","user":"58dcf4b604ea0f0f00fbdfcb","updates":[],"next":{"pages":[],"description":""},"createdAt":"2017-10-09T17:09:51.619Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","auth":"required","params":[],"url":""},"isReference":false,"order":1,"body":"| Transação | Modalidades | Formas de Pagamento |\n| ----------------- | --------- | ------------------- |\n| Crédito | À vista | À Vista / Permite transação tarja magnética |\n| Crédito | Parcelado com juros | Permite transação chip EM | \n| Crédito | Parcelado sem juros |  Permite fallback magnetico |\n| - | - |  Solicita senha para transação tarja de acordo com service code do cartão |\n| - | - |  Solicita CVV (Código de Segurança) para transações tarja |\n| Débito / Voucherv  | À vista | Permite transação tarja magnética |\n| - | - |  Permite transação chip EMV |\n| - | - |  Permite fallback magnético |\n| - | - |  Exige solicitação de senha |\n\n\n\n\nA seguir, estão as possíveis modalidades de pagamento com breve descrição:\n\n- Crédito à Vista com captura imediata: Consiste no pagamento do valor total da compra com captura imediata.\n\n- Crédito à Vista com captura posterior: Consiste no pagamento do valor total da compra com captura posterior.\n\n- Crédito Parcelado com captura imediata: Consiste no pagamento do valor parcelado da compra com captura imediata.\n\n- Crédito Parcelado com captura posterior: Consiste no pagamento do valor parcelado da compra com captura posterior.","excerpt":"Descrição das possíveis transações financeiras.","slug":"transacoes-financeiras","type":"basic","title":"Transações Financeiras","__v":0,"parentDoc":null,"childrenPages":[]}

Transações Financeiras

Descrição das possíveis transações financeiras.

| Transação | Modalidades | Formas de Pagamento | | ----------------- | --------- | ------------------- | | Crédito | À vista | À Vista / Permite transação tarja magnética | | Crédito | Parcelado com juros | Permite transação chip EM | | Crédito | Parcelado sem juros | Permite fallback magnetico | | - | - | Solicita senha para transação tarja de acordo com service code do cartão | | - | - | Solicita CVV (Código de Segurança) para transações tarja | | Débito / Voucherv | À vista | Permite transação tarja magnética | | - | - | Permite transação chip EMV | | - | - | Permite fallback magnético | | - | - | Exige solicitação de senha | A seguir, estão as possíveis modalidades de pagamento com breve descrição: - Crédito à Vista com captura imediata: Consiste no pagamento do valor total da compra com captura imediata. - Crédito à Vista com captura posterior: Consiste no pagamento do valor total da compra com captura posterior. - Crédito Parcelado com captura imediata: Consiste no pagamento do valor parcelado da compra com captura imediata. - Crédito Parcelado com captura posterior: Consiste no pagamento do valor parcelado da compra com captura posterior.
| Transação | Modalidades | Formas de Pagamento | | ----------------- | --------- | ------------------- | | Crédito | À vista | À Vista / Permite transação tarja magnética | | Crédito | Parcelado com juros | Permite transação chip EM | | Crédito | Parcelado sem juros | Permite fallback magnetico | | - | - | Solicita senha para transação tarja de acordo com service code do cartão | | - | - | Solicita CVV (Código de Segurança) para transações tarja | | Débito / Voucherv | À vista | Permite transação tarja magnética | | - | - | Permite transação chip EMV | | - | - | Permite fallback magnético | | - | - | Exige solicitação de senha | A seguir, estão as possíveis modalidades de pagamento com breve descrição: - Crédito à Vista com captura imediata: Consiste no pagamento do valor total da compra com captura imediata. - Crédito à Vista com captura posterior: Consiste no pagamento do valor total da compra com captura posterior. - Crédito Parcelado com captura imediata: Consiste no pagamento do valor parcelado da compra com captura imediata. - Crédito Parcelado com captura posterior: Consiste no pagamento do valor parcelado da compra com captura posterior.
{"_id":"58582d1c9988d00f005506ae","slug":"providers-1","updates":["59c043bb1b2d07001a9d2dae"],"createdAt":"2016-12-19T18:55:24.113Z","hidden":false,"link_external":false,"next":{"pages":[],"description":""},"order":2,"parentDoc":null,"version":"58403d83c0507319000634f0","category":"5aabfd4591cb63004de5eab6","githubsync":"","excerpt":"","title":"Providers","type":"basic","user":"57ea79f61780cd170064f273","sync_unique":"","__v":1,"api":{"settings":"","auth":"required","params":[],"url":"","results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]}},"body":"Todos os providers seguem o mesmo modelo. Todos herdam de uma classe modelo que estende da classe AsyncTask do Android. Então toda escrita e leitura de comandos com o Pinpad, requisições de transações e ativações, conexões e etc, serão executadas em uma thread secundária do método ‘doInBackground’.\n\nTodas podem rodar em background ou com um simples feedback para o seu usuário (um dialog com um título e uma mensagem de sua escolha). Após a execução do provider, ele realizará uma chamada de retorno para a sua aplicação (Callback), posteriormente iremos ver um exemplo de como isso funciona.\n\n**Métodos genéricos dos Providers:**\n[block:parameters]\n{\n  \"data\": {\n    \"h-0\": \"Método\",\n    \"h-1\": \"Função\",\n    \"0-0\": \"useDefaultUI (boolean)\",\n    \"0-1\": \"Com este método você irá informar se o provider deverá ou não ser executado em segundo plano. Todos rodam em background por default.\",\n    \"1-0\": \"setActivity(Activity)\",\n    \"1-1\": \"Para que uma mensagem de feedback seja exibida (caso você passe true no método useDefaultUI) o Android irá pedir uma activity. Desta forma, ele exibirá o Dialog para o usuário com a sua mensagem.\",\n    \"2-0\": \"setDialogMessage(String)\",\n    \"2-1\": \"Esse método informa qual mensagem será exibida no Dialog de feedback.\",\n    \"3-0\": \"setDialogTitle(String)\",\n    \"3-1\": \"Esse método informa qual mensagem será exibida no título do Dialog de feedback.\",\n    \"4-0\": \"setConnectionCallback(StoneCallbackInterface)\",\n    \"4-1\": \"Cria uma classe anônima que possui dois métodos onSuccess (método chamado se o provider for executado com sucesso) e onError (método que será chamado se ocorrer uma Exception).\",\n    \"5-0\": \"getListOfErrors()\",\n    \"5-1\": \"Esse método retornará uma lista com os erros que ocorreram.\"\n  },\n  \"cols\": 2,\n  \"rows\": 6\n}\n[/block]\n**Lista de Providers disponíveis:** \n[block:parameters]\n{\n  \"data\": {\n    \"h-0\": \"Provider\",\n    \"h-1\": \"Função\",\n    \"0-0\": \"ActiveApplicationProvider\",\n    \"0-1\": \"Responsável por ativar a sua aplicação.\",\n    \"1-0\": \"BluetoothConnectionProvider\",\n    \"1-1\": \"Responsável por criar conexão bluetooth com um pinpad a partir de um mac address.\",\n    \"2-0\": \"CancellationProvider\",\n    \"2-1\": \"Responsável por realizar um cancelamento de uma transação.\",\n    \"3-0\": \"DisplayMessageProvider\",\n    \"3-1\": \"Exibe uma mensagem de até 32 caracteres na tela do Pinpad.\",\n    \"4-0\": \"DownloadTablesProvider\",\n    \"4-1\": \"Responsável por acessar os servidores da Stone e fazer o download das tabelas AIDs e CAPKs.\",\n    \"5-0\": \"LoadTablesProvider\",\n    \"5-1\": \"Responsável por enviar as tabelas AIDs e CAPKs para os pinpads, utilize esse provedor caso a transação dê erro 20.\",\n    \"6-0\": \"PrintProvider\",\n    \"6-1\": \"Responsável por realizar impressões nos Pinpads que possuem suporte para impressão.\",\n    \"7-0\": \"SendEmailProvider\",\n    \"7-1\": \"Responsável por enviar uma nota eletrônica por email.\",\n    \"8-0\": \"TransactionProvider\",\n    \"8-1\": \"Responsável por realizar a captura dos cartões, enviar as transações e manipular as mesmas no banco de transações do dispositivo.\",\n    \"9-0\": \"ValidateTransactionByCardProvider\",\n    \"9-1\": \"Verifica se existe transação para o cartão utilizado no TransactionDAO.\",\n    \"11-0\": \"PosTransactionProvider\",\n    \"12-0\": \"PosPrintProvider\",\n    \"11-1\": \"Responsável por realizar a captura dos cartões, enviar as transações e manipular as mesmas no banco de transações do dispositivo. Para terminais POS que utilizam Android\",\n    \"12-1\": \"Responsável pela impressão em terminais POS que utilizam Android\",\n    \"10-0\": \"CaptureTransactionProvider\",\n    \"10-1\": \"Responsável por realizar a \\\"captura posterior\\\" de transações que foram feitas sem captura\"\n  },\n  \"cols\": 2,\n  \"rows\": 13\n}\n[/block]","isReference":false,"link_url":"","project":"58403d83c0507319000634ed","childrenPages":[]}

Providers


Todos os providers seguem o mesmo modelo. Todos herdam de uma classe modelo que estende da classe AsyncTask do Android. Então toda escrita e leitura de comandos com o Pinpad, requisições de transações e ativações, conexões e etc, serão executadas em uma thread secundária do método ‘doInBackground’. Todas podem rodar em background ou com um simples feedback para o seu usuário (um dialog com um título e uma mensagem de sua escolha). Após a execução do provider, ele realizará uma chamada de retorno para a sua aplicação (Callback), posteriormente iremos ver um exemplo de como isso funciona. **Métodos genéricos dos Providers:** [block:parameters] { "data": { "h-0": "Método", "h-1": "Função", "0-0": "useDefaultUI (boolean)", "0-1": "Com este método você irá informar se o provider deverá ou não ser executado em segundo plano. Todos rodam em background por default.", "1-0": "setActivity(Activity)", "1-1": "Para que uma mensagem de feedback seja exibida (caso você passe true no método useDefaultUI) o Android irá pedir uma activity. Desta forma, ele exibirá o Dialog para o usuário com a sua mensagem.", "2-0": "setDialogMessage(String)", "2-1": "Esse método informa qual mensagem será exibida no Dialog de feedback.", "3-0": "setDialogTitle(String)", "3-1": "Esse método informa qual mensagem será exibida no título do Dialog de feedback.", "4-0": "setConnectionCallback(StoneCallbackInterface)", "4-1": "Cria uma classe anônima que possui dois métodos onSuccess (método chamado se o provider for executado com sucesso) e onError (método que será chamado se ocorrer uma Exception).", "5-0": "getListOfErrors()", "5-1": "Esse método retornará uma lista com os erros que ocorreram." }, "cols": 2, "rows": 6 } [/block] **Lista de Providers disponíveis:** [block:parameters] { "data": { "h-0": "Provider", "h-1": "Função", "0-0": "ActiveApplicationProvider", "0-1": "Responsável por ativar a sua aplicação.", "1-0": "BluetoothConnectionProvider", "1-1": "Responsável por criar conexão bluetooth com um pinpad a partir de um mac address.", "2-0": "CancellationProvider", "2-1": "Responsável por realizar um cancelamento de uma transação.", "3-0": "DisplayMessageProvider", "3-1": "Exibe uma mensagem de até 32 caracteres na tela do Pinpad.", "4-0": "DownloadTablesProvider", "4-1": "Responsável por acessar os servidores da Stone e fazer o download das tabelas AIDs e CAPKs.", "5-0": "LoadTablesProvider", "5-1": "Responsável por enviar as tabelas AIDs e CAPKs para os pinpads, utilize esse provedor caso a transação dê erro 20.", "6-0": "PrintProvider", "6-1": "Responsável por realizar impressões nos Pinpads que possuem suporte para impressão.", "7-0": "SendEmailProvider", "7-1": "Responsável por enviar uma nota eletrônica por email.", "8-0": "TransactionProvider", "8-1": "Responsável por realizar a captura dos cartões, enviar as transações e manipular as mesmas no banco de transações do dispositivo.", "9-0": "ValidateTransactionByCardProvider", "9-1": "Verifica se existe transação para o cartão utilizado no TransactionDAO.", "11-0": "PosTransactionProvider", "12-0": "PosPrintProvider", "11-1": "Responsável por realizar a captura dos cartões, enviar as transações e manipular as mesmas no banco de transações do dispositivo. Para terminais POS que utilizam Android", "12-1": "Responsável pela impressão em terminais POS que utilizam Android", "10-0": "CaptureTransactionProvider", "10-1": "Responsável por realizar a \"captura posterior\" de transações que foram feitas sem captura" }, "cols": 2, "rows": 13 } [/block]
Todos os providers seguem o mesmo modelo. Todos herdam de uma classe modelo que estende da classe AsyncTask do Android. Então toda escrita e leitura de comandos com o Pinpad, requisições de transações e ativações, conexões e etc, serão executadas em uma thread secundária do método ‘doInBackground’. Todas podem rodar em background ou com um simples feedback para o seu usuário (um dialog com um título e uma mensagem de sua escolha). Após a execução do provider, ele realizará uma chamada de retorno para a sua aplicação (Callback), posteriormente iremos ver um exemplo de como isso funciona. **Métodos genéricos dos Providers:** [block:parameters] { "data": { "h-0": "Método", "h-1": "Função", "0-0": "useDefaultUI (boolean)", "0-1": "Com este método você irá informar se o provider deverá ou não ser executado em segundo plano. Todos rodam em background por default.", "1-0": "setActivity(Activity)", "1-1": "Para que uma mensagem de feedback seja exibida (caso você passe true no método useDefaultUI) o Android irá pedir uma activity. Desta forma, ele exibirá o Dialog para o usuário com a sua mensagem.", "2-0": "setDialogMessage(String)", "2-1": "Esse método informa qual mensagem será exibida no Dialog de feedback.", "3-0": "setDialogTitle(String)", "3-1": "Esse método informa qual mensagem será exibida no título do Dialog de feedback.", "4-0": "setConnectionCallback(StoneCallbackInterface)", "4-1": "Cria uma classe anônima que possui dois métodos onSuccess (método chamado se o provider for executado com sucesso) e onError (método que será chamado se ocorrer uma Exception).", "5-0": "getListOfErrors()", "5-1": "Esse método retornará uma lista com os erros que ocorreram." }, "cols": 2, "rows": 6 } [/block] **Lista de Providers disponíveis:** [block:parameters] { "data": { "h-0": "Provider", "h-1": "Função", "0-0": "ActiveApplicationProvider", "0-1": "Responsável por ativar a sua aplicação.", "1-0": "BluetoothConnectionProvider", "1-1": "Responsável por criar conexão bluetooth com um pinpad a partir de um mac address.", "2-0": "CancellationProvider", "2-1": "Responsável por realizar um cancelamento de uma transação.", "3-0": "DisplayMessageProvider", "3-1": "Exibe uma mensagem de até 32 caracteres na tela do Pinpad.", "4-0": "DownloadTablesProvider", "4-1": "Responsável por acessar os servidores da Stone e fazer o download das tabelas AIDs e CAPKs.", "5-0": "LoadTablesProvider", "5-1": "Responsável por enviar as tabelas AIDs e CAPKs para os pinpads, utilize esse provedor caso a transação dê erro 20.", "6-0": "PrintProvider", "6-1": "Responsável por realizar impressões nos Pinpads que possuem suporte para impressão.", "7-0": "SendEmailProvider", "7-1": "Responsável por enviar uma nota eletrônica por email.", "8-0": "TransactionProvider", "8-1": "Responsável por realizar a captura dos cartões, enviar as transações e manipular as mesmas no banco de transações do dispositivo.", "9-0": "ValidateTransactionByCardProvider", "9-1": "Verifica se existe transação para o cartão utilizado no TransactionDAO.", "11-0": "PosTransactionProvider", "12-0": "PosPrintProvider", "11-1": "Responsável por realizar a captura dos cartões, enviar as transações e manipular as mesmas no banco de transações do dispositivo. Para terminais POS que utilizam Android", "12-1": "Responsável pela impressão em terminais POS que utilizam Android", "10-0": "CaptureTransactionProvider", "10-1": "Responsável por realizar a \"captura posterior\" de transações que foram feitas sem captura" }, "cols": 2, "rows": 13 } [/block]
{"_id":"58582d269988d00f005506af","githubsync":"","type":"basic","updates":["59c043f75dc43e003a1bde63"],"__v":1,"api":{"results":{"codes":[{"name":"","status":200,"language":"json","code":"{}"},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","auth":"required","params":[],"url":""},"hidden":false,"isReference":false,"link_external":false,"link_url":"","order":3,"sync_unique":"","version":"58403d83c0507319000634f0","body":"No módulo Utils, você possui ferramentas que podem lhe ajudar na criação da sua aplicação.\n\nCom esse modulo você terá as seguintes ferramentas:\n[block:parameters]\n{\n  \"data\": {\n    \"h-0\": \"Ferramenta\",\n    \"h-1\": \"Função\",\n    \"0-0\": \"ConnectionValidator\",\n    \"0-1\": \"Teste de conexão.\",\n    \"1-0\": \"Utilities\",\n    \"1-1\": \"Utilitários para a sua aplicação, por exemplo, nomalizador de Strings.\",\n    \"2-0\": \"Stone\",\n    \"2-1\": \"Informações que ficam compartilhadas entre a sua aplicação e a SDK.\",\n    \"3-0\": \"StopWatch\",\n    \"3-1\": \"Um simples cronômetro para benchmark.\",\n    \"4-0\": \"Criptografia e descriptografia\",\n    \"5-0\": \"ConnectionPost\",\n    \"5-1\": \"Realiza post para uma aplicação REST utilizando XML.\",\n    \"6-0\": \"TransactionDAO\",\n    \"6-1\": \"Banco de transações - as transações são salvas e atualizadas durante a execução do TransactionProvider.\",\n    \"7-0\": \"PinpadDAO\",\n    \"7-1\": \"Banco de pinpads já conectados.\",\n    \"8-0\": \"ApplicationCache\",\n    \"8-1\": \"CRUD para a sua aplicação, ele trabalha na pasta ‘file’ da sua aplicação.\"\n  },\n  \"cols\": 2,\n  \"rows\": 9\n}\n[/block]","createdAt":"2016-12-19T18:55:34.963Z","excerpt":"","parentDoc":null,"project":"58403d83c0507319000634ed","slug":"utils-1","user":"57ea79f61780cd170064f273","category":"5aabfd4591cb63004de5eab6","next":{"pages":[],"description":""},"title":"Utils","childrenPages":[]}

Utils


No módulo Utils, você possui ferramentas que podem lhe ajudar na criação da sua aplicação. Com esse modulo você terá as seguintes ferramentas: [block:parameters] { "data": { "h-0": "Ferramenta", "h-1": "Função", "0-0": "ConnectionValidator", "0-1": "Teste de conexão.", "1-0": "Utilities", "1-1": "Utilitários para a sua aplicação, por exemplo, nomalizador de Strings.", "2-0": "Stone", "2-1": "Informações que ficam compartilhadas entre a sua aplicação e a SDK.", "3-0": "StopWatch", "3-1": "Um simples cronômetro para benchmark.", "4-0": "Criptografia e descriptografia", "5-0": "ConnectionPost", "5-1": "Realiza post para uma aplicação REST utilizando XML.", "6-0": "TransactionDAO", "6-1": "Banco de transações - as transações são salvas e atualizadas durante a execução do TransactionProvider.", "7-0": "PinpadDAO", "7-1": "Banco de pinpads já conectados.", "8-0": "ApplicationCache", "8-1": "CRUD para a sua aplicação, ele trabalha na pasta ‘file’ da sua aplicação." }, "cols": 2, "rows": 9 } [/block]
No módulo Utils, você possui ferramentas que podem lhe ajudar na criação da sua aplicação. Com esse modulo você terá as seguintes ferramentas: [block:parameters] { "data": { "h-0": "Ferramenta", "h-1": "Função", "0-0": "ConnectionValidator", "0-1": "Teste de conexão.", "1-0": "Utilities", "1-1": "Utilitários para a sua aplicação, por exemplo, nomalizador de Strings.", "2-0": "Stone", "2-1": "Informações que ficam compartilhadas entre a sua aplicação e a SDK.", "3-0": "StopWatch", "3-1": "Um simples cronômetro para benchmark.", "4-0": "Criptografia e descriptografia", "5-0": "ConnectionPost", "5-1": "Realiza post para uma aplicação REST utilizando XML.", "6-0": "TransactionDAO", "6-1": "Banco de transações - as transações são salvas e atualizadas durante a execução do TransactionProvider.", "7-0": "PinpadDAO", "7-1": "Banco de pinpads já conectados.", "8-0": "ApplicationCache", "8-1": "CRUD para a sua aplicação, ele trabalha na pasta ‘file’ da sua aplicação." }, "cols": 2, "rows": 9 } [/block]
{"_id":"58582d6857d2ec2f0071710a","next":{"pages":[],"description":""},"slug":"pinpad-object","__v":1,"body":"Atributos do PinpadObject.\n[block:parameters]\n{\n  \"data\": {\n    \"h-0\": \"Tipo\",\n    \"h-1\": \"Nome\",\n    \"h-2\": \"Função\",\n    \"0-0\": \"Integer\",\n    \"1-0\": \"String\",\n    \"2-0\": \"String\",\n    \"4-0\": \"String\",\n    \"3-0\": \"boolean\",\n    \"5-0\": \"int\",\n    \"0-1\": \"id\",\n    \"1-1\": \"name\",\n    \"2-1\": \"macAddress\",\n    \"3-1\": \"printSupport\",\n    \"4-1\": \"timeToConnect\",\n    \"5-1\": \"majorDevice\",\n    \"0-2\": \"ID do Pinpad quando for carregado pelo PinpadDAO.\",\n    \"1-2\": \"Nome do Pinpad (format: MODELO-SERIAL).\",\n    \"2-2\": \"Mac address do dispositivo bluetooth.\",\n    \"3-2\": \"Se o Pinpad possui suporte para impressão.\",\n    \"4-2\": \"Tempo que levou para criar a última conexão.\",\n    \"5-2\": \"O tipo do Bluetooth (headset, phone, pc, etc.).\"\n  },\n  \"cols\": 3,\n  \"rows\": 6\n}\n[/block]","hidden":false,"link_url":"","project":"58403d83c0507319000634ed","title":"PinpadObject","version":"58403d83c0507319000634f0","api":{"results":{"codes":[{"name":"","status":200,"language":"json","code":"{}"},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","auth":"required","params":[],"url":""},"createdAt":"2016-12-19T18:56:40.158Z","isReference":false,"link_external":false,"category":"5aabfd4591cb63004de5eab6","order":4,"type":"basic","updates":["59c044cb35e4940028efb533"],"user":"57ea79f61780cd170064f273","excerpt":"","githubsync":"","parentDoc":null,"sync_unique":"","childrenPages":[]}

PinpadObject


Atributos do PinpadObject. [block:parameters] { "data": { "h-0": "Tipo", "h-1": "Nome", "h-2": "Função", "0-0": "Integer", "1-0": "String", "2-0": "String", "4-0": "String", "3-0": "boolean", "5-0": "int", "0-1": "id", "1-1": "name", "2-1": "macAddress", "3-1": "printSupport", "4-1": "timeToConnect", "5-1": "majorDevice", "0-2": "ID do Pinpad quando for carregado pelo PinpadDAO.", "1-2": "Nome do Pinpad (format: MODELO-SERIAL).", "2-2": "Mac address do dispositivo bluetooth.", "3-2": "Se o Pinpad possui suporte para impressão.", "4-2": "Tempo que levou para criar a última conexão.", "5-2": "O tipo do Bluetooth (headset, phone, pc, etc.)." }, "cols": 3, "rows": 6 } [/block]
Atributos do PinpadObject. [block:parameters] { "data": { "h-0": "Tipo", "h-1": "Nome", "h-2": "Função", "0-0": "Integer", "1-0": "String", "2-0": "String", "4-0": "String", "3-0": "boolean", "5-0": "int", "0-1": "id", "1-1": "name", "2-1": "macAddress", "3-1": "printSupport", "4-1": "timeToConnect", "5-1": "majorDevice", "0-2": "ID do Pinpad quando for carregado pelo PinpadDAO.", "1-2": "Nome do Pinpad (format: MODELO-SERIAL).", "2-2": "Mac address do dispositivo bluetooth.", "3-2": "Se o Pinpad possui suporte para impressão.", "4-2": "Tempo que levou para criar a última conexão.", "5-2": "O tipo do Bluetooth (headset, phone, pc, etc.)." }, "cols": 3, "rows": 6 } [/block]
{"_id":"5aac0ca8e5b13a005acf7d7a","project":"58403d83c0507319000634ed","version":"58403d83c0507319000634f0","category":"5aabfd4591cb63004de5eab6","user":"59de082aed35e800383f94b6","updates":[],"next":{"pages":[],"description":""},"createdAt":"2018-03-16T18:27:52.650Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"settings":"","results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":""},"isReference":false,"order":5,"body":"Esse objeto representa a sua transação que será enviada. Ela possui os seguintes atributos:\n[block:parameters]\n{\n  \"data\": {\n    \"h-0\": \"Tipo\",\n    \"h-1\": \"Nome\",\n    \"h-2\": \"Função\",\n    \"0-0\": \"String\",\n    \"1-0\": \"String\",\n    \"2-0\": \"String\",\n    \"0-1\": \"amount\",\n    \"0-2\": \"Valor da transação.\",\n    \"1-1\": \"requestId\",\n    \"1-2\": \"ID do pedido.\",\n    \"2-1\": \"initiatorTransactionKey\",\n    \"2-2\": \"Esse é um identificador da transação que aparece no portal. A SDK possui um padrão próprio para gerar um identificador único e usará esse padrão se um identificador não for definido. Caso você queira passar o seu próprio identificador, certifique-se que ele será sempre único para todos os seus clientes.\",\n    \"3-0\": \"EmailClient\",\n    \"3-1\": \"emailClient\",\n    \"3-2\": \"Seu email de noReply para envio do comprovante eletrônico.\",\n    \"4-0\": \"InstalmentTransactionEnum\",\n    \"4-1\": \"instalmentTransactionEnum\",\n    \"4-2\": \"Quantidade de parcelas. Mais informações na tabela abaixo.\",\n    \"5-0\": \"TypeOfTransactionEnum\",\n    \"5-1\": \"typeOfTransactionEnum\",\n    \"5-2\": \"Tipo da transação (débito ou crédito).\",\n    \"6-0\": \"PinpadObject\",\n    \"6-1\": \"pinpadObject\",\n    \"6-2\": \"O pinpad que você deseja passar a transação.\",\n    \"7-0\": \"String\",\n    \"7-1\": \"shortName\",\n    \"7-2\": \"Nome de exibição no extrato do cliente (máximo de 14 caracteres).\"\n  },\n  \"cols\": 3,\n  \"rows\": 8\n}\n[/block]\nPara a TransactionObject, a quantidade de parcelas é passada por um enum chamado InstalmentTransactionEnum, segue a tabela com cada nome e valor:\n[block:parameters]\n{\n  \"data\": {\n    \"h-0\": \"Nome\",\n    \"h-1\": \"Valor referente\",\n    \"0-0\": \"ONE_INSTALMENT\",\n    \"1-0\": \"TWO_INSTALMENT_NO_INTEREST\",\n    \"2-0\": \"THREE_INSTALMENT_NO_INTEREST\",\n    \"3-0\": \"FOUR_INSTALMENT_NO_INTEREST\",\n    \"4-0\": \"FIVE_INSTALMENT_NO_INTEREST\",\n    \"5-0\": \"SIX_INSTALMENT_NO_INTEREST\",\n    \"6-0\": \"SEVEN_INSTALMENT_NO_INTEREST\",\n    \"7-0\": \"EIGHT_INSTALMENT_NO_INTEREST\",\n    \"8-0\": \"NINE_INSTALMENT_NO_INTEREST\",\n    \"9-0\": \"TEN_INSTALMENT_NO_INTEREST\",\n    \"10-0\": \"ELEVEN_INSTALMENT_NO_INTEREST\",\n    \"11-0\": \"TWELVE_INSTALMENT_NO_INTEREST\",\n    \"0-1\": \"À vista\",\n    \"1-1\": \"2 vezes sem juros\",\n    \"2-1\": \"3 vezes sem juros\",\n    \"3-1\": \"4 vezes sem juros\",\n    \"4-1\": \"5 vezes sem juros\",\n    \"5-1\": \"6 vezes sem juros\",\n    \"6-1\": \"7 vezes sem juros\",\n    \"7-1\": \"8 vezes sem juros\",\n    \"8-1\": \"9 vezes sem juros\",\n    \"9-1\": \"10 vezes sem juros\",\n    \"10-1\": \"11 vezes sem juros\",\n    \"11-1\": \"12 vezes sem juros\",\n    \"12-0\": \"TWO_INSTALMENT_WITH_INTEREST\",\n    \"12-1\": \"2 vezes com juros\",\n    \"13-0\": \"THREE_INSTALMENT_WITH_INTEREST\",\n    \"13-1\": \"3 vezes com juros\",\n    \"14-0\": \"FOUR_INSTALMENT_WITH_INTEREST\",\n    \"14-1\": \"4 vezes com juros\",\n    \"15-0\": \"FIVE_INSTALMENT_WITH_INTEREST\",\n    \"15-1\": \"5 vezes com juros\",\n    \"16-0\": \"SIX_INSTALMENT_WITH_INTEREST\",\n    \"16-1\": \"6 vezes com juros\",\n    \"17-0\": \"SEVEN_INSTALMENT_WITH_INTEREST\",\n    \"17-1\": \"7 vezes com juros\",\n    \"18-0\": \"EIGHT_INSTALMENT_WITH_INTEREST\",\n    \"18-1\": \"8 vezes com juros\",\n    \"19-0\": \"NINE_INSTALMENT_WITH_INTEREST\",\n    \"19-1\": \"9 vezes com juros\",\n    \"20-0\": \"TEN_INSTALMENT_WITH_INTEREST\",\n    \"20-1\": \"10 vezes com juros\",\n    \"21-0\": \"ELEVEN_INSTALMENT_WITH_INTEREST\",\n    \"21-1\": \"11 vezes com juros\",\n    \"22-0\": \"TWELVE_INSTALMENT_WITH_INTEREST\",\n    \"22-1\": \"12 vezes com juros\"\n  },\n  \"cols\": 2,\n  \"rows\": 23\n}\n[/block]","excerpt":"","slug":"transaction-object","type":"basic","title":"TransactionObject","__v":0,"parentDoc":null,"childrenPages":[]}

TransactionObject


Esse objeto representa a sua transação que será enviada. Ela possui os seguintes atributos: [block:parameters] { "data": { "h-0": "Tipo", "h-1": "Nome", "h-2": "Função", "0-0": "String", "1-0": "String", "2-0": "String", "0-1": "amount", "0-2": "Valor da transação.", "1-1": "requestId", "1-2": "ID do pedido.", "2-1": "initiatorTransactionKey", "2-2": "Esse é um identificador da transação que aparece no portal. A SDK possui um padrão próprio para gerar um identificador único e usará esse padrão se um identificador não for definido. Caso você queira passar o seu próprio identificador, certifique-se que ele será sempre único para todos os seus clientes.", "3-0": "EmailClient", "3-1": "emailClient", "3-2": "Seu email de noReply para envio do comprovante eletrônico.", "4-0": "InstalmentTransactionEnum", "4-1": "instalmentTransactionEnum", "4-2": "Quantidade de parcelas. Mais informações na tabela abaixo.", "5-0": "TypeOfTransactionEnum", "5-1": "typeOfTransactionEnum", "5-2": "Tipo da transação (débito ou crédito).", "6-0": "PinpadObject", "6-1": "pinpadObject", "6-2": "O pinpad que você deseja passar a transação.", "7-0": "String", "7-1": "shortName", "7-2": "Nome de exibição no extrato do cliente (máximo de 14 caracteres)." }, "cols": 3, "rows": 8 } [/block] Para a TransactionObject, a quantidade de parcelas é passada por um enum chamado InstalmentTransactionEnum, segue a tabela com cada nome e valor: [block:parameters] { "data": { "h-0": "Nome", "h-1": "Valor referente", "0-0": "ONE_INSTALMENT", "1-0": "TWO_INSTALMENT_NO_INTEREST", "2-0": "THREE_INSTALMENT_NO_INTEREST", "3-0": "FOUR_INSTALMENT_NO_INTEREST", "4-0": "FIVE_INSTALMENT_NO_INTEREST", "5-0": "SIX_INSTALMENT_NO_INTEREST", "6-0": "SEVEN_INSTALMENT_NO_INTEREST", "7-0": "EIGHT_INSTALMENT_NO_INTEREST", "8-0": "NINE_INSTALMENT_NO_INTEREST", "9-0": "TEN_INSTALMENT_NO_INTEREST", "10-0": "ELEVEN_INSTALMENT_NO_INTEREST", "11-0": "TWELVE_INSTALMENT_NO_INTEREST", "0-1": "À vista", "1-1": "2 vezes sem juros", "2-1": "3 vezes sem juros", "3-1": "4 vezes sem juros", "4-1": "5 vezes sem juros", "5-1": "6 vezes sem juros", "6-1": "7 vezes sem juros", "7-1": "8 vezes sem juros", "8-1": "9 vezes sem juros", "9-1": "10 vezes sem juros", "10-1": "11 vezes sem juros", "11-1": "12 vezes sem juros", "12-0": "TWO_INSTALMENT_WITH_INTEREST", "12-1": "2 vezes com juros", "13-0": "THREE_INSTALMENT_WITH_INTEREST", "13-1": "3 vezes com juros", "14-0": "FOUR_INSTALMENT_WITH_INTEREST", "14-1": "4 vezes com juros", "15-0": "FIVE_INSTALMENT_WITH_INTEREST", "15-1": "5 vezes com juros", "16-0": "SIX_INSTALMENT_WITH_INTEREST", "16-1": "6 vezes com juros", "17-0": "SEVEN_INSTALMENT_WITH_INTEREST", "17-1": "7 vezes com juros", "18-0": "EIGHT_INSTALMENT_WITH_INTEREST", "18-1": "8 vezes com juros", "19-0": "NINE_INSTALMENT_WITH_INTEREST", "19-1": "9 vezes com juros", "20-0": "TEN_INSTALMENT_WITH_INTEREST", "20-1": "10 vezes com juros", "21-0": "ELEVEN_INSTALMENT_WITH_INTEREST", "21-1": "11 vezes com juros", "22-0": "TWELVE_INSTALMENT_WITH_INTEREST", "22-1": "12 vezes com juros" }, "cols": 2, "rows": 23 } [/block]
Esse objeto representa a sua transação que será enviada. Ela possui os seguintes atributos: [block:parameters] { "data": { "h-0": "Tipo", "h-1": "Nome", "h-2": "Função", "0-0": "String", "1-0": "String", "2-0": "String", "0-1": "amount", "0-2": "Valor da transação.", "1-1": "requestId", "1-2": "ID do pedido.", "2-1": "initiatorTransactionKey", "2-2": "Esse é um identificador da transação que aparece no portal. A SDK possui um padrão próprio para gerar um identificador único e usará esse padrão se um identificador não for definido. Caso você queira passar o seu próprio identificador, certifique-se que ele será sempre único para todos os seus clientes.", "3-0": "EmailClient", "3-1": "emailClient", "3-2": "Seu email de noReply para envio do comprovante eletrônico.", "4-0": "InstalmentTransactionEnum", "4-1": "instalmentTransactionEnum", "4-2": "Quantidade de parcelas. Mais informações na tabela abaixo.", "5-0": "TypeOfTransactionEnum", "5-1": "typeOfTransactionEnum", "5-2": "Tipo da transação (débito ou crédito).", "6-0": "PinpadObject", "6-1": "pinpadObject", "6-2": "O pinpad que você deseja passar a transação.", "7-0": "String", "7-1": "shortName", "7-2": "Nome de exibição no extrato do cliente (máximo de 14 caracteres)." }, "cols": 3, "rows": 8 } [/block] Para a TransactionObject, a quantidade de parcelas é passada por um enum chamado InstalmentTransactionEnum, segue a tabela com cada nome e valor: [block:parameters] { "data": { "h-0": "Nome", "h-1": "Valor referente", "0-0": "ONE_INSTALMENT", "1-0": "TWO_INSTALMENT_NO_INTEREST", "2-0": "THREE_INSTALMENT_NO_INTEREST", "3-0": "FOUR_INSTALMENT_NO_INTEREST", "4-0": "FIVE_INSTALMENT_NO_INTEREST", "5-0": "SIX_INSTALMENT_NO_INTEREST", "6-0": "SEVEN_INSTALMENT_NO_INTEREST", "7-0": "EIGHT_INSTALMENT_NO_INTEREST", "8-0": "NINE_INSTALMENT_NO_INTEREST", "9-0": "TEN_INSTALMENT_NO_INTEREST", "10-0": "ELEVEN_INSTALMENT_NO_INTEREST", "11-0": "TWELVE_INSTALMENT_NO_INTEREST", "0-1": "À vista", "1-1": "2 vezes sem juros", "2-1": "3 vezes sem juros", "3-1": "4 vezes sem juros", "4-1": "5 vezes sem juros", "5-1": "6 vezes sem juros", "6-1": "7 vezes sem juros", "7-1": "8 vezes sem juros", "8-1": "9 vezes sem juros", "9-1": "10 vezes sem juros", "10-1": "11 vezes sem juros", "11-1": "12 vezes sem juros", "12-0": "TWO_INSTALMENT_WITH_INTEREST", "12-1": "2 vezes com juros", "13-0": "THREE_INSTALMENT_WITH_INTEREST", "13-1": "3 vezes com juros", "14-0": "FOUR_INSTALMENT_WITH_INTEREST", "14-1": "4 vezes com juros", "15-0": "FIVE_INSTALMENT_WITH_INTEREST", "15-1": "5 vezes com juros", "16-0": "SIX_INSTALMENT_WITH_INTEREST", "16-1": "6 vezes com juros", "17-0": "SEVEN_INSTALMENT_WITH_INTEREST", "17-1": "7 vezes com juros", "18-0": "EIGHT_INSTALMENT_WITH_INTEREST", "18-1": "8 vezes com juros", "19-0": "NINE_INSTALMENT_WITH_INTEREST", "19-1": "9 vezes com juros", "20-0": "TEN_INSTALMENT_WITH_INTEREST", "20-1": "10 vezes com juros", "21-0": "ELEVEN_INSTALMENT_WITH_INTEREST", "21-1": "11 vezes com juros", "22-0": "TWELVE_INSTALMENT_WITH_INTEREST", "22-1": "12 vezes com juros" }, "cols": 2, "rows": 23 } [/block]
{"_id":"5aac0ce091cb63004de5ecf5","project":"58403d83c0507319000634ed","version":"58403d83c0507319000634f0","category":"5aabfd4591cb63004de5eab6","user":"59de082aed35e800383f94b6","updates":[],"next":{"pages":[],"description":""},"createdAt":"2018-03-16T18:28:48.687Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"settings":"","results":{"codes":[{"language":"json","code":"{}","name":"","status":200},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":""},"isReference":false,"order":6,"body":"Atributos de um objeto do tipo TransactionDAO\n[block:parameters]\n{\n  \"data\": {\n    \"h-0\": \"Campo\",\n    \"h-1\": \"Descrição\",\n    \"0-0\": \"amount\",\n    \"1-0\": \"instalmentAmount\",\n    \"2-0\": \"balance\",\n    \"h-2\": \"Descrição\",\n    \"3-0\": \"instalmentType\",\n    \"4-0\": \"aid\",\n    \"5-0\": \"arqc\",\n    \"6-0\": \"type\",\n    \"7-0\": \"typeString\",\n    \"8-0\": \"status\",\n    \"9-0\": \"statusString\",\n    \"10-0\": \"date\",\n    \"11-0\": \"dateString\",\n    \"12-0\": \"receiptTransactionKey\",\n    \"13-0\": \"reference\",\n    \"14-0\": \"pan\",\n    \"15-0\": \"cardBrand\",\n    \"16-0\": \"cardHolderName\",\n    \"17-0\": \"authorizationCode\",\n    \"18-0\": \"initiatorTransactionKey\",\n    \"19-0\": \"shortName\",\n    \"20-0\": \"merchant\",\n    \"21-0\": \"pinpad\",\n    \"21-1\": \"Pinpad que passou a transação\",\n    \"20-1\": \"Lojista que passou a transação\",\n    \"19-1\": \"Nome customizado exibido na fatura (se não for definido será null)\\nArmazena em banco opção setada no campo shortName do TransactionObject\",\n    \"18-1\": \"Identificação da transação\",\n    \"17-1\": \"Stone ID\",\n    \"16-1\": \"Nome do portador do cartão\",\n    \"15-1\": \"Bandeira do cartão\",\n    \"14-1\": \"4 últimos número do cartão\",\n    \"13-1\": \"Referencia da transação\",\n    \"12-1\": \"ID da transação\",\n    \"11-1\": \"String que representa a propriedade date\",\n    \"10-1\": \"Data da transação\",\n    \"9-1\": \"String que representa a propriedade status\",\n    \"8-1\": \"Aprovada, cancelada, negada...\",\n    \"7-1\": \"String que representa a propriedade type\",\n    \"6-1\": \"Débito ou crédito\",\n    \"5-1\": \"Código ARQC da transação\",\n    \"4-1\": \"Código AID da transação\",\n    \"3-1\": \"Tipo de parcelamento da transação\",\n    \"2-1\": \"Saldo do voucher (ex.: Ticket, Sodexo)\",\n    \"1-1\": \"Número de parcelas da transação\",\n    \"0-1\": \"Valor da transação no formato de centavos (ex: 10,00 vai ser 1000. Basta multiplicar por 0.01 para obter o valor real.)\",\n    \"22-0\": \"subMerchantCategoryCode\",\n    \"22-1\": \"Edita o mcc do lojista que está efetuando a transação\",\n    \"23-0\": \"subMerchantAddress\",\n    \"23-1\": \"Edita o endereço do lojista que está efetuando a transação\",\n    \"24-0\": \"capture\",\n    \"24-1\": \"Armazena em banco opção setada no campo capture do TransactionObject\"\n  },\n  \"cols\": 2,\n  \"rows\": 25\n}\n[/block]","excerpt":"","slug":"transaction-dao","type":"basic","title":"TransactionDao","__v":0,"parentDoc":null,"childrenPages":[]}

TransactionDao


Atributos de um objeto do tipo TransactionDAO [block:parameters] { "data": { "h-0": "Campo", "h-1": "Descrição", "0-0": "amount", "1-0": "instalmentAmount", "2-0": "balance", "h-2": "Descrição", "3-0": "instalmentType", "4-0": "aid", "5-0": "arqc", "6-0": "type", "7-0": "typeString", "8-0": "status", "9-0": "statusString", "10-0": "date", "11-0": "dateString", "12-0": "receiptTransactionKey", "13-0": "reference", "14-0": "pan", "15-0": "cardBrand", "16-0": "cardHolderName", "17-0": "authorizationCode", "18-0": "initiatorTransactionKey", "19-0": "shortName", "20-0": "merchant", "21-0": "pinpad", "21-1": "Pinpad que passou a transação", "20-1": "Lojista que passou a transação", "19-1": "Nome customizado exibido na fatura (se não for definido será null)\nArmazena em banco opção setada no campo shortName do TransactionObject", "18-1": "Identificação da transação", "17-1": "Stone ID", "16-1": "Nome do portador do cartão", "15-1": "Bandeira do cartão", "14-1": "4 últimos número do cartão", "13-1": "Referencia da transação", "12-1": "ID da transação", "11-1": "String que representa a propriedade date", "10-1": "Data da transação", "9-1": "String que representa a propriedade status", "8-1": "Aprovada, cancelada, negada...", "7-1": "String que representa a propriedade type", "6-1": "Débito ou crédito", "5-1": "Código ARQC da transação", "4-1": "Código AID da transação", "3-1": "Tipo de parcelamento da transação", "2-1": "Saldo do voucher (ex.: Ticket, Sodexo)", "1-1": "Número de parcelas da transação", "0-1": "Valor da transação no formato de centavos (ex: 10,00 vai ser 1000. Basta multiplicar por 0.01 para obter o valor real.)", "22-0": "subMerchantCategoryCode", "22-1": "Edita o mcc do lojista que está efetuando a transação", "23-0": "subMerchantAddress", "23-1": "Edita o endereço do lojista que está efetuando a transação", "24-0": "capture", "24-1": "Armazena em banco opção setada no campo capture do TransactionObject" }, "cols": 2, "rows": 25 } [/block]
Atributos de um objeto do tipo TransactionDAO [block:parameters] { "data": { "h-0": "Campo", "h-1": "Descrição", "0-0": "amount", "1-0": "instalmentAmount", "2-0": "balance", "h-2": "Descrição", "3-0": "instalmentType", "4-0": "aid", "5-0": "arqc", "6-0": "type", "7-0": "typeString", "8-0": "status", "9-0": "statusString", "10-0": "date", "11-0": "dateString", "12-0": "receiptTransactionKey", "13-0": "reference", "14-0": "pan", "15-0": "cardBrand", "16-0": "cardHolderName", "17-0": "authorizationCode", "18-0": "initiatorTransactionKey", "19-0": "shortName", "20-0": "merchant", "21-0": "pinpad", "21-1": "Pinpad que passou a transação", "20-1": "Lojista que passou a transação", "19-1": "Nome customizado exibido na fatura (se não for definido será null)\nArmazena em banco opção setada no campo shortName do TransactionObject", "18-1": "Identificação da transação", "17-1": "Stone ID", "16-1": "Nome do portador do cartão", "15-1": "Bandeira do cartão", "14-1": "4 últimos número do cartão", "13-1": "Referencia da transação", "12-1": "ID da transação", "11-1": "String que representa a propriedade date", "10-1": "Data da transação", "9-1": "String que representa a propriedade status", "8-1": "Aprovada, cancelada, negada...", "7-1": "String que representa a propriedade type", "6-1": "Débito ou crédito", "5-1": "Código ARQC da transação", "4-1": "Código AID da transação", "3-1": "Tipo de parcelamento da transação", "2-1": "Saldo do voucher (ex.: Ticket, Sodexo)", "1-1": "Número de parcelas da transação", "0-1": "Valor da transação no formato de centavos (ex: 10,00 vai ser 1000. Basta multiplicar por 0.01 para obter o valor real.)", "22-0": "subMerchantCategoryCode", "22-1": "Edita o mcc do lojista que está efetuando a transação", "23-0": "subMerchantAddress", "23-1": "Edita o endereço do lojista que está efetuando a transação", "24-0": "capture", "24-1": "Armazena em banco opção setada no campo capture do TransactionObject" }, "cols": 2, "rows": 25 } [/block]
{"_id":"58582e37b0fe4f2500259b5f","category":"5aabfd4591cb63004de5eab6","hidden":false,"link_external":false,"project":"58403d83c0507319000634ed","updates":[],"title":"Status de comandos","type":"basic","user":"57ea79f61780cd170064f273","githubsync":"","order":7,"slug":"status-de-comandos-1","sync_unique":"","version":"58403d83c0507319000634f0","__v":0,"body":"[block:parameters]\n{\n  \"data\": {\n    \"h-0\": \"Nome\",\n    \"h-1\": \"Valor\",\n    \"h-2\": \"Significado\",\n    \"0-0\": \"COMMAND_OK\",\n    \"0-1\": \"0\",\n    \"0-2\": \"Comando executado com sucesso.\",\n    \"1-0\": \"NO_SECURE_COMMUNICATION\",\n    \"1-1\": \"3\",\n    \"1-2\": \"Não foi estabelecida uma conexão segura com o Pinpad.\",\n    \"2-0\": \"PRESS_1\",\n    \"3-0\": \"PRESS_2\",\n    \"4-0\": \"PRESS_3\",\n    \"5-0\": \"PRESS_4\",\n    \"6-0\": \"PRESS_BACKSPACE\",\n    \"7-0\": \"DEC_ERROR\",\n    \"8-0\": \"INVALID_CALL\",\n    \"9-0\": \"INVALID_PARAMETER\",\n    \"10-0\": \"TIME_OUT\",\n    \"11-0\": \"OPERATION_CANCELLED_BY_USER\",\n    \"12-0\": \"NOT_OPEN\",\n    \"13-0\": \"PARAMETER_NOT_FOUND\",\n    \"14-0\": \"DIFFERENT_TABLES_EMV\",\n    \"15-0\": \"TABLES_UPLOAD_ERROR\",\n    \"16-0\": \"PINPAD_INTERNAL_ERROR\",\n    \"17-0\": \"MAGNETIC_CARD_ERROR\",\n    \"18-0\": \"MK_DUKPT_NOT_FOUND\",\n    \"19-0\": \"NO_ICC_PRESENCE\",\n    \"20-0\": \"PINPAD_CANT_PROCESS_PIN_CAPTURE\",\n    \"21-0\": \"RESPONSE_DATA_LIMIT_EXCEEDED\",\n    \"22-0\": \"SAM_NOT_FOUND\",\n    \"23-0\": \"ICC_NOT_FOUND\",\n    \"24-0\": \"COMMUNICATION_ICC_OR_CTLS_ERROR\",\n    \"25-0\": \"INVALID_CARD\",\n    \"26-0\": \"ICC_WITH_PROBLEM\",\n    \"27-0\": \"INVALID_DATAS_IN_ICC\",\n    \"28-0\": \"ICC_EMV_WITHOUT_AVAILABLE_APPLICATION\",\n    \"29-0\": \"SELECTED_APPLICATION_CANT_BE_USED\",\n    \"30-0\": \"HIGH_ICC_EMV_ERROR\",\n    \"31-0\": \"MORE_THEN_ONE_CTLS_DETECTED\",\n    \"32-0\": \"COMMUNICATION_BETWEEN_TERMINAL_CTLS_ERROR\",\n    \"33-0\": \"INVALID_CTLS\",\n    \"34-0\": \"CTLS_WITH_PROBLEM\",\n    \"35-0\": \"CTLS_WITHOUT_APPLICATION_AVAILABLE\",\n    \"36-0\": \"APPLICATION_SELECTED_CANT_BE_USED\",\n    \"37-0\": \"FILE_NOT_FOUND\",\n    \"38-0\": \"FILE_FORMAT_ERROR\",\n    \"39-0\": \"FILE_UPLOAD_ERROR\",\n    \"40-0\": \"COMMAND_CONSTRUCTOR_ERROR\",\n    \"2-2\": \"Pressione F1\",\n    \"3-2\": \"Pressione F2\",\n    \"4-2\": \"Pressione F3\",\n    \"5-2\": \"Pressione F4\",\n    \"6-2\": \"Pressione Espaço\",\n    \"7-2\": \"Erro de decodificação\",\n    \"8-2\": \"Chamada inválida\",\n    \"9-2\": \"Parâmetro inválido\",\n    \"10-2\": \"Time out\",\n    \"11-2\": \"Operação cancelada pelo usuário.\",\n    \"12-2\": \"Comando OPN não enviado.\",\n    \"13-2\": \"Falta de um parâmetro mandatório.\",\n    \"14-2\": \"Tabelas AID e CAPK diferentes.\",\n    \"15-2\": \"Erro na carga de tabelas.\",\n    \"16-2\": \"Erro interno do Pinpad.\",\n    \"17-2\": \"Erro na leitura da tarja.\",\n    \"18-2\": \"DUKPT não encontrada.\",\n    \"19-2\": \"Não há presença de ICC.\",\n    \"20-2\": \"O pinpad não conseguiu processar a captura da senha.\",\n    \"21-2\": \"Resposta excedeu o limite de informações.\",\n    \"22-2\": \"SAM não encontrado.\",\n    \"23-2\": \"ICC não encontrado.\",\n    \"24-2\": \"Erro de comunicação ICC ou CTLS.\",\n    \"25-2\": \"Cartão inválido.\",\n    \"26-2\": \"Problemas no ICC.\",\n    \"27-2\": \"Informações inválidas no ICC.\",\n    \"28-2\": \"ICC sem aplicação disponível.\",\n    \"29-2\": \"Aplicação selecionada não pode ser usada.\",\n    \"30-2\": \"Alto erro no ICC.\",\n    \"31-2\": \"Mais de um CTLS detectado.\",\n    \"32-2\": \"Erro na comunicação com CTLS e o Pinpad.\",\n    \"33-2\": \"CTLS inválido.\",\n    \"34-2\": \"CTLS com problema.\",\n    \"35-2\": \"CTLS sem aplicação disponível.\",\n    \"36-2\": \"Aplicação selecionada não pode ser usada.\",\n    \"37-2\": \"Arquivo não encontrado.\",\n    \"38-2\": \"Erro no formato do arquivo.\",\n    \"39-2\": \"Erro na carga do arquivo.\",\n    \"40-2\": \"Erro no construtor da resposta.\",\n    \"2-1\": \"4\",\n    \"3-1\": \"5\",\n    \"4-1\": \"6\",\n    \"5-1\": \"7\",\n    \"6-1\": \"8\",\n    \"7-1\": \"9\",\n    \"8-1\": \"10\",\n    \"9-1\": \"11\",\n    \"10-1\": \"12\",\n    \"11-1\": \"13\",\n    \"12-1\": \"15\",\n    \"13-1\": \"19\",\n    \"14-1\": \"20\",\n    \"15-1\": \"21\",\n    \"16-1\": \"40\",\n    \"17-1\": \"41\",\n    \"18-1\": \"42\",\n    \"19-1\": \"43\",\n    \"20-1\": \"44\",\n    \"21-1\": \"45\",\n    \"22-1\": \"51\",\n    \"23-1\": \"60\",\n    \"24-1\": \"61\",\n    \"25-1\": \"67\",\n    \"26-1\": \"68\",\n    \"27-1\": \"69\",\n    \"28-1\": \"70\",\n    \"29-1\": \"71\",\n    \"30-1\": \"76\",\n    \"31-1\": \"80\",\n    \"32-1\": \"81\",\n    \"33-1\": \"82\",\n    \"34-1\": \"83\",\n    \"35-1\": \"84\",\n    \"36-1\": \"85\",\n    \"37-1\": \"100\",\n    \"38-1\": \"101\",\n    \"39-1\": \"102\",\n    \"40-1\": \"999\"\n  },\n  \"cols\": 3,\n  \"rows\": 41\n}\n[/block]","excerpt":"","link_url":"","next":{"pages":[],"description":""},"api":{"params":[],"url":"","results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","auth":"required"},"createdAt":"2016-12-19T19:00:07.556Z","isReference":false,"parentDoc":null,"childrenPages":[]}

Status de comandos


[block:parameters] { "data": { "h-0": "Nome", "h-1": "Valor", "h-2": "Significado", "0-0": "COMMAND_OK", "0-1": "0", "0-2": "Comando executado com sucesso.", "1-0": "NO_SECURE_COMMUNICATION", "1-1": "3", "1-2": "Não foi estabelecida uma conexão segura com o Pinpad.", "2-0": "PRESS_1", "3-0": "PRESS_2", "4-0": "PRESS_3", "5-0": "PRESS_4", "6-0": "PRESS_BACKSPACE", "7-0": "DEC_ERROR", "8-0": "INVALID_CALL", "9-0": "INVALID_PARAMETER", "10-0": "TIME_OUT", "11-0": "OPERATION_CANCELLED_BY_USER", "12-0": "NOT_OPEN", "13-0": "PARAMETER_NOT_FOUND", "14-0": "DIFFERENT_TABLES_EMV", "15-0": "TABLES_UPLOAD_ERROR", "16-0": "PINPAD_INTERNAL_ERROR", "17-0": "MAGNETIC_CARD_ERROR", "18-0": "MK_DUKPT_NOT_FOUND", "19-0": "NO_ICC_PRESENCE", "20-0": "PINPAD_CANT_PROCESS_PIN_CAPTURE", "21-0": "RESPONSE_DATA_LIMIT_EXCEEDED", "22-0": "SAM_NOT_FOUND", "23-0": "ICC_NOT_FOUND", "24-0": "COMMUNICATION_ICC_OR_CTLS_ERROR", "25-0": "INVALID_CARD", "26-0": "ICC_WITH_PROBLEM", "27-0": "INVALID_DATAS_IN_ICC", "28-0": "ICC_EMV_WITHOUT_AVAILABLE_APPLICATION", "29-0": "SELECTED_APPLICATION_CANT_BE_USED", "30-0": "HIGH_ICC_EMV_ERROR", "31-0": "MORE_THEN_ONE_CTLS_DETECTED", "32-0": "COMMUNICATION_BETWEEN_TERMINAL_CTLS_ERROR", "33-0": "INVALID_CTLS", "34-0": "CTLS_WITH_PROBLEM", "35-0": "CTLS_WITHOUT_APPLICATION_AVAILABLE", "36-0": "APPLICATION_SELECTED_CANT_BE_USED", "37-0": "FILE_NOT_FOUND", "38-0": "FILE_FORMAT_ERROR", "39-0": "FILE_UPLOAD_ERROR", "40-0": "COMMAND_CONSTRUCTOR_ERROR", "2-2": "Pressione F1", "3-2": "Pressione F2", "4-2": "Pressione F3", "5-2": "Pressione F4", "6-2": "Pressione Espaço", "7-2": "Erro de decodificação", "8-2": "Chamada inválida", "9-2": "Parâmetro inválido", "10-2": "Time out", "11-2": "Operação cancelada pelo usuário.", "12-2": "Comando OPN não enviado.", "13-2": "Falta de um parâmetro mandatório.", "14-2": "Tabelas AID e CAPK diferentes.", "15-2": "Erro na carga de tabelas.", "16-2": "Erro interno do Pinpad.", "17-2": "Erro na leitura da tarja.", "18-2": "DUKPT não encontrada.", "19-2": "Não há presença de ICC.", "20-2": "O pinpad não conseguiu processar a captura da senha.", "21-2": "Resposta excedeu o limite de informações.", "22-2": "SAM não encontrado.", "23-2": "ICC não encontrado.", "24-2": "Erro de comunicação ICC ou CTLS.", "25-2": "Cartão inválido.", "26-2": "Problemas no ICC.", "27-2": "Informações inválidas no ICC.", "28-2": "ICC sem aplicação disponível.", "29-2": "Aplicação selecionada não pode ser usada.", "30-2": "Alto erro no ICC.", "31-2": "Mais de um CTLS detectado.", "32-2": "Erro na comunicação com CTLS e o Pinpad.", "33-2": "CTLS inválido.", "34-2": "CTLS com problema.", "35-2": "CTLS sem aplicação disponível.", "36-2": "Aplicação selecionada não pode ser usada.", "37-2": "Arquivo não encontrado.", "38-2": "Erro no formato do arquivo.", "39-2": "Erro na carga do arquivo.", "40-2": "Erro no construtor da resposta.", "2-1": "4", "3-1": "5", "4-1": "6", "5-1": "7", "6-1": "8", "7-1": "9", "8-1": "10", "9-1": "11", "10-1": "12", "11-1": "13", "12-1": "15", "13-1": "19", "14-1": "20", "15-1": "21", "16-1": "40", "17-1": "41", "18-1": "42", "19-1": "43", "20-1": "44", "21-1": "45", "22-1": "51", "23-1": "60", "24-1": "61", "25-1": "67", "26-1": "68", "27-1": "69", "28-1": "70", "29-1": "71", "30-1": "76", "31-1": "80", "32-1": "81", "33-1": "82", "34-1": "83", "35-1": "84", "36-1": "85", "37-1": "100", "38-1": "101", "39-1": "102", "40-1": "999" }, "cols": 3, "rows": 41 } [/block]
[block:parameters] { "data": { "h-0": "Nome", "h-1": "Valor", "h-2": "Significado", "0-0": "COMMAND_OK", "0-1": "0", "0-2": "Comando executado com sucesso.", "1-0": "NO_SECURE_COMMUNICATION", "1-1": "3", "1-2": "Não foi estabelecida uma conexão segura com o Pinpad.", "2-0": "PRESS_1", "3-0": "PRESS_2", "4-0": "PRESS_3", "5-0": "PRESS_4", "6-0": "PRESS_BACKSPACE", "7-0": "DEC_ERROR", "8-0": "INVALID_CALL", "9-0": "INVALID_PARAMETER", "10-0": "TIME_OUT", "11-0": "OPERATION_CANCELLED_BY_USER", "12-0": "NOT_OPEN", "13-0": "PARAMETER_NOT_FOUND", "14-0": "DIFFERENT_TABLES_EMV", "15-0": "TABLES_UPLOAD_ERROR", "16-0": "PINPAD_INTERNAL_ERROR", "17-0": "MAGNETIC_CARD_ERROR", "18-0": "MK_DUKPT_NOT_FOUND", "19-0": "NO_ICC_PRESENCE", "20-0": "PINPAD_CANT_PROCESS_PIN_CAPTURE", "21-0": "RESPONSE_DATA_LIMIT_EXCEEDED", "22-0": "SAM_NOT_FOUND", "23-0": "ICC_NOT_FOUND", "24-0": "COMMUNICATION_ICC_OR_CTLS_ERROR", "25-0": "INVALID_CARD", "26-0": "ICC_WITH_PROBLEM", "27-0": "INVALID_DATAS_IN_ICC", "28-0": "ICC_EMV_WITHOUT_AVAILABLE_APPLICATION", "29-0": "SELECTED_APPLICATION_CANT_BE_USED", "30-0": "HIGH_ICC_EMV_ERROR", "31-0": "MORE_THEN_ONE_CTLS_DETECTED", "32-0": "COMMUNICATION_BETWEEN_TERMINAL_CTLS_ERROR", "33-0": "INVALID_CTLS", "34-0": "CTLS_WITH_PROBLEM", "35-0": "CTLS_WITHOUT_APPLICATION_AVAILABLE", "36-0": "APPLICATION_SELECTED_CANT_BE_USED", "37-0": "FILE_NOT_FOUND", "38-0": "FILE_FORMAT_ERROR", "39-0": "FILE_UPLOAD_ERROR", "40-0": "COMMAND_CONSTRUCTOR_ERROR", "2-2": "Pressione F1", "3-2": "Pressione F2", "4-2": "Pressione F3", "5-2": "Pressione F4", "6-2": "Pressione Espaço", "7-2": "Erro de decodificação", "8-2": "Chamada inválida", "9-2": "Parâmetro inválido", "10-2": "Time out", "11-2": "Operação cancelada pelo usuário.", "12-2": "Comando OPN não enviado.", "13-2": "Falta de um parâmetro mandatório.", "14-2": "Tabelas AID e CAPK diferentes.", "15-2": "Erro na carga de tabelas.", "16-2": "Erro interno do Pinpad.", "17-2": "Erro na leitura da tarja.", "18-2": "DUKPT não encontrada.", "19-2": "Não há presença de ICC.", "20-2": "O pinpad não conseguiu processar a captura da senha.", "21-2": "Resposta excedeu o limite de informações.", "22-2": "SAM não encontrado.", "23-2": "ICC não encontrado.", "24-2": "Erro de comunicação ICC ou CTLS.", "25-2": "Cartão inválido.", "26-2": "Problemas no ICC.", "27-2": "Informações inválidas no ICC.", "28-2": "ICC sem aplicação disponível.", "29-2": "Aplicação selecionada não pode ser usada.", "30-2": "Alto erro no ICC.", "31-2": "Mais de um CTLS detectado.", "32-2": "Erro na comunicação com CTLS e o Pinpad.", "33-2": "CTLS inválido.", "34-2": "CTLS com problema.", "35-2": "CTLS sem aplicação disponível.", "36-2": "Aplicação selecionada não pode ser usada.", "37-2": "Arquivo não encontrado.", "38-2": "Erro no formato do arquivo.", "39-2": "Erro na carga do arquivo.", "40-2": "Erro no construtor da resposta.", "2-1": "4", "3-1": "5", "4-1": "6", "5-1": "7", "6-1": "8", "7-1": "9", "8-1": "10", "9-1": "11", "10-1": "12", "11-1": "13", "12-1": "15", "13-1": "19", "14-1": "20", "15-1": "21", "16-1": "40", "17-1": "41", "18-1": "42", "19-1": "43", "20-1": "44", "21-1": "45", "22-1": "51", "23-1": "60", "24-1": "61", "25-1": "67", "26-1": "68", "27-1": "69", "28-1": "70", "29-1": "71", "30-1": "76", "31-1": "80", "32-1": "81", "33-1": "82", "34-1": "83", "35-1": "84", "36-1": "85", "37-1": "100", "38-1": "101", "39-1": "102", "40-1": "999" }, "cols": 3, "rows": 41 } [/block]
{"_id":"58582e45e286ba2500cca584","body":"[block:parameters]\n{\n  \"data\": {\n    \"h-0\": \"Nome\",\n    \"h-1\": \"Solução\",\n    \"0-0\": \"CONNECTION_NOT_FOUND\",\n    \"0-1\": \"Sem conexão com a internet, ligue a internet.\",\n    \"1-0\": \"DEVICE_NOT_COMPATIBLE\",\n    \"1-1\": \"Dispositivo bluetooth não possui a biblioteca compartilhada.\",\n    \"2-0\": \"UNEXPECTED_STATUS_COMMAND\",\n    \"2-1\": \"Status de um comando inexperado, tente novamente.\",\n    \"3-0\": \"INVALID_STONE_CODE_OR_UNKNOWN\",\n    \"3-1\": \"Um erro genérico.\",\n    \"4-0\": \"IO_ERROR_WITH_PINPAD\",\n    \"4-1\": \"Erro de leitura e escrita com o Pinpad.\",\n    \"5-0\": \"PINPAD_CONNECTION_NOT_FOUND\",\n    \"5-1\": \"Sem conexão com um Pinpad, conecte-se com um dispositivo.\",\n    \"6-0\": \"NO_ACTIVE_APPLICATION\",\n    \"6-1\": \"SDK não foi ativada. Chame o ActiveApplicationProvider.\",\n    \"7-0\": \"TABLES_NOT_FOUND\",\n    \"7-1\": \"Tabelas AID e CAPK não encontradas, chame o DownloadTablesProvider.\",\n    \"8-0\": \"UNKNOWN_TYPE_OF_USER\",\n    \"8-1\": \"Um tipo de usuário desconhecido, Usuário final ou Desenvolvedor (User ou Partner).\",\n    \"9-0\": \"INVALID_AMOUNT\",\n    \"9-1\": \"Valor inválido para passar a transação.\",\n    \"10-0\": \"NEED_LOAD_TABLES\",\n    \"10-1\": \"Chame o LoadTablesProvider para realizar a carga de tabelas.\",\n    \"11-0\": \"TIME_OUT\",\n    \"11-1\": \"Tempo expirado, tente novamente.\",\n    \"12-0\": \"OPERATION_CANCELLED_BY_USER\",\n    \"12-1\": \"Operação cancelada pelo usuário, provavelmente o botão X foi pressionado.\",\n    \"13-0\": \"CARD_REMOVED_BY_USER\",\n    \"13-1\": \"Cartão removido pelo usuário indevidamente.\",\n    \"14-0\": \"CANT_READ_CARD_HOLDER_INFORMATION\",\n    \"14-1\": \"Erro na leitura das informações do cartão, tente novamente.\",\n    \"15-0\": \"INVALID_TRANSACTION\",\n    \"15-1\": \"Transação inválida, talvez um cartão de crédito esteja passando uma transação de débito, ou viceversa.\",\n    \"16-0\": \"PASS_TARGE_WITH_CHIP\",\n    \"16-1\": \"Cartão de chip passou tarja.\",\n    \"17-0\": \"NULL_RESPONSE\",\n    \"17-1\": \"Não houve resposta do Pinpad.\",\n    \"18-0\": \"ERROR_RESPONSE_COMMAND\",\n    \"18-1\": \"Erro na resposta do comando.\",\n    \"19-0\": \"ACCEPTOR_REJECTION\",\n    \"19-1\": \"Transação rejeitada pelo autorizador.\",\n    \"20-0\": \"EMAIL_MESSAGE_ERROR\",\n    \"20-1\": \"Erro no envio do email.\",\n    \"21-0\": \"INVALID_EMAIL_CLIENT\",\n    \"21-1\": \"Email do cliente é inválido.\",\n    \"22-0\": \"INVALID_STONE_CODE_OR_UNKNOWN\",\n    \"22-1\": \"StoneCode foi digitado de forma errada ou não existe\",\n    \"23-0\": \"TRANSACTION_NOT_FOUND\",\n    \"23-1\": \"Não se pode cancelar uma transação que não foi aprovada.\",\n    \"24-0\": \"SWIPE_INCORRECT, TOO_MANY_CARDS\",\n    \"25-0\": \"UNKNOWN_ERROR, INTERNAL_ERROR,\"\n  },\n  \"cols\": 2,\n  \"rows\": 26\n}\n[/block]\n\n[block:api-header]\n{\n  \"title\": \"Erros de impressão do POS\"\n}\n[/block]\n\n[block:parameters]\n{\n  \"data\": {\n    \"0-0\": \"PRINTER_PRINT_ERROR\",\n    \"1-0\": \"PRINTER_BUSY_ERROR\",\n    \"2-0\": \"PRINTER_INIT_ERROR\",\n    \"3-0\": \"PRINTER_LOW_ENERGY_ERROR\",\n    \"4-0\": \"PRINTER_OUT_OF_PAPER_ERROR\",\n    \"5-0\": \"PRINTER_UNSUPPORTED_FORMAT_ERROR\"\n  },\n  \"cols\": 2,\n  \"rows\": 6\n}\n[/block]\n\n[block:api-header]\n{\n  \"title\": \"Erros no PEDIDO POS ANDROID\"\n}\n[/block]\n\n[block:parameters]\n{\n  \"data\": {\n    \"0-0\": \"PED_PASS_KEY_ERROR\",\n    \"1-0\": \"PED_PASS_USER_CANCELED_ERROR\",\n    \"2-0\": \"PED_PASS_NO_PIN_INPUT_ERROR\",\n    \"3-0\": \"PED_PASS_TIMEOUT_ERROR\"\n  },\n  \"cols\": 2,\n  \"rows\": 4\n}\n[/block]\n\n[block:api-header]\n{\n  \"title\": \"Erros na TRANSAÇÃO POS ANDROID\"\n}\n[/block]\n\n[block:parameters]\n{\n  \"data\": {\n    \"0-0\": \"TRANS_APP_BLOCKED_ERROR\",\n    \"5-0\": \"TRANS_WRONG_TRANS_TYPE_ERROR\",\n    \"4-0\": \"TRANS_NO_TRANS_TYPE_ERROR,\",\n    \"3-0\": \"TRANS_PASS_MAG_BUT_IS_ICC_ERROR\",\n    \"2-0\": \"TRANS_INVALID_AMOUNT_ERROR\",\n    \"1-0\": \"TRANS_SELECT_TYPE_USER_CANCELED_ERROR\"\n  },\n  \"cols\": 2,\n  \"rows\": 6\n}\n[/block]\n\n[block:api-header]\n{\n  \"title\": \"Erro no CARTÃO - POS ANDROID\"\n}\n[/block]\n\n[block:parameters]\n{\n  \"data\": {\n    \"0-0\": \"CARD_ERROR\",\n    \"6-0\": \"TRANSACTION_OBJECT_NULL_ERROR\",\n    \"5-0\": \"CARD_UNSUPPORTED_ERROR\",\n    \"4-0\": \"CARD_REMOVED_ERROR\",\n    \"3-0\": \"CARD_READ_CANCELED_ERROR\",\n    \"2-0\": \"CARD_READ_TIMEOUT_ERROR\",\n    \"1-0\": \"CARD_READ_ERROR\"\n  },\n  \"cols\": 2,\n  \"rows\": 7\n}\n[/block]","hidden":false,"__v":0,"isReference":false,"parentDoc":null,"title":"Status do provider","updates":[],"user":"57ea79f61780cd170064f273","version":"58403d83c0507319000634f0","api":{"settings":"","auth":"required","params":[],"url":"","results":{"codes":[{"name":"","status":200,"language":"json","code":"{}"},{"status":400,"language":"json","code":"{}","name":""}]}},"excerpt":"","githubsync":"","project":"58403d83c0507319000634ed","sync_unique":"","category":"5aabfd4591cb63004de5eab6","createdAt":"2016-12-19T19:00:21.934Z","link_external":false,"link_url":"","next":{"pages":[],"description":""},"order":8,"slug":"status-do-provider-1","type":"basic","childrenPages":[]}

Status do provider


[block:parameters] { "data": { "h-0": "Nome", "h-1": "Solução", "0-0": "CONNECTION_NOT_FOUND", "0-1": "Sem conexão com a internet, ligue a internet.", "1-0": "DEVICE_NOT_COMPATIBLE", "1-1": "Dispositivo bluetooth não possui a biblioteca compartilhada.", "2-0": "UNEXPECTED_STATUS_COMMAND", "2-1": "Status de um comando inexperado, tente novamente.", "3-0": "INVALID_STONE_CODE_OR_UNKNOWN", "3-1": "Um erro genérico.", "4-0": "IO_ERROR_WITH_PINPAD", "4-1": "Erro de leitura e escrita com o Pinpad.", "5-0": "PINPAD_CONNECTION_NOT_FOUND", "5-1": "Sem conexão com um Pinpad, conecte-se com um dispositivo.", "6-0": "NO_ACTIVE_APPLICATION", "6-1": "SDK não foi ativada. Chame o ActiveApplicationProvider.", "7-0": "TABLES_NOT_FOUND", "7-1": "Tabelas AID e CAPK não encontradas, chame o DownloadTablesProvider.", "8-0": "UNKNOWN_TYPE_OF_USER", "8-1": "Um tipo de usuário desconhecido, Usuário final ou Desenvolvedor (User ou Partner).", "9-0": "INVALID_AMOUNT", "9-1": "Valor inválido para passar a transação.", "10-0": "NEED_LOAD_TABLES", "10-1": "Chame o LoadTablesProvider para realizar a carga de tabelas.", "11-0": "TIME_OUT", "11-1": "Tempo expirado, tente novamente.", "12-0": "OPERATION_CANCELLED_BY_USER", "12-1": "Operação cancelada pelo usuário, provavelmente o botão X foi pressionado.", "13-0": "CARD_REMOVED_BY_USER", "13-1": "Cartão removido pelo usuário indevidamente.", "14-0": "CANT_READ_CARD_HOLDER_INFORMATION", "14-1": "Erro na leitura das informações do cartão, tente novamente.", "15-0": "INVALID_TRANSACTION", "15-1": "Transação inválida, talvez um cartão de crédito esteja passando uma transação de débito, ou viceversa.", "16-0": "PASS_TARGE_WITH_CHIP", "16-1": "Cartão de chip passou tarja.", "17-0": "NULL_RESPONSE", "17-1": "Não houve resposta do Pinpad.", "18-0": "ERROR_RESPONSE_COMMAND", "18-1": "Erro na resposta do comando.", "19-0": "ACCEPTOR_REJECTION", "19-1": "Transação rejeitada pelo autorizador.", "20-0": "EMAIL_MESSAGE_ERROR", "20-1": "Erro no envio do email.", "21-0": "INVALID_EMAIL_CLIENT", "21-1": "Email do cliente é inválido.", "22-0": "INVALID_STONE_CODE_OR_UNKNOWN", "22-1": "StoneCode foi digitado de forma errada ou não existe", "23-0": "TRANSACTION_NOT_FOUND", "23-1": "Não se pode cancelar uma transação que não foi aprovada.", "24-0": "SWIPE_INCORRECT, TOO_MANY_CARDS", "25-0": "UNKNOWN_ERROR, INTERNAL_ERROR," }, "cols": 2, "rows": 26 } [/block] [block:api-header] { "title": "Erros de impressão do POS" } [/block] [block:parameters] { "data": { "0-0": "PRINTER_PRINT_ERROR", "1-0": "PRINTER_BUSY_ERROR", "2-0": "PRINTER_INIT_ERROR", "3-0": "PRINTER_LOW_ENERGY_ERROR", "4-0": "PRINTER_OUT_OF_PAPER_ERROR", "5-0": "PRINTER_UNSUPPORTED_FORMAT_ERROR" }, "cols": 2, "rows": 6 } [/block] [block:api-header] { "title": "Erros no PEDIDO POS ANDROID" } [/block] [block:parameters] { "data": { "0-0": "PED_PASS_KEY_ERROR", "1-0": "PED_PASS_USER_CANCELED_ERROR", "2-0": "PED_PASS_NO_PIN_INPUT_ERROR", "3-0": "PED_PASS_TIMEOUT_ERROR" }, "cols": 2, "rows": 4 } [/block] [block:api-header] { "title": "Erros na TRANSAÇÃO POS ANDROID" } [/block] [block:parameters] { "data": { "0-0": "TRANS_APP_BLOCKED_ERROR", "5-0": "TRANS_WRONG_TRANS_TYPE_ERROR", "4-0": "TRANS_NO_TRANS_TYPE_ERROR,", "3-0": "TRANS_PASS_MAG_BUT_IS_ICC_ERROR", "2-0": "TRANS_INVALID_AMOUNT_ERROR", "1-0": "TRANS_SELECT_TYPE_USER_CANCELED_ERROR" }, "cols": 2, "rows": 6 } [/block] [block:api-header] { "title": "Erro no CARTÃO - POS ANDROID" } [/block] [block:parameters] { "data": { "0-0": "CARD_ERROR", "6-0": "TRANSACTION_OBJECT_NULL_ERROR", "5-0": "CARD_UNSUPPORTED_ERROR", "4-0": "CARD_REMOVED_ERROR", "3-0": "CARD_READ_CANCELED_ERROR", "2-0": "CARD_READ_TIMEOUT_ERROR", "1-0": "CARD_READ_ERROR" }, "cols": 2, "rows": 7 } [/block]
[block:parameters] { "data": { "h-0": "Nome", "h-1": "Solução", "0-0": "CONNECTION_NOT_FOUND", "0-1": "Sem conexão com a internet, ligue a internet.", "1-0": "DEVICE_NOT_COMPATIBLE", "1-1": "Dispositivo bluetooth não possui a biblioteca compartilhada.", "2-0": "UNEXPECTED_STATUS_COMMAND", "2-1": "Status de um comando inexperado, tente novamente.", "3-0": "INVALID_STONE_CODE_OR_UNKNOWN", "3-1": "Um erro genérico.", "4-0": "IO_ERROR_WITH_PINPAD", "4-1": "Erro de leitura e escrita com o Pinpad.", "5-0": "PINPAD_CONNECTION_NOT_FOUND", "5-1": "Sem conexão com um Pinpad, conecte-se com um dispositivo.", "6-0": "NO_ACTIVE_APPLICATION", "6-1": "SDK não foi ativada. Chame o ActiveApplicationProvider.", "7-0": "TABLES_NOT_FOUND", "7-1": "Tabelas AID e CAPK não encontradas, chame o DownloadTablesProvider.", "8-0": "UNKNOWN_TYPE_OF_USER", "8-1": "Um tipo de usuário desconhecido, Usuário final ou Desenvolvedor (User ou Partner).", "9-0": "INVALID_AMOUNT", "9-1": "Valor inválido para passar a transação.", "10-0": "NEED_LOAD_TABLES", "10-1": "Chame o LoadTablesProvider para realizar a carga de tabelas.", "11-0": "TIME_OUT", "11-1": "Tempo expirado, tente novamente.", "12-0": "OPERATION_CANCELLED_BY_USER", "12-1": "Operação cancelada pelo usuário, provavelmente o botão X foi pressionado.", "13-0": "CARD_REMOVED_BY_USER", "13-1": "Cartão removido pelo usuário indevidamente.", "14-0": "CANT_READ_CARD_HOLDER_INFORMATION", "14-1": "Erro na leitura das informações do cartão, tente novamente.", "15-0": "INVALID_TRANSACTION", "15-1": "Transação inválida, talvez um cartão de crédito esteja passando uma transação de débito, ou viceversa.", "16-0": "PASS_TARGE_WITH_CHIP", "16-1": "Cartão de chip passou tarja.", "17-0": "NULL_RESPONSE", "17-1": "Não houve resposta do Pinpad.", "18-0": "ERROR_RESPONSE_COMMAND", "18-1": "Erro na resposta do comando.", "19-0": "ACCEPTOR_REJECTION", "19-1": "Transação rejeitada pelo autorizador.", "20-0": "EMAIL_MESSAGE_ERROR", "20-1": "Erro no envio do email.", "21-0": "INVALID_EMAIL_CLIENT", "21-1": "Email do cliente é inválido.", "22-0": "INVALID_STONE_CODE_OR_UNKNOWN", "22-1": "StoneCode foi digitado de forma errada ou não existe", "23-0": "TRANSACTION_NOT_FOUND", "23-1": "Não se pode cancelar uma transação que não foi aprovada.", "24-0": "SWIPE_INCORRECT, TOO_MANY_CARDS", "25-0": "UNKNOWN_ERROR, INTERNAL_ERROR," }, "cols": 2, "rows": 26 } [/block] [block:api-header] { "title": "Erros de impressão do POS" } [/block] [block:parameters] { "data": { "0-0": "PRINTER_PRINT_ERROR", "1-0": "PRINTER_BUSY_ERROR", "2-0": "PRINTER_INIT_ERROR", "3-0": "PRINTER_LOW_ENERGY_ERROR", "4-0": "PRINTER_OUT_OF_PAPER_ERROR", "5-0": "PRINTER_UNSUPPORTED_FORMAT_ERROR" }, "cols": 2, "rows": 6 } [/block] [block:api-header] { "title": "Erros no PEDIDO POS ANDROID" } [/block] [block:parameters] { "data": { "0-0": "PED_PASS_KEY_ERROR", "1-0": "PED_PASS_USER_CANCELED_ERROR", "2-0": "PED_PASS_NO_PIN_INPUT_ERROR", "3-0": "PED_PASS_TIMEOUT_ERROR" }, "cols": 2, "rows": 4 } [/block] [block:api-header] { "title": "Erros na TRANSAÇÃO POS ANDROID" } [/block] [block:parameters] { "data": { "0-0": "TRANS_APP_BLOCKED_ERROR", "5-0": "TRANS_WRONG_TRANS_TYPE_ERROR", "4-0": "TRANS_NO_TRANS_TYPE_ERROR,", "3-0": "TRANS_PASS_MAG_BUT_IS_ICC_ERROR", "2-0": "TRANS_INVALID_AMOUNT_ERROR", "1-0": "TRANS_SELECT_TYPE_USER_CANCELED_ERROR" }, "cols": 2, "rows": 6 } [/block] [block:api-header] { "title": "Erro no CARTÃO - POS ANDROID" } [/block] [block:parameters] { "data": { "0-0": "CARD_ERROR", "6-0": "TRANSACTION_OBJECT_NULL_ERROR", "5-0": "CARD_UNSUPPORTED_ERROR", "4-0": "CARD_REMOVED_ERROR", "3-0": "CARD_READ_CANCELED_ERROR", "2-0": "CARD_READ_TIMEOUT_ERROR", "1-0": "CARD_READ_ERROR" }, "cols": 2, "rows": 7 } [/block]
{"_id":"5aac0fec509e6d0078cc1930","project":"58403d83c0507319000634ed","version":"58403d83c0507319000634f0","category":"5aabfd4591cb63004de5eab6","user":"59de082aed35e800383f94b6","updates":[],"next":{"pages":[],"description":""},"createdAt":"2018-03-16T18:41:48.521Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"settings":"","results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"auth":"required","params":[],"url":""},"isReference":false,"order":9,"body":"Para ter acesso ao status da transação, você deve utilizar o método:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"getTransactionStatus();\",\n      \"language\": \"java\"\n    }\n  ]\n}\n[/block]\nQue retornará um enum com os seguintes valores:\n[block:parameters]\n{\n  \"data\": {\n    \"h-0\": \"Nome\",\n    \"h-1\": \"Valor\",\n    \"0-0\": \"UNKNOWN_ERROR\",\n    \"0-1\": \"Ocorreu um erro antes de ser enviada para o autorizador.\",\n    \"1-0\": \"APPROVED\",\n    \"1-1\": \"Transação aprovada com sucesso.\",\n    \"2-0\": \"DECLINED\",\n    \"2-1\": \"Transação negada.\",\n    \"3-0\": \"CANCELLED\",\n    \"3-1\": \"Transação cancelada (ocorre no cancelamento, ou seja, CancellationProvider).\",\n    \"4-0\": \"PARTIAL_APPROVED\",\n    \"4-1\": \"Transação foi parcialmente aprovada.\",\n    \"5-0\": \"TECHNICAL_ERROR\",\n    \"5-1\": \"Erro técnico (ocorreu um erro ao processar a mensagem no autorizador).\",\n    \"6-0\": \"REJECTED\",\n    \"6-1\": \"Transação rejeitada.\",\n    \"7-0\": \"\"\n  },\n  \"cols\": 2,\n  \"rows\": 8\n}\n[/block]\nEm caso de REJECTED e DECLINED, você pode capturar a mensagem do autorizador com o método:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"getMessageFromAuthorize()\",\n      \"language\": \"java\"\n    }\n  ]\n}\n[/block]\n São mensagens como: “Saldo insuficiente”, “Cartão inválido”, “Violação de segurança”, etc.","excerpt":"","slug":"status-da-transacao","type":"basic","title":"Status da transação","__v":0,"parentDoc":null,"childrenPages":[]}

Status da transação


Para ter acesso ao status da transação, você deve utilizar o método: [block:code] { "codes": [ { "code": "getTransactionStatus();", "language": "java" } ] } [/block] Que retornará um enum com os seguintes valores: [block:parameters] { "data": { "h-0": "Nome", "h-1": "Valor", "0-0": "UNKNOWN_ERROR", "0-1": "Ocorreu um erro antes de ser enviada para o autorizador.", "1-0": "APPROVED", "1-1": "Transação aprovada com sucesso.", "2-0": "DECLINED", "2-1": "Transação negada.", "3-0": "CANCELLED", "3-1": "Transação cancelada (ocorre no cancelamento, ou seja, CancellationProvider).", "4-0": "PARTIAL_APPROVED", "4-1": "Transação foi parcialmente aprovada.", "5-0": "TECHNICAL_ERROR", "5-1": "Erro técnico (ocorreu um erro ao processar a mensagem no autorizador).", "6-0": "REJECTED", "6-1": "Transação rejeitada.", "7-0": "" }, "cols": 2, "rows": 8 } [/block] Em caso de REJECTED e DECLINED, você pode capturar a mensagem do autorizador com o método: [block:code] { "codes": [ { "code": "getMessageFromAuthorize()", "language": "java" } ] } [/block] São mensagens como: “Saldo insuficiente”, “Cartão inválido”, “Violação de segurança”, etc.
Para ter acesso ao status da transação, você deve utilizar o método: [block:code] { "codes": [ { "code": "getTransactionStatus();", "language": "java" } ] } [/block] Que retornará um enum com os seguintes valores: [block:parameters] { "data": { "h-0": "Nome", "h-1": "Valor", "0-0": "UNKNOWN_ERROR", "0-1": "Ocorreu um erro antes de ser enviada para o autorizador.", "1-0": "APPROVED", "1-1": "Transação aprovada com sucesso.", "2-0": "DECLINED", "2-1": "Transação negada.", "3-0": "CANCELLED", "3-1": "Transação cancelada (ocorre no cancelamento, ou seja, CancellationProvider).", "4-0": "PARTIAL_APPROVED", "4-1": "Transação foi parcialmente aprovada.", "5-0": "TECHNICAL_ERROR", "5-1": "Erro técnico (ocorreu um erro ao processar a mensagem no autorizador).", "6-0": "REJECTED", "6-1": "Transação rejeitada.", "7-0": "" }, "cols": 2, "rows": 8 } [/block] Em caso de REJECTED e DECLINED, você pode capturar a mensagem do autorizador com o método: [block:code] { "codes": [ { "code": "getMessageFromAuthorize()", "language": "java" } ] } [/block] São mensagens como: “Saldo insuficiente”, “Cartão inválido”, “Violação de segurança”, etc.
{"_id":"5abbefc2ed190c001275839d","project":"58403d83c0507319000634ed","version":"58403d83c0507319000634f0","category":"5aabfd4591cb63004de5eab6","user":"59de082aed35e800383f94b6","updates":[],"next":{"pages":[],"description":""},"createdAt":"2018-03-28T19:40:50.700Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","auth":"required","params":[],"url":""},"isReference":false,"order":10,"body":"Para ter acesso ao status do cancelamento, você deve utilizar o método:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"getResponseCodeEnum();\",\n      \"language\": \"java\"\n    }\n  ]\n}\n[/block]\nQue retornará um enum com os seguintes valores:\n[block:parameters]\n{\n  \"data\": {\n    \"h-0\": \"Nome\",\n    \"h-1\": \"Valor\",\n    \"0-0\": \"Declined\",\n    \"0-1\": \"Cancelamento negado.\",\n    \"1-0\": \"Approved\",\n    \"1-1\": \"Cancelamento aprovada\\no com sucesso.\",\n    \"2-0\": \"PartialApproved\",\n    \"2-1\": \"Cancelamento parcialmente aprovado.\",\n    \"3-0\": \"TechnicalError\",\n    \"3-1\": \"Erro técnico (ocorreu um erro ao processar a mensagem do autorizador).\",\n    \"4-0\": \"\"\n  },\n  \"cols\": 2,\n  \"rows\": 5\n}\n[/block]\nEm caso de DECLINED, você pode capturar a mensagem do autorizador com o método:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"getMessageFromAuthorize()\",\n      \"language\": \"java\"\n    }\n  ]\n}\n[/block]\n São mensagens como: “Saldo insuficiente”, “Cartão inválido”, “Violação de segurança”, etc.","excerpt":"","slug":"status-do-cancelamento","type":"basic","title":"Status do cancelamento","__v":0,"parentDoc":null,"childrenPages":[]}

Status do cancelamento


Para ter acesso ao status do cancelamento, você deve utilizar o método: [block:code] { "codes": [ { "code": "getResponseCodeEnum();", "language": "java" } ] } [/block] Que retornará um enum com os seguintes valores: [block:parameters] { "data": { "h-0": "Nome", "h-1": "Valor", "0-0": "Declined", "0-1": "Cancelamento negado.", "1-0": "Approved", "1-1": "Cancelamento aprovada\no com sucesso.", "2-0": "PartialApproved", "2-1": "Cancelamento parcialmente aprovado.", "3-0": "TechnicalError", "3-1": "Erro técnico (ocorreu um erro ao processar a mensagem do autorizador).", "4-0": "" }, "cols": 2, "rows": 5 } [/block] Em caso de DECLINED, você pode capturar a mensagem do autorizador com o método: [block:code] { "codes": [ { "code": "getMessageFromAuthorize()", "language": "java" } ] } [/block] São mensagens como: “Saldo insuficiente”, “Cartão inválido”, “Violação de segurança”, etc.
Para ter acesso ao status do cancelamento, você deve utilizar o método: [block:code] { "codes": [ { "code": "getResponseCodeEnum();", "language": "java" } ] } [/block] Que retornará um enum com os seguintes valores: [block:parameters] { "data": { "h-0": "Nome", "h-1": "Valor", "0-0": "Declined", "0-1": "Cancelamento negado.", "1-0": "Approved", "1-1": "Cancelamento aprovada\no com sucesso.", "2-0": "PartialApproved", "2-1": "Cancelamento parcialmente aprovado.", "3-0": "TechnicalError", "3-1": "Erro técnico (ocorreu um erro ao processar a mensagem do autorizador).", "4-0": "" }, "cols": 2, "rows": 5 } [/block] Em caso de DECLINED, você pode capturar a mensagem do autorizador com o método: [block:code] { "codes": [ { "code": "getMessageFromAuthorize()", "language": "java" } ] } [/block] São mensagens como: “Saldo insuficiente”, “Cartão inválido”, “Violação de segurança”, etc.
{"_id":"59dbaa56c92dcd001c440edf","project":"58403d83c0507319000634ed","version":"58403d83c0507319000634f0","category":"5aabfd4591cb63004de5eab6","user":"58dcf4b604ea0f0f00fbdfcb","updates":[],"next":{"pages":[],"description":""},"createdAt":"2017-10-09T16:56:54.353Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","auth":"required","params":[],"url":""},"isReference":false,"order":11,"body":"| Código de Retorno | Descrição | Mensagem | Pode retentar? |\n| ----------------- | --------- | -------- | -------------- |\n| 1000 | Do not honour | Não aprovado | Não se Aplica |\n| 1001 | Expired card | Cartão vencido | Não se Aplica |\n| 1002 | Suspected fraud | Suspeita de fraude | Não se Aplica |\n| 1003 | Card acceptor contact acquirer | Estabelecimento entrar em contato com emissor | Não se Aplica |\n| 1004 | Restricted card | Cartão com restrição | Não se Aplica |\n| 1005 | Card acceptor call acquirer's security department | Estabelecimento entrar em contato com departamento de segurança do adquirente | Não se Aplica |\n| 1006 | Allowable PIN tries exceeded | Tentativas de senha excedidas | Não se Aplica |\n| 1007 | Refer to card issuer | Consultar o emissor | Não se Aplica |\n| 1008 | Refer to card issuer's special conditions | Consultar as condições especiais do emissor | Não se Aplica |\n| 1009 | Invalid card acceptor | Estabelecimento inválido | Não se Aplica |\n| 1010 | Invalid amount | Valor inválido | Não se Aplica |\n| 1011 | Invalid card number | Cartão inválido | Não se Aplica |\n| 1012 | PIN data required | Senha necessária | Não se Aplica |\n| 1014 | No account of type requested | Nenhuma conta do tipo selecionado | Não se Aplica |\n| 1015 | Requested function not supported | Função selecionada não suportada | Não se Aplica |\n| 1016 | Not sufficient funds | Saldo insuficiente | Sim |\n| 1017 | Incorrect PIN | Senha inválida | Sim |\n| 1019 | Transaction not permitted to cardholder | Transação não permitida para o portador | Não se Aplica |\n| 1020 | Transaction not permitted to terminal | Transação não permitida para o terminal | Não se Aplica |\n| 1021 | Exceeds withdrawal amount limit | Limite de valor para saque excedido | Não se Aplica |\n| 1022 | Security violation | Violação de segurança | Não se Aplica |\n| 1023 | Exceeds withdrawal frequency limit | Limite de quantidade de saques excedido | Não se Aplica |\n| 1024 | Violation of law | Violação da lei | Não se Aplica |\n| 1025 | Card not effective | Cartão bloqueado | Não se Aplica |\n| 1026 | Invalid PIN block | Dados de senha inválidos | Não se Aplica |\n| 1027 | PIN length error | Erro no tamanho da senha | Não se Aplica |\n| 1028 | PIN key sync error | Erro de sincronia de chave de senha | Não se Aplica |\n| 1029 | Suspected counterfeit card | Suspeita de cartão falso | Não se Aplica |\n| 1030 | Currency unacceptable to card issuer | Moeda inaceitável para o emissor | Não se Aplica |\n| 1032 | Lost/stolen card | Cartão perdido ou roubado | Não se Aplica |\n| 1035 | Closed account | Conta encerrada | Não se Aplica |\n| 1036 | Closed savings account, or restricted for closing | Conta poupança encerrada ou bloqueada para encerramento | Não se Aplica |\n| 1037 | Closed credit account or restricted for closing | Conta de crédito encerrada ou bloqueada para encerramento | Não se Aplica |\n| 1039 | Closed cheque account or restricted for closing | Conta corrente encerrada ou bloquada para encerramento | Não se Aplica |\n| 1041 | From account bad status | Status ruim para conta de origem | Não se Aplica |\n| 1042 | To account bad status | Status ruim para conta de destino | Não se Aplica |\n| 1045 | Card verification data failed | Código de segurança inválido | Sim |\n| 1047 | PIN change required | Troca de senha necessária | Não se Aplica |\n| 1048 | New PIN invalid | Nova senha inválida | Não se Aplica |\n| 1057 | Payment date invalid | Data de pagamento inválida | Não se Aplica |\n| 1060 | Transaction did not complete normally at terminal | Transação não completou normalmente no terminal | Não se Aplica |\n| 1061 | Transaction not supported by the card issuer | Transação não suportada pelo emissor | Não se Aplica |\n| 1062 | Cashback not allowed | Saque fácil não disponível | Não se Aplica |\n| 1063 | Cashback amount exceeded | Limite de saque fácil excedido | Não se Aplica |\n| 1064 | Declined, transaction processed offline by terminal | Negado offline pelo terminal | Não se Aplica |\n| 1065 | Declined, terminal unable to process offline | Negado, não foi possível processar offline | Não se Aplica |\n| 2000 | Do not honour | Não aprovado | Não se Aplica |\n| 2001 | Expired card | Cartão vencido | Não se Aplica |\n| 2002 | Suspected fraud | Suspeita de fraude | Não se Aplica |\n| 2003 | Card acceptor contact acquirer | Estabelecimento entrar em contato com emissor | Não se Aplica |\n| 2004 | Restricted card | Cartão com restrição | Não se Aplica |\n| 2005 | Card acceptor call acquirer's security department | Estabelecimento entrar em contato com departamento de segurança do adquirente | Não se Aplica |\n| 2006 | Allowable PIN tries exceeded | Tentativas de senha excedidas | Não se Aplica |\n| 2007 | Special conditions | Condições especiais | Não se Aplica |\n| 2008 | Lost card | Cartão perdido | Não se Aplica |\n| 2009 | Stolen card | Cartão roubado | Não se Aplica |\n| 2010 | Suspected counterfeit card | Suspeita de cartão falso | Não se Aplica |\n| 2011 | Daily withdrawal uses exceeded | Limite de quantidade de saques excedido | Não se Aplica |\n| 2012 | Daily withdrawal amount exceeded | Limite de valor para saque excedido | Não se Aplica |\n| 9100 | One or more data element errors (see message error indicator) | Erro no formato da mensagem | Não se Aplica |\n| 9102 | Invalid transaction | Transação inválida | Não se Aplica |\n| 9103 | Re-enter transaction | Tente novamente | Não se Aplica |\n| 9105 | Acquirer not supported by switch | Adquirente não suportado pelo switch | Não se Aplica |\n| 9107 | Card issuer or switch inoperative | Emissor fora de operação | Não se Aplica |\n| 9108 | Transaction destination cannot be found for routing | Não foi possível enviar a transação para o destinatário | Sim |\n| 9109 | System malfunction | Erro no sistema | Sim |\n| 9110 | Card issuer signed off | Emissor se desconectou | Não se Aplica |\n| 9111 | Card issuer timed out | Emissor não respondeu em tempo | Sim |\n| 9112 | Card issuer unavailable | Emissor indisponível | Sim |\n| 9113 | Duplicate transmission | Transmissão duplicada | Não se Aplica |\n| 9114 | Not able to trace back to original transaction | Não foi possível encontrar a transação original | Não se Aplica |\n| 9116 | MAC incorrect | MAC incorreto | Não se Aplica |\n| 9117 | MAC key sync error | Erro de sincronização de chave de MAC | Não se Aplica |\n| 9118 | No communication keys available for use | Nenhuma chave de comunicação disponível | Não se Aplica |\n| 9119 | Encryption key sync error | Erro de sincronização de chave de encriptação | Não se Aplica |\n| 9120 | Security software/hardware error – try again | Erro de segurança de software/hardware, tente novamente | Não se Aplica |\n| 9121 | Security software/hardware error – no action | Erro de segurança de software/hardware | Não se Aplica |\n| 9122 | Message number out of sequence | Número da mensagem fora de sequência | Não se Aplica |\n| 9123 | Request in progress | Requisição em progresso | Não se Aplica |\n| 9124 | Invalid security code | Código de segurança inválido | Não se Aplica |\n| 9125 | Database error | Erro no banco de dados | Não se Aplica |\n| 9132 | Recurring data error | Erro nos dados de recorrência | Não se Aplica |\n| 9133 | Update not allowed | Atualização não permitida | Não se Aplica |\n| 9350 | Violation of business arrangement | Violação de acordo comercial | Não se Aplica |\n| 9999 | Other errors | Erro não especificado | Não se Aplica |\n|UNPR| Rejection | Não Foi possível processar – Não foi possível processar a mensagem. Tente novamente. | Não se Aplica |\n| IMSG | Rejection | Mensagem Invalida – A mensagem enviada possui um formato inválido. | Não se Aplica |\n| PARS | Rejection | Erro na leitura da mensagem – Algum campo obrigatório não esta sendo enviado | Não se Aplica |\n| SECU | Rejection | Segurança – Algum erro no processo de segurança. A chave de criptografia pode não estar presente no terminal. | Não se Aplica |\n| INTP | Rejection | SAK Invalido – O SAK enviado não foi reconhecido | Não se Aplica |\n| RCPP | Rejection | Destinatario Invalido – O local para aonde a mensagem foi enviada esta invalida | Não se Aplica |\n| DPMG | Rejection | Mensagem Duplicada – Esta mensagem já foi recebida pela Stone. | Não se Aplica |\n| VERS | Rejection | Protocolo – A versão do protocolo enviada não é suportada. | Não se Aplica |\n| MSGT| Rejection | Tipo da Mensagem – o Message Type enviado não é reconhecido. | Não se Aplica |","excerpt":"Códigos de retorno  do Autorizador Stone.","slug":"codigos-de-retorno","type":"basic","title":"Códigos de Retorno","__v":0,"parentDoc":null,"childrenPages":[]}

Códigos de Retorno

Códigos de retorno do Autorizador Stone.

| Código de Retorno | Descrição | Mensagem | Pode retentar? | | ----------------- | --------- | -------- | -------------- | | 1000 | Do not honour | Não aprovado | Não se Aplica | | 1001 | Expired card | Cartão vencido | Não se Aplica | | 1002 | Suspected fraud | Suspeita de fraude | Não se Aplica | | 1003 | Card acceptor contact acquirer | Estabelecimento entrar em contato com emissor | Não se Aplica | | 1004 | Restricted card | Cartão com restrição | Não se Aplica | | 1005 | Card acceptor call acquirer's security department | Estabelecimento entrar em contato com departamento de segurança do adquirente | Não se Aplica | | 1006 | Allowable PIN tries exceeded | Tentativas de senha excedidas | Não se Aplica | | 1007 | Refer to card issuer | Consultar o emissor | Não se Aplica | | 1008 | Refer to card issuer's special conditions | Consultar as condições especiais do emissor | Não se Aplica | | 1009 | Invalid card acceptor | Estabelecimento inválido | Não se Aplica | | 1010 | Invalid amount | Valor inválido | Não se Aplica | | 1011 | Invalid card number | Cartão inválido | Não se Aplica | | 1012 | PIN data required | Senha necessária | Não se Aplica | | 1014 | No account of type requested | Nenhuma conta do tipo selecionado | Não se Aplica | | 1015 | Requested function not supported | Função selecionada não suportada | Não se Aplica | | 1016 | Not sufficient funds | Saldo insuficiente | Sim | | 1017 | Incorrect PIN | Senha inválida | Sim | | 1019 | Transaction not permitted to cardholder | Transação não permitida para o portador | Não se Aplica | | 1020 | Transaction not permitted to terminal | Transação não permitida para o terminal | Não se Aplica | | 1021 | Exceeds withdrawal amount limit | Limite de valor para saque excedido | Não se Aplica | | 1022 | Security violation | Violação de segurança | Não se Aplica | | 1023 | Exceeds withdrawal frequency limit | Limite de quantidade de saques excedido | Não se Aplica | | 1024 | Violation of law | Violação da lei | Não se Aplica | | 1025 | Card not effective | Cartão bloqueado | Não se Aplica | | 1026 | Invalid PIN block | Dados de senha inválidos | Não se Aplica | | 1027 | PIN length error | Erro no tamanho da senha | Não se Aplica | | 1028 | PIN key sync error | Erro de sincronia de chave de senha | Não se Aplica | | 1029 | Suspected counterfeit card | Suspeita de cartão falso | Não se Aplica | | 1030 | Currency unacceptable to card issuer | Moeda inaceitável para o emissor | Não se Aplica | | 1032 | Lost/stolen card | Cartão perdido ou roubado | Não se Aplica | | 1035 | Closed account | Conta encerrada | Não se Aplica | | 1036 | Closed savings account, or restricted for closing | Conta poupança encerrada ou bloqueada para encerramento | Não se Aplica | | 1037 | Closed credit account or restricted for closing | Conta de crédito encerrada ou bloqueada para encerramento | Não se Aplica | | 1039 | Closed cheque account or restricted for closing | Conta corrente encerrada ou bloquada para encerramento | Não se Aplica | | 1041 | From account bad status | Status ruim para conta de origem | Não se Aplica | | 1042 | To account bad status | Status ruim para conta de destino | Não se Aplica | | 1045 | Card verification data failed | Código de segurança inválido | Sim | | 1047 | PIN change required | Troca de senha necessária | Não se Aplica | | 1048 | New PIN invalid | Nova senha inválida | Não se Aplica | | 1057 | Payment date invalid | Data de pagamento inválida | Não se Aplica | | 1060 | Transaction did not complete normally at terminal | Transação não completou normalmente no terminal | Não se Aplica | | 1061 | Transaction not supported by the card issuer | Transação não suportada pelo emissor | Não se Aplica | | 1062 | Cashback not allowed | Saque fácil não disponível | Não se Aplica | | 1063 | Cashback amount exceeded | Limite de saque fácil excedido | Não se Aplica | | 1064 | Declined, transaction processed offline by terminal | Negado offline pelo terminal | Não se Aplica | | 1065 | Declined, terminal unable to process offline | Negado, não foi possível processar offline | Não se Aplica | | 2000 | Do not honour | Não aprovado | Não se Aplica | | 2001 | Expired card | Cartão vencido | Não se Aplica | | 2002 | Suspected fraud | Suspeita de fraude | Não se Aplica | | 2003 | Card acceptor contact acquirer | Estabelecimento entrar em contato com emissor | Não se Aplica | | 2004 | Restricted card | Cartão com restrição | Não se Aplica | | 2005 | Card acceptor call acquirer's security department | Estabelecimento entrar em contato com departamento de segurança do adquirente | Não se Aplica | | 2006 | Allowable PIN tries exceeded | Tentativas de senha excedidas | Não se Aplica | | 2007 | Special conditions | Condições especiais | Não se Aplica | | 2008 | Lost card | Cartão perdido | Não se Aplica | | 2009 | Stolen card | Cartão roubado | Não se Aplica | | 2010 | Suspected counterfeit card | Suspeita de cartão falso | Não se Aplica | | 2011 | Daily withdrawal uses exceeded | Limite de quantidade de saques excedido | Não se Aplica | | 2012 | Daily withdrawal amount exceeded | Limite de valor para saque excedido | Não se Aplica | | 9100 | One or more data element errors (see message error indicator) | Erro no formato da mensagem | Não se Aplica | | 9102 | Invalid transaction | Transação inválida | Não se Aplica | | 9103 | Re-enter transaction | Tente novamente | Não se Aplica | | 9105 | Acquirer not supported by switch | Adquirente não suportado pelo switch | Não se Aplica | | 9107 | Card issuer or switch inoperative | Emissor fora de operação | Não se Aplica | | 9108 | Transaction destination cannot be found for routing | Não foi possível enviar a transação para o destinatário | Sim | | 9109 | System malfunction | Erro no sistema | Sim | | 9110 | Card issuer signed off | Emissor se desconectou | Não se Aplica | | 9111 | Card issuer timed out | Emissor não respondeu em tempo | Sim | | 9112 | Card issuer unavailable | Emissor indisponível | Sim | | 9113 | Duplicate transmission | Transmissão duplicada | Não se Aplica | | 9114 | Not able to trace back to original transaction | Não foi possível encontrar a transação original | Não se Aplica | | 9116 | MAC incorrect | MAC incorreto | Não se Aplica | | 9117 | MAC key sync error | Erro de sincronização de chave de MAC | Não se Aplica | | 9118 | No communication keys available for use | Nenhuma chave de comunicação disponível | Não se Aplica | | 9119 | Encryption key sync error | Erro de sincronização de chave de encriptação | Não se Aplica | | 9120 | Security software/hardware error – try again | Erro de segurança de software/hardware, tente novamente | Não se Aplica | | 9121 | Security software/hardware error – no action | Erro de segurança de software/hardware | Não se Aplica | | 9122 | Message number out of sequence | Número da mensagem fora de sequência | Não se Aplica | | 9123 | Request in progress | Requisição em progresso | Não se Aplica | | 9124 | Invalid security code | Código de segurança inválido | Não se Aplica | | 9125 | Database error | Erro no banco de dados | Não se Aplica | | 9132 | Recurring data error | Erro nos dados de recorrência | Não se Aplica | | 9133 | Update not allowed | Atualização não permitida | Não se Aplica | | 9350 | Violation of business arrangement | Violação de acordo comercial | Não se Aplica | | 9999 | Other errors | Erro não especificado | Não se Aplica | |UNPR| Rejection | Não Foi possível processar – Não foi possível processar a mensagem. Tente novamente. | Não se Aplica | | IMSG | Rejection | Mensagem Invalida – A mensagem enviada possui um formato inválido. | Não se Aplica | | PARS | Rejection | Erro na leitura da mensagem – Algum campo obrigatório não esta sendo enviado | Não se Aplica | | SECU | Rejection | Segurança – Algum erro no processo de segurança. A chave de criptografia pode não estar presente no terminal. | Não se Aplica | | INTP | Rejection | SAK Invalido – O SAK enviado não foi reconhecido | Não se Aplica | | RCPP | Rejection | Destinatario Invalido – O local para aonde a mensagem foi enviada esta invalida | Não se Aplica | | DPMG | Rejection | Mensagem Duplicada – Esta mensagem já foi recebida pela Stone. | Não se Aplica | | VERS | Rejection | Protocolo – A versão do protocolo enviada não é suportada. | Não se Aplica | | MSGT| Rejection | Tipo da Mensagem – o Message Type enviado não é reconhecido. | Não se Aplica |
| Código de Retorno | Descrição | Mensagem | Pode retentar? | | ----------------- | --------- | -------- | -------------- | | 1000 | Do not honour | Não aprovado | Não se Aplica | | 1001 | Expired card | Cartão vencido | Não se Aplica | | 1002 | Suspected fraud | Suspeita de fraude | Não se Aplica | | 1003 | Card acceptor contact acquirer | Estabelecimento entrar em contato com emissor | Não se Aplica | | 1004 | Restricted card | Cartão com restrição | Não se Aplica | | 1005 | Card acceptor call acquirer's security department | Estabelecimento entrar em contato com departamento de segurança do adquirente | Não se Aplica | | 1006 | Allowable PIN tries exceeded | Tentativas de senha excedidas | Não se Aplica | | 1007 | Refer to card issuer | Consultar o emissor | Não se Aplica | | 1008 | Refer to card issuer's special conditions | Consultar as condições especiais do emissor | Não se Aplica | | 1009 | Invalid card acceptor | Estabelecimento inválido | Não se Aplica | | 1010 | Invalid amount | Valor inválido | Não se Aplica | | 1011 | Invalid card number | Cartão inválido | Não se Aplica | | 1012 | PIN data required | Senha necessária | Não se Aplica | | 1014 | No account of type requested | Nenhuma conta do tipo selecionado | Não se Aplica | | 1015 | Requested function not supported | Função selecionada não suportada | Não se Aplica | | 1016 | Not sufficient funds | Saldo insuficiente | Sim | | 1017 | Incorrect PIN | Senha inválida | Sim | | 1019 | Transaction not permitted to cardholder | Transação não permitida para o portador | Não se Aplica | | 1020 | Transaction not permitted to terminal | Transação não permitida para o terminal | Não se Aplica | | 1021 | Exceeds withdrawal amount limit | Limite de valor para saque excedido | Não se Aplica | | 1022 | Security violation | Violação de segurança | Não se Aplica | | 1023 | Exceeds withdrawal frequency limit | Limite de quantidade de saques excedido | Não se Aplica | | 1024 | Violation of law | Violação da lei | Não se Aplica | | 1025 | Card not effective | Cartão bloqueado | Não se Aplica | | 1026 | Invalid PIN block | Dados de senha inválidos | Não se Aplica | | 1027 | PIN length error | Erro no tamanho da senha | Não se Aplica | | 1028 | PIN key sync error | Erro de sincronia de chave de senha | Não se Aplica | | 1029 | Suspected counterfeit card | Suspeita de cartão falso | Não se Aplica | | 1030 | Currency unacceptable to card issuer | Moeda inaceitável para o emissor | Não se Aplica | | 1032 | Lost/stolen card | Cartão perdido ou roubado | Não se Aplica | | 1035 | Closed account | Conta encerrada | Não se Aplica | | 1036 | Closed savings account, or restricted for closing | Conta poupança encerrada ou bloqueada para encerramento | Não se Aplica | | 1037 | Closed credit account or restricted for closing | Conta de crédito encerrada ou bloqueada para encerramento | Não se Aplica | | 1039 | Closed cheque account or restricted for closing | Conta corrente encerrada ou bloquada para encerramento | Não se Aplica | | 1041 | From account bad status | Status ruim para conta de origem | Não se Aplica | | 1042 | To account bad status | Status ruim para conta de destino | Não se Aplica | | 1045 | Card verification data failed | Código de segurança inválido | Sim | | 1047 | PIN change required | Troca de senha necessária | Não se Aplica | | 1048 | New PIN invalid | Nova senha inválida | Não se Aplica | | 1057 | Payment date invalid | Data de pagamento inválida | Não se Aplica | | 1060 | Transaction did not complete normally at terminal | Transação não completou normalmente no terminal | Não se Aplica | | 1061 | Transaction not supported by the card issuer | Transação não suportada pelo emissor | Não se Aplica | | 1062 | Cashback not allowed | Saque fácil não disponível | Não se Aplica | | 1063 | Cashback amount exceeded | Limite de saque fácil excedido | Não se Aplica | | 1064 | Declined, transaction processed offline by terminal | Negado offline pelo terminal | Não se Aplica | | 1065 | Declined, terminal unable to process offline | Negado, não foi possível processar offline | Não se Aplica | | 2000 | Do not honour | Não aprovado | Não se Aplica | | 2001 | Expired card | Cartão vencido | Não se Aplica | | 2002 | Suspected fraud | Suspeita de fraude | Não se Aplica | | 2003 | Card acceptor contact acquirer | Estabelecimento entrar em contato com emissor | Não se Aplica | | 2004 | Restricted card | Cartão com restrição | Não se Aplica | | 2005 | Card acceptor call acquirer's security department | Estabelecimento entrar em contato com departamento de segurança do adquirente | Não se Aplica | | 2006 | Allowable PIN tries exceeded | Tentativas de senha excedidas | Não se Aplica | | 2007 | Special conditions | Condições especiais | Não se Aplica | | 2008 | Lost card | Cartão perdido | Não se Aplica | | 2009 | Stolen card | Cartão roubado | Não se Aplica | | 2010 | Suspected counterfeit card | Suspeita de cartão falso | Não se Aplica | | 2011 | Daily withdrawal uses exceeded | Limite de quantidade de saques excedido | Não se Aplica | | 2012 | Daily withdrawal amount exceeded | Limite de valor para saque excedido | Não se Aplica | | 9100 | One or more data element errors (see message error indicator) | Erro no formato da mensagem | Não se Aplica | | 9102 | Invalid transaction | Transação inválida | Não se Aplica | | 9103 | Re-enter transaction | Tente novamente | Não se Aplica | | 9105 | Acquirer not supported by switch | Adquirente não suportado pelo switch | Não se Aplica | | 9107 | Card issuer or switch inoperative | Emissor fora de operação | Não se Aplica | | 9108 | Transaction destination cannot be found for routing | Não foi possível enviar a transação para o destinatário | Sim | | 9109 | System malfunction | Erro no sistema | Sim | | 9110 | Card issuer signed off | Emissor se desconectou | Não se Aplica | | 9111 | Card issuer timed out | Emissor não respondeu em tempo | Sim | | 9112 | Card issuer unavailable | Emissor indisponível | Sim | | 9113 | Duplicate transmission | Transmissão duplicada | Não se Aplica | | 9114 | Not able to trace back to original transaction | Não foi possível encontrar a transação original | Não se Aplica | | 9116 | MAC incorrect | MAC incorreto | Não se Aplica | | 9117 | MAC key sync error | Erro de sincronização de chave de MAC | Não se Aplica | | 9118 | No communication keys available for use | Nenhuma chave de comunicação disponível | Não se Aplica | | 9119 | Encryption key sync error | Erro de sincronização de chave de encriptação | Não se Aplica | | 9120 | Security software/hardware error – try again | Erro de segurança de software/hardware, tente novamente | Não se Aplica | | 9121 | Security software/hardware error – no action | Erro de segurança de software/hardware | Não se Aplica | | 9122 | Message number out of sequence | Número da mensagem fora de sequência | Não se Aplica | | 9123 | Request in progress | Requisição em progresso | Não se Aplica | | 9124 | Invalid security code | Código de segurança inválido | Não se Aplica | | 9125 | Database error | Erro no banco de dados | Não se Aplica | | 9132 | Recurring data error | Erro nos dados de recorrência | Não se Aplica | | 9133 | Update not allowed | Atualização não permitida | Não se Aplica | | 9350 | Violation of business arrangement | Violação de acordo comercial | Não se Aplica | | 9999 | Other errors | Erro não especificado | Não se Aplica | |UNPR| Rejection | Não Foi possível processar – Não foi possível processar a mensagem. Tente novamente. | Não se Aplica | | IMSG | Rejection | Mensagem Invalida – A mensagem enviada possui um formato inválido. | Não se Aplica | | PARS | Rejection | Erro na leitura da mensagem – Algum campo obrigatório não esta sendo enviado | Não se Aplica | | SECU | Rejection | Segurança – Algum erro no processo de segurança. A chave de criptografia pode não estar presente no terminal. | Não se Aplica | | INTP | Rejection | SAK Invalido – O SAK enviado não foi reconhecido | Não se Aplica | | RCPP | Rejection | Destinatario Invalido – O local para aonde a mensagem foi enviada esta invalida | Não se Aplica | | DPMG | Rejection | Mensagem Duplicada – Esta mensagem já foi recebida pela Stone. | Não se Aplica | | VERS | Rejection | Protocolo – A versão do protocolo enviada não é suportada. | Não se Aplica | | MSGT| Rejection | Tipo da Mensagem – o Message Type enviado não é reconhecido. | Não se Aplica |
{"_id":"5aac0fb291cb63004de5ed1c","project":"58403d83c0507319000634ed","version":"58403d83c0507319000634f0","category":"5aabfd4591cb63004de5eab6","user":"59de082aed35e800383f94b6","updates":[],"next":{"pages":[],"description":""},"createdAt":"2018-03-16T18:40:50.253Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","auth":"required","params":[],"url":""},"isReference":false,"order":12,"body":"Para a TransactionObject, a quantidade de parcelas é passada por um enum chamado **InstalmentTransactionEnum**. \n\nSegue a tabela com cada nome e valor:\n[block:parameters]\n{\n  \"data\": {\n    \"h-0\": \"Nome\",\n    \"h-1\": \"Valor referente\",\n    \"0-0\": \"ONE_INSTALMENT\",\n    \"1-0\": \"TWO_INSTALMENT_NO_INTEREST\",\n    \"2-0\": \"THREE_INSTALMENT_NO_INTEREST\",\n    \"3-0\": \"FOUR_INSTALMENT_NO_INTEREST\",\n    \"4-0\": \"FIVE_INSTALMENT_NO_INTEREST\",\n    \"5-0\": \"SIX_INSTALMENT_NO_INTEREST\",\n    \"6-0\": \"SEVEN_INSTALMENT_NO_INTEREST\",\n    \"7-0\": \"EIGHT_INSTALMENT_NO_INTEREST\",\n    \"8-0\": \"NINE_INSTALMENT_NO_INTEREST\",\n    \"9-0\": \"TEN_INSTALMENT_NO_INTEREST\",\n    \"10-0\": \"ELEVEN_INSTALMENT_NO_INTEREST\",\n    \"11-0\": \"TWELVE_INSTALMENT_NO_INTEREST\",\n    \"0-1\": \"À vista\",\n    \"1-1\": \"2 vezes sem juros\",\n    \"2-1\": \"3 vezes sem juros\",\n    \"3-1\": \"4 vezes sem juros\",\n    \"4-1\": \"5 vezes sem juros\",\n    \"5-1\": \"6 vezes sem juros\",\n    \"6-1\": \"7 vezes sem juros\",\n    \"7-1\": \"8 vezes sem juros\",\n    \"8-1\": \"9 vezes sem juros\",\n    \"9-1\": \"10 vezes sem juros\",\n    \"10-1\": \"11 vezes sem juros\",\n    \"11-1\": \"12 vezes sem juros\",\n    \"12-0\": \"TWO_INSTALMENT_WITH_INTEREST\",\n    \"12-1\": \"2 vezes com juros\",\n    \"13-0\": \"THREE_INSTALMENT_WITH_INTEREST\",\n    \"13-1\": \"3 vezes com juros\",\n    \"14-0\": \"FOUR_INSTALMENT_WITH_INTEREST\",\n    \"14-1\": \"4 vezes com juros\",\n    \"15-0\": \"FIVE_INSTALMENT_WITH_INTEREST\",\n    \"15-1\": \"5 vezes com juros\",\n    \"16-0\": \"SIX_INSTALMENT_WITH_INTEREST\",\n    \"16-1\": \"6 vezes com juros\",\n    \"17-0\": \"SEVEN_INSTALMENT_WITH_INTEREST\",\n    \"17-1\": \"7 vezes com juros\",\n    \"18-0\": \"EIGHT_INSTALMENT_WITH_INTEREST\",\n    \"18-1\": \"8 vezes com juros\",\n    \"19-0\": \"NINE_INSTALMENT_WITH_INTEREST\",\n    \"19-1\": \"9 vezes com juros\",\n    \"20-0\": \"TEN_INSTALMENT_WITH_INTEREST\",\n    \"20-1\": \"10 vezes com juros\",\n    \"21-0\": \"ELEVEN_INSTALMENT_WITH_INTEREST\",\n    \"21-1\": \"11 vezes com juros\",\n    \"22-0\": \"TWELVE_INSTALMENT_WITH_INTEREST\",\n    \"22-1\": \"12 vezes com juros\"\n  },\n  \"cols\": 2,\n  \"rows\": 23\n}\n[/block]","excerpt":"","slug":"parcelas","type":"basic","title":"Parcelas","__v":0,"parentDoc":null,"childrenPages":[]}

Parcelas


Para a TransactionObject, a quantidade de parcelas é passada por um enum chamado **InstalmentTransactionEnum**. Segue a tabela com cada nome e valor: [block:parameters] { "data": { "h-0": "Nome", "h-1": "Valor referente", "0-0": "ONE_INSTALMENT", "1-0": "TWO_INSTALMENT_NO_INTEREST", "2-0": "THREE_INSTALMENT_NO_INTEREST", "3-0": "FOUR_INSTALMENT_NO_INTEREST", "4-0": "FIVE_INSTALMENT_NO_INTEREST", "5-0": "SIX_INSTALMENT_NO_INTEREST", "6-0": "SEVEN_INSTALMENT_NO_INTEREST", "7-0": "EIGHT_INSTALMENT_NO_INTEREST", "8-0": "NINE_INSTALMENT_NO_INTEREST", "9-0": "TEN_INSTALMENT_NO_INTEREST", "10-0": "ELEVEN_INSTALMENT_NO_INTEREST", "11-0": "TWELVE_INSTALMENT_NO_INTEREST", "0-1": "À vista", "1-1": "2 vezes sem juros", "2-1": "3 vezes sem juros", "3-1": "4 vezes sem juros", "4-1": "5 vezes sem juros", "5-1": "6 vezes sem juros", "6-1": "7 vezes sem juros", "7-1": "8 vezes sem juros", "8-1": "9 vezes sem juros", "9-1": "10 vezes sem juros", "10-1": "11 vezes sem juros", "11-1": "12 vezes sem juros", "12-0": "TWO_INSTALMENT_WITH_INTEREST", "12-1": "2 vezes com juros", "13-0": "THREE_INSTALMENT_WITH_INTEREST", "13-1": "3 vezes com juros", "14-0": "FOUR_INSTALMENT_WITH_INTEREST", "14-1": "4 vezes com juros", "15-0": "FIVE_INSTALMENT_WITH_INTEREST", "15-1": "5 vezes com juros", "16-0": "SIX_INSTALMENT_WITH_INTEREST", "16-1": "6 vezes com juros", "17-0": "SEVEN_INSTALMENT_WITH_INTEREST", "17-1": "7 vezes com juros", "18-0": "EIGHT_INSTALMENT_WITH_INTEREST", "18-1": "8 vezes com juros", "19-0": "NINE_INSTALMENT_WITH_INTEREST", "19-1": "9 vezes com juros", "20-0": "TEN_INSTALMENT_WITH_INTEREST", "20-1": "10 vezes com juros", "21-0": "ELEVEN_INSTALMENT_WITH_INTEREST", "21-1": "11 vezes com juros", "22-0": "TWELVE_INSTALMENT_WITH_INTEREST", "22-1": "12 vezes com juros" }, "cols": 2, "rows": 23 } [/block]
Para a TransactionObject, a quantidade de parcelas é passada por um enum chamado **InstalmentTransactionEnum**. Segue a tabela com cada nome e valor: [block:parameters] { "data": { "h-0": "Nome", "h-1": "Valor referente", "0-0": "ONE_INSTALMENT", "1-0": "TWO_INSTALMENT_NO_INTEREST", "2-0": "THREE_INSTALMENT_NO_INTEREST", "3-0": "FOUR_INSTALMENT_NO_INTEREST", "4-0": "FIVE_INSTALMENT_NO_INTEREST", "5-0": "SIX_INSTALMENT_NO_INTEREST", "6-0": "SEVEN_INSTALMENT_NO_INTEREST", "7-0": "EIGHT_INSTALMENT_NO_INTEREST", "8-0": "NINE_INSTALMENT_NO_INTEREST", "9-0": "TEN_INSTALMENT_NO_INTEREST", "10-0": "ELEVEN_INSTALMENT_NO_INTEREST", "11-0": "TWELVE_INSTALMENT_NO_INTEREST", "0-1": "À vista", "1-1": "2 vezes sem juros", "2-1": "3 vezes sem juros", "3-1": "4 vezes sem juros", "4-1": "5 vezes sem juros", "5-1": "6 vezes sem juros", "6-1": "7 vezes sem juros", "7-1": "8 vezes sem juros", "8-1": "9 vezes sem juros", "9-1": "10 vezes sem juros", "10-1": "11 vezes sem juros", "11-1": "12 vezes sem juros", "12-0": "TWO_INSTALMENT_WITH_INTEREST", "12-1": "2 vezes com juros", "13-0": "THREE_INSTALMENT_WITH_INTEREST", "13-1": "3 vezes com juros", "14-0": "FOUR_INSTALMENT_WITH_INTEREST", "14-1": "4 vezes com juros", "15-0": "FIVE_INSTALMENT_WITH_INTEREST", "15-1": "5 vezes com juros", "16-0": "SIX_INSTALMENT_WITH_INTEREST", "16-1": "6 vezes com juros", "17-0": "SEVEN_INSTALMENT_WITH_INTEREST", "17-1": "7 vezes com juros", "18-0": "EIGHT_INSTALMENT_WITH_INTEREST", "18-1": "8 vezes com juros", "19-0": "NINE_INSTALMENT_WITH_INTEREST", "19-1": "9 vezes com juros", "20-0": "TEN_INSTALMENT_WITH_INTEREST", "20-1": "10 vezes com juros", "21-0": "ELEVEN_INSTALMENT_WITH_INTEREST", "21-1": "11 vezes com juros", "22-0": "TWELVE_INSTALMENT_WITH_INTEREST", "22-1": "12 vezes com juros" }, "cols": 2, "rows": 23 } [/block]
{"_id":"585abec7e009882d00508406","body":"[block:api-header]\n{\n  \"type\": \"basic\",\n  \"title\": \"\"\n}\n[/block]\n\n[block:embed]\n{\n  \"html\": false,\n  \"url\": \"https://github.com/stone-payments/sdk-android\",\n  \"title\": \"stone-payments/sdk-android\",\n  \"favicon\": \"https://assets-cdn.github.com/favicon.ico\",\n  \"image\": \"https://avatars5.githubusercontent.com/u/8750624?v=4&s=400\"\n}\n[/block]","order":0,"excerpt":"","githubsync":"","link_url":"","project":"58403d83c0507319000634ed","sync_unique":"","type":"basic","createdAt":"2016-12-21T17:41:27.820Z","hidden":false,"isReference":false,"link_external":false,"next":{"pages":[],"description":""},"slug":"sdk-android","title":"SDK Android","api":{"results":{"codes":[{"name":"","status":200,"language":"json","code":"{}"},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","auth":"required","params":[],"url":""},"category":"585abe665cd5a52300c76426","updates":[],"version":"58403d83c0507319000634f0","__v":0,"user":"57ea79f61780cd170064f273","parentDoc":null,"childrenPages":[]}

SDK Android


[block:api-header] { "type": "basic", "title": "" } [/block] [block:embed] { "html": false, "url": "https://github.com/stone-payments/sdk-android", "title": "stone-payments/sdk-android", "favicon": "https://assets-cdn.github.com/favicon.ico", "image": "https://avatars5.githubusercontent.com/u/8750624?v=4&s=400" } [/block]
[block:api-header] { "type": "basic", "title": "" } [/block] [block:embed] { "html": false, "url": "https://github.com/stone-payments/sdk-android", "title": "stone-payments/sdk-android", "favicon": "https://assets-cdn.github.com/favicon.ico", "image": "https://avatars5.githubusercontent.com/u/8750624?v=4&s=400" } [/block]
{"_id":"5a0ec83a36f38100346b7557","project":"58403d83c0507319000634ed","version":"58403d83c0507319000634f0","category":"5a53961982c9b60032e67c2e","user":"59de082aed35e800383f94b6","updates":[],"next":{"pages":[],"description":""},"createdAt":"2017-11-17T11:30:02.192Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","auth":"required","params":[],"url":""},"isReference":false,"order":0,"body":"[block:api-header]\n{\n  \"title\": \"Qual a estrutura seguida pela SDK Stone?\"\n}\n[/block]\nA SDK é dividida em 4 módulos:\n1. Providers: todos os providers seguem o mesmo modelo. Todos herdam de uma classe modelo que extende da classe AsyncTask do Android, então toda escrita e leitura de comandos com o Pinpad, requisições de transações e ativações, conexões etc são executadas em uma thread secundária do método ‘doInBackground’.\n2. Utils: no módulo Utils você encontra ferramentas que podem ajudar na criação da sua aplicação.\n3. Comandos: Esse módulo contém os comandos de leitura e escrita que são utilizados para se comunicar com os Pinpads.\n4. Outros\n[block:image]\n{\n  \"images\": [\n    {\n      \"image\": [\n        \"https://files.readme.io/7d4082e-1.png\",\n        \"1.png\",\n        499,\n        324,\n        \"#f36596\"\n      ]\n    }\n  ]\n}\n[/block]\n\n[block:api-header]\n{\n  \"title\": \"Como eu posso enviar uma transação?\"\n}\n[/block]\nPassar transações com a nova SDK é simples e rápido. O primeiro passo é instanciar um objeto do tipo TransactionObject, e então populá-lo. Após fazer isso, você pode passá-lo para o TransactionProvider, que será o responsável por enviar a transação para o autorizador e trabalhar com a inserção e atualização no TransactionDAO.\nÉ importante lembrar que TransactionProvider segue a mesma estrutura do ActiveApplicationProvider, BluetoothConnectionProvider e os demais. Esse provider pede uma Activity, o TransactionObject que foi criado anteriormente, o usuário atual do aplicativo e o pinpad que está sendo utilizado. \nPara mais informações e exemplos, acesse a nossa documentação em:\nhttp://sdkandroid.stone.com.br/docs/provedor-de-transação-1\"\n\n[block:api-header]\n{\n  \"title\": \"Como fazer a comunicação com o Pinpad?\"\n}\n[/block]\nPara criar uma conexão, basta instanciar um objeto do tipo PinpadObject e informar o nome e o mac address do dispositivo. Estas informações podem ser obtidas com os itens que são retornados da função BluetoothAdapter.getBondedDevices(); do Android.\nDepois de fazer isso, com a conexão realizada com sucesso, o Pinpad então é adicionado em uma lista de Pinpads conectados na classe Stone. Para obter a lista, você pode utilizar o método Stone.getPinpadListSize(). Esse método é retornado como null caso o Bluetooth esteja desligado ou se não houver conexão.\nSempre que a SDK solicitar um Pinpad como parâmetro, você pode passar Stone.getPinpadFromListAt(0), se você estiver conectado somente com um Pinpad.\n\n[block:api-header]\n{\n  \"title\": \"Eu consigo me comunicar com mais de um Pinpad ao mesmo tempo?\"\n}\n[/block]\nSim, é possível conectar com mais de um Pinpad, sendo possível selecionar um deles no momento da transação.\n[block:api-header]\n{\n  \"title\": \"Quais Pinpads são homologados com a Stone?\"\n}\n[/block]\nA SDK Mobile Android se comunica exclusivamente com Pinpads Bluetooth. Os Pinpads Bluetooth homologados conosco são: \n- Gertec MobiPin 10\n- PAX D180\n- PAX D200. \n[block:api-header]\n{\n  \"title\": \"Consigo imprimir um QR Code?\"\n}\n[/block]\nSim, disponibilizamos uma função que permite a impressão de QR Codes. Para ver mais instruções, acesse a nossa documentação em: http://sdkandroid.stone.com.br/docs/provedor-de-impressão-1\n[block:api-header]\n{\n  \"title\": \"Como faço um cancelamento de uma transação?\"\n}\n[/block]\nO provider de Cancelamento, CancellationProvider, é um dos provedores mais simples. \nPara efetuar um cancelamento, você deve instanciar o CancellationProvider e passar a sua Activity e o ID da transação que deseja cancelar (você pode obter todos os IDs das transações com o TransactionDAO).\n\n[block:api-header]\n{\n  \"title\": \"Como consigo uma chave de acesso para iniciar a integração?\"\n}\n[/block]\nPara acessar o ambiente de homologação você deve enviar um e-mail para o integracoes@stone.com.br com as seguintes informações: \n- O nome da empresa parceira que realizará transações na Stone;\n- O CNPJ da empresa;\n- Uma descrição sucinta do negócio parceiro (em uma frase);\n- E-mail para o qual a credencial deve ser enviada.\"\n\n[block:api-header]\n{\n  \"title\": \"Quais bandeiras são aceitas?\"\n}\n[/block]\n- Visa\n-  Mastercard\n-  ELO \n- ALELO\n[block:api-header]\n{\n  \"title\": \"Como consigo consultar uma transação?\"\n}\n[/block]\nQuando você faz uma busca por TransactionID nós indicamos qual é o status atual daquela transação — isto é, se ela já foi compensada ou não.\n[block:api-header]\n{\n  \"title\": \"Preciso usar o SAK?\"\n}\n[/block]\nNão, o SAK é uma informação utilizada pelo SDK Android conforme a ativação por meio do Stonecode.\n[block:api-header]\n{\n  \"title\": \"Como ativo a solução de SDK Android no cliente final?\"\n}\n[/block]\nDepois de finalizada a integração/desenvolvimento no ambiente de testes, usando um StoneCode de teste, você precisa solicitar ao representante comercial um StoneCode de produção.\nCaso você não tenha um representante comercial, é possível fazer essa solicitação pelo canal: meajuda@stone.com.br.\n[block:api-header]\n{\n  \"title\": \"Existe um padrão que a filipeta segue?\"\n}\n[/block]\nSim, o SDK monta todo o comprovante automaticamente (de acordo com o ID de transação fornecido e contanto que a transação exista no TransactionDAO).\nPor padrão, todas as notinhas são impressas com a logo da Stone.\n\n[block:api-header]\n{\n  \"title\": \"Existe um fluxo para aviso prévio de atualização das soluções?\"\n}\n[/block]\nAtualmente não temos um fluxo de aviso prévio das atualizações, porém estamos desenvolvendo isso. Para se manter atualizado das novas versões, acompanhe sempre as mudanças no changelog da documentação.\n[block:api-header]\n{\n  \"title\": \"O provedor StoneTransaction foi removido da SDK?\"\n}\n[/block]\nSim, hoje é possível preencher todas os dados necessários diretamente no provedor TransactionObject\n[block:api-header]\n{\n  \"title\": \"Quais são as diferenças entre TransactionProvider e TransactionObject\"\n}\n[/block]\nO TransactionObject deve ser utilizado para instanciar dados como: Valor da transação, Modelo de operação, à vista/ Parcelado, etc. Já o provedor TransactionProvider e responsável pelo leitura do cartão inserido e por encaminhar efetivamente a transação ao autorizador Stone. \n[block:api-header]\n{\n  \"title\": \"Quais são as diferenças entre PosTransactionProvider e TransactionProvider?\"\n}\n[/block]\nDeve-se utilizar o objeto PosTransactionProvider apenas para terminais POS com sistema operacional Android.","excerpt":"","slug":"faq-dúvidas-frequentes","type":"basic","title":"Dúvidas frequentes","__v":0,"parentDoc":null,"childrenPages":[]}

Dúvidas frequentes


[block:api-header] { "title": "Qual a estrutura seguida pela SDK Stone?" } [/block] A SDK é dividida em 4 módulos: 1. Providers: todos os providers seguem o mesmo modelo. Todos herdam de uma classe modelo que extende da classe AsyncTask do Android, então toda escrita e leitura de comandos com o Pinpad, requisições de transações e ativações, conexões etc são executadas em uma thread secundária do método ‘doInBackground’. 2. Utils: no módulo Utils você encontra ferramentas que podem ajudar na criação da sua aplicação. 3. Comandos: Esse módulo contém os comandos de leitura e escrita que são utilizados para se comunicar com os Pinpads. 4. Outros [block:image] { "images": [ { "image": [ "https://files.readme.io/7d4082e-1.png", "1.png", 499, 324, "#f36596" ] } ] } [/block] [block:api-header] { "title": "Como eu posso enviar uma transação?" } [/block] Passar transações com a nova SDK é simples e rápido. O primeiro passo é instanciar um objeto do tipo TransactionObject, e então populá-lo. Após fazer isso, você pode passá-lo para o TransactionProvider, que será o responsável por enviar a transação para o autorizador e trabalhar com a inserção e atualização no TransactionDAO. É importante lembrar que TransactionProvider segue a mesma estrutura do ActiveApplicationProvider, BluetoothConnectionProvider e os demais. Esse provider pede uma Activity, o TransactionObject que foi criado anteriormente, o usuário atual do aplicativo e o pinpad que está sendo utilizado. Para mais informações e exemplos, acesse a nossa documentação em: http://sdkandroid.stone.com.br/docs/provedor-de-transação-1" [block:api-header] { "title": "Como fazer a comunicação com o Pinpad?" } [/block] Para criar uma conexão, basta instanciar um objeto do tipo PinpadObject e informar o nome e o mac address do dispositivo. Estas informações podem ser obtidas com os itens que são retornados da função BluetoothAdapter.getBondedDevices(); do Android. Depois de fazer isso, com a conexão realizada com sucesso, o Pinpad então é adicionado em uma lista de Pinpads conectados na classe Stone. Para obter a lista, você pode utilizar o método Stone.getPinpadListSize(). Esse método é retornado como null caso o Bluetooth esteja desligado ou se não houver conexão. Sempre que a SDK solicitar um Pinpad como parâmetro, você pode passar Stone.getPinpadFromListAt(0), se você estiver conectado somente com um Pinpad. [block:api-header] { "title": "Eu consigo me comunicar com mais de um Pinpad ao mesmo tempo?" } [/block] Sim, é possível conectar com mais de um Pinpad, sendo possível selecionar um deles no momento da transação. [block:api-header] { "title": "Quais Pinpads são homologados com a Stone?" } [/block] A SDK Mobile Android se comunica exclusivamente com Pinpads Bluetooth. Os Pinpads Bluetooth homologados conosco são: - Gertec MobiPin 10 - PAX D180 - PAX D200. [block:api-header] { "title": "Consigo imprimir um QR Code?" } [/block] Sim, disponibilizamos uma função que permite a impressão de QR Codes. Para ver mais instruções, acesse a nossa documentação em: http://sdkandroid.stone.com.br/docs/provedor-de-impressão-1 [block:api-header] { "title": "Como faço um cancelamento de uma transação?" } [/block] O provider de Cancelamento, CancellationProvider, é um dos provedores mais simples. Para efetuar um cancelamento, você deve instanciar o CancellationProvider e passar a sua Activity e o ID da transação que deseja cancelar (você pode obter todos os IDs das transações com o TransactionDAO). [block:api-header] { "title": "Como consigo uma chave de acesso para iniciar a integração?" } [/block] Para acessar o ambiente de homologação você deve enviar um e-mail para o integracoes@stone.com.br com as seguintes informações: - O nome da empresa parceira que realizará transações na Stone; - O CNPJ da empresa; - Uma descrição sucinta do negócio parceiro (em uma frase); - E-mail para o qual a credencial deve ser enviada." [block:api-header] { "title": "Quais bandeiras são aceitas?" } [/block] - Visa - Mastercard - ELO - ALELO [block:api-header] { "title": "Como consigo consultar uma transação?" } [/block] Quando você faz uma busca por TransactionID nós indicamos qual é o status atual daquela transação — isto é, se ela já foi compensada ou não. [block:api-header] { "title": "Preciso usar o SAK?" } [/block] Não, o SAK é uma informação utilizada pelo SDK Android conforme a ativação por meio do Stonecode. [block:api-header] { "title": "Como ativo a solução de SDK Android no cliente final?" } [/block] Depois de finalizada a integração/desenvolvimento no ambiente de testes, usando um StoneCode de teste, você precisa solicitar ao representante comercial um StoneCode de produção. Caso você não tenha um representante comercial, é possível fazer essa solicitação pelo canal: meajuda@stone.com.br. [block:api-header] { "title": "Existe um padrão que a filipeta segue?" } [/block] Sim, o SDK monta todo o comprovante automaticamente (de acordo com o ID de transação fornecido e contanto que a transação exista no TransactionDAO). Por padrão, todas as notinhas são impressas com a logo da Stone. [block:api-header] { "title": "Existe um fluxo para aviso prévio de atualização das soluções?" } [/block] Atualmente não temos um fluxo de aviso prévio das atualizações, porém estamos desenvolvendo isso. Para se manter atualizado das novas versões, acompanhe sempre as mudanças no changelog da documentação. [block:api-header] { "title": "O provedor StoneTransaction foi removido da SDK?" } [/block] Sim, hoje é possível preencher todas os dados necessários diretamente no provedor TransactionObject [block:api-header] { "title": "Quais são as diferenças entre TransactionProvider e TransactionObject" } [/block] O TransactionObject deve ser utilizado para instanciar dados como: Valor da transação, Modelo de operação, à vista/ Parcelado, etc. Já o provedor TransactionProvider e responsável pelo leitura do cartão inserido e por encaminhar efetivamente a transação ao autorizador Stone. [block:api-header] { "title": "Quais são as diferenças entre PosTransactionProvider e TransactionProvider?" } [/block] Deve-se utilizar o objeto PosTransactionProvider apenas para terminais POS com sistema operacional Android.
[block:api-header] { "title": "Qual a estrutura seguida pela SDK Stone?" } [/block] A SDK é dividida em 4 módulos: 1. Providers: todos os providers seguem o mesmo modelo. Todos herdam de uma classe modelo que extende da classe AsyncTask do Android, então toda escrita e leitura de comandos com o Pinpad, requisições de transações e ativações, conexões etc são executadas em uma thread secundária do método ‘doInBackground’. 2. Utils: no módulo Utils você encontra ferramentas que podem ajudar na criação da sua aplicação. 3. Comandos: Esse módulo contém os comandos de leitura e escrita que são utilizados para se comunicar com os Pinpads. 4. Outros [block:image] { "images": [ { "image": [ "https://files.readme.io/7d4082e-1.png", "1.png", 499, 324, "#f36596" ] } ] } [/block] [block:api-header] { "title": "Como eu posso enviar uma transação?" } [/block] Passar transações com a nova SDK é simples e rápido. O primeiro passo é instanciar um objeto do tipo TransactionObject, e então populá-lo. Após fazer isso, você pode passá-lo para o TransactionProvider, que será o responsável por enviar a transação para o autorizador e trabalhar com a inserção e atualização no TransactionDAO. É importante lembrar que TransactionProvider segue a mesma estrutura do ActiveApplicationProvider, BluetoothConnectionProvider e os demais. Esse provider pede uma Activity, o TransactionObject que foi criado anteriormente, o usuário atual do aplicativo e o pinpad que está sendo utilizado. Para mais informações e exemplos, acesse a nossa documentação em: http://sdkandroid.stone.com.br/docs/provedor-de-transação-1" [block:api-header] { "title": "Como fazer a comunicação com o Pinpad?" } [/block] Para criar uma conexão, basta instanciar um objeto do tipo PinpadObject e informar o nome e o mac address do dispositivo. Estas informações podem ser obtidas com os itens que são retornados da função BluetoothAdapter.getBondedDevices(); do Android. Depois de fazer isso, com a conexão realizada com sucesso, o Pinpad então é adicionado em uma lista de Pinpads conectados na classe Stone. Para obter a lista, você pode utilizar o método Stone.getPinpadListSize(). Esse método é retornado como null caso o Bluetooth esteja desligado ou se não houver conexão. Sempre que a SDK solicitar um Pinpad como parâmetro, você pode passar Stone.getPinpadFromListAt(0), se você estiver conectado somente com um Pinpad. [block:api-header] { "title": "Eu consigo me comunicar com mais de um Pinpad ao mesmo tempo?" } [/block] Sim, é possível conectar com mais de um Pinpad, sendo possível selecionar um deles no momento da transação. [block:api-header] { "title": "Quais Pinpads são homologados com a Stone?" } [/block] A SDK Mobile Android se comunica exclusivamente com Pinpads Bluetooth. Os Pinpads Bluetooth homologados conosco são: - Gertec MobiPin 10 - PAX D180 - PAX D200. [block:api-header] { "title": "Consigo imprimir um QR Code?" } [/block] Sim, disponibilizamos uma função que permite a impressão de QR Codes. Para ver mais instruções, acesse a nossa documentação em: http://sdkandroid.stone.com.br/docs/provedor-de-impressão-1 [block:api-header] { "title": "Como faço um cancelamento de uma transação?" } [/block] O provider de Cancelamento, CancellationProvider, é um dos provedores mais simples. Para efetuar um cancelamento, você deve instanciar o CancellationProvider e passar a sua Activity e o ID da transação que deseja cancelar (você pode obter todos os IDs das transações com o TransactionDAO). [block:api-header] { "title": "Como consigo uma chave de acesso para iniciar a integração?" } [/block] Para acessar o ambiente de homologação você deve enviar um e-mail para o integracoes@stone.com.br com as seguintes informações: - O nome da empresa parceira que realizará transações na Stone; - O CNPJ da empresa; - Uma descrição sucinta do negócio parceiro (em uma frase); - E-mail para o qual a credencial deve ser enviada." [block:api-header] { "title": "Quais bandeiras são aceitas?" } [/block] - Visa - Mastercard - ELO - ALELO [block:api-header] { "title": "Como consigo consultar uma transação?" } [/block] Quando você faz uma busca por TransactionID nós indicamos qual é o status atual daquela transação — isto é, se ela já foi compensada ou não. [block:api-header] { "title": "Preciso usar o SAK?" } [/block] Não, o SAK é uma informação utilizada pelo SDK Android conforme a ativação por meio do Stonecode. [block:api-header] { "title": "Como ativo a solução de SDK Android no cliente final?" } [/block] Depois de finalizada a integração/desenvolvimento no ambiente de testes, usando um StoneCode de teste, você precisa solicitar ao representante comercial um StoneCode de produção. Caso você não tenha um representante comercial, é possível fazer essa solicitação pelo canal: meajuda@stone.com.br. [block:api-header] { "title": "Existe um padrão que a filipeta segue?" } [/block] Sim, o SDK monta todo o comprovante automaticamente (de acordo com o ID de transação fornecido e contanto que a transação exista no TransactionDAO). Por padrão, todas as notinhas são impressas com a logo da Stone. [block:api-header] { "title": "Existe um fluxo para aviso prévio de atualização das soluções?" } [/block] Atualmente não temos um fluxo de aviso prévio das atualizações, porém estamos desenvolvendo isso. Para se manter atualizado das novas versões, acompanhe sempre as mudanças no changelog da documentação. [block:api-header] { "title": "O provedor StoneTransaction foi removido da SDK?" } [/block] Sim, hoje é possível preencher todas os dados necessários diretamente no provedor TransactionObject [block:api-header] { "title": "Quais são as diferenças entre TransactionProvider e TransactionObject" } [/block] O TransactionObject deve ser utilizado para instanciar dados como: Valor da transação, Modelo de operação, à vista/ Parcelado, etc. Já o provedor TransactionProvider e responsável pelo leitura do cartão inserido e por encaminhar efetivamente a transação ao autorizador Stone. [block:api-header] { "title": "Quais são as diferenças entre PosTransactionProvider e TransactionProvider?" } [/block] Deve-se utilizar o objeto PosTransactionProvider apenas para terminais POS com sistema operacional Android.
{"_id":"5968bb005b042b003543bb77","project":"58403d83c0507319000634ed","version":"58403d83c0507319000634f0","category":"5968bad595ef10001a03ac88","user":"57f681feca5e5d1700039ad7","updates":[],"next":{"pages":[],"description":""},"createdAt":"2017-07-14T12:37:20.799Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","auth":"required","params":[],"url":""},"isReference":false,"order":0,"body":"[block:api-header]\n{\n  \"title\": \"2.6.0\"\n}\n[/block]\n* Classe StoneTransaction removida da SDK. Agora para fazer transações, preencha diretamente o TransactionObject com as informações necessárias.\n* Novo provider PosTransactionProvider para efetuar transações com o POS Android.\n* Novo provider PosPrintProvierpara impressão no POS Android\n* Método String getAuthorizationCode() removido do TransactionProvider por já ter esse campo no TransactionObject;\n* Adicionado CONTACTLESS no EntryMode enum.\n* Todos os erros que geravam o Enum GENERIC_ERROR foram movidos para UNKNOWN_ERROR\n* Nova permissão SYSTEM_ALERT_WINDOW para desenhar os dígitos da senha em tela no POS android.\n\n* Novos Enums de erro:\n/** SWIPE_INCORRECT, TOO_MANY_CARDS, UNKNOWN_ERROR, INTERNAL_ERROR, // Erros de impressão do POS PRINTER_PRINT_ERROR, PRINTER_BUSY_ERROR, PRINTER_INIT_ERROR, PRINTER_LOW_ENERGY_ERROR, PRINTER_OUT_OF_PAPER_ERROR, PRINTER_UNSUPPORTED_FORMAT_ERROR, // PED ERROR PED_PASS_KEY_ERROR, PED_PASS_USER_CANCELED_ERROR, PED_PASS_NO_PIN_INPUT_ERROR, PED_PASS_TIMEOUT_ERROR, // TRANS ERROR TRANS_APP_BLOCKED_ERROR, TRANS_SELECT_TYPE_USER_CANCELED_ERROR, TRANS_INVALID_AMOUNT_ERROR, TRANS_PASS_MAG_BUT_IS_ICC_ERROR, TRANS_NO_TRANS_TYPE_ERROR, TRANS_WRONG_TRANS_TYPE_ERROR, // CARD ERROR CARD_ERROR, CARD_READ_ERROR, CARD_READ_TIMEOUT_ERROR, CARD_READ_CANCELED_ERROR, CARD_REMOVED_ERROR, CARD_UNSUPPORTED_ERROR, TRANSACTION_OBJECT_NULL_ERROR,\n- android gradle build tools atualizado para 3.0.1\n[block:api-header]\n{\n  \"title\": \"2.5.7\"\n}\n[/block]\n* Provider CancellationProvider agora retorna o actionCode do cancelamento pelo método cancellationProvider.getActionCode() e o status do cancelamento pelo cancellationProvider.getResponseCodeEnum().\n* Métodos getTransactionStatus() e getStatusAsString() do CancellationProvider foram removidos em prol dos novos métodos citados acima.\n* Corrigido bug onde a mensagem de \"Transação Aprovada\" não aparecia no pinpad em algumas transações\n* Novo método activate(String stoneCode) para ativar e adicionar um novo stone code na lista de stone codes ativos.\n* Novo método deactivate(String stoneCode) para desativar somente um stone code da lista de ativos\n* Corrigido bug onde versões anteriores da SDK recebiam NPE em pinpads já salvos sem o campo novo acqidx do PinpadObject.\n[block:api-header]\n{\n  \"title\": \"2.5.6\"\n}\n[/block]\nNova dependência OkHttp para substituir o HttpUrlConnection nas requests da SDK para nossos servidores;\nForçando TLS >= 1.2 em todas as requests da SDK;\nNovo Provider CaptureTransactionProvider para capturar transações cuja requisição foi feita com captura posterior (setando stoneTransaction.capture = false);\nCorreção na efetuação de transações da bandeira SODEXO;\nMelhoria na captura do CVM do pinpad, forçando o retorno;\nGerenciando o uso da chave Elavon/Stone internamente. Não é mais necessário setar Stone.setAcquirer(Acquirer acquirer). Se o Pinpad não tiver nenhuma das duas chaves, a SDK retornará o erro ErrorsEnum.PINPAD_WITHOUT_KEY durante a conexão do pinpad no BluetoothConnectionProvider;\nNovo ambiente INTERNAL_CERTIFICATION para validação do app pelo time de integrações da Stone;\n[block:api-header]\n{\n  \"title\": \"2.5.5\"\n}\n[/block]\n* Adicionado campo subMerchantAddress no TransactionObject para editar o endereço do lojista que está efetuando a transação;\n*Adicionado campo subMerchantCategoryCode no TransactionObject para editar o mcc do lojista que está efetuando a transação;\n* Adicionado campo shortName no TransactionObject para armazenar em banco opção setada no campo shortName do StoneTransaction;\n* Adicionado campo capture no TransactionObject para armazenar em banco opção setada no campo capture do StoneTransaction;\n* Construtor CancellationProvider(Context context, int idFromTransactionInBase, UserModel userModel) depreciado. Em vez dele, use CancellationProvider(Context context, TransactionObject transaction)\n* Correção no migration da tabela de Transaction onde algumas colunas não estavam sendo inseridas quando atualizadas de versões muito antigas da SDK;\n\n* Novos Enums de erro:\n/** SWIPE_INCORRECT, TOO_MANY_CARDS, UNKNOWN_ERROR, INTERNAL_ERROR, // Erros de impressão do POS PRINTER_PRINT_ERROR, PRINTER_BUSY_ERROR, PRINTER_INIT_ERROR, PRINTER_LOW_ENERGY_ERROR, PRINTER_OUT_OF_PAPER_ERROR, PRINTER_UNSUPPORTED_FORMAT_ERROR, // PED ERROR PED_PASS_KEY_ERROR, PED_PASS_USER_CANCELED_ERROR, PED_PASS_NO_PIN_INPUT_ERROR, PED_PASS_TIMEOUT_ERROR, // TRANS ERROR TRANS_APP_BLOCKED_ERROR, TRANS_SELECT_TYPE_USER_CANCELED_ERROR, TRANS_INVALID_AMOUNT_ERROR, TRANS_PASS_MAG_BUT_IS_ICC_ERROR, TRANS_NO_TRANS_TYPE_ERROR, TRANS_WRONG_TRANS_TYPE_ERROR, // CARD ERROR CARD_ERROR, CARD_READ_ERROR, CARD_READ_TIMEOUT_ERROR, CARD_READ_CANCELED_ERROR, CARD_REMOVED_ERROR, CARD_UNSUPPORTED_ERROR, TRANSACTION_OBJECT_NULL_ERROR,\n- android gradle build tools atualizado para 3.0.1\n[block:api-header]\n{\n  \"title\": \"2.5.4-1\"\n}\n[/block]\n* Corrigido bug onde a transação era efetuada mas não era salva no banco.\n[block:api-header]\n{\n  \"title\": \"2.5.4\"\n}\n[/block]\n* Correção na leitura de informações de cartões ELO.\n* Enum GENERIC_ERROR utilizado pelo ActiveApplicationProvider para quando o stone code não é reconhecido foi alterado para INVALID_STONE_CODE_OR_UNKNOWN.\n* Melhoria na estrutura interna e na performance do TransactionProvider.\n* Correção no envio do comprovante por email, colocando campo \"assinatura\" quando não era necessário.\n* Corrigido bug onde eventualmente o método getListOfErrors() retornava null\n[block:api-header]\n{\n  \"title\": \"v2.5.3\"\n}\n[/block]\n  * Corrigido bug quando o BluetoothConnectionProvider disparava o evento onSuccess duplicado.\n  * Corrigido bug da SDK baixando tabelas toda vez que abria o app.\n  * Support Library atualizado para 27.0.2. \n[block:api-header]\n{\n  \"title\": \"v2.5.2\"\n}\n[/block]\n  * Adicionado campo cancellationDate no TransactionObject para armazenar a data do cancelamento;\n  * Adicionado campo lastConnectionAt no PinpadObject para armazenar a data da última vez que houve conexão com o pinpad;\n  * Todos os erros durante a conexão com o device bluetooth que retornavam em dialog. Agora os erros são adicionados no array de erros do provider. Segue exemplo de uso: \n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"luetoothConnectionProvider.setConnectionCallback(new StoneCallbackInterface() {\\n\\n    public void onSuccess() {\\n        //handle success\\n    }\\n\\n    public void onError() {\\n        List<ErrorsEnum> listOfErrors = bluetoothConnectionProvider.getListOfErrors();\\n        if (listOfErrors.contains(ErrorsEnum.PINPAD_ALREADY_CONNECTED)) {\\n            //Do something\\n        } else if (listOfErrors.contains(ErrorsEnum.TIME_OUT)) {\\n            //Do something\\n        } else if (listOfErrors.contains(ErrorsEnum.DEVICE_NOT_COMPATIBLE)) {\\n            //Do something\\n        } else if (listOfErrors.contains(ErrorsEnum.IO_ERROR_WITH_PINPAD)) {\\n            //Do something\\n        }\\n    }\\n});\",\n      \"language\": \"java\"\n    }\n  ]\n}\n[/block]\n  * O método Stone.getPinpadListSize() não mais retorna null quando a lista de pinpads estiver vazia\n  * Refatorado o gerenciamento das versões das tabelas, corrigindo o problema de carregar tabelas a cada transação;\n  * Construtores LoadTablesProvider(Context, GcrRequestCommand, PinpadObject) e LoadTablesProvider(Context, String, PinpadObject) depreciados. Use LoadTablesProvider(Context context, PinpadObject) em vez disso; \n[block:api-header]\n{\n  \"title\": \"v2.5.1\"\n}\n[/block]\n  * SendEmailProvider depreciado em prol do uso do SendEmailTransactionProvider\n  * Adicionado flag merchantReceipt (default false) pra informar se é pra enviar a via do cliente ou do estabelecimento no SendEmailTransactionProvider\n  * Método setEmailToSent e setEmailsToSent da classe SendEmailTransactionProvider depreciado, usar addTo()/setTo() para setar o destinatário do email\n  * Possibilidade de definir o remetente do email no SendEmailTransactionProvider no método setFrom\n  * Adicionado campo balance no TransactionObject pra transações voucher (SODEXO, Ticket, etc...)\n  * Bug de cartões (principalmente HIPER) retornando UNKNOWN fixed\n  * Novos métodos (findTransactionWithAuthorizationCode(), findTransactionWithInitiatorTransactionKey() e findTransactionByFilter() ) no TransactionDAO para busca das transações no banco local da SDK. \n[block:api-header]\n{\n  \"title\": \"v2.5.0\"\n}\n[/block]\n  * Permissões android.permission.VIBRATE e android.permission.ACCESS_WIFI_STATE removidas da SDK\n  * Novos campos cvm e serviceCode no TransactionObject\n  * appcompat-v7 atualizado para 26.1.0\n  * Enum de feedback CARD_REMOVE deprecated por não ser uma mensagem alterável.\n  * Enum de feedback REVERSAL deprecated pois não mandamos nenhuma mensagem para o pinpad\n  * Revertendo transações quando negado pelo cartão\n  * Bug de mostrar mensagem RETIRE O CARTÃO em cartões mágnéticos fixed\n  * gson atualizado de 2.8.1 para 2.8.2\n  * Várias melhorias de performance \n[block:api-header]\n{\n  \"title\": \"v2.4.8\"\n}\n[/block]\n  * Adicionando REVERSING_TRANSACTION_WITH_ERROR ao enum Action\n  * Revertendo transações automaticamente, quando ocorrer um erro \n[block:callout]\n{\n  \"type\": \"warning\",\n  \"body\": \"As transações que não foram processadas por um erro de conexão devem ter canceladas utilizando o ReversalProvider\"\n}\n[/block]\n\n[block:api-header]\n{\n  \"title\": \"v2.4.7\"\n}\n[/block]\n  * Adicionando o status WITH_ERROR para transações com erro e que precisam ser canceladas (ex: timeout)\n  * Adicionando o ReversalProvider para varrer o banco de transações e cancelar as transações com o status WITH_ERROR\n  * Correção no cancelamento de transações \n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"ReversalProvider reversalProvider = new ReversalProvider(this);\\nreversalProvider.setDialogMessage(\\\"Cancelando transação com erro\\\");\\nreversalProvider.isDefaultUI();\\nreversalProvider.setConnectionCallback(new StoneCallbackInterface() {\\n      @Override\\n      public void onSuccess() {\\n        // code code code\\n      }\\n\\n      @Override\\n      public void onError() {\\n        // code code code\\n      }\\n});\",\n      \"language\": \"text\",\n      \"name\": \"exemplo do ReversalProvider\"\n    }\n  ]\n}\n[/block]\n\n[block:api-header]\n{\n  \"title\": \"v2.4.6\"\n}\n[/block]\n  * Downgrade da targetSdkVersion de 26 para 25 devido a problemas de compatibilidade com APIs antigas\n  * URL de ativação do ambiente CERTIFICATION alterada\n  * Corrigido bug ao executar a migration de versões anteriores à 2.3.0\n  * Downgrade da XStream para 1.4.7 devido a problemas com Java8 nas versões mais novas\n  * Remoção da permissão READ_PHONE_STATE da SDK! \n[block:api-header]\n{\n  \"title\": \"v2.4.5\"\n}\n[/block]\nLocalização do BluetoothConnectionProvider corrigida.\n[block:api-header]\n{\n  \"title\": \"v2.4.4\"\n}\n[/block]\n  * Melhoria e update das dependências\n  * Personalização das mensagens exibidas no Pinpad. No TransactionProvider, dois novos métodos foram implementados\n  * Novos Métodos:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"setPinpadFeedbackMessage(PinpadFeedback key, String message) para customizar uma mensagem específica\\nsetPinpadFeedbackMessages(Map<PinpadFeedback, String> pinpadFeedbackMessages) para personalizar todas as mensagens de uma vez\\nMensagens disponíveis para personalização e suas mensagens default (em comentário):\\n\\nPinpadFeedback.DENIED //\\\"TRANSAC NEGADA\\\"\\nPinpadFeedback.PROCESSING //\\\"PROCESSANDO..\\\"\\nPinpadFeedback.APPROVED //\\\"TRANSAC APROVADA\\\"\\nPinpadFeedback.CARD_REMOVE //\\\"RETIRE O CARTAO\\\"\\nPinpadFeedback.CARD_WITH_PROBLEMS //\\\"ICC COM PROBLEMAS\\\"\\nPinpadFeedback.DENIED_BY_NET //\\\"TRANSAC NEGADA PELA REDE\\\"\\nPinpadFeedback.CARD_INVALIDATED //\\\"CARTAO ESTA INVALIDADO\\\"\\nPinpadFeedback.DENIED_BY_CARD //\\\"TRANSAC NEGADA PELO CARTAO\\\"\",\n      \"language\": \"text\"\n    }\n  ]\n}\n[/block]\n\n[block:api-header]\n{\n  \"title\": \"v2.4.2\"\n}\n[/block]\n* Melhorias de *perfomance* \n[block:api-header]\n{\n  \"title\": \"v2.4.1\"\n}\n[/block]\n  * Adicionando suporte para conexões via cabo (ethernet)\n\n  * Campo signature em caso de necessidade de armazenar a assinatura da transação.\n\n  * Melhorias de perfomance \n[block:api-header]\n{\n  \"title\": \"v2.4.0\"\n}\n[/block]\n  * Agora a SDK está em no artifactory! siga as instruções de instalação no readme.\n\n  * Possibilidade de escolher o uso de Pinpads Elavon (que não possuem chaves Stone)\n\n  * Todos os Providers recebem Context em vez de Activity no construtor\n\n  * Nova interface StoneActionCallback com um método void onStatusChanged(Action action) para receber eventos adicionais do provider. Esta interface herda de StoneCallbackInterface, então seu uso é opcional. Por enquanto existem somente eventos para transação, mas em breve terá eventos para outros providers.\n\nEventos disponíveis:\n\n  * TRANSACTION_WAITING_CARD Esperando cartão ser inserido/passado\n\n  * TRANSACTION_WAITING_PASSWORD Esperando senha do cartão (se houver)\n\n  * TRANSACTION_SENDING Enviando transação para o servidor\n\n  * TRANSACTION_WAITING_REMOVE Esperando a remoção do cartão do pinpad (se for chip)\n\n[block:api-header]\n{\n  \"title\": \"v2.3.2\"\n}\n[/block]\n  * Agora você pode desativar a SDK usando deactivate() em ActiveApplicationProvider\n\n  * Método execute() do ActiveApplicationProvider descontinuado. Em vez disso, use o método activate(List<String> stoneCodes)\n\n  * Corrigido bug em LoadTablesProvider no qual pedia um objeto desnecessário no construtor.\n\n  * Novo campo entryMode no model da transação informando se a transação foi efetuada com chip ou tarja.\n\n  * Campos e métodos descontinuados. \n[block:api-header]\n{\n  \"title\": \"v2.3.1\"\n}\n[/block]\n  * Corrigido problema na seleção do ambiente de SANDBOX\n\n\nPara atualizar o projeto para transacionar no ambiente de integração deve-se fazer os seguintes passos: \n\n  * Baixar o arquivo sdk_stone_2.3.1.aar no nosso repositório do [GitHub](https://github.com/stone-payments/sdk-android/tree/master/JARs/Stone)\n  \n  * Após baixado o arquivo deve ser colocado na pasta \"SEU_PROJETO\"\\app\\libs\n  \n  * Com seu projeto aberto acrescente o código abaixo:\n\nNo build.grandle (Project):\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"allprojects {\\n    repositories {\\n        jcenter()\\n        flatDir {\\n            dirs 'libs'\\n        }\\n    }\\n}\",\n      \"language\": \"java\"\n    }\n  ]\n}\n[/block]\nNo build.grandle (Module:App):\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"dependencies {\\n    compile name: 'sdk_stone_2.3.1', ext: 'aar'\\n}\",\n      \"language\": \"java\"\n    }\n  ]\n}\n[/block]\n\n[block:callout]\n{\n  \"type\": \"warning\",\n  \"body\": \"É recomendado utilizar o comando Clean Project e Rebuild Project antes dos testes caso esteja utilizando a IDE Android Studio.\"\n}\n[/block]\n\n[block:api-header]\n{\n  \"title\": \"v2.3.0\"\n}\n[/block]\n* Nova forma de instalação da lib, utilizando aar, em breve teremos um repositório para distribuir nossas bibliotecas!\n* Agora você pode definir qual ambiente você quer usar em *runtime*, usando: \n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"// para integração\\nStone.setEnvironment(Environment.SANDBOX)\\n\\n// produção\\nStone.setEnvironment(Environment.PRODUCTION)\",\n      \"language\": \"java\",\n      \"name\": \"code\"\n    }\n  ]\n}\n[/block]\n  * `Stone.developerMode()` deprecated em prol do novo modo de escolha de ambiente mencionado acima.\n  * Suporte para novas bandeiras: Elo, Alelo. (Verifique disponibilidade da bandeira no seu stone code com o time de integrações)\n  * Correções no envio de algumas transações para stone.\n  * Bug ao desconectar o pinpad fixed.\n[block:api-header]\n{\n  \"title\": \"v2.2.10\"\n}\n[/block]\n  * Hot fix do endpoint do TMS.\n  * Correções de erro na ativação e download das tabelas AID e CAPK.\n[block:api-header]\n{\n  \"title\": \"v2.2.9\"\n}\n[/block]\n  * Correção do ambiente de homologação.\n[block:api-header]\n{\n  \"title\": \"v2.2.8\"\n}\n[/block]\n* Suportando a bandeira Ticket.\n[block:api-header]\n{\n  \"title\": \"v2.2.7\"\n}\n[/block]\n* Correções do erro `ClassNotFoundException`em algumas classes da SDK.\n[block:api-header]\n{\n  \"title\": \"v2.2.6\"\n}\n[/block]\n* Opção de enviar uma transação não capturada:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"StoneTransaction stoneTransaction = new StoneTransaction();\\n// set dos valores da transação\\nstoneTransaction.disableCapture(); // desabilita a captura da transação\",\n      \"language\": \"java\",\n      \"name\": \"code\"\n    }\n  ]\n}\n[/block]\n\n[block:callout]\n{\n  \"type\": \"warning\",\n  \"title\": \"Default\",\n  \"body\": \"Por padrão, a transação é capturada!\"\n}\n[/block]\n\n[block:api-header]\n{\n  \"title\": \"v2.2.5\"\n}\n[/block]\n* Transações com tarja sem senha e com senha.\n* Correções nas conexões com a internet.","excerpt":"Alterações realizadas na aplicação","slug":"changelog","type":"basic","title":"Log","__v":0,"parentDoc":null,"childrenPages":[]}

Log

Alterações realizadas na aplicação

[block:api-header] { "title": "2.6.0" } [/block] * Classe StoneTransaction removida da SDK. Agora para fazer transações, preencha diretamente o TransactionObject com as informações necessárias. * Novo provider PosTransactionProvider para efetuar transações com o POS Android. * Novo provider PosPrintProvierpara impressão no POS Android * Método String getAuthorizationCode() removido do TransactionProvider por já ter esse campo no TransactionObject; * Adicionado CONTACTLESS no EntryMode enum. * Todos os erros que geravam o Enum GENERIC_ERROR foram movidos para UNKNOWN_ERROR * Nova permissão SYSTEM_ALERT_WINDOW para desenhar os dígitos da senha em tela no POS android. * Novos Enums de erro: /** SWIPE_INCORRECT, TOO_MANY_CARDS, UNKNOWN_ERROR, INTERNAL_ERROR, // Erros de impressão do POS PRINTER_PRINT_ERROR, PRINTER_BUSY_ERROR, PRINTER_INIT_ERROR, PRINTER_LOW_ENERGY_ERROR, PRINTER_OUT_OF_PAPER_ERROR, PRINTER_UNSUPPORTED_FORMAT_ERROR, // PED ERROR PED_PASS_KEY_ERROR, PED_PASS_USER_CANCELED_ERROR, PED_PASS_NO_PIN_INPUT_ERROR, PED_PASS_TIMEOUT_ERROR, // TRANS ERROR TRANS_APP_BLOCKED_ERROR, TRANS_SELECT_TYPE_USER_CANCELED_ERROR, TRANS_INVALID_AMOUNT_ERROR, TRANS_PASS_MAG_BUT_IS_ICC_ERROR, TRANS_NO_TRANS_TYPE_ERROR, TRANS_WRONG_TRANS_TYPE_ERROR, // CARD ERROR CARD_ERROR, CARD_READ_ERROR, CARD_READ_TIMEOUT_ERROR, CARD_READ_CANCELED_ERROR, CARD_REMOVED_ERROR, CARD_UNSUPPORTED_ERROR, TRANSACTION_OBJECT_NULL_ERROR, - android gradle build tools atualizado para 3.0.1 [block:api-header] { "title": "2.5.7" } [/block] * Provider CancellationProvider agora retorna o actionCode do cancelamento pelo método cancellationProvider.getActionCode() e o status do cancelamento pelo cancellationProvider.getResponseCodeEnum(). * Métodos getTransactionStatus() e getStatusAsString() do CancellationProvider foram removidos em prol dos novos métodos citados acima. * Corrigido bug onde a mensagem de "Transação Aprovada" não aparecia no pinpad em algumas transações * Novo método activate(String stoneCode) para ativar e adicionar um novo stone code na lista de stone codes ativos. * Novo método deactivate(String stoneCode) para desativar somente um stone code da lista de ativos * Corrigido bug onde versões anteriores da SDK recebiam NPE em pinpads já salvos sem o campo novo acqidx do PinpadObject. [block:api-header] { "title": "2.5.6" } [/block] Nova dependência OkHttp para substituir o HttpUrlConnection nas requests da SDK para nossos servidores; Forçando TLS >= 1.2 em todas as requests da SDK; Novo Provider CaptureTransactionProvider para capturar transações cuja requisição foi feita com captura posterior (setando stoneTransaction.capture = false); Correção na efetuação de transações da bandeira SODEXO; Melhoria na captura do CVM do pinpad, forçando o retorno; Gerenciando o uso da chave Elavon/Stone internamente. Não é mais necessário setar Stone.setAcquirer(Acquirer acquirer). Se o Pinpad não tiver nenhuma das duas chaves, a SDK retornará o erro ErrorsEnum.PINPAD_WITHOUT_KEY durante a conexão do pinpad no BluetoothConnectionProvider; Novo ambiente INTERNAL_CERTIFICATION para validação do app pelo time de integrações da Stone; [block:api-header] { "title": "2.5.5" } [/block] * Adicionado campo subMerchantAddress no TransactionObject para editar o endereço do lojista que está efetuando a transação; *Adicionado campo subMerchantCategoryCode no TransactionObject para editar o mcc do lojista que está efetuando a transação; * Adicionado campo shortName no TransactionObject para armazenar em banco opção setada no campo shortName do StoneTransaction; * Adicionado campo capture no TransactionObject para armazenar em banco opção setada no campo capture do StoneTransaction; * Construtor CancellationProvider(Context context, int idFromTransactionInBase, UserModel userModel) depreciado. Em vez dele, use CancellationProvider(Context context, TransactionObject transaction) * Correção no migration da tabela de Transaction onde algumas colunas não estavam sendo inseridas quando atualizadas de versões muito antigas da SDK; * Novos Enums de erro: /** SWIPE_INCORRECT, TOO_MANY_CARDS, UNKNOWN_ERROR, INTERNAL_ERROR, // Erros de impressão do POS PRINTER_PRINT_ERROR, PRINTER_BUSY_ERROR, PRINTER_INIT_ERROR, PRINTER_LOW_ENERGY_ERROR, PRINTER_OUT_OF_PAPER_ERROR, PRINTER_UNSUPPORTED_FORMAT_ERROR, // PED ERROR PED_PASS_KEY_ERROR, PED_PASS_USER_CANCELED_ERROR, PED_PASS_NO_PIN_INPUT_ERROR, PED_PASS_TIMEOUT_ERROR, // TRANS ERROR TRANS_APP_BLOCKED_ERROR, TRANS_SELECT_TYPE_USER_CANCELED_ERROR, TRANS_INVALID_AMOUNT_ERROR, TRANS_PASS_MAG_BUT_IS_ICC_ERROR, TRANS_NO_TRANS_TYPE_ERROR, TRANS_WRONG_TRANS_TYPE_ERROR, // CARD ERROR CARD_ERROR, CARD_READ_ERROR, CARD_READ_TIMEOUT_ERROR, CARD_READ_CANCELED_ERROR, CARD_REMOVED_ERROR, CARD_UNSUPPORTED_ERROR, TRANSACTION_OBJECT_NULL_ERROR, - android gradle build tools atualizado para 3.0.1 [block:api-header] { "title": "2.5.4-1" } [/block] * Corrigido bug onde a transação era efetuada mas não era salva no banco. [block:api-header] { "title": "2.5.4" } [/block] * Correção na leitura de informações de cartões ELO. * Enum GENERIC_ERROR utilizado pelo ActiveApplicationProvider para quando o stone code não é reconhecido foi alterado para INVALID_STONE_CODE_OR_UNKNOWN. * Melhoria na estrutura interna e na performance do TransactionProvider. * Correção no envio do comprovante por email, colocando campo "assinatura" quando não era necessário. * Corrigido bug onde eventualmente o método getListOfErrors() retornava null [block:api-header] { "title": "v2.5.3" } [/block] * Corrigido bug quando o BluetoothConnectionProvider disparava o evento onSuccess duplicado. * Corrigido bug da SDK baixando tabelas toda vez que abria o app. * Support Library atualizado para 27.0.2. [block:api-header] { "title": "v2.5.2" } [/block] * Adicionado campo cancellationDate no TransactionObject para armazenar a data do cancelamento; * Adicionado campo lastConnectionAt no PinpadObject para armazenar a data da última vez que houve conexão com o pinpad; * Todos os erros durante a conexão com o device bluetooth que retornavam em dialog. Agora os erros são adicionados no array de erros do provider. Segue exemplo de uso: [block:code] { "codes": [ { "code": "luetoothConnectionProvider.setConnectionCallback(new StoneCallbackInterface() {\n\n public void onSuccess() {\n //handle success\n }\n\n public void onError() {\n List<ErrorsEnum> listOfErrors = bluetoothConnectionProvider.getListOfErrors();\n if (listOfErrors.contains(ErrorsEnum.PINPAD_ALREADY_CONNECTED)) {\n //Do something\n } else if (listOfErrors.contains(ErrorsEnum.TIME_OUT)) {\n //Do something\n } else if (listOfErrors.contains(ErrorsEnum.DEVICE_NOT_COMPATIBLE)) {\n //Do something\n } else if (listOfErrors.contains(ErrorsEnum.IO_ERROR_WITH_PINPAD)) {\n //Do something\n }\n }\n});", "language": "java" } ] } [/block] * O método Stone.getPinpadListSize() não mais retorna null quando a lista de pinpads estiver vazia * Refatorado o gerenciamento das versões das tabelas, corrigindo o problema de carregar tabelas a cada transação; * Construtores LoadTablesProvider(Context, GcrRequestCommand, PinpadObject) e LoadTablesProvider(Context, String, PinpadObject) depreciados. Use LoadTablesProvider(Context context, PinpadObject) em vez disso; [block:api-header] { "title": "v2.5.1" } [/block] * SendEmailProvider depreciado em prol do uso do SendEmailTransactionProvider * Adicionado flag merchantReceipt (default false) pra informar se é pra enviar a via do cliente ou do estabelecimento no SendEmailTransactionProvider * Método setEmailToSent e setEmailsToSent da classe SendEmailTransactionProvider depreciado, usar addTo()/setTo() para setar o destinatário do email * Possibilidade de definir o remetente do email no SendEmailTransactionProvider no método setFrom * Adicionado campo balance no TransactionObject pra transações voucher (SODEXO, Ticket, etc...) * Bug de cartões (principalmente HIPER) retornando UNKNOWN fixed * Novos métodos (findTransactionWithAuthorizationCode(), findTransactionWithInitiatorTransactionKey() e findTransactionByFilter() ) no TransactionDAO para busca das transações no banco local da SDK. [block:api-header] { "title": "v2.5.0" } [/block] * Permissões android.permission.VIBRATE e android.permission.ACCESS_WIFI_STATE removidas da SDK * Novos campos cvm e serviceCode no TransactionObject * appcompat-v7 atualizado para 26.1.0 * Enum de feedback CARD_REMOVE deprecated por não ser uma mensagem alterável. * Enum de feedback REVERSAL deprecated pois não mandamos nenhuma mensagem para o pinpad * Revertendo transações quando negado pelo cartão * Bug de mostrar mensagem RETIRE O CARTÃO em cartões mágnéticos fixed * gson atualizado de 2.8.1 para 2.8.2 * Várias melhorias de performance [block:api-header] { "title": "v2.4.8" } [/block] * Adicionando REVERSING_TRANSACTION_WITH_ERROR ao enum Action * Revertendo transações automaticamente, quando ocorrer um erro [block:callout] { "type": "warning", "body": "As transações que não foram processadas por um erro de conexão devem ter canceladas utilizando o ReversalProvider" } [/block] [block:api-header] { "title": "v2.4.7" } [/block] * Adicionando o status WITH_ERROR para transações com erro e que precisam ser canceladas (ex: timeout) * Adicionando o ReversalProvider para varrer o banco de transações e cancelar as transações com o status WITH_ERROR * Correção no cancelamento de transações [block:code] { "codes": [ { "code": "ReversalProvider reversalProvider = new ReversalProvider(this);\nreversalProvider.setDialogMessage(\"Cancelando transação com erro\");\nreversalProvider.isDefaultUI();\nreversalProvider.setConnectionCallback(new StoneCallbackInterface() {\n @Override\n public void onSuccess() {\n // code code code\n }\n\n @Override\n public void onError() {\n // code code code\n }\n});", "language": "text", "name": "exemplo do ReversalProvider" } ] } [/block] [block:api-header] { "title": "v2.4.6" } [/block] * Downgrade da targetSdkVersion de 26 para 25 devido a problemas de compatibilidade com APIs antigas * URL de ativação do ambiente CERTIFICATION alterada * Corrigido bug ao executar a migration de versões anteriores à 2.3.0 * Downgrade da XStream para 1.4.7 devido a problemas com Java8 nas versões mais novas * Remoção da permissão READ_PHONE_STATE da SDK! [block:api-header] { "title": "v2.4.5" } [/block] Localização do BluetoothConnectionProvider corrigida. [block:api-header] { "title": "v2.4.4" } [/block] * Melhoria e update das dependências * Personalização das mensagens exibidas no Pinpad. No TransactionProvider, dois novos métodos foram implementados * Novos Métodos: [block:code] { "codes": [ { "code": "setPinpadFeedbackMessage(PinpadFeedback key, String message) para customizar uma mensagem específica\nsetPinpadFeedbackMessages(Map<PinpadFeedback, String> pinpadFeedbackMessages) para personalizar todas as mensagens de uma vez\nMensagens disponíveis para personalização e suas mensagens default (em comentário):\n\nPinpadFeedback.DENIED //\"TRANSAC NEGADA\"\nPinpadFeedback.PROCESSING //\"PROCESSANDO..\"\nPinpadFeedback.APPROVED //\"TRANSAC APROVADA\"\nPinpadFeedback.CARD_REMOVE //\"RETIRE O CARTAO\"\nPinpadFeedback.CARD_WITH_PROBLEMS //\"ICC COM PROBLEMAS\"\nPinpadFeedback.DENIED_BY_NET //\"TRANSAC NEGADA PELA REDE\"\nPinpadFeedback.CARD_INVALIDATED //\"CARTAO ESTA INVALIDADO\"\nPinpadFeedback.DENIED_BY_CARD //\"TRANSAC NEGADA PELO CARTAO\"", "language": "text" } ] } [/block] [block:api-header] { "title": "v2.4.2" } [/block] * Melhorias de *perfomance* [block:api-header] { "title": "v2.4.1" } [/block] * Adicionando suporte para conexões via cabo (ethernet) * Campo signature em caso de necessidade de armazenar a assinatura da transação. * Melhorias de perfomance [block:api-header] { "title": "v2.4.0" } [/block] * Agora a SDK está em no artifactory! siga as instruções de instalação no readme. * Possibilidade de escolher o uso de Pinpads Elavon (que não possuem chaves Stone) * Todos os Providers recebem Context em vez de Activity no construtor * Nova interface StoneActionCallback com um método void onStatusChanged(Action action) para receber eventos adicionais do provider. Esta interface herda de StoneCallbackInterface, então seu uso é opcional. Por enquanto existem somente eventos para transação, mas em breve terá eventos para outros providers. Eventos disponíveis: * TRANSACTION_WAITING_CARD Esperando cartão ser inserido/passado * TRANSACTION_WAITING_PASSWORD Esperando senha do cartão (se houver) * TRANSACTION_SENDING Enviando transação para o servidor * TRANSACTION_WAITING_REMOVE Esperando a remoção do cartão do pinpad (se for chip) [block:api-header] { "title": "v2.3.2" } [/block] * Agora você pode desativar a SDK usando deactivate() em ActiveApplicationProvider * Método execute() do ActiveApplicationProvider descontinuado. Em vez disso, use o método activate(List<String> stoneCodes) * Corrigido bug em LoadTablesProvider no qual pedia um objeto desnecessário no construtor. * Novo campo entryMode no model da transação informando se a transação foi efetuada com chip ou tarja. * Campos e métodos descontinuados. [block:api-header] { "title": "v2.3.1" } [/block] * Corrigido problema na seleção do ambiente de SANDBOX Para atualizar o projeto para transacionar no ambiente de integração deve-se fazer os seguintes passos: * Baixar o arquivo sdk_stone_2.3.1.aar no nosso repositório do [GitHub](https://github.com/stone-payments/sdk-android/tree/master/JARs/Stone) * Após baixado o arquivo deve ser colocado na pasta "SEU_PROJETO"\app\libs * Com seu projeto aberto acrescente o código abaixo: No build.grandle (Project): [block:code] { "codes": [ { "code": "allprojects {\n repositories {\n jcenter()\n flatDir {\n dirs 'libs'\n }\n }\n}", "language": "java" } ] } [/block] No build.grandle (Module:App): [block:code] { "codes": [ { "code": "dependencies {\n compile name: 'sdk_stone_2.3.1', ext: 'aar'\n}", "language": "java" } ] } [/block] [block:callout] { "type": "warning", "body": "É recomendado utilizar o comando Clean Project e Rebuild Project antes dos testes caso esteja utilizando a IDE Android Studio." } [/block] [block:api-header] { "title": "v2.3.0" } [/block] * Nova forma de instalação da lib, utilizando aar, em breve teremos um repositório para distribuir nossas bibliotecas! * Agora você pode definir qual ambiente você quer usar em *runtime*, usando: [block:code] { "codes": [ { "code": "// para integração\nStone.setEnvironment(Environment.SANDBOX)\n\n// produção\nStone.setEnvironment(Environment.PRODUCTION)", "language": "java", "name": "code" } ] } [/block] * `Stone.developerMode()` deprecated em prol do novo modo de escolha de ambiente mencionado acima. * Suporte para novas bandeiras: Elo, Alelo. (Verifique disponibilidade da bandeira no seu stone code com o time de integrações) * Correções no envio de algumas transações para stone. * Bug ao desconectar o pinpad fixed. [block:api-header] { "title": "v2.2.10" } [/block] * Hot fix do endpoint do TMS. * Correções de erro na ativação e download das tabelas AID e CAPK. [block:api-header] { "title": "v2.2.9" } [/block] * Correção do ambiente de homologação. [block:api-header] { "title": "v2.2.8" } [/block] * Suportando a bandeira Ticket. [block:api-header] { "title": "v2.2.7" } [/block] * Correções do erro `ClassNotFoundException`em algumas classes da SDK. [block:api-header] { "title": "v2.2.6" } [/block] * Opção de enviar uma transação não capturada: [block:code] { "codes": [ { "code": "StoneTransaction stoneTransaction = new StoneTransaction();\n// set dos valores da transação\nstoneTransaction.disableCapture(); // desabilita a captura da transação", "language": "java", "name": "code" } ] } [/block] [block:callout] { "type": "warning", "title": "Default", "body": "Por padrão, a transação é capturada!" } [/block] [block:api-header] { "title": "v2.2.5" } [/block] * Transações com tarja sem senha e com senha. * Correções nas conexões com a internet.
[block:api-header] { "title": "2.6.0" } [/block] * Classe StoneTransaction removida da SDK. Agora para fazer transações, preencha diretamente o TransactionObject com as informações necessárias. * Novo provider PosTransactionProvider para efetuar transações com o POS Android. * Novo provider PosPrintProvierpara impressão no POS Android * Método String getAuthorizationCode() removido do TransactionProvider por já ter esse campo no TransactionObject; * Adicionado CONTACTLESS no EntryMode enum. * Todos os erros que geravam o Enum GENERIC_ERROR foram movidos para UNKNOWN_ERROR * Nova permissão SYSTEM_ALERT_WINDOW para desenhar os dígitos da senha em tela no POS android. * Novos Enums de erro: /** SWIPE_INCORRECT, TOO_MANY_CARDS, UNKNOWN_ERROR, INTERNAL_ERROR, // Erros de impressão do POS PRINTER_PRINT_ERROR, PRINTER_BUSY_ERROR, PRINTER_INIT_ERROR, PRINTER_LOW_ENERGY_ERROR, PRINTER_OUT_OF_PAPER_ERROR, PRINTER_UNSUPPORTED_FORMAT_ERROR, // PED ERROR PED_PASS_KEY_ERROR, PED_PASS_USER_CANCELED_ERROR, PED_PASS_NO_PIN_INPUT_ERROR, PED_PASS_TIMEOUT_ERROR, // TRANS ERROR TRANS_APP_BLOCKED_ERROR, TRANS_SELECT_TYPE_USER_CANCELED_ERROR, TRANS_INVALID_AMOUNT_ERROR, TRANS_PASS_MAG_BUT_IS_ICC_ERROR, TRANS_NO_TRANS_TYPE_ERROR, TRANS_WRONG_TRANS_TYPE_ERROR, // CARD ERROR CARD_ERROR, CARD_READ_ERROR, CARD_READ_TIMEOUT_ERROR, CARD_READ_CANCELED_ERROR, CARD_REMOVED_ERROR, CARD_UNSUPPORTED_ERROR, TRANSACTION_OBJECT_NULL_ERROR, - android gradle build tools atualizado para 3.0.1 [block:api-header] { "title": "2.5.7" } [/block] * Provider CancellationProvider agora retorna o actionCode do cancelamento pelo método cancellationProvider.getActionCode() e o status do cancelamento pelo cancellationProvider.getResponseCodeEnum(). * Métodos getTransactionStatus() e getStatusAsString() do CancellationProvider foram removidos em prol dos novos métodos citados acima. * Corrigido bug onde a mensagem de "Transação Aprovada" não aparecia no pinpad em algumas transações * Novo método activate(String stoneCode) para ativar e adicionar um novo stone code na lista de stone codes ativos. * Novo método deactivate(String stoneCode) para desativar somente um stone code da lista de ativos * Corrigido bug onde versões anteriores da SDK recebiam NPE em pinpads já salvos sem o campo novo acqidx do PinpadObject. [block:api-header] { "title": "2.5.6" } [/block] Nova dependência OkHttp para substituir o HttpUrlConnection nas requests da SDK para nossos servidores; Forçando TLS >= 1.2 em todas as requests da SDK; Novo Provider CaptureTransactionProvider para capturar transações cuja requisição foi feita com captura posterior (setando stoneTransaction.capture = false); Correção na efetuação de transações da bandeira SODEXO; Melhoria na captura do CVM do pinpad, forçando o retorno; Gerenciando o uso da chave Elavon/Stone internamente. Não é mais necessário setar Stone.setAcquirer(Acquirer acquirer). Se o Pinpad não tiver nenhuma das duas chaves, a SDK retornará o erro ErrorsEnum.PINPAD_WITHOUT_KEY durante a conexão do pinpad no BluetoothConnectionProvider; Novo ambiente INTERNAL_CERTIFICATION para validação do app pelo time de integrações da Stone; [block:api-header] { "title": "2.5.5" } [/block] * Adicionado campo subMerchantAddress no TransactionObject para editar o endereço do lojista que está efetuando a transação; *Adicionado campo subMerchantCategoryCode no TransactionObject para editar o mcc do lojista que está efetuando a transação; * Adicionado campo shortName no TransactionObject para armazenar em banco opção setada no campo shortName do StoneTransaction; * Adicionado campo capture no TransactionObject para armazenar em banco opção setada no campo capture do StoneTransaction; * Construtor CancellationProvider(Context context, int idFromTransactionInBase, UserModel userModel) depreciado. Em vez dele, use CancellationProvider(Context context, TransactionObject transaction) * Correção no migration da tabela de Transaction onde algumas colunas não estavam sendo inseridas quando atualizadas de versões muito antigas da SDK; * Novos Enums de erro: /** SWIPE_INCORRECT, TOO_MANY_CARDS, UNKNOWN_ERROR, INTERNAL_ERROR, // Erros de impressão do POS PRINTER_PRINT_ERROR, PRINTER_BUSY_ERROR, PRINTER_INIT_ERROR, PRINTER_LOW_ENERGY_ERROR, PRINTER_OUT_OF_PAPER_ERROR, PRINTER_UNSUPPORTED_FORMAT_ERROR, // PED ERROR PED_PASS_KEY_ERROR, PED_PASS_USER_CANCELED_ERROR, PED_PASS_NO_PIN_INPUT_ERROR, PED_PASS_TIMEOUT_ERROR, // TRANS ERROR TRANS_APP_BLOCKED_ERROR, TRANS_SELECT_TYPE_USER_CANCELED_ERROR, TRANS_INVALID_AMOUNT_ERROR, TRANS_PASS_MAG_BUT_IS_ICC_ERROR, TRANS_NO_TRANS_TYPE_ERROR, TRANS_WRONG_TRANS_TYPE_ERROR, // CARD ERROR CARD_ERROR, CARD_READ_ERROR, CARD_READ_TIMEOUT_ERROR, CARD_READ_CANCELED_ERROR, CARD_REMOVED_ERROR, CARD_UNSUPPORTED_ERROR, TRANSACTION_OBJECT_NULL_ERROR, - android gradle build tools atualizado para 3.0.1 [block:api-header] { "title": "2.5.4-1" } [/block] * Corrigido bug onde a transação era efetuada mas não era salva no banco. [block:api-header] { "title": "2.5.4" } [/block] * Correção na leitura de informações de cartões ELO. * Enum GENERIC_ERROR utilizado pelo ActiveApplicationProvider para quando o stone code não é reconhecido foi alterado para INVALID_STONE_CODE_OR_UNKNOWN. * Melhoria na estrutura interna e na performance do TransactionProvider. * Correção no envio do comprovante por email, colocando campo "assinatura" quando não era necessário. * Corrigido bug onde eventualmente o método getListOfErrors() retornava null [block:api-header] { "title": "v2.5.3" } [/block] * Corrigido bug quando o BluetoothConnectionProvider disparava o evento onSuccess duplicado. * Corrigido bug da SDK baixando tabelas toda vez que abria o app. * Support Library atualizado para 27.0.2. [block:api-header] { "title": "v2.5.2" } [/block] * Adicionado campo cancellationDate no TransactionObject para armazenar a data do cancelamento; * Adicionado campo lastConnectionAt no PinpadObject para armazenar a data da última vez que houve conexão com o pinpad; * Todos os erros durante a conexão com o device bluetooth que retornavam em dialog. Agora os erros são adicionados no array de erros do provider. Segue exemplo de uso: [block:code] { "codes": [ { "code": "luetoothConnectionProvider.setConnectionCallback(new StoneCallbackInterface() {\n\n public void onSuccess() {\n //handle success\n }\n\n public void onError() {\n List<ErrorsEnum> listOfErrors = bluetoothConnectionProvider.getListOfErrors();\n if (listOfErrors.contains(ErrorsEnum.PINPAD_ALREADY_CONNECTED)) {\n //Do something\n } else if (listOfErrors.contains(ErrorsEnum.TIME_OUT)) {\n //Do something\n } else if (listOfErrors.contains(ErrorsEnum.DEVICE_NOT_COMPATIBLE)) {\n //Do something\n } else if (listOfErrors.contains(ErrorsEnum.IO_ERROR_WITH_PINPAD)) {\n //Do something\n }\n }\n});", "language": "java" } ] } [/block] * O método Stone.getPinpadListSize() não mais retorna null quando a lista de pinpads estiver vazia * Refatorado o gerenciamento das versões das tabelas, corrigindo o problema de carregar tabelas a cada transação; * Construtores LoadTablesProvider(Context, GcrRequestCommand, PinpadObject) e LoadTablesProvider(Context, String, PinpadObject) depreciados. Use LoadTablesProvider(Context context, PinpadObject) em vez disso; [block:api-header] { "title": "v2.5.1" } [/block] * SendEmailProvider depreciado em prol do uso do SendEmailTransactionProvider * Adicionado flag merchantReceipt (default false) pra informar se é pra enviar a via do cliente ou do estabelecimento no SendEmailTransactionProvider * Método setEmailToSent e setEmailsToSent da classe SendEmailTransactionProvider depreciado, usar addTo()/setTo() para setar o destinatário do email * Possibilidade de definir o remetente do email no SendEmailTransactionProvider no método setFrom * Adicionado campo balance no TransactionObject pra transações voucher (SODEXO, Ticket, etc...) * Bug de cartões (principalmente HIPER) retornando UNKNOWN fixed * Novos métodos (findTransactionWithAuthorizationCode(), findTransactionWithInitiatorTransactionKey() e findTransactionByFilter() ) no TransactionDAO para busca das transações no banco local da SDK. [block:api-header] { "title": "v2.5.0" } [/block] * Permissões android.permission.VIBRATE e android.permission.ACCESS_WIFI_STATE removidas da SDK * Novos campos cvm e serviceCode no TransactionObject * appcompat-v7 atualizado para 26.1.0 * Enum de feedback CARD_REMOVE deprecated por não ser uma mensagem alterável. * Enum de feedback REVERSAL deprecated pois não mandamos nenhuma mensagem para o pinpad * Revertendo transações quando negado pelo cartão * Bug de mostrar mensagem RETIRE O CARTÃO em cartões mágnéticos fixed * gson atualizado de 2.8.1 para 2.8.2 * Várias melhorias de performance [block:api-header] { "title": "v2.4.8" } [/block] * Adicionando REVERSING_TRANSACTION_WITH_ERROR ao enum Action * Revertendo transações automaticamente, quando ocorrer um erro [block:callout] { "type": "warning", "body": "As transações que não foram processadas por um erro de conexão devem ter canceladas utilizando o ReversalProvider" } [/block] [block:api-header] { "title": "v2.4.7" } [/block] * Adicionando o status WITH_ERROR para transações com erro e que precisam ser canceladas (ex: timeout) * Adicionando o ReversalProvider para varrer o banco de transações e cancelar as transações com o status WITH_ERROR * Correção no cancelamento de transações [block:code] { "codes": [ { "code": "ReversalProvider reversalProvider = new ReversalProvider(this);\nreversalProvider.setDialogMessage(\"Cancelando transação com erro\");\nreversalProvider.isDefaultUI();\nreversalProvider.setConnectionCallback(new StoneCallbackInterface() {\n @Override\n public void onSuccess() {\n // code code code\n }\n\n @Override\n public void onError() {\n // code code code\n }\n});", "language": "text", "name": "exemplo do ReversalProvider" } ] } [/block] [block:api-header] { "title": "v2.4.6" } [/block] * Downgrade da targetSdkVersion de 26 para 25 devido a problemas de compatibilidade com APIs antigas * URL de ativação do ambiente CERTIFICATION alterada * Corrigido bug ao executar a migration de versões anteriores à 2.3.0 * Downgrade da XStream para 1.4.7 devido a problemas com Java8 nas versões mais novas * Remoção da permissão READ_PHONE_STATE da SDK! [block:api-header] { "title": "v2.4.5" } [/block] Localização do BluetoothConnectionProvider corrigida. [block:api-header] { "title": "v2.4.4" } [/block] * Melhoria e update das dependências * Personalização das mensagens exibidas no Pinpad. No TransactionProvider, dois novos métodos foram implementados * Novos Métodos: [block:code] { "codes": [ { "code": "setPinpadFeedbackMessage(PinpadFeedback key, String message) para customizar uma mensagem específica\nsetPinpadFeedbackMessages(Map<PinpadFeedback, String> pinpadFeedbackMessages) para personalizar todas as mensagens de uma vez\nMensagens disponíveis para personalização e suas mensagens default (em comentário):\n\nPinpadFeedback.DENIED //\"TRANSAC NEGADA\"\nPinpadFeedback.PROCESSING //\"PROCESSANDO..\"\nPinpadFeedback.APPROVED //\"TRANSAC APROVADA\"\nPinpadFeedback.CARD_REMOVE //\"RETIRE O CARTAO\"\nPinpadFeedback.CARD_WITH_PROBLEMS //\"ICC COM PROBLEMAS\"\nPinpadFeedback.DENIED_BY_NET //\"TRANSAC NEGADA PELA REDE\"\nPinpadFeedback.CARD_INVALIDATED //\"CARTAO ESTA INVALIDADO\"\nPinpadFeedback.DENIED_BY_CARD //\"TRANSAC NEGADA PELO CARTAO\"", "language": "text" } ] } [/block] [block:api-header] { "title": "v2.4.2" } [/block] * Melhorias de *perfomance* [block:api-header] { "title": "v2.4.1" } [/block] * Adicionando suporte para conexões via cabo (ethernet) * Campo signature em caso de necessidade de armazenar a assinatura da transação. * Melhorias de perfomance [block:api-header] { "title": "v2.4.0" } [/block] * Agora a SDK está em no artifactory! siga as instruções de instalação no readme. * Possibilidade de escolher o uso de Pinpads Elavon (que não possuem chaves Stone) * Todos os Providers recebem Context em vez de Activity no construtor * Nova interface StoneActionCallback com um método void onStatusChanged(Action action) para receber eventos adicionais do provider. Esta interface herda de StoneCallbackInterface, então seu uso é opcional. Por enquanto existem somente eventos para transação, mas em breve terá eventos para outros providers. Eventos disponíveis: * TRANSACTION_WAITING_CARD Esperando cartão ser inserido/passado * TRANSACTION_WAITING_PASSWORD Esperando senha do cartão (se houver) * TRANSACTION_SENDING Enviando transação para o servidor * TRANSACTION_WAITING_REMOVE Esperando a remoção do cartão do pinpad (se for chip) [block:api-header] { "title": "v2.3.2" } [/block] * Agora você pode desativar a SDK usando deactivate() em ActiveApplicationProvider * Método execute() do ActiveApplicationProvider descontinuado. Em vez disso, use o método activate(List<String> stoneCodes) * Corrigido bug em LoadTablesProvider no qual pedia um objeto desnecessário no construtor. * Novo campo entryMode no model da transação informando se a transação foi efetuada com chip ou tarja. * Campos e métodos descontinuados. [block:api-header] { "title": "v2.3.1" } [/block] * Corrigido problema na seleção do ambiente de SANDBOX Para atualizar o projeto para transacionar no ambiente de integração deve-se fazer os seguintes passos: * Baixar o arquivo sdk_stone_2.3.1.aar no nosso repositório do [GitHub](https://github.com/stone-payments/sdk-android/tree/master/JARs/Stone) * Após baixado o arquivo deve ser colocado na pasta "SEU_PROJETO"\app\libs * Com seu projeto aberto acrescente o código abaixo: No build.grandle (Project): [block:code] { "codes": [ { "code": "allprojects {\n repositories {\n jcenter()\n flatDir {\n dirs 'libs'\n }\n }\n}", "language": "java" } ] } [/block] No build.grandle (Module:App): [block:code] { "codes": [ { "code": "dependencies {\n compile name: 'sdk_stone_2.3.1', ext: 'aar'\n}", "language": "java" } ] } [/block] [block:callout] { "type": "warning", "body": "É recomendado utilizar o comando Clean Project e Rebuild Project antes dos testes caso esteja utilizando a IDE Android Studio." } [/block] [block:api-header] { "title": "v2.3.0" } [/block] * Nova forma de instalação da lib, utilizando aar, em breve teremos um repositório para distribuir nossas bibliotecas! * Agora você pode definir qual ambiente você quer usar em *runtime*, usando: [block:code] { "codes": [ { "code": "// para integração\nStone.setEnvironment(Environment.SANDBOX)\n\n// produção\nStone.setEnvironment(Environment.PRODUCTION)", "language": "java", "name": "code" } ] } [/block] * `Stone.developerMode()` deprecated em prol do novo modo de escolha de ambiente mencionado acima. * Suporte para novas bandeiras: Elo, Alelo. (Verifique disponibilidade da bandeira no seu stone code com o time de integrações) * Correções no envio de algumas transações para stone. * Bug ao desconectar o pinpad fixed. [block:api-header] { "title": "v2.2.10" } [/block] * Hot fix do endpoint do TMS. * Correções de erro na ativação e download das tabelas AID e CAPK. [block:api-header] { "title": "v2.2.9" } [/block] * Correção do ambiente de homologação. [block:api-header] { "title": "v2.2.8" } [/block] * Suportando a bandeira Ticket. [block:api-header] { "title": "v2.2.7" } [/block] * Correções do erro `ClassNotFoundException`em algumas classes da SDK. [block:api-header] { "title": "v2.2.6" } [/block] * Opção de enviar uma transação não capturada: [block:code] { "codes": [ { "code": "StoneTransaction stoneTransaction = new StoneTransaction();\n// set dos valores da transação\nstoneTransaction.disableCapture(); // desabilita a captura da transação", "language": "java", "name": "code" } ] } [/block] [block:callout] { "type": "warning", "title": "Default", "body": "Por padrão, a transação é capturada!" } [/block] [block:api-header] { "title": "v2.2.5" } [/block] * Transações com tarja sem senha e com senha. * Correções nas conexões com a internet.