API Nativa
O Mamba Websdk oferece um conjunto de funções capazes de interagir com as funcionalidades nativas do POS. Para isso, basta importar as funções nativas necessárias
e.g.
import { Native } from 'mamba-websdk'
Native.System.beep()App
App define funções relacionadas ao aplicativo
close()
Fecha o aplicativo
closeWithFilter(showConfirmationDialog: boolean, callBack: function)
Fecha o aplicativo depois de executar o callback. Se o showConfirmationDialog for TRUE será apresentado um dialog de confirmação para sair do app.
// Coloque esse código no arquivo index.js
import './styles/index.scss'
import Mamba from 'mamba-websdk'
import { Native } from 'mamba-websdk'
import router from './router'
/* eslint-disable no-new */
new Mamba({
el: '#app'
})
Mamba.use(router)
Native.App.closeWithFilter(true, ()=> {
console.log('TESTE')
})Gif
Anima arquivos no formato .gif de forma nativa. Um gif que utilize recursos web (com a tag img por exemplo) terá um desempenho muito inferior, além de ter um comportamento imprevisível.
Recomendamos utilizar o componente MbGif para lidar com gifs no POS. Nele, é abstraída boa parte do trabalho necessário.
show (path: string, x?: number, y?: number): boolean
Mostra o gif em uma determinada posição, relativa ao viewport.
Se x ou y forem negativos, o gif não irá aparecer.
Note que quando um gif está aparecendo, todos os eventos de teclado serão consumidos por ele
Esse método também realiza o cache do gif, caso não tenha sido feito
| Parâmetro | Tipo | Descrição |
|---|---|---|
| path | string | O caminho do gif, relativo à raiz do projeto |
| x | number? | A posição do gif no eixo x |
| y | number? | A posição do gif no eixo y |
retorna true se o gif foi mostrado com sucesso
setPosition (path: string, x: number, y: number): boolean
Muda a posição do gif.
Esse método também realiza o cache do gif, caso não tenha sido feito
Se a posição de x ou y for negativa, a posição não será alterada
| Parâmetro | Tipo | Descrição |
|---|---|---|
| path | string | O caminho do gif, relativo à raiz do projeto |
| x | number? | A posição do gif no eixo x |
| y | number? | A posição do gif no eixo y |
retorna true se a posição foi atualizada com sucesso
hide (): void
Esconde o gif
cache (path: string): boolean
Faz cache do gif para um carregamento mais rápido.
| Parâmetro | Tipo | Descrição |
|---|---|---|
| path | string | O caminho do gif, relativo à raiz do projeto |
retorna true se o cache foi feito com sucesso
get (path: string): IRect
Retorna a posição e as dimensões do gif
| Parâmetro | Tipo | Descrição |
|---|---|---|
| path | string | O caminho do gif, relativo à raiz do projeto |
O objeto de retorno é um retângulo com as seguintes características
| Parâmetro | Tipo | Descrição |
|---|---|---|
| x | number | Posição do gif no eixo x |
| y | number | Posição do gif no eixo y |
| w | number | Largura do gif |
| h | number | Altura do gif |
Http
Http encapsula todos os requests que devem ser realizados pelo POS
send(params: object, callback: function)
import { Native } from 'mamba-websdk'
const Http = Native.Http
// PARAMS DEFAULT:
// method: "GET",
// url: Não possui valor default,
// Headers {
// "content-type": "text/plain"
// },
// connect: "NET",
// data: ""
// CALLBACK:
// data Retorna o body do request
// err Retorna um objeto com err.status(Estatus do erro) e err.msg(Mensagem do erro)
const object = {
method: "GET/POST", // Verbo http que será feito o request
url: "https://endpoint.com.br",
headers: {
"...": "..." // Headers de configuração
},
connect: "LAN/NET" // LAN para requests na mesma rede, e NET para requests externo, irá passar pelo proxy
data: JSON.stringfy({teste: "dados"}) // Dados a serem enviados
}
Http.send(object, function(data, err) {
if (err.status != undefined && err.status != 299) {
alert(err.status)
alert(err.msg)
} else {
alert(data)
}
});Keyboard
Lida com o tipo do teclado. Recomendamos utilizar o componente MbInput que já lida com o tipo do teclado
setKeyboardAsNumeric()
Muda o tipo do teclado para numérico
setKeyboardAsAlphanumeric()
Muda o tipo do teclado para alfanumérico
Merchant
Lida com as informações do lojista
getInfo(): IMerchant
Retorna as informações do lojista
| Parâmetro | Tipo | Descrição |
|---|---|---|
| street | string | Rua do lojista |
| number | string | Número do local do estabelecimento |
| complement | string | Complemento do endereço |
| neighborhood | string | Bairro do estabelecimento |
| zipCode | string | CEP do estabelecimento |
| city | string | Cidade do estabelecimento |
| state | string | Estado do estabelecimento |
| country | string | País do estabelecimento |
| acquirerIssuedMerchantId | string | Stone code do lojista |
| displayName | string | Nome mostrado no POS, definido pelo lojista |
| taxationIdentificationType | string | ‘CPF’ ou ‘CNPJ’, de acordo com o cadastro do lojista |
| taxationIdentificationNumber | string | O valor correspondente ao campo ‘taxationIdentificationType’. Será o CPF ou CNPJ do lojista |
checkPassword(password: string)
Verifica se a senha corresponde à senha do lojista no POS
getStoneCode(): string
Retorna o StoneCode do lojista
Payment
Lida com a realização de pagamentos.
pay (proposedAmount: number, callback?: function)
Abre o aplicativo de pagamento para o usuário continuar com a operação. Após o aplicativo fechar, a callback será chamada contendo o valor efetivamente pago pelo usuário. Caso a transação não tenha sido realizada, este parâmetro será 0
| Parâmetro | Tipo | Descrição |
|---|---|---|
| proposedAmount | number | Valor a ser pago, em centavos |
| callback | function | Callback chamada assim que a transação é encerrada |
e.g.
import { Native } from 'mamba-websdk'
const Payment = Native.Payment
// Abre o app de pagamento com o valor de R$5,00 e imprime o valor que foi pago
Payment.pay(500, (amountPayed) => {
console.log(amountPayed)
})
// amount: Abre o app de pagamento com o valor de R$5,00
// editable_amount: Bloqueia a edição do valor
// min_installments: valor mínimo do número de parcelas
// max_installments: valor máximo do número de parcelas
const paymentConfig = {
amount: 500,
editable_amount: true,
min_installments: 4,
max_installments: 8,
}
Payment.pay(paymentConfig, (amountPayed) => {
console.log(amountPayed)
})isPaying(): boolean
Retorna true se um pagamento está sendo feito
failedPaying (): boolean
Retorna true se o último pagamento falhou
enableCardEvent ()
Habilita o evento de cartão. Caso um cartão seja inserido ou passado pela tarja magnética, se o evento de cartão estiver habilitado, o evento oncardevent será emitido para o document
e.g.
import { Native } from 'mamba-websdk'
const Payment = Native.Payment
Payment.enableCardEvent()
document.addEventListener('oncardevent', function() {
console.log('Um cartão foi inserido, vou realizar um pagamento')
// Abre o app de pagamento com o valor de R$5,00 e imprime o valor que foi pago
Payment.pay(500, (amountPayed) => {
console.log(amountPayed)
})
})disableCardEvent ()
Desabilita o evento de cartão.
getCardHolderName (): string
Retorna o nome do portador do cartão referente ao último pagamento
import { Native } from 'mamba-websdk'
const Payment = Native.Payment
// Abre o app de pagamento com o valor de R$5,00 e imprime o nome do portador do cartão
Payment.pay(500, (amountPayed) => {
console.log(Payment.getCardHolderName())
})getItk (): string
Retorna o itk da transação
getAtk (): string
Retorna o atk da transação
getAuthorizationDateTime (): string
Retorna a data hora da última transação, caso tenha sido bem sucedida
getBrand (): string
Retorna a bandeira do cartão da última transação, caso tenha sido bem sucedida
getOrderId (): string
Retorna o Order ID da última transação, caso tenha sido bem sucedida
getPan (): string
Retorna o pan mascarado da última transação, caso tenha sido bem sucedida
getAuthorizationCode (): string
Retorna o código de autorização da última transação, caso tenha sido bem sucedida
getInstallmentCount (): string
Retorna o número de parcelas da última transação, caso tenha sido bem sucedida
getType (): string
Retorna qual foi o tipo da última transação efetuada com sucesso
Printer
Responsável por lidar com a impressora térmica do POS
print (element: HTMLElement, config?: IPrinterConfig, callback?: function)
Imprime um HTMLElement. Para obter um melhor resultado, é recomendado criar uma div com o tamanho exato da filipeta e imprimí-lo. Desta forma, não há distorções causadas por redimensionamento. Note que o HTMLElement a ser impresso precisa estar inserido no DOM.
Recomendamos utilizar o componente MbPrintArea para realizar impressões de forma fácil e rápida.
e.g.
import { Native } from 'mamba-websdk'
const Printer = Native.Printer
// Pega o elemento a ser impresso
const print = document.getElementById('print')
// Muda a largura do elemento para o mesmo da filipeta
print.style.width = Printer.getPaperWidth() + 'px'
// Imprime o elemento
Printer.print(print, {}, (error) => {
if (error === undefined) console.log('A impressão terminou com sucesso')
else console.log('erro de impressão')
})| Parâmetro | Tipo | Descrição |
|---|---|---|
| element | HTMLElement | Elemento a ser impresso |
| config | IPrinterConfig | Objeto que configura alguns parâmetros da impressão |
| callback | function | Callback chamada quando a impressão termina. Seu primeiro argumento é o erro da impressão |
A interface IPrinterConfig é a seguinte
| Parâmetro | Tipo | Descrição |
|---|---|---|
| scale_to_paper_width | boolean | Define se o elemento deve ser redimensionado para comportar o tamanho da filipeta. Caso não seja e seu tamanho seja maior do que o necessário, ele será cortado |
| use_dithering | boolean | Define se deve ser aplicado um algoritmo de dithering no elemento. Use esta função somente para imprimir imagens, pois o dithering diminui a qualidade da impressão de texto |
getPaperWidth (): number
Retorna o tamanho da filipeta, em pixels
isPrinting (): boolean
Retorna true se a impressora está ocupada com uma impressão
failedPrinting (): boolean
Retorna true se a última impressão falhou
System
beep (tone?: string, duration?: number)
Faz um beep. Esta função atualmente é blocante no POS, logo a execução do código será bloqueada até que o beep termine.
| Parâmetro | Tipo | Descrição |
|---|---|---|
| tone | string | O tom do beep, no formato ‘TONE*’, onde * é um número de 1 a 7 e quanto maior o número, maior a frequência |
| duration | number | A duração do beep, em ms |
e.g.
import { Native } from 'mamba-websdk'
const System = Native.System
// Realiza um beep com a frequência mais grave por meio segundo
System.beep('TONE1', 500)
// Realiza um beep com a frequência mais alta pelo tempo padrão
System.beep('TONE7')
// Realiza um beep com a frequência e tempo padrões
System.beep()getCurrentConnectionType (): string
Retorna em qual rede o POS está conectado - Wifi ou 3G
changeAdapter (desiredAdapter: string): boolean
Muda o adaptador de rede, retorna true em caso de sucesso, false em falha - wifi ou 3G
hasEthernet (): boolean
Retorna true se o POS possui ethernet
hasWifi (): boolean
Retorna true se o POS possui wifi
hasGprs (): boolean
Retorna true se o POS possui GPRS
isBatteryPresent (): boolean
Retorna true se o POS possui uma bateria presente
getPowerSupply (): string
Retorna a fonte de energia atual do POS. Os possíveis valores são USB, ADAPTER e BATTERY
getTimeFromBoot (): number
Retorna o tempo desde o boot em ms
getSerialNumber (): string
Retorna o número serial do POS
getBatteryStatus (): string
Retorna o status da bateria. Os possíveis valores são CHECK_NOT_SUPPORTED, IN_CHARGE, CHARGE_COMPLETE, DISCHARGE, ABSENT
getBatteryLevel (): number
Retorna o nível da bateria. Este nível é discreto e depende do status da bateria. Uma tabela com os possíveis valores para cada estado é apresentada abaixo
| Estado da bateria | Nível da bateria |
|---|---|
| CHECK_NOT_SUPPORTED | 0 |
| IN_CHARGE | 0 |
| CHARGE_COMPLETE | 100 |
| DISCHARGE | 10, 30, 50, 70, 90 |
| ABSENT | 0 |
Transaction
getSupportedBrands (): string[]
Retorna uma lista contendo todas as bandeiras suportadas para o lojista
e.g.
import { Native } from 'mamba-websdk'
const Transaction = Native.Transaction
console.log(Transaction.getSupportedBrands()) // ['VISA', 'MASTERCARD', 'ELO']getMaximumDetailedReportEntries (): number
Retorna o número máximo de transações retornadas pela função getDetailedReportList
getReportResume (from: Date, to: Date, callback: function)
Gera um relatório resumido das transações na data especificada
| Parâmetro | Tipo | Descrição |
|---|---|---|
| from | Date | Data hora inicial do relatório |
| to | Date | Data hora final do relatório |
| callback | Date | função chamada quando o relatório foi gerado. Seu primeiro parâmetro é um objeto contendo o resumo. Seu segundo parâmetro é o erro, se houve algum |
O primeiro parâmetro da callback é um objeto com as seguintes características
| Chave | Tipo | Descrição |
|---|---|---|
| totalApproved | number | Total de transações aprovadas |
| approvedValue | number | Valor total aprovado, em centavos |
| approvedTransactionsNumber | number | Total de transações aprovadas |
| cancelledValue | number | Valor total cancelado, em centavos |
| cancelledTransactionsNumber | number | Total de transações canceladas |
| totalDebit | number | Valor total transacionado em débito |
| totalCredit | number | Valor total transacionado em crédito |
| totalVoucher | number | Valor total transacionado em voucher |
e.g.
import { Native } from 'mamba-websdk'
const Transaction = Native.Transaction
const from = new Date(2018, 1, 2, 0, 0, 0, 0)
const to = new Date()
Transaction.getReportResume(from, to, (resume, error) => {
if (error === undefined) {
console.log('Resumo pronto')
console.log(`Total aprovado: ${resume.totalApproved}`)
console.log(`Valor aprovado: ${resume.approvedValue}`)
} else {
console.log('Erro ao fazer o resumo')
}
})getDetailedReportList (from: Date, to: Date, callback: function)
Gera um relatório detalhado por transação
O primeiro parâmetro da callback é uma lista de objetos com as seguintes características
| Chave | Tipo | Descrição |
|---|---|---|
| brand | string | Bandeira do cartão utilizado na transação |
| transactionType | string | Tipo de transação (e.g. Crédito à vista, Débito, …) |
| totalAmountAuthorized | number | Valor da aprovado da transação, em centavos |
| totalAmountCancelled | number | Valor da cancelado da transação, em centavos |
| authorizationDateTime | Date | Data hora da transação |
| lastCancellationDateTime | Date | Data hora do último cancelamento realizado nesta transação |
| remainingValue | number | Valor efetivo em centavos da transação, após descontar o valore cancelado. |
| installmentCount | number | Número de parcelas da transação |
| transactionStatusCode | number | Código de estado da transação. Uma tabela com os códigos é mostrada abaixo |
-
Códigos de estado, acessíveis pela variável window.MbTransaction.TransactionStatusCodes:
| Chave | Tipo | Descrição |
|---|---|---|
| PENDING_REVERSAL_BY_TECHNICAL_ERROR | number | Erro técnico |
| PENDING_REVERSAL | number | Ocorre quando o autorizador aprovou, mas o cartão não |
| PENDING | number | Pendente |
| UNKNOWN | number | Desconhecido |
| APPROVED | number | Aprovado |
| CANCELLED_BY_THE_USER | number | Cancelada pelo usuário |
| CANCELLED_IN_REVISION_PROCESS | number | Pode ocorrer, por exemplo, quando o cartão não aprovou a transação |
| CANCELLED_AUTOMATICALLY | number | Pode ocorrer, por exemplo, quando houve uma falha de conexão ou quando houve timeout |
| FALLBACK_APPROVED | number | Aprovado utilizando tarja magnética |
| FALLBACK_CANCELLED_BY_THE_USER | number | Cancelado utilizando tarja magnética |
| FALLBACK_CANCELLED_AUTOMATICALLY | number | Mesmo que CANCELLED_AUTOMATICALLY, mas utilizando tarja magnética |
| FALLBACK_CANCELLED_IN_REVISION_PROCESS | number | Mesmo que CANCELLED_IN_REVISION_PROCESS, mas utilizando tarja magnética |
e.g.
import { Native } from 'mamba-websdk'
const Transaction = Native.Transaction
const from = new Date(2018, 1, 2, 0, 0, 0, 0)
const to = new Date()
Transaction.getDetailedReportList(from, to, (report, error) => {
if (error === undefined) {
// Imprime todas as bandeiras das transações
report.forEach(transaction => console.log(transaction.brand))
} else {
console.log('Erro ao fazer o relatório')
}
})getConsolidatedReportList (from: Date, to: Date, callback: function)
Gera um relatório consolidado das transações no período desejado. O relatório é agrupado por bandeira.
O primeiro parâmetro da callback é uma objeto com as seguintes características
| Chave | Tipo | Descrição |
|---|---|---|
| <BANDEIRA> | IConsolidatedTransaction[] | Lista com todas as transações consolidadas da bandeira |
A interface IConsolidatedTransaction possui as seguintes características
| Chave | Tipo | Descrição |
|---|---|---|
| totalApprovedBrand | number | Valor total proveniente das transações, após descontar o valor cancelado, em centavos |
| approvedValueBrand | number | Valor total aprovado, em centavos |
| approvedTransactionsNumber | number | Número de transações aprovadas |
| cancelledValueBrand | number | Valor total cancelado, em centavos |
| cancelledTransactionsNumber | number | Número de transações canceladas |
| transactionType | string | Tipo da transação e.g. Débito, Crédito, Refeição, … |
e.g.
import { Native } from 'mamba-websdk'
const Transaction = Native.Transaction
const from = new Date(2018, 1, 2, 0, 0, 0, 0)
const to = new Date()
Transaction.getConsolidatedReportList(from, to, (report, error) => {
if (error === undefined) {
const brands = Object.keys(report)
brands.forEach(brand => {
const transactions = report[brand]
console.log(`Bandeira = ${brand}`)
transaction.forEach(transaction => {
console.log(`Tipo da transação = ${transaction.transactionType}`)
console.log(`Total aprovado = ${transaction.totalApprovedBrand}`)
})
console.log('')
})
} else {
console.log('Erro ao fazer o relatório')
}
})
// Saída:
// Bandeira = VISA
// Tipo da transação = Débito
// Total aprovado = 10000
// Tipo da transação = Crédito
// Total aprovado = 18000
//
// Bandeira = MASTERCARD
// Tipo da transação = Débito
// Total aprovado = 5000
// Tipo da transação = Crédito
// Total aprovado = 98000
//