Este package tem como finalidade prover uma interface de abstração para integração com o PayGO Intergrado via URI efetuando a comunicação via intent com o aplicativo Paygo Integrado fornecido pela Setis.
Favor atentar a versão do aplicativo PayGO Integrado que está instalada no dispositivo, pois existem 2 versões do aplicativo, uma para dispositivos android padrão e uma versão específica para dispositivos da marca Gertec e estas cada uma possui a sua versão de produção e homologação.
flutter --version
Flutter 3.7.5 • channel stable • https://github.com/flutter/flutter.git
Framework • revision c07f788888 (7 months ago) • 2023-02-22 17:52:33 -0600
Engine • revision 0f359063c4
Tools • Dart 2.19.2 • DevTools 2.20.1
Para instalar o package, adicione o seguinte código no seu arquivo pubspec.yaml:
dependencies:
paygo_sdk: ^0.0.7
Observação : se você estiver usando o canal Flutter master
, se encontrar problemas de compilação ou quiser experimentar uma versão melhor e mais recente, utilize a versão mais atual apontando para a master
e não uma versão de lançamento específica. Para fazer isso, use a seguinte configuração no seu pubspec.yaml:
dependencies:
paygo_sdk:
git:
url: #Utilize a URL do repositorio do github
Adicionar as seguintes instruções no arquivo AndroidManifest.xml:
<!-- Permissões -->
<uses-feature android:name="android.hardware.usb.host"/>
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.FLASHLIGHT"/>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.REORDER_TASKS" />
<activity>
.
.
.
.
.
<!-- activity -->
<intent-filter>
<action android:name="br.com.setis.interfaceautomacao.SERVICO"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="app" android:host="payment" />
<data android:scheme="app" android:host="resolve" />
</intent-filter>
</activity>
Para utilizar o package, basta importar o mesmo no seu arquivo dart:
// Importe o package
import 'package:paygo_sdk/paygo_sdk.dart';
// Iniciando o SDK
PayGOSdk repository = PayGOSdk();
// Chamando o método de integração para abrir o menu administrativo
await repository.integrado.administrativo();
A URI segue o padrão RFC2396. A formatação das URIs trocadas entre a Automação Comercial e o aplicativo PayGo Integrado seguem o seguinte padrão:
<scheme>://<authority>/<path>?<query>
Sendo os componentes identificados a seguir:
Componente | Formato |
---|---|
<scheme> |
Fixo: "app" |
<authority> |
Tipo de operação a ser efetuado, podendo ser:
|
<path> |
Indica a origem da operação:
|
<query> |
Contém os parâmetros da requisição/resposta, no formato "<chave>=<valor>" . Os parâmetros são separados pelo caractere '&' . |
Para os parâmetros de operação, sejam eles de requisição ou de resposta, serão adotados os seguintes padrões de identificação:
-
Quanto à presença:
-
M → Indica que o parâmetro é mandatório;
-
MC → Indica que o parâmetro é mandatório condicional. As condições para seu uso estarão descritas juntas à especificação do parâmetro.
-
O → Indica que o parâmetro é opcional.
-
Quanto ao formato:
-
N → Indica que o parâmetro é numérico;
-
AN → Indica que o parâmetro é alfanumérico (são aceitos apenas caracteres na faixa ASCII, sem caracteres especiais);
-
C → Indica que o parâmetro é uma constante. Seus possíveis valores estarão documentados junto ao campo;
-
B → Indica que o parâmetro é booleano (assume valor "true" se verdadeiro e "false" se falso).
A tabela a seguir indica os parâmetros de requisição para uma transação:
Parâmetro | Presença | Formato | Descrição |
---|---|---|---|
operation | M | C | Operação a ser realizada. Valores possíveis:
|
transactionId | M | AN | Identificador gerado na automação comercial para a transação. |
amount | MC | N | Valor da operação. Mandatório se a operação for do tipo VENDA ou CANCELAMENTO. |
currencyCode | MC | N | Código da moeda, de acordo com ISO4217. Mandatório se operação possuir o parâmetro "amount". |
boardingTax | O | N | Taxa de embarque. |
serviceTax | O | N | Taxa de serviço. |
provider | O | AN | Nome do provedor utilizado na transação. |
cardType | O | C | Tipo de cartão. Valores possíveis:
|
finType | O | C | Tipo de financiamento. Valores possíveis:
|
paymentMode | O | C | Modalidade de pagamento. Valores possíveis:
|
installments | O | N | Número de parcelas. |
predatedDate | O | AN | Data do pré-datado. |
fiscalDocument | O | AN | Número do documento fiscal. |
taxId | O | AN | CPNJ/CPF do estabelecimento. |
billNumber | O | AN | Número da fatura. |
phoneNumber | O | AN | Número de telefone, com DDD. |
posId | O | AN | Identificador do ponto de captura. |
originalAuthorizationCode | O | AN | Código de autorização original. |
originalTransactionNsu | O | AN | NSU da transação original. |
originalTransactionDateTime | O | AN | Data/hora da transação original. |
additionalPosData1 | O | AN | Dados adicionais relevantes para a automação (#1). |
additionalPosData2 | O | AN | Dados adicionais relevantes para a automação (#2). |
additionalPosData3 | O | AN | Dados adicionais relevantes para a automação (#3). |
additionalPosData4 | O | AN | Dados adicionais relevantes para a automação (#4). |
A tabela a seguir indica os parâmetros de resposta para uma transação:
Parâmetro | Presença | Formato | Descrição |
---|---|---|---|
operation | M | C | Operação realizada. Valores possíveis:
|
transactionResult | M | N | Resultado da transação efetuada. |
amount | MC | N | Valor autorizado, para o caso de uma operação de VENDA. |
currencyCode | MC | N | Código da moeda, de acordo com ISO4217. Mandatório se operação possuir o parâmetro "amount". |
requiresConfirmation | M | B | Indica se a transaçao requer ou não confirmação. |
confirmationTransactionId | MC | AN | Identificador de confirmação para a transação, caso a confirmação seja requerida. |
cashbackAmount | O | N | Valor do troco. |
discountAmount | O | N | Valor do desconto. |
balanceVoucher | O | N | Saldo do cartão voucher. |
dueAmount | O | N | Valor devido. |
fiscalDocument | O | AN | Número do documento fiscal. |
transactionNsu | O | AN | NSU do host. |
terminalNsu | O | AN | NSU local. |
authorizationCode | O | AN | Código de autorização. |
transactionId | O | AN | Identificador da transação para a automação. |
merchantId | O | AN | Identificador do estabelecimento. |
posId | O | AN | Identificador do ponto de captura. |
merchantName | O | AN | Nome do estabelecimento em que o ponto de captura está cadastrado. |
transactionDateTime | O | AN | Data/hora da transação original. |
installments | O | N | Número de parcelas. |
predatedDate | O | AN | Data do pré-datado. |
finType | O | C | Tipo de financiamento. Valores possíveis:
|
providerName | O | AN | Nome do provedor. |
cardType | O | C | Tipo de cartão. Valores possíveis:
|
cardEntryMode | O | AN | Modo de entrada do cartão. |
maskedPan | O | AN | Número do cartão, truncado ou mascarado. |
defaultMaskedPan | O | AN | Número do cartão mascarado no formato BIN + *** + 4 últimos dígitos. Ex: 543211******9876. |
cardholderVerificationMode | O | AN | Modo de verificação de senha. |
cardName | O | AN | Nome do cartão ou do emissor do cartão. |
defaultCardName | O | AN | Descrição do produto bandeira padrão relacionado ao BIN. |
cardholderName | O | AN | Nome do portador do cartão utilizado. |
aid | O | AN | Aplicação do cartão utilizada durante a transação. |
resultMessage | O | AN | Mensagem com descrição do resultado. |
authorizerResponse | O | AN | Código de resposta da transação, proveniente da rede adquirente. |
printReceipts | O | C | Vias disponíveis para impressão. Valores possíveis:
|
fullReceipt | O | AN | Comprovente completo. |
merchantReceipt | O | AN | Comprovante diferenciado lojista. |
cardholderReceipt | O | AN | Comprovante diferenciado para o portador. |
shortReceipt | O | AN | Comprovante reduzido para o portador do cartão. |
graphicReceiptExists | O | B | Indica existência dos comprovantes no formato gráfico. |
merchantGraphicReceipt | O | AN | Comprovante gráfico, via do lojista. |
cardholderGraphicReceipt | O | AN | Comprovante gráfico, via do portador. |
originalTransactionAmount | O | N | Valor da transação original. |
originalTransactionDateTime | O | AN | Data/hora da transação original. |
originalTransactionNsu | O | AN | NSU original do host. |
originalAuthorizationCode | O | AN | Código de autorização original. |
originalTerminalNsu | O | AN | NSU local gerado na transação original. |
pendingTransactionExists | O | B | Indica a existência de transação pendente. |
authorizationMode | O | C | Modalidade da transação. Valores possíveis:
|
paymentMode | O | C | Modalidade de pagamento. Valores possíveis:
|
walletUserId | O | C | Identificação do portador de carteira virtual. Valores possíveis:
|
uniqueId | O | AN | Identificador único da transação armazenado no banco de dados. |
A tabela a seguir indica os parâmetros de resposta para uma confirmação:
Parâmetro | Presença | Formato | Descrição |
---|---|---|---|
transactionStatus | M | C | Status final da transação. Valores possíveis:
|
confirmationTransactionId | M | AN | Identificador de confirmação para a transação (recebido na resposta da transação). |
PayGOSdk repository = PayGOSdk();
await repository.integrado.confirmarTransacao(
intentAction: IntentAction.confirmation,
requisicao: TransacaoRequisicaoConfirmacao(
confirmationTransactionId: '---> Aqui vai o ID da transação <---',
status: TransactionStatus.confirmadoAutomatico,
),
);
A tabela a seguir indica os parâmetros de resposta para resolução de transação pendente:
Parâmetro | Presença | Formato | Descrição |
---|---|---|---|
providerName | M | AN | Provedor com o qual a transação está pendente. |
merchantId | M | AN | Identificador do estabelecimento com o qual a transação está pendente. |
localNsu | M | AN | Obtém o NSU local da transação pendente. |
transactionNsu | M | AN | Obtém o NSU do servidor TEF da transação pendente. |
hostNsu | M | AN | Obtém o NSU do provedor da transação pendente. |
PayGOSdk repository = PayGOSdk();
await repository.integrado.resolucaoPendencia(
intentAction: IntentAction.confirmation,
requisicaoPendencia: '---> Aqui vai a URI da Pendência <---',
requisicaoConfirmacao: TransacaoRequisicaoPendencia(
status: TransactionStatus.desfeitoManual,
),
);
Em todas operações do tipo "Transação", a Automação deve obrigatoriamente também informar seus dados como parâmetro.
Esses dados também são enviados como uma URI, porém em um Bundle separado, identificado com a chave "posData". Os seguintes parâmetros devem ser informados:
Parâmetro | Presença | Formato | Descrição |
---|---|---|---|
posName | M | AN | Nome da Automação. |
posVersion | M | AN | Versão da Automação. |
posDeveloper | M | AN | Nome da empresa desenvolvedora da Automação Comercial. |
allowCashback | M | B | Indica se a Automação suporta a funcionalidade de troco. |
allowDiscount | M | B | Indica se a Automação suporta a funcionalidade de desconto. |
allowDifferentReceipts | M | B | Indica se a Automação suporta a impressão de vias diferenciadas para o portador e o lojista. |
allowShortReceipt | M | B | Indica se a Automação suporta a impressão da via reduzida. |
allowDueAmount | O | B | Indica se a Automação suporta a utilização do saldo total do voucher para abatimento do valor da compra. Se não informado, assume como "falso". |
TransacaoRequisicaoDadosAutomacao(
'PAYGO',
'1.0.0.0',
'Automação',
allowCashback: true,
allowDifferentReceipts: true,
allowDiscount: true,
allowDueAmount: true,
allowShortReceipt: false,
)
Visando fornecer uma experiência visual menos impactante para o usuário, a Automação Comercial pode customizar elementos de interface do cliente PayGo Integrado, de maneira que este tenha uma identidade visual o mais próximo possível da identidade visual da Automação.
Esses dados também são enviados como uma URI, porém em um Bundle separado, identificado com a chave "posCustomization". Os seguintes parâmetros devem ser informados:
Parâmetro | Presença | Formato | Descrição |
---|---|---|---|
screenBackgroundColor | O | AN | Cor de fundo de tela. |
keyboardBackgroundColor | O | AN | Cor de fundo do teclado. |
toolbarBackgroundColor | O | AN | Cor de fundo da barra de ferramentas. |
fontColor | O | AN | Cor da fonte dos textos. |
editboxBackgroundColor | O | AN | Cor de fundo da caixa de edição de texto. |
releasedKeyColor | O | AN | Cor das teclas do teclado virtual da aplicação, quando estiverem liberadas. |
pressedKeyColor | O | AN | Cor das teclas do teclado virtual da aplicação, quando estiverem pressionadas. |
keyboardFontColor | O | AN | Cor da fonte do teclado. |
menuSeparatorColor | O | AN | Cor do separador entre o título de um menu e as opções. |
toolbarIcon | O | AN | Ícone usado na barra de ferramentas. |
font | O | AN | Fonte utilizada no texto. |
TransacaoRequisicaoPersonalizacao(
screenBackgroundColor = '#F4F4F4',
keyboardBackgroundColor = '#F4F4F4',
toolbarBackgroundColor = '#242424',
fontColor = '#000000',
editboxBackgroundColor = '#FFFFFF',
releasedKeyColor = '#dedede',
pressedKeyColor = '#e1e1e1',
keyboardFontColor = '#000000',
menuSeparatorColor = '#F4F4F4',
toolbarIcon = '',
font = '',
)
Future<void> homeAdministrativoclick() async {
PayGOSdk repository = PayGOSdk();
await repository.integrado.administrativo();
}
Future<void> homeConfiguracaoClick() async {
PayGOSdk repository = PayGOSdk();
await repository.integrado.generico(
TransacaoRequisicaoGenerica(
operation: Operation.configuracao,
),
);
}
Future<void> homeManutencaoClick() async {
PayGOSdk repository = PayGOSdk();
await repository.integrado.generico(
TransacaoRequisicaoGenerica(
operation: Operation.manutencao,
),
);
}
Future<void> homeInstalacaoClick() async {
PayGOSdk repository = PayGOSdk();
await repository.integrado.generico(
TransacaoRequisicaoGenerica(
operation: Operation.instalacao,
),
);
}
Future<void> homeVersaoClick() async {
PayGOSdk repository = PayGOSdk();
await repository.integrado.generico(
TransacaoRequisicaoGenerica(
operation: Operation.versao,
),
);
}
Future<void> homeTesteComunicacaoClick() async {
PayGOSdk repository = PayGOSdk();
await repository.integrado.generico(
TransacaoRequisicaoGenerica(
operation: Operation.testeComunicacao,
),
);
}
Future<void> homeExibirPdcClick() async {
PayGOSdk repository = PayGOSdk();
await repository.integrado.generico(
TransacaoRequisicaoGenerica(
operation: Operation.exibePdc,
),
);
}
Este exemplo mostra como iniciar uma venda com o PayGO Integrado.
No caso abaixo, estamos solicitando uma venda de R$ 100,99 com o cartão de débito, a vista, utilizando o provedor DEMO, que é um provedor de teste.
Exte exemplo pula as seleções do provedor, tipo de cartão e tipo de venda, mas é possível deixar o usuário escolher essas opções.
Future<void> homeVendaClick() async {
PayGOSdk repository = PayGOSdk();
await repository.integrado.venda(
TransacaoRequisicaoVenda(
amount: 100.99,
currencyCode: CurrencyCode.iso4217Real,
)
..provider = "DEMO"
..cardType = CardType.cartaoDebito
..finType = FinType.aVista,
);
}
Este SDK foi desenvolvido por Claudney Sarti Sessa atendendo as especificações da API de integração do PayGO Integrado via URI, fornecido pela PayGO empresa que oferece produtos para captura de pagamentos físicos, online a fim de facilitar integração com os terminais de pagamento utilizando Dart/Flutter.
Projeto desenvolvido por Claudney Sarti Sessa
GitHub | https://github.com/claudneysessa | |
GitHub Pages | https://claudneysessa.github.io | |
https://www.instagram.com/claudneysessa | ||
https://www.linkedin.com/in/claudneysessa | ||
Gmail | [email protected] |
Este projeto está licenciado sob a Licença MIT - veja o arquivo LICENSE para mais detalhes.