{"_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.\n\nA documentação a seguir descreve como deve ser feita a integração.","category":"58403d83c0507319000634f1","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":"58403d83c0507319000634f1","order":0,"next":{"pages":[],"description":""},"updates":[],"__v":0,"link_external":false},{"_id":"58403fc9cee8ec1900c457d3","next":{"pages":[],"description":""},"updates":[],"category":"58403d83c0507319000634f1","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":"58403d83c0507319000634f1","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":"58403d83c0507319000634f1","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. 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. A documentação a seguir descreve como deve ser feita a integração.
{"_id":"59db822f9df755001a3ae9a5","project":"58403d83c0507319000634ed","version":"58403d83c0507319000634f0","category":"58403d83c0507319000634f1","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":"58403d83c0507319000634f1","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":"59db8e3ae59eec0010781914","project":"58403d83c0507319000634ed","version":"58403d83c0507319000634f0","category":"58403d83c0507319000634f1","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":3,"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":"58582d6857d2ec2f0071710a","next":{"pages":[],"description":""},"slug":"conexão-bluetooth-1","__v":1,"body":"[block:api-header]\n{\n  \"title\": \"Conexão Bluetooth\"\n}\n[/block]\nA 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[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]\nEste objeto representa um Pinpad com os seguintes atributos:\n\n\n\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 GlobalInformations. Para obter a lista você pode utilizar o método GlobalInformations .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 GlobalInformations .getPinpadFromListAt(0), **se você estiver conectado somente com um pinpad.**","hidden":false,"link_url":"","project":"58403d83c0507319000634ed","title":"Conexão - Pinpad Bluetooth","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":"58403d83c0507319000634f1","order":4,"type":"basic","updates":["59c044cb35e4940028efb533"],"user":"57ea79f61780cd170064f273","excerpt":"","githubsync":"","parentDoc":null,"sync_unique":"","childrenPages":[]}

Conexão - Pinpad Bluetooth


[block:api-header] { "title": "Conexão Bluetooth" } [/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: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] Este objeto representa um Pinpad com os seguintes atributos: 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 GlobalInformations. Para obter a lista você pode utilizar o método GlobalInformations .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 GlobalInformations .getPinpadFromListAt(0), **se você estiver conectado somente com um pinpad.**
[block:api-header] { "title": "Conexão Bluetooth" } [/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: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] Este objeto representa um Pinpad com os seguintes atributos: 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 GlobalInformations. Para obter a lista você pode utilizar o método GlobalInformations .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 GlobalInformations .getPinpadFromListAt(0), **se você estiver conectado somente com um pinpad.**
{"_id":"59db84744c45e300106031b9","project":"58403d83c0507319000634ed","version":"58403d83c0507319000634f0","category":"58403d83c0507319000634f1","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":"59dbad5f4c45e30010603782","project":"58403d83c0507319000634ed","version":"58403d83c0507319000634f0","category":"58403d83c0507319000634f1","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":6,"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":"transações-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":7,"parentDoc":null,"version":"58403d83c0507319000634f0","category":"58403d83c0507319000634f1","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\": \"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 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\": \"PrintReceipterProvider\",\n    \"7-1\": \"Responsável por realizar impressões de comprovantes de vendas nos Pinpad que possuem suporte para impressão.\",\n    \"8-0\": \"SendEmailProvider\",\n    \"8-1\": \"Responsável por enviar uma nota eletrônica por email.\",\n    \"9-0\": \"TransactionProvider\",\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-0\": \"ValidateTransactionByCardProvider\",\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]","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": "setWorkInBackground (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 false no método setWorkInBackground) 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": "PrintReceipterProvider", "7-1": "Responsável por realizar impressões de comprovantes de vendas nos Pinpad que possuem suporte para impressão.", "8-0": "SendEmailProvider", "8-1": "Responsável por enviar uma nota eletrônica por email.", "9-0": "TransactionProvider", "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.", "10-0": "ValidateTransactionByCardProvider", "10-1": "Verifica se existe transação para o cartão utilizado no TransactionDAO." }, "cols": 2, "rows": 11 } [/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": "setWorkInBackground (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 false no método setWorkInBackground) 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": "PrintReceipterProvider", "7-1": "Responsável por realizar impressões de comprovantes de vendas nos Pinpad que possuem suporte para impressão.", "8-0": "SendEmailProvider", "8-1": "Responsável por enviar uma nota eletrônica por email.", "9-0": "TransactionProvider", "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.", "10-0": "ValidateTransactionByCardProvider", "10-1": "Verifica se existe transação para o cartão utilizado no TransactionDAO." }, "cols": 2, "rows": 11 } [/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":8,"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\": \"GlobalInformations\",\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":"58403d83c0507319000634f1","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": "GlobalInformations", "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": "GlobalInformations", "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":"58582d3457d2ec2f00717108","link_url":"","slug":"comandos-e-outros-1","user":"57ea79f61780cd170064f273","__v":0,"excerpt":"","body":"Esse módulo contém os comandos de leitura e escrita que são utilizados para se comunicar com os Pinpads.\n\nOs mesmos utilizados pelos Providers sempre que necessário.","link_external":false,"order":9,"project":"58403d83c0507319000634ed","title":"Comandos e outros","updates":[],"api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"code":"{}","name":"","status":400,"language":"json"}]},"settings":"","auth":"required","params":[],"url":""},"version":"58403d83c0507319000634f0","parentDoc":null,"sync_unique":"","type":"basic","createdAt":"2016-12-19T18:55:48.760Z","next":{"pages":[],"description":""},"hidden":false,"isReference":false,"category":"58403d83c0507319000634f1","githubsync":"","childrenPages":[]}

Comandos e outros


Esse módulo contém os comandos de leitura e escrita que são utilizados para se comunicar com os Pinpads. Os mesmos utilizados pelos Providers sempre que necessário.
Esse módulo contém os comandos de leitura e escrita que são utilizados para se comunicar com os Pinpads. Os mesmos utilizados pelos Providers sempre que necessário.
{"_id":"59e795ccd099830024a9ff4c","project":"58403d83c0507319000634ed","version":"58403d83c0507319000634f0","category":"58403d83c0507319000634f1","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":10,"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.\n\nEm [Para desenvolvedores](doc:para-desenvolvedores-1)  é descrito como pode-se apontar para o ambiente de teste ou produçã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. Em [Para desenvolvedores](doc:para-desenvolvedores-1) é descrito como pode-se apontar para o ambiente de teste ou 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. Em [Para desenvolvedores](doc:para-desenvolvedores-1) é descrito como pode-se apontar para o ambiente de teste ou produção.
{"_id":"59e89219f40fb0001a130404","project":"58403d83c0507319000634ed","version":"58403d83c0507319000634f0","category":"58403d83c0507319000634f1","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":12,"body":"[block:api-header]\n{\n  \"title\": \"Providers(Provedores)\"\n}\n[/block]\nOsProvedoresdeconteúdogerenciamoacessoaumconjuntoestruturadodedados,assimcomumasimpleschamadaépossívelAtivaraaplicação,Enviare-mail,Enviarumatransaçãoetc.\noUtils(\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[block:api-header]\n{\n  \"title\": \"oComandos 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.","excerpt":"","slug":"componentes","type":"basic","title":"Componentes","__v":0,"parentDoc":null,"childrenPages":[]}

Componentes


[block:api-header] { "title": "Providers(Provedores)" } [/block] OsProvedoresdeconteúdogerenciamoacessoaumconjuntoestruturadodedados,assimcomumasimpleschamadaépossívelAtivaraaplicação,Enviare-mail,Enviarumatransaçãoetc. oUtils( [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:api-header] { "title": "oComandos 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.
[block:api-header] { "title": "Providers(Provedores)" } [/block] OsProvedoresdeconteúdogerenciamoacessoaumconjuntoestruturadodedados,assimcomumasimpleschamadaépossívelAtivaraaplicação,Enviare-mail,Enviarumatransaçãoetc. oUtils( [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:api-header] { "title": "oComandos 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.
{"_id":"59e893f2f40fb0001a13041e","project":"58403d83c0507319000634ed","version":"58403d83c0507319000634f0","category":"58403d83c0507319000634f1","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":13,"body":"Para começar a integração o cliente deve solicitar para integracoes@stone.com.br o **Stone Code**de **Integration** que serve para transacionar no nosso ambiente de homologação (SANDBOX);\n\nCom o **Stone Code** em mãos é só fazer a ativação da aplicação com o Stone Code começar o desenvolvimento no ambiente de testes;\n\nApós o desenvolvimento no ambiente de homologação, o cliente deve entrar em contato com o Representante Comercial um Stone Codede produção, futuramente teremos certificação para as aplicações que utilizam o SDK Mobile Android.","excerpt":"","slug":"como-começar-a-usar","type":"basic","title":"Como começar a usar?","__v":0,"parentDoc":null,"childrenPages":[]}

Como começar a usar?


Para começar a integração o cliente deve solicitar para integracoes@stone.com.br o **Stone Code**de **Integration** que serve para transacionar no nosso ambiente de homologação (SANDBOX); Com o **Stone Code** em mãos é só fazer a ativação da aplicação com o Stone Code começar o desenvolvimento no ambiente de testes; Após o desenvolvimento no ambiente de homologação, o cliente deve entrar em contato com o Representante Comercial um Stone Codede produção, futuramente teremos certificação para as aplicações que utilizam o SDK Mobile Android.
Para começar a integração o cliente deve solicitar para integracoes@stone.com.br o **Stone Code**de **Integration** que serve para transacionar no nosso ambiente de homologação (SANDBOX); Com o **Stone Code** em mãos é só fazer a ativação da aplicação com o Stone Code começar o desenvolvimento no ambiente de testes; Após o desenvolvimento no ambiente de homologação, o cliente deve entrar em contato com o Representante Comercial um Stone Codede produção, futuramente teremos certificação para as aplicações que utilizam o SDK Mobile Android.
{"_id":"58582d459988d00f005506b1","user":"57ea79f61780cd170064f273","version":"58403d83c0507319000634f0","__v":1,"excerpt":"","isReference":false,"order":14,"project":"58403d83c0507319000634ed","api":{"url":"","results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","auth":"required","params":[]},"slug":"preparando-sua-aplicação","title":"Preparando sua aplicação","type":"basic","next":{"pages":[],"description":""},"parentDoc":null,"sync_unique":"","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 e os JARs de integração.\n\nNo repositório, os JARs de integração estão divididos em duas partes, /JARs/Stone/ contém um único jar com as seguintes dependências:\n\n**Base64 Encoder**\n\n* commons-codec-1.9.jar\n\n**JSON**\n\n* gson-2.3.jar\n\n**XML**\n\n* xstream_1.4.7.jar\n[block:callout]\n{\n  \"type\": \"danger\",\n  \"body\": \"Nós recomendamos que os integradores utilizem esse único .jar\"\n}\n[/block]\nOs JARs que estão na pasta /JARs/Dependências/ são todos os JARs que foram mencionados e o .jar da Stone. Você pode utilizer isso caso já possua uma destas libs em sua aplicação.","category":"58403d83c0507319000634f1","createdAt":"2016-12-19T18:56:05.540Z","hidden":false,"link_url":"","githubsync":"","link_external":false,"updates":["59c0443a35e4940028efb522"],"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 e os JARs de integração. No repositório, os JARs de integração estão divididos em duas partes, /JARs/Stone/ contém um único jar com as seguintes dependências: **Base64 Encoder** * commons-codec-1.9.jar **JSON** * gson-2.3.jar **XML** * xstream_1.4.7.jar [block:callout] { "type": "danger", "body": "Nós recomendamos que os integradores utilizem esse único .jar" } [/block] Os JARs que estão na pasta /JARs/Dependências/ são todos os JARs que foram mencionados e o .jar da Stone. Você pode utilizer isso caso já possua uma destas libs em 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 e os JARs de integração. No repositório, os JARs de integração estão divididos em duas partes, /JARs/Stone/ contém um único jar com as seguintes dependências: **Base64 Encoder** * commons-codec-1.9.jar **JSON** * gson-2.3.jar **XML** * xstream_1.4.7.jar [block:callout] { "type": "danger", "body": "Nós recomendamos que os integradores utilizem esse único .jar" } [/block] Os JARs que estão na pasta /JARs/Dependências/ são todos os JARs que foram mencionados e o .jar da Stone. Você pode utilizer isso caso já possua uma destas libs em sua aplicação.
{"_id":"58582d5757d2ec2f00717109","link_external":false,"order":15,"slug":"iniciando-a-integração-1","updates":[],"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":"Transações Administrativas","__v":0,"body":"[block:api-header]\n{\n  \"title\": \"PREPARANDO SUA APLICAÇÃO\"\n}\n[/block]\nApós adicionar o .jar 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\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.setWorkInBackground(false); // 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.","version":"58403d83c0507319000634f0","childrenPages":[]}

Transações Administrativas


[block:api-header] { "title": "PREPARANDO SUA APLICAÇÃO" } [/block] Após adicionar o .jar 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.setWorkInBackground(false); // 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:api-header] { "title": "PREPARANDO SUA APLICAÇÃO" } [/block] Após adicionar o .jar 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.setWorkInBackground(false); // 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.
{"_id":"58582d793ed9a719000c12ae","next":{"pages":[],"description":""},"order":16,"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-transação-1","__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 StoneTransaction.\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"/* Passe o Pinpad que você está conectado. Apenas para lembrar, se você estiver conectado\\n * com apenas UM Pinpad, você deve passar \\\"GlobalInformations.getPinpadFromListAt(0)\\\" */\\nStoneTransaction stoneTransaction = new StoneTransaction(O_PINPAD_QUE_VOCÊ_ESTÁ_CONECTADO);\",\n      \"language\": \"java\"\n    }\n  ]\n}\n[/block]\nEsse objeto representa a sua transação que será enviada. Ela possui os seguintes atributos:+\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    \"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 StoneTransaction, a quantidade de parcelas é passada por um enum chamado InstalmentTransactionEnum, segue a tabela com cada nome e valor:\n\n\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]\n\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"// A seguir deve-se popular o objeto.\\nstoneTransaction.setAmount(valueEditText.getText().toString());\\nstoneTransaction.setEmailClient(null);\\nstoneTransaction.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. */\\nstoneTransaction.setInitiatorTransactionKey(\\\"SEU_IDENTIFICADOR_UNICO_AQUI\\\");\\n\\n// Informa a quantidade de parcelas\\nstoneTransaction.setInstalmentTransactionEnum(instalmentSpinner.getSelectedItemPosition());\\n\\n// Verificação de que forma de pagamento foi selecionada\\nif (debitRadioButton.isChecked() == true) {\\n  stoneTransaction.setTypeOfTransaction(TypeOfTransactionEnum.DEBIT);\\n} else {\\n  stoneTransaction.setTypeOfTransaction(TypeOfTransactionEnum.CREDIT);\\n}\",\n      \"language\": \"java\"\n    }\n  ]\n}\n[/block]\nApós instanciar e popular o objeto StoneTransaction, 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\nLembrando que TransactionProvider segue a mesma estrutura do ActiveApplicationProvider, BluetoothConnectionProvider e os demais. Esse provider pede uma Activity e a StoneTransaction que foi criada anteriormente.\n\nSeguindo o exemplo abaixo:\n\n\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"// Processo para envio da transação\\nfinal TransactionProvider provider = new TransactionProvider([SUA_ACTIVITY_AQUI], stoneTransaction);\\nprovider.setDialogTitle(\\\"Aguarde\\\"); // Título do Dialog\\nprovider.setDialogMessage(\\\"Enviando...\\\"); // Mensagem do Dialog\\nprovider.setWaorkInBackground(false); // Para dar um feedback para o usuário\\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]\nApó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 getTransactionStatus() que retornará um enum com os seguintes valores:\n[block:parameters]\n{\n  \"data\": {\n    \"h-0\": \"Nome\",\n    \"h-1\": \"Valor\",\n    \"0-0\": \"UNKOWN\",\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  },\n  \"cols\": 2,\n  \"rows\": 7\n}\n[/block]\nEm caso de REJECTED e DECLINED, você pode capturar a mensagem do autorizador com o método getMessageFromAuthorize(). Mensagens como por exemplo: “Saldo insuficiente”, “Cartão inválido”, “Violação de segurança”, etc.\n[block:callout]\n{\n  \"type\": \"warning\",\n  \"body\": \"O Pinpad que será utilizado na transação será o que foi passado como parâmetro na instância do StoneTransaction.\"\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 StoneTransaction. [block:code] { "codes": [ { "code": "/* Passe o Pinpad que você está conectado. Apenas para lembrar, se você estiver conectado\n * com apenas UM Pinpad, você deve passar \"GlobalInformations.getPinpadFromListAt(0)\" */\nStoneTransaction stoneTransaction = new StoneTransaction(O_PINPAD_QUE_VOCÊ_ESTÁ_CONECTADO);", "language": "java" } ] } [/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 StoneTransaction, 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] [block:code] { "codes": [ { "code": "// A seguir deve-se popular o objeto.\nstoneTransaction.setAmount(valueEditText.getText().toString());\nstoneTransaction.setEmailClient(null);\nstoneTransaction.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. */\nstoneTransaction.setInitiatorTransactionKey(\"SEU_IDENTIFICADOR_UNICO_AQUI\");\n\n// Informa a quantidade de parcelas\nstoneTransaction.setInstalmentTransactionEnum(instalmentSpinner.getSelectedItemPosition());\n\n// Verificação de que forma de pagamento foi selecionada\nif (debitRadioButton.isChecked() == true) {\n stoneTransaction.setTypeOfTransaction(TypeOfTransactionEnum.DEBIT);\n} else {\n stoneTransaction.setTypeOfTransaction(TypeOfTransactionEnum.CREDIT);\n}", "language": "java" } ] } [/block] Após instanciar e popular o objeto StoneTransaction, 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. Lembrando que TransactionProvider segue a mesma estrutura do ActiveApplicationProvider, BluetoothConnectionProvider e os demais. Esse provider pede uma Activity e a StoneTransaction que foi criada anteriormente. Seguindo o exemplo abaixo: [block:code] { "codes": [ { "code": "// Processo para envio da transação\nfinal TransactionProvider provider = new TransactionProvider([SUA_ACTIVITY_AQUI], stoneTransaction);\nprovider.setDialogTitle(\"Aguarde\"); // Título do Dialog\nprovider.setDialogMessage(\"Enviando...\"); // Mensagem do Dialog\nprovider.setWaorkInBackground(false); // Para dar um feedback para o usuário\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] 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 getTransactionStatus() que retornará um enum com os seguintes valores: [block:parameters] { "data": { "h-0": "Nome", "h-1": "Valor", "0-0": "UNKOWN", "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." }, "cols": 2, "rows": 7 } [/block] Em caso de REJECTED e DECLINED, você pode capturar a mensagem do autorizador com o método getMessageFromAuthorize(). Mensagens como por exemplo: “Saldo insuficiente”, “Cartão inválido”, “Violação de segurança”, etc. [block:callout] { "type": "warning", "body": "O Pinpad que será utilizado na transação será o que foi passado como parâmetro na instância do StoneTransaction." } [/block]
Passar transações com a nova SDK é simples e rápido. A primeira coisa que deve ser feita é instanciar um objeto do tipo StoneTransaction. [block:code] { "codes": [ { "code": "/* Passe o Pinpad que você está conectado. Apenas para lembrar, se você estiver conectado\n * com apenas UM Pinpad, você deve passar \"GlobalInformations.getPinpadFromListAt(0)\" */\nStoneTransaction stoneTransaction = new StoneTransaction(O_PINPAD_QUE_VOCÊ_ESTÁ_CONECTADO);", "language": "java" } ] } [/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 StoneTransaction, 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] [block:code] { "codes": [ { "code": "// A seguir deve-se popular o objeto.\nstoneTransaction.setAmount(valueEditText.getText().toString());\nstoneTransaction.setEmailClient(null);\nstoneTransaction.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. */\nstoneTransaction.setInitiatorTransactionKey(\"SEU_IDENTIFICADOR_UNICO_AQUI\");\n\n// Informa a quantidade de parcelas\nstoneTransaction.setInstalmentTransactionEnum(instalmentSpinner.getSelectedItemPosition());\n\n// Verificação de que forma de pagamento foi selecionada\nif (debitRadioButton.isChecked() == true) {\n stoneTransaction.setTypeOfTransaction(TypeOfTransactionEnum.DEBIT);\n} else {\n stoneTransaction.setTypeOfTransaction(TypeOfTransactionEnum.CREDIT);\n}", "language": "java" } ] } [/block] Após instanciar e popular o objeto StoneTransaction, 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. Lembrando que TransactionProvider segue a mesma estrutura do ActiveApplicationProvider, BluetoothConnectionProvider e os demais. Esse provider pede uma Activity e a StoneTransaction que foi criada anteriormente. Seguindo o exemplo abaixo: [block:code] { "codes": [ { "code": "// Processo para envio da transação\nfinal TransactionProvider provider = new TransactionProvider([SUA_ACTIVITY_AQUI], stoneTransaction);\nprovider.setDialogTitle(\"Aguarde\"); // Título do Dialog\nprovider.setDialogMessage(\"Enviando...\"); // Mensagem do Dialog\nprovider.setWaorkInBackground(false); // Para dar um feedback para o usuário\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] 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 getTransactionStatus() que retornará um enum com os seguintes valores: [block:parameters] { "data": { "h-0": "Nome", "h-1": "Valor", "0-0": "UNKOWN", "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." }, "cols": 2, "rows": 7 } [/block] Em caso de REJECTED e DECLINED, você pode capturar a mensagem do autorizador com o método getMessageFromAuthorize(). Mensagens como por exemplo: “Saldo insuficiente”, “Cartão inválido”, “Violação de segurança”, etc. [block:callout] { "type": "warning", "body": "O Pinpad que será utilizado na transação será o que foi passado como parâmetro na instância do StoneTransaction." } [/block]
{"_id":"58582da1e286ba2500cca583","slug":"provedor-de-impressão-1","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.setWorkInBackground(false);\\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.+","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":17,"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.setWorkInBackground(false);\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.+
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.setWorkInBackground(false);\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.+
{"_id":"58582dbc57d2ec2f0071710b","project":"58403d83c0507319000634ed","slug":"comprovante-de-transação-recibo","hidden":false,"next":{"pages":[],"description":""},"type":"basic","version":"58403d83c0507319000634f0","githubsync":"","title":"Comprovante de transação ( recibo )","category":"58403d83c0507319000634f1","order":18,"parentDoc":null,"sync_unique":"","updates":[],"__v":0,"body":"O provedor de impressão, PrintReceiptProvider, pode ser utilizado** apenas com pinpads que possuam suporte a print.** \n\nNa assinatura do construtor, o PrintProvider irá pedir quatro parâmetros, um Context, um PinpadObject (Pinpad que irá imprimir o seu comprovante), o ID da transação que deseja imprimir e um UserModel que representa o seu usuário, que contém as informações necessárias para a impressão.\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"// GlobalInformations.getPinpadFromListAt(0) é o Pinpad conectado, que está na posição zero.\\n// idTransaction é o id (int) da transação que se deseja imprimir e que está salvo no TransactionDAO.\\n// GlobalInformations.getUserModel(0) é o usuário atual do aplicativo, que está na posição zero.\\nfinal PrintProvider printProvider = new PrintProvider(SEU_CONTEXT_AQUI, GlobalInformations.getPinpadFromListAt(0), idTransaction, GlobalInformations.getUserModel(0));\\n\\nprintProvider.setWorkInBackground(false);\\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]\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[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]\nPor padrão, todas as notinhas são impressas com a logo da Stone.\n[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, para acessar o transactionObject veja 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[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)\",\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  },\n  \"cols\": 2,\n  \"rows\": 22\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":[]}

Comprovante de transação ( recibo )


O provedor de impressão, PrintReceiptProvider, pode ser utilizado** apenas com pinpads que possuam suporte a print.** Na assinatura do construtor, o PrintProvider irá pedir quatro parâmetros, um Context, um PinpadObject (Pinpad que irá imprimir o seu comprovante), o ID da transação que deseja imprimir e um UserModel que representa o seu usuário, que contém as informações necessárias para a impressão. [block:code] { "codes": [ { "code": "// GlobalInformations.getPinpadFromListAt(0) é o Pinpad conectado, que está na posição zero.\n// idTransaction é o id (int) da transação que se deseja imprimir e que está salvo no TransactionDAO.\n// GlobalInformations.getUserModel(0) é o usuário atual do aplicativo, que está na posição zero.\nfinal PrintProvider printProvider = new PrintProvider(SEU_CONTEXT_AQUI, GlobalInformations.getPinpadFromListAt(0), idTransaction, GlobalInformations.getUserModel(0));\n\nprintProvider.setWorkInBackground(false);\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] 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). [block:image] { "images": [ { "image": [ "https://files.readme.io/a72d3af-recibo.PNG", "recibo.PNG", 330, 357, "#f3f3db" ] } ] } [/block] Por padrão, todas as notinhas são impressas com a logo da Stone. [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, para acessar o transactionObject veja 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. [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)", "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.)" }, "cols": 2, "rows": 22 } [/block]
O provedor de impressão, PrintReceiptProvider, pode ser utilizado** apenas com pinpads que possuam suporte a print.** Na assinatura do construtor, o PrintProvider irá pedir quatro parâmetros, um Context, um PinpadObject (Pinpad que irá imprimir o seu comprovante), o ID da transação que deseja imprimir e um UserModel que representa o seu usuário, que contém as informações necessárias para a impressão. [block:code] { "codes": [ { "code": "// GlobalInformations.getPinpadFromListAt(0) é o Pinpad conectado, que está na posição zero.\n// idTransaction é o id (int) da transação que se deseja imprimir e que está salvo no TransactionDAO.\n// GlobalInformations.getUserModel(0) é o usuário atual do aplicativo, que está na posição zero.\nfinal PrintProvider printProvider = new PrintProvider(SEU_CONTEXT_AQUI, GlobalInformations.getPinpadFromListAt(0), idTransaction, GlobalInformations.getUserModel(0));\n\nprintProvider.setWorkInBackground(false);\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] 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). [block:image] { "images": [ { "image": [ "https://files.readme.io/a72d3af-recibo.PNG", "recibo.PNG", 330, 357, "#f3f3db" ] } ] } [/block] Por padrão, todas as notinhas são impressas com a logo da Stone. [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, para acessar o transactionObject veja 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. [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)", "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.)" }, "cols": 2, "rows": 22 } [/block]
{"_id":"58582dcebfc4771b008054be","sync_unique":"","user":"57ea79f61780cd170064f273","body":"O provider 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:callout]\n{\n  \"type\": \"warning\",\n  \"body\": \"ValidateTransactionByCardProvider (Tópico 2.11) 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":19,"type":"basic","childrenPages":[]}

Provedor de cancelamento


O provider 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:callout] { "type": "warning", "body": "ValidateTransactionByCardProvider (Tópico 2.11) para validar se a transação que será cancelada foi realizada com o mesmo cartão que consta no TransactionDAO." } [/block]
O provider 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:callout] { "type": "warning", "body": "ValidateTransactionByCardProvider (Tópico 2.11) para validar se a transação que será cancelada foi realizada com o mesmo cartão que consta no TransactionDAO." } [/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":20,"__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":21,"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.setWorkInBackground(false); // 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":22,"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.setWorkInBackground(false); // 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.setWorkInBackground(false); // 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-validação-de-transação-1","sync_unique":"","version":"58403d83c0507319000634f0","__v":0,"order":23,"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.setWorkInBackground(false);\\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.setWorkInBackground(false);\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.setWorkInBackground(false);\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":25,"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":"58582e37b0fe4f2500259b5f","category":"58403d83c0507319000634f1","hidden":false,"link_external":false,"project":"58403d83c0507319000634ed","updates":[],"title":"Status de comandos","type":"basic","user":"57ea79f61780cd170064f273","githubsync":"","order":26,"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\": \"GENERIC_ERROR\",\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  },\n  \"cols\": 2,\n  \"rows\": 24\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":"58403d83c0507319000634f1","createdAt":"2016-12-19T19:00:21.934Z","link_external":false,"link_url":"","next":{"pages":[],"description":""},"order":27,"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": "GENERIC_ERROR", "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." }, "cols": 2, "rows": 24 } [/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": "GENERIC_ERROR", "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." }, "cols": 2, "rows": 24 } [/block]
{"_id":"58582e5c57d2ec2f0071710c","isReference":false,"parentDoc":null,"slug":"para-desenvolvedores-1","title":"Para desenvolvedores","__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":29,"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\\nGlobalInformations.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":[]}

Para desenvolvedores


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\nGlobalInformations.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\nGlobalInformations.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":"59dbaa56c92dcd001c440edf","project":"58403d83c0507319000634ed","version":"58403d83c0507319000634f0","category":"58403d83c0507319000634f1","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":30,"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":"códigos-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":"59e79462602a8f00269431db","project":"58403d83c0507319000634ed","version":"58403d83c0507319000634f0","category":"58403d83c0507319000634f1","user":"59de082aed35e800383f94b6","updates":[],"next":{"pages":[],"description":""},"createdAt":"2017-10-18T17:50:26.418Z","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":31,"body":"[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 |","excerpt":"","slug":"comprovantes","type":"basic","title":"Exemplo de comprovantes","__v":0,"parentDoc":null,"childrenPages":[]}

Exemplo de comprovantes


[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 |
[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":"5a0ec83a36f38100346b7557","project":"58403d83c0507319000634ed","version":"58403d83c0507319000634f0","category":"58403d83c0507319000634f1","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":999,"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 StoneTransaction, 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 e a StoneTransaction que foi criada anteriormente. \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 GlobalInformations. Para obter a lista, você pode utilizar o método GlobalInformations .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 GlobalInformations .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: MobiPin 10, D180, D200. \n[block:api-header]\n{\n  \"title\": \"Existem modelos de Pinpads com impressora?\"\n}\n[/block]\nSim. A Stone possui alguns modelos de terminais Pinpads com comunicação Bluetooth e com impressora homologados. Fale conosco para entender quais são os modelos disponíveis.  \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]\nVisa, Mastercard, ELO e ALELO.\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 através 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.","excerpt":"","slug":"faq-dúvidas-frequentes","type":"basic","title":"FAQ - Dúvidas frequentes","__v":0,"childrenPages":[]}

FAQ - 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 StoneTransaction, 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 e a StoneTransaction que foi criada anteriormente. 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 GlobalInformations. Para obter a lista, você pode utilizar o método GlobalInformations .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 GlobalInformations .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: MobiPin 10, D180, D200. [block:api-header] { "title": "Existem modelos de Pinpads com impressora?" } [/block] Sim. A Stone possui alguns modelos de terminais Pinpads com comunicação Bluetooth e com impressora homologados. Fale conosco para entender quais são os modelos disponíveis. [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 e ALELO. [block:api-header] { "title": "Preciso usar o SAK?" } [/block] Não, o SAK é uma informação utilizada pelo SDK Android conforme a ativação através 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": "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 StoneTransaction, 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 e a StoneTransaction que foi criada anteriormente. 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 GlobalInformations. Para obter a lista, você pode utilizar o método GlobalInformations .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 GlobalInformations .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: MobiPin 10, D180, D200. [block:api-header] { "title": "Existem modelos de Pinpads com impressora?" } [/block] Sim. A Stone possui alguns modelos de terminais Pinpads com comunicação Bluetooth e com impressora homologados. Fale conosco para entender quais são os modelos disponíveis. [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 e ALELO. [block:api-header] { "title": "Preciso usar o SAK?" } [/block] Não, o SAK é uma informação utilizada pelo SDK Android conforme a ativação através 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.
{"_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":"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\": \"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":"Changelog","__v":0,"parentDoc":null,"childrenPages":[]}

Changelog

Alterações realizadas na aplicação

[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": "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.