{"__v":0,"_id":"58403d83c0507319000634f3","api":{"auth":"required","params":[],"results":{"codes":[]},"settings":"","url":""},"body":"","category":"58403d83c0507319000634f1","createdAt":"2016-12-01T15:10:59.334Z","excerpt":"","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","next":{"pages":[],"description":""},"order":0,"parentDoc":null,"project":"58403d83c0507319000634ed","slug":"getting-started","sync_unique":"","title":"Conceitos Básicos","type":"basic","updates":[],"user":"57ea79f61780cd170064f273","version":"58403d83c0507319000634f0","childrenPages":[{"__v":0,"_id":"58403f85cee8ec1900c457d2","api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","auth":"required","params":[],"url":""},"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","category":"58403d83c0507319000634f1","createdAt":"2016-12-01T15:19:33.167Z","excerpt":"","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","next":{"pages":[],"description":""},"order":0,"parentDoc":"58403d83c0507319000634f3","project":"58403d83c0507319000634ed","slug":"como-funciona-o-sdk-v2","sync_unique":"","title":"Como funciona o SDK v2","type":"basic","updates":[],"user":"57ea79f61780cd170064f273","version":"58403d83c0507319000634f0"},{"__v":0,"_id":"58403fc9cee8ec1900c457d3","api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","auth":"required","params":[],"url":""},"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]","category":"58403d83c0507319000634f1","createdAt":"2016-12-01T15:20:41.634Z","excerpt":"","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","next":{"pages":[],"description":""},"order":1,"parentDoc":"58403d83c0507319000634f3","project":"58403d83c0507319000634ed","slug":"providers","sync_unique":"","title":"Providers","type":"basic","updates":[],"user":"57ea79f61780cd170064f273","version":"58403d83c0507319000634f0"},{"__v":0,"_id":"58403fd1cee8ec1900c457d4","api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","auth":"required","params":[],"url":""},"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","createdAt":"2016-12-01T15:20:49.959Z","excerpt":"","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","next":{"pages":[],"description":""},"order":2,"parentDoc":"58403d83c0507319000634f3","project":"58403d83c0507319000634ed","slug":"utils","sync_unique":"","title":"Utils","type":"basic","updates":[],"user":"57ea79f61780cd170064f273","version":"58403d83c0507319000634f0"},{"__v":0,"_id":"58403fdb29e3ff0f000d85cb","api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","auth":"required","params":[],"url":""},"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.","category":"58403d83c0507319000634f1","createdAt":"2016-12-01T15:20:59.048Z","excerpt":"","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","next":{"pages":[],"description":""},"order":3,"parentDoc":"58403d83c0507319000634f3","project":"58403d83c0507319000634ed","slug":"comandos-e-outros","sync_unique":"","title":"Comandos e outros","type":"basic","updates":[],"user":"57ea79f61780cd170064f273","version":"58403d83c0507319000634f0"}]}

Conceitos Básicos


{"__v":0,"_id":"58582d0ebfc4771b008054bd","api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","auth":"required","params":[],"url":""},"body":"O SDK v2 segue a estrutura da imagem abaixo:\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]\nO SDK foi dividida em 4 módulos:\n\n* Providers\n\n* Utils\n\n* Comandos\n\n* Outros","category":"58403d83c0507319000634f1","createdAt":"2016-12-19T18:55:10.807Z","excerpt":"","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","next":{"pages":[],"description":""},"order":1,"parentDoc":null,"project":"58403d83c0507319000634ed","slug":"como-funciona-o-sdk-v2-1","sync_unique":"","title":"Como funciona o SDK v2","type":"basic","updates":[],"user":"57ea79f61780cd170064f273","version":"58403d83c0507319000634f0","childrenPages":[]}

Como funciona o SDK v2


O SDK v2 segue a estrutura da imagem abaixo: [block:image] { "images": [ { "image": [ "https://files.readme.io/1ad4d58-estrutura.PNG", "estrutura.PNG", 631, 410, "#f25d92" ] } ] } [/block] O SDK foi dividida em 4 módulos: * Providers * Utils * Comandos * Outros
O SDK v2 segue a estrutura da imagem abaixo: [block:image] { "images": [ { "image": [ "https://files.readme.io/1ad4d58-estrutura.PNG", "estrutura.PNG", 631, 410, "#f25d92" ] } ] } [/block] O SDK foi dividida em 4 módulos: * Providers * Utils * Comandos * Outros
{"__v":0,"_id":"58582d1c9988d00f005506ae","api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","auth":"required","params":[],"url":""},"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’.\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 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[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 possum 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]","category":"58403d83c0507319000634f1","createdAt":"2016-12-19T18:55:24.113Z","excerpt":"","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","next":{"pages":[],"description":""},"order":2,"parentDoc":null,"project":"58403d83c0507319000634ed","slug":"providers-1","sync_unique":"","title":"Providers","type":"basic","updates":[],"user":"57ea79f61780cd170064f273","version":"58403d83c0507319000634f0","childrenPages":[]}

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 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 exibá 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 possum 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 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’. 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 exibá 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 possum 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]
{"__v":0,"_id":"58582d269988d00f005506af","api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","auth":"required","params":[],"url":""},"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ção 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]","category":"58403d83c0507319000634f1","createdAt":"2016-12-19T18:55:34.963Z","excerpt":"","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","next":{"pages":[],"description":""},"order":3,"parentDoc":null,"project":"58403d83c0507319000634ed","slug":"utils-1","sync_unique":"","title":"Utils","type":"basic","updates":[],"user":"57ea79f61780cd170064f273","version":"58403d83c0507319000634f0","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ção 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ção 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]
{"__v":0,"_id":"58582d3457d2ec2f00717108","api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","auth":"required","params":[],"url":""},"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.","category":"58403d83c0507319000634f1","createdAt":"2016-12-19T18:55:48.760Z","excerpt":"","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","next":{"pages":[],"description":""},"order":4,"parentDoc":null,"project":"58403d83c0507319000634ed","slug":"comandos-e-outros-1","sync_unique":"","title":"Comandos e outros","type":"basic","updates":[],"user":"57ea79f61780cd170064f273","version":"58403d83c0507319000634f0","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.
{"__v":0,"_id":"58403e98cee8ec1900c457d0","api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","auth":"required","params":[],"url":""},"body":"","category":"58403d83c0507319000634f1","createdAt":"2016-12-01T15:15:36.698Z","excerpt":"","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","next":{"pages":[],"description":""},"order":5,"parentDoc":null,"project":"58403d83c0507319000634ed","slug":"tutorial-de-integração","sync_unique":"","title":"Tutorial de Integração","type":"basic","updates":[],"user":"57ea79f61780cd170064f273","version":"58403d83c0507319000634f0","childrenPages":[{"__v":0,"_id":"58403fedcee8ec1900c457d6","api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","auth":"required","params":[],"url":""},"body":"Para você iniciar a integração com a Stone, existe um repositório no GitHub no qual você pode obter o nosso app demo que te ajudará a integrar de uma forma rápidacom a SDK e os JARs de integração.\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\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\n\n\n\n[block:callout]\n{\n  \"type\": \"warning\",\n  \"title\": \"Nós recomendamos que os integradores utilizem esse único .jar\",\n  \"body\": \"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 você já possua uma destas libs em sua aplicação.\"\n}\n[/block]","category":"58403d83c0507319000634f1","createdAt":"2016-12-01T15:21:17.245Z","excerpt":"","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","next":{"pages":[],"description":""},"order":0,"parentDoc":"58403e98cee8ec1900c457d0","project":"58403d83c0507319000634ed","slug":"preparando-a-sua-aplicação","sync_unique":"","title":"Preparando a sua aplicação","type":"basic","updates":[],"user":"57ea79f61780cd170064f273","version":"58403d83c0507319000634f0"},{"__v":0,"_id":"58403ff9c0507319000634f6","api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","auth":"required","params":[],"url":""},"body":"Após adicionar o .jar de integração no seu projeto, é importante que você chame o método na Main do seu projeto:\n\n\n``StoneStart.init( [SUA MAIN ACTIVITY] )``\n\n\nEsse método irá retornar uma lista de objetos do tipo UserModel.\n\nUserModel representa o seu usuário, ele irá carregar as informações em cache (estas informações são utilizadas constantemente pela SDK). Caso esse método retorne null, indica que você não fez a chamada do provider ActiveApplicationProvider, como temos de exemplo o código abaixo:\n\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"// Este deve ser, obrigatoriamente, o primeiro método a ser chamado. É um método que trabalha com sessão.\\nList<UserModel> listOfUser = StoneStart.init(SUA_MAIN_ACTIVITY_AQUI);\\n\\n// Se retornar nulo, você provavelmente não ativou o SDK ou as informações do Stone SDK foram excluídos.\\nif (listOfUser == null) {\\n  List<String> stoneCodeToActiveList = new ArrayList<String>();\\n  stoneCodeToActiveList.add(STONE_PRODUCT_KEY);\\n\\n  ActiveApplicationProvider activeApplicationProvider = new ActiveApplicationProvider(SUA_MAIN_ACTIVITY_AQUI, stoneCodeToActiveList); // Você deve colocar seu StoneCode aqui.\\n  activeApplicationProvider.setDialogMessage(\\\"Ativando o aplicativo\\\");\\n  activeApplicationProvider.setDialogTitle(\\\"Aguarde\\\");\\n  activeApplicationProvider.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.","category":"58403d83c0507319000634f1","createdAt":"2016-12-01T15:21:29.505Z","excerpt":"","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","next":{"pages":[],"description":""},"order":1,"parentDoc":"58403e98cee8ec1900c457d0","project":"58403d83c0507319000634ed","slug":"iniciando-a-integração","sync_unique":"","title":"Iniciando a integração","type":"basic","updates":[],"user":"57ea79f61780cd170064f273","version":"58403d83c0507319000634f0"},{"__v":0,"_id":"5840400dc0507319000634f7","api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","auth":"required","params":[],"url":""},"body":"A conexão Bluetooth é realizada também pela SDK, você deverá utilizar o BluetoothConnectionProvider para criar conexões com os Pinpads.\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.\nPara utilizar o BluetoothConnectionProvider, você precisará passar um parâmetro do tipo PinpadObject.\nEste objeto representa um Pinpad com os seguintes atributos:\n[block:parameters]\n{\n  \"data\": {\n    \"h-0\": \"Tipo\",\n    \"h-1\": \"Nome\",\n    \"h-2\": \"Função\",\n    \"0-0\": \"Integer\",\n    \"0-1\": \"id\",\n    \"0-2\": \"ID do Pinpad quando for carregado pelo PinpadDAO.\",\n    \"1-0\": \"String\",\n    \"1-1\": \"name\",\n    \"1-2\": \"Nome do Pinpad (format: MODELO-SERIAL).\",\n    \"2-0\": \"String\",\n    \"2-1\": \"macAddress\",\n    \"2-2\": \"Mac address do dispositivo bluetooth\",\n    \"3-0\": \"boolean\",\n    \"3-1\": \"printSupport\",\n    \"3-2\": \"Se o Pinpad possui suporte para impressão\",\n    \"4-0\": \"String\",\n    \"4-1\": \"timeToConnect\",\n    \"4-2\": \"Tempo que levou para criar a última conexão.\",\n    \"5-0\": \"int\",\n    \"5-1\": \"majorDevice\",\n    \"5-2\": \"O tipo do Bluetooth (headset, phone, pc, etc.).\"\n  },\n  \"cols\": 3,\n  \"rows\": 6\n}\n[/block]\nPara passar 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.\nFeito isso e 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 não havendo conexão.\n[block:callout]\n{\n  \"type\": \"warning\",\n  \"body\": \"Sempre 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]","category":"58403d83c0507319000634f1","createdAt":"2016-12-01T15:21:49.915Z","excerpt":"","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","next":{"pages":[],"description":""},"order":2,"parentDoc":"58403e98cee8ec1900c457d0","project":"58403d83c0507319000634ed","slug":"conexão-bluetooth","sync_unique":"","title":"Conexão Bluetooth","type":"basic","updates":[],"user":"57ea79f61780cd170064f273","version":"58403d83c0507319000634f0"},{"__v":0,"_id":"5840401dcee8ec1900c457d7","api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","auth":"required","params":[],"url":""},"body":"Passar transações com a nova SDK é simples e rápido. A primeira coisa que deve se fazer é 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[block:parameters]\n{\n  \"data\": {\n    \"h-0\": \"Tipo\",\n    \"h-1\": \"Nome\",\n    \"h-2\": \"Função\",\n    \"0-0\": \"String\",\n    \"0-1\": \"amount\",\n    \"0-2\": \"Valor da transação.\",\n    \"1-0\": \"String\",\n    \"1-1\": \"requestId\",\n    \"1-2\": \"ID do pedido.\",\n    \"2-0\": \"String\",\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    \"0-1\": \"À vista\",\n    \"1-0\": \"TWO_INSTALMENT_NO_INTEREST\",\n    \"1-1\": \"2 vezes sem juros\",\n    \"2-0\": \"THREE_INSTALMENT_NO_INTEREST\",\n    \"2-1\": \"3 vezes sem juros\",\n    \"3-0\": \"FOUR_INSTALMENT_NO_INTEREST\",\n    \"3-1\": \"4 vezes sem juros\",\n    \"4-0\": \"FIVE_INSTALMENT_NO_INTEREST\",\n    \"4-1\": \"5 vezes sem juros\",\n    \"5-0\": \"SIX_INSTALMENT_NO_INTEREST\",\n    \"5-1\": \"6 vezes sem juros\",\n    \"6-0\": \"SEVEN_INSTALMENT_NO_INTEREST\",\n    \"6-1\": \"7 vezes sem juros\",\n    \"7-0\": \"EIGHT_INSTALMENT_NO_INTEREST\",\n    \"7-1\": \"8 vezes sem juros\",\n    \"8-0\": \"NINE_INSTALMENT_NO_INTEREST\",\n    \"8-1\": \"9 vezes sem juros\",\n    \"9-0\": \"TEN_INSTALMENT_NO_INTEREST\",\n    \"9-1\": \"10 vezes sem juros\",\n    \"10-0\": \"ELEVEN_INSTALMENT_NO_INTEREST\",\n    \"10-1\": \"11 vezes sem juros\",\n    \"11-0\": \"TWELVE_INSTALMENT_NO_INTEREST\",\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[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    \"2-0\": \"DECLINED\",\n    \"3-0\": \"CANCELLED\",\n    \"4-0\": \"PARTIAL_APPROVED\",\n    \"5-0\": \"TECHNICAL_ERROR\",\n    \"6-0\": \"REJECTED\",\n    \"1-1\": \"Transação aprovada com sucesso.\",\n    \"2-1\": \"Transação negada.\",\n    \"3-1\": \"Transação cancelada (ocorre no cancelamento, ou seja, CancellationProvider).\",\n    \"4-1\": \"Transação foi parcialmente aprovada.\",\n    \"5-1\": \"Erro técnico (ocorreu um erro ao processor a mensagem no autorizador).\",\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\": \"info\",\n  \"body\": \"O Pinpad que será utilizado na transação, será o que foi passado como parâmetro na instancia do StoneTransaction.\"\n}\n[/block]","category":"58403d83c0507319000634f1","createdAt":"2016-12-01T15:22:05.079Z","excerpt":"","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","next":{"pages":[],"description":""},"order":3,"parentDoc":"58403e98cee8ec1900c457d0","project":"58403d83c0507319000634ed","slug":"provedor-de-transação","sync_unique":"","title":"Provedor de transação","type":"basic","updates":[],"user":"57ea79f61780cd170064f273","version":"58403d83c0507319000634f0"},{"__v":0,"_id":"5840402c63e13523002d019a","api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","auth":"required","params":[],"url":""},"body":"","category":"58403d83c0507319000634f1","createdAt":"2016-12-01T15:22:20.579Z","excerpt":"","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","next":{"pages":[],"description":""},"order":4,"parentDoc":"58403e98cee8ec1900c457d0","project":"58403d83c0507319000634ed","slug":"provedor-de-impressão","sync_unique":"","title":"Provedor de impressão","type":"basic","updates":[],"user":"57ea79f61780cd170064f273","version":"58403d83c0507319000634f0"},{"__v":0,"_id":"5840405bc0507319000634f8","api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","auth":"required","params":[],"url":""},"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\n\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/311e4ad-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.","category":"58403d83c0507319000634f1","createdAt":"2016-12-01T15:23:07.287Z","excerpt":"","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","next":{"pages":[],"description":""},"order":5,"parentDoc":"58403e98cee8ec1900c457d0","project":"58403d83c0507319000634ed","slug":"provedor-de-impressão-comprovante-de-transação-recibo","sync_unique":"","title":"Provedor de Impressão - Comprovante de transação (recibo)","type":"basic","updates":[],"user":"57ea79f61780cd170064f273","version":"58403d83c0507319000634f0"},{"__v":0,"_id":"5840407129e3ff0f000d85cd","api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","auth":"required","params":[],"url":""},"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\n\n[block:callout]\n{\n  \"type\": \"warning\",\n  \"body\": \"Recomendamos que use o provedor 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]","category":"58403d83c0507319000634f1","createdAt":"2016-12-01T15:23:29.288Z","excerpt":"","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","next":{"pages":[],"description":""},"order":6,"parentDoc":"58403e98cee8ec1900c457d0","project":"58403d83c0507319000634ed","slug":"provedor-de-cancelamento","sync_unique":"","title":"Provedor de cancelamento","type":"basic","updates":[],"user":"57ea79f61780cd170064f273","version":"58403d83c0507319000634f0"},{"__v":0,"_id":"5840407a63e13523002d019b","api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","auth":"required","params":[],"url":""},"body":"DisplayMessageProvider exibe uma mensagem de até 32 caracteres a tela do Pinpad.","category":"58403d83c0507319000634f1","createdAt":"2016-12-01T15:23:38.404Z","excerpt":"","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","next":{"pages":[],"description":""},"order":7,"parentDoc":"58403e98cee8ec1900c457d0","project":"58403d83c0507319000634ed","slug":"provedor-de-display","sync_unique":"","title":"Provedor de display","type":"basic","updates":[],"user":"57ea79f61780cd170064f273","version":"58403d83c0507319000634f0"},{"__v":0,"_id":"58404089e3e04b230055c69e","api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","auth":"required","params":[],"url":""},"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.\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    \"0-1\": \"smtpHost\",\n    \"0-2\": \"Host do seu cliente de email.\",\n    \"1-0\": \"String\",\n    \"1-1\": \"smtpPort\",\n    \"1-2\": \"Porta do host (default: 587).\",\n    \"2-0\": \"String\",\n    \"2-1\": \"sport\",\n    \"2-2\": \"Secure port do host (default: 587).\",\n    \"3-0\": \"String\",\n    \"3-1\": \"user\",\n    \"3-2\": \"Seu usuário de login.\",\n    \"4-0\": \"String\",\n    \"4-1\": \"password\",\n    \"4-2\": \"Sua senha de login.\",\n    \"5-0\": \"String\",\n    \"5-1\": \"from\",\n    \"5-2\": \"Seu email.\",\n    \"6-0\": \"String\",\n    \"6-1\": \"sendTo\",\n    \"6-2\": \"Email do seu cliente.\",\n    \"7-0\": \"String\",\n    \"7-1\": \"subject\",\n    \"7-2\": \"Assunto do email.\",\n    \"8-0\": \"String\",\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.","category":"58403d83c0507319000634f1","createdAt":"2016-12-01T15:23:53.381Z","excerpt":"","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","next":{"pages":[],"description":""},"order":8,"parentDoc":"58403e98cee8ec1900c457d0","project":"58403d83c0507319000634ed","slug":"provedor-de-email","sync_unique":"","title":"Provedor de Email","type":"basic","updates":[],"user":"57ea79f61780cd170064f273","version":"58403d83c0507319000634f0"},{"__v":0,"_id":"58404095cee8ec1900c457d8","api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"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\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).","category":"58403d83c0507319000634f1","createdAt":"2016-12-01T15:24:05.140Z","excerpt":"","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","next":{"pages":[],"description":""},"order":9,"parentDoc":"58403e98cee8ec1900c457d0","project":"58403d83c0507319000634ed","slug":"provedor-de-tabelas-aid-e-capk-e-carga-de-tabelas-para-os-pinpads","sync_unique":"","title":"Provedor de tabelas AID e CAPK e carga de tabelas para os Pinpads","type":"basic","updates":[],"user":"57ea79f61780cd170064f273","version":"58403d83c0507319000634f0"},{"__v":0,"_id":"584040a263e13523002d019d","api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","auth":"required","params":[],"url":""},"body":"O ValidateTransactionByCardProvider é o provedor de que verifica se existe no TransactionDAO, transaçõesrealizadas para um determinado cartão.\nNa assinatura do construtor, o ValidateTransactionByCardProvider irá pedir dois parâmetros, um Context, um PinpadObject (Pinpad em que será inserido o cartão).\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]","category":"58403d83c0507319000634f1","createdAt":"2016-12-01T15:24:18.968Z","excerpt":"","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","next":{"pages":[],"description":""},"order":10,"parentDoc":"58403e98cee8ec1900c457d0","project":"58403d83c0507319000634ed","slug":"provedor-de-validação-de-transação","sync_unique":"","title":"Provedor de validação de transação","type":"basic","updates":[],"user":"57ea79f61780cd170064f273","version":"58403d83c0507319000634f0"}]}

Tutorial de Integração


{"__v":0,"_id":"58582d459988d00f005506b1","api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","auth":"required","params":[],"url":""},"body":"Para você iniciar a integração com a Stone, existe um repositório no [GitHub](https://github.com/stonepagamentos/sdk-android-V2) no qual você pode obter o nosso app demo que te ajudará a integrar de uma forma rápidacom 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 você já possua uma destas libs em sua aplicação.","category":"58403d83c0507319000634f1","createdAt":"2016-12-19T18:56:05.540Z","excerpt":"","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","next":{"pages":[],"description":""},"order":6,"parentDoc":null,"project":"58403d83c0507319000634ed","slug":"preparando-sua-aplicação","sync_unique":"","title":"Preparando sua aplicação","type":"basic","updates":[],"user":"57ea79f61780cd170064f273","version":"58403d83c0507319000634f0","childrenPages":[]}

Preparando sua aplicação


Para você iniciar a integração com a Stone, existe um repositório no [GitHub](https://github.com/stonepagamentos/sdk-android-V2) no qual você pode obter o nosso app demo que te ajudará a integrar de uma forma rápidacom 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 você 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/stonepagamentos/sdk-android-V2) no qual você pode obter o nosso app demo que te ajudará a integrar de uma forma rápidacom 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 você já possua uma destas libs em sua aplicação.
{"__v":0,"_id":"58582d5757d2ec2f00717109","api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","auth":"required","params":[],"url":""},"body":"Apó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.","category":"58403d83c0507319000634f1","createdAt":"2016-12-19T18:56:23.737Z","excerpt":"","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","next":{"pages":[],"description":""},"order":7,"parentDoc":null,"project":"58403d83c0507319000634ed","slug":"iniciando-a-integração-1","sync_unique":"","title":"Iniciando a integração","type":"basic","updates":[],"user":"57ea79f61780cd170064f273","version":"58403d83c0507319000634f0","childrenPages":[]}

Iniciando a integração


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.
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.
{"__v":0,"_id":"58582d6857d2ec2f0071710a","api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","auth":"required","params":[],"url":""},"body":"A conexão Bluetooth é realizada também pela SDK, você deverá utilizar o BluetoothConnectionProvider para criar conexões com os Pinpads.\n\nNós recomendamos que você liste todos os aparelhos que já foram conectados com o dispositivo na sua aplicação com a função “BluetoothAdapter.getBondedDevices()” do Android. Ela retornará o histórico de aparelhos do Bluetooth.\n\nPara utilizar o BluetoothConnectionProvider, você precisará passar um parâmetro do tipo PinpadObject.\n\nEste objeto representa um Pinpad com 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\": \"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]\nPara passar 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 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 não havendo 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.**","category":"58403d83c0507319000634f1","createdAt":"2016-12-19T18:56:40.158Z","excerpt":"","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","next":{"pages":[],"description":""},"order":8,"parentDoc":null,"project":"58403d83c0507319000634ed","slug":"conexão-bluetooth-1","sync_unique":"","title":"Conexão Bluetooth","type":"basic","updates":[],"user":"57ea79f61780cd170064f273","version":"58403d83c0507319000634f0","childrenPages":[]}

Conexão Bluetooth


A conexão Bluetooth é realizada também pela SDK, você deverá utilizar o BluetoothConnectionProvider para criar conexões com os Pinpads. Nós recomendamos que você liste todos os aparelhos que já foram conectados com o dispositivo na sua aplicação com a função “BluetoothAdapter.getBondedDevices()” do Android. Ela retornará o histórico de aparelhos do Bluetooth. Para utilizar o BluetoothConnectionProvider, você precisará passar um parâmetro do tipo PinpadObject. Este objeto representa um Pinpad com os seguintes atributos: [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] Para passar 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 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 não havendo 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.**
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. Este objeto representa um Pinpad com os seguintes atributos: [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] Para passar 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 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 não havendo 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.**
{"__v":0,"_id":"58582d793ed9a719000c12ae","api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","auth":"required","params":[],"url":""},"body":"Passar transações com a nova SDK é simples e rápido. A primeira coisa que deve se fazer é 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 processor 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 instancia do StoneTransaction.\"\n}\n[/block]","category":"58403d83c0507319000634f1","createdAt":"2016-12-19T18:56:57.141Z","excerpt":"","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","next":{"pages":[],"description":""},"order":9,"parentDoc":null,"project":"58403d83c0507319000634ed","slug":"provedor-de-transação-1","sync_unique":"","title":"Provedor de transação","type":"basic","updates":[],"user":"57ea79f61780cd170064f273","version":"58403d83c0507319000634f0","childrenPages":[]}

Provedor de transação


Passar transações com a nova SDK é simples e rápido. A primeira coisa que deve se fazer é 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 processor 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 instancia do StoneTransaction." } [/block]
Passar transações com a nova SDK é simples e rápido. A primeira coisa que deve se fazer é 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 processor 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 instancia do StoneTransaction." } [/block]
{"__v":0,"_id":"58582da1e286ba2500cca583","api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","auth":"required","params":[],"url":""},"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.+","category":"58403d83c0507319000634f1","createdAt":"2016-12-19T18:57:37.453Z","excerpt":"","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","next":{"pages":[],"description":""},"order":10,"parentDoc":null,"project":"58403d83c0507319000634ed","slug":"provedor-de-impressão-1","sync_unique":"","title":"Provedor de impressão","type":"basic","updates":[],"user":"57ea79f61780cd170064f273","version":"58403d83c0507319000634f0","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.+
{"__v":0,"_id":"58582dbc57d2ec2f0071710b","api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","auth":"required","params":[],"url":""},"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.","category":"58403d83c0507319000634f1","createdAt":"2016-12-19T18:58:04.158Z","excerpt":"","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","next":{"pages":[],"description":""},"order":11,"parentDoc":null,"project":"58403d83c0507319000634ed","slug":"comprovante-de-transação-recibo","sync_unique":"","title":"Comprovante de transação ( recibo )","type":"basic","updates":[],"user":"57ea79f61780cd170064f273","version":"58403d83c0507319000634f0","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.
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.
{"__v":0,"_id":"58582dcebfc4771b008054be","api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","auth":"required","params":[],"url":""},"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]","category":"58403d83c0507319000634f1","createdAt":"2016-12-19T18:58:22.950Z","excerpt":"","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","next":{"pages":[],"description":""},"order":12,"parentDoc":null,"project":"58403d83c0507319000634ed","slug":"provedor-de-cancelamento-1","sync_unique":"","title":"Provedor de cancelamento","type":"basic","updates":[],"user":"57ea79f61780cd170064f273","version":"58403d83c0507319000634f0","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]
{"__v":0,"_id":"58582de1b0fe4f2500259b5d","api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","auth":"required","params":[],"url":""},"body":"DisplayMessageProvider exibe uma mensagem de até 32 caracteres a tela do Pinpad.","category":"58403d83c0507319000634f1","createdAt":"2016-12-19T18:58:41.426Z","excerpt":"","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","next":{"pages":[],"description":""},"order":13,"parentDoc":null,"project":"58403d83c0507319000634ed","slug":"provedor-de-display-1","sync_unique":"","title":"Provedor de display","type":"basic","updates":[],"user":"57ea79f61780cd170064f273","version":"58403d83c0507319000634f0","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.
{"__v":0,"_id":"58582df2bfc4771b008054bf","api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","auth":"required","params":[],"url":""},"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.","category":"58403d83c0507319000634f1","createdAt":"2016-12-19T18:58:58.080Z","excerpt":"","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","next":{"pages":[],"description":""},"order":14,"parentDoc":null,"project":"58403d83c0507319000634ed","slug":"provedor-de-email-1","sync_unique":"","title":"Provedor de Email","type":"basic","updates":[],"user":"57ea79f61780cd170064f273","version":"58403d83c0507319000634f0","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.
{"__v":0,"_id":"58582e07b0fe4f2500259b5e","api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"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).","category":"58403d83c0507319000634f1","createdAt":"2016-12-19T18:59:19.131Z","excerpt":"","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","next":{"pages":[],"description":""},"order":15,"parentDoc":null,"project":"58403d83c0507319000634ed","slug":"provedor-de-tabelas-aid-e-capk-e-carga-de-tabelas-para-os-pinpads-1","sync_unique":"","title":"Provedor de tabelas AID e CAPK e carga de tabelas para os Pinpads","type":"basic","updates":[],"user":"57ea79f61780cd170064f273","version":"58403d83c0507319000634f0","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).
{"__v":0,"_id":"58582e173ed9a719000c12af","api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","auth":"required","params":[],"url":""},"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]","category":"58403d83c0507319000634f1","createdAt":"2016-12-19T18:59:35.618Z","excerpt":"","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","next":{"pages":[],"description":""},"order":16,"parentDoc":null,"project":"58403d83c0507319000634ed","slug":"provedor-de-validação-de-transação-1","sync_unique":"","title":"Provedor de validação de transação","type":"basic","updates":[],"user":"57ea79f61780cd170064f273","version":"58403d83c0507319000634f0","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]
{"__v":0,"_id":"58403ea529e3ff0f000d85c9","api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","auth":"required","params":[],"url":""},"body":"","category":"58403d83c0507319000634f1","createdAt":"2016-12-01T15:15:49.957Z","excerpt":"","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","next":{"pages":[],"description":""},"order":17,"parentDoc":null,"project":"58403d83c0507319000634ed","slug":"tipos-de-response","sync_unique":"","title":"Tipos de response","type":"basic","updates":[],"user":"57ea79f61780cd170064f273","version":"58403d83c0507319000634f0","childrenPages":[{"__v":0,"_id":"584040b429e3ff0f000d85ce","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[block:image]\n{\n  \"images\": [\n    {\n      \"image\": [\n        \"https://files.readme.io/0926cf9-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","createdAt":"2016-12-01T15:24:36.852Z","excerpt":"","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","next":{"pages":[],"description":""},"order":0,"parentDoc":"58403ea529e3ff0f000d85c9","project":"58403d83c0507319000634ed","slug":"um-pouco-sobre-response","sync_unique":"","title":"Um pouco sobre response","type":"basic","updates":[],"user":"57ea79f61780cd170064f273","version":"58403d83c0507319000634f0"},{"__v":0,"_id":"584040bd63e13523002d019e","api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","auth":"required","params":[],"url":""},"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    \"2-1\": \"4\",\n    \"2-2\": \"Pressione F1\",\n    \"3-0\": \"PRESS_2\",\n    \"3-1\": \"5\",\n    \"3-2\": \"Pressione F2\",\n    \"4-0\": \"PRESS_3\",\n    \"4-1\": \"6\",\n    \"4-2\": \"Pressione F3\",\n    \"5-0\": \"PRESS_4\",\n    \"5-1\": \"7\",\n    \"5-2\": \"Pressione F4\",\n    \"6-0\": \"PRESS_BACKSPACE\",\n    \"6-1\": \"8\",\n    \"6-2\": \"Pressione Espaço\",\n    \"7-0\": \"DEC_ERROR\",\n    \"7-1\": \"9\",\n    \"7-2\": \"Erro de decodificação\",\n    \"8-0\": \"INVALID_CALL\",\n    \"8-1\": \"10\",\n    \"8-2\": \"Chamada inválida\",\n    \"9-0\": \"INVALID_PARAMETER\",\n    \"9-1\": \"11\",\n    \"9-2\": \"Parâmetro inválido\",\n    \"10-0\": \"TIME_OUT\",\n    \"10-1\": \"12\",\n    \"10-2\": \"Time out\",\n    \"11-0\": \"OPERATION_CANCELLED_BY_USER\",\n    \"11-1\": \"13\",\n    \"11-2\": \"Operação cancelada pelo usuário.\",\n    \"12-0\": \"NOT_OPEN\",\n    \"12-1\": \"15\",\n    \"12-2\": \"Comando OPN não enviado.\",\n    \"13-0\": \"PARAMETER_NOT_FOUND\",\n    \"13-1\": \"19\",\n    \"13-2\": \"Falta de um parâmetro mandatório.\",\n    \"14-0\": \"DIFFERENT_TABLES_EMV\",\n    \"14-1\": \"20\",\n    \"14-2\": \"Tabelas AID e CAPK diferentes.\",\n    \"15-0\": \"TABLES_UPLOAD_ERROR\",\n    \"15-1\": \"21\",\n    \"15-2\": \"Erro na carga de tabelas.\",\n    \"16-0\": \"PINPAD_INTERNAL_ERROR\",\n    \"16-1\": \"40\",\n    \"16-2\": \"Erro interno do Pinpad.\",\n    \"17-0\": \"MAGNETIC_CARD_ERROR\",\n    \"17-1\": \"41\",\n    \"17-2\": \"Erro na leitura da tarja.\",\n    \"18-0\": \"MK_DUKPT_NOT_FOUND\",\n    \"18-1\": \"42\",\n    \"18-2\": \"DUKPT não encontrada.\",\n    \"19-0\": \"NO_ICC_PRESENCE\",\n    \"19-1\": \"43\",\n    \"19-2\": \"Não há presença de ICC.\",\n    \"20-0\": \"PINPAD_CANT_PROCESS_PIN_CAPTURE\",\n    \"20-1\": \"44\",\n    \"20-2\": \"O pinpad não conseguiu processar a captura da senha.\",\n    \"21-0\": \"RESPONSE_DATA_LIMIT_EXCEEDED\",\n    \"21-1\": \"45\",\n    \"21-2\": \"Resposta excedeu o limite de informações.\",\n    \"22-0\": \"SAM_NOT_FOUND\",\n    \"22-1\": \"51\",\n    \"22-2\": \"SAM não encontrado.\",\n    \"23-0\": \"ICC_NOT_FOUND\",\n    \"23-1\": \"60\",\n    \"23-2\": \"ICC não encontrado.\",\n    \"24-0\": \"COMMUNICATION_ICC_OR_CTLS_ERROR\",\n    \"24-1\": \"61\",\n    \"24-2\": \"Erro de comunicação ICC ou CTLS.\",\n    \"25-0\": \"INVALID_CARD\",\n    \"25-1\": \"67\",\n    \"25-2\": \"Cartão inválido.\",\n    \"26-0\": \"ICC_WITH_PROBLEM\",\n    \"26-1\": \"68\",\n    \"26-2\": \"Problemas no ICC.\",\n    \"27-0\": \"INVALID_DATAS_IN_ICC\",\n    \"27-1\": \"69\",\n    \"27-2\": \"Informações inválidas no ICC.\",\n    \"28-0\": \"ICC_EMV_WITHOUT_AVAILABLE_APPLICATION\",\n    \"28-1\": \"70\",\n    \"28-2\": \"ICC sem aplicação disponível.\",\n    \"29-0\": \"SELECTED_APPLICATION_CANT_BE_USED\",\n    \"29-1\": \"71\",\n    \"29-2\": \"Aplicação selecionada não pode ser usada.\",\n    \"30-0\": \"HIGH_ICC_EMV_ERROR\",\n    \"30-1\": \"76\",\n    \"30-2\": \"Alto erro no ICC.\",\n    \"31-0\": \"MORE_THEN_ONE_CTLS_DETECTED\",\n    \"31-1\": \"80\",\n    \"31-2\": \"Mais de um CTLS detectado.\",\n    \"32-0\": \"COMMUNICATION_BETWEEN_TERMINAL_CTLS_ERROR\",\n    \"32-1\": \"81\",\n    \"32-2\": \"Erro na comunicação com CTLS e o Pinpad.\",\n    \"33-0\": \"INVALID_CTLS\",\n    \"33-1\": \"82\",\n    \"33-2\": \"CTLS inválido.\",\n    \"34-0\": \"CTLS_WITH_PROBLEM\",\n    \"34-1\": \"83\",\n    \"34-2\": \"CTLS com problema.\",\n    \"35-0\": \"CTLS_WITHOUT_APPLICATION_AVAILABLE\",\n    \"35-1\": \"84\",\n    \"35-2\": \"CTLS sem aplicação disponível.\",\n    \"36-0\": \"APPLICATION_SELECTED_CANT_BE_USED\",\n    \"36-1\": \"85\",\n    \"36-2\": \"Aplicação selecionada não pode ser usada.\",\n    \"37-0\": \"FILE_NOT_FOUND\",\n    \"37-1\": \"100\",\n    \"37-2\": \"Arquivo não encontrado.\",\n    \"38-0\": \"FILE_FORMAT_ERROR\",\n    \"38-1\": \"101\",\n    \"38-2\": \"Erro no formato do arquivo.\",\n    \"39-0\": \"FILE_UPLOAD_ERROR\",\n    \"39-1\": \"102\",\n    \"39-2\": \"Erro na carga do arquivo.\",\n    \"40-0\": \"COMMAND_CONSTRUCTOR_ERROR\",\n    \"40-1\": \"999\",\n    \"40-2\": \"Erro no construtor da resposta.\"\n  },\n  \"cols\": 3,\n  \"rows\": 41\n}\n[/block]","category":"58403d83c0507319000634f1","createdAt":"2016-12-01T15:24:45.202Z","excerpt":"","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","next":{"pages":[],"description":""},"order":1,"parentDoc":"58403ea529e3ff0f000d85c9","project":"58403d83c0507319000634ed","slug":"status-de-comandos","sync_unique":"","title":"Status de comandos","type":"basic","updates":[],"user":"57ea79f61780cd170064f273","version":"58403d83c0507319000634f0"},{"__v":0,"_id":"584040c7cee8ec1900c457d9","api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","auth":"required","params":[],"url":""},"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 vice-versa.\",\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]","category":"58403d83c0507319000634f1","createdAt":"2016-12-01T15:24:55.510Z","excerpt":"","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","next":{"pages":[],"description":""},"order":2,"parentDoc":"58403ea529e3ff0f000d85c9","project":"58403d83c0507319000634ed","slug":"status-do-provider","sync_unique":"","title":"Status do provider","type":"basic","updates":[],"user":"57ea79f61780cd170064f273","version":"58403d83c0507319000634f0"}]}
{"__v":0,"_id":"58582e259988d00f005506b2","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","createdAt":"2016-12-19T18:59:49.784Z","excerpt":"","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","next":{"pages":[],"description":""},"order":18,"parentDoc":null,"project":"58403d83c0507319000634ed","slug":"um-pouco-sobre-response-1","sync_unique":"","title":"Um pouco sobre response","type":"basic","updates":[],"user":"57ea79f61780cd170064f273","version":"58403d83c0507319000634f0","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.
{"__v":0,"_id":"58582e37b0fe4f2500259b5f","api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","auth":"required","params":[],"url":""},"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]","category":"58403d83c0507319000634f1","createdAt":"2016-12-19T19:00:07.556Z","excerpt":"","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","next":{"pages":[],"description":""},"order":19,"parentDoc":null,"project":"58403d83c0507319000634ed","slug":"status-de-comandos-1","sync_unique":"","title":"Status de comandos","type":"basic","updates":[],"user":"57ea79f61780cd170064f273","version":"58403d83c0507319000634f0","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]
{"__v":0,"_id":"58582e45e286ba2500cca584","api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","auth":"required","params":[],"url":""},"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]","category":"58403d83c0507319000634f1","createdAt":"2016-12-19T19:00:21.934Z","excerpt":"","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","next":{"pages":[],"description":""},"order":20,"parentDoc":null,"project":"58403d83c0507319000634ed","slug":"status-do-provider-1","sync_unique":"","title":"Status do provider","type":"basic","updates":[],"user":"57ea79f61780cd170064f273","version":"58403d83c0507319000634f0","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]
{"__v":0,"_id":"58403eb5c0507319000634f5","api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","auth":"required","params":[],"url":""},"body":"","category":"58403d83c0507319000634f1","createdAt":"2016-12-01T15:16:05.549Z","excerpt":"","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","next":{"pages":[],"description":""},"order":21,"parentDoc":null,"project":"58403d83c0507319000634ed","slug":"usuários-e-desenvolvedores","sync_unique":"","title":"Usuários e desenvolvedores","type":"basic","updates":[],"user":"57ea79f61780cd170064f273","version":"58403d83c0507319000634f0","childrenPages":[{"__v":0,"_id":"584040d2c0507319000634f9","api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","auth":"required","params":[],"url":""},"body":"Umas das novidades do SDK 2.0 é que agora quando 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, aponte para os ambientes de testes 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\nSegue como mudar para o modo desenvolvedor:\n\n\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"// No início do seu projeto\\nUserModel userModel = StoneStart.init(SUA_ACTIVITY_AQUI);\\n\\n// Diz que é um desenvolvedor com essas duas linhas abaixo\\nPartner partnerDeveloper = new Partner(userModel);\\nGlobalInformations.sessionApplication.setUserModel(partnerDeveloper);\",\n      \"language\": \"java\"\n    }\n  ]\n}\n[/block]\n\n[block:callout]\n{\n  \"type\": \"danger\",\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]","category":"58403d83c0507319000634f1","createdAt":"2016-12-01T15:25:06.171Z","excerpt":"","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","next":{"pages":[],"description":""},"order":0,"parentDoc":"58403eb5c0507319000634f5","project":"58403d83c0507319000634ed","slug":"para-desenvolvedores","sync_unique":"","title":"Para desenvolvedores","type":"basic","updates":[],"user":"57ea79f61780cd170064f273","version":"58403d83c0507319000634f0"}]}

Usuários e desenvolvedores


{"__v":0,"_id":"58582e5c57d2ec2f0071710c","api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","auth":"required","params":[],"url":""},"body":"Umas das novidades do SDK 2.0 é que agora quando 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).\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]","category":"58403d83c0507319000634f1","createdAt":"2016-12-19T19:00:44.751Z","excerpt":"","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","next":{"pages":[],"description":""},"order":22,"parentDoc":null,"project":"58403d83c0507319000634ed","slug":"para-desenvolvedores-1","sync_unique":"","title":"Para desenvolvedores","type":"basic","updates":[],"user":"57ea79f61780cd170064f273","version":"58403d83c0507319000634f0","childrenPages":[]}

Para desenvolvedores


Umas das novidades do SDK 2.0 é que agora quando 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]
Umas das novidades do SDK 2.0 é que agora quando 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]
{"__v":0,"_id":"585abec7e009882d00508406","api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","auth":"required","params":[],"url":""},"body":"[block:api-header]\n{\n  \"type\": \"basic\",\n  \"title\": \"Link SDK Android\"\n}\n[/block]\n[https://github.com/stone-pagamentos/sdk-android-V2](https://github.com/stone-pagamentos/sdk-android-V2)","category":"585abe665cd5a52300c76426","createdAt":"2016-12-21T17:41:27.820Z","excerpt":"","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","next":{"pages":[],"description":""},"order":999,"project":"58403d83c0507319000634ed","slug":"sdk-android","sync_unique":"","title":"SDK Android","type":"basic","updates":[],"user":"57ea79f61780cd170064f273","version":"58403d83c0507319000634f0","childrenPages":[]}

SDK Android


[block:api-header] { "type": "basic", "title": "Link SDK Android" } [/block] [https://github.com/stone-pagamentos/sdk-android-V2](https://github.com/stone-pagamentos/sdk-android-V2)
[block:api-header] { "type": "basic", "title": "Link SDK Android" } [/block] [https://github.com/stone-pagamentos/sdk-android-V2](https://github.com/stone-pagamentos/sdk-android-V2)