Sobre | Tecnologias | Configuração | Autores |
Projeto destinado a facilitar a integração com o SDK da PagSeguro Smart no Flutter. Funciona somente com máquinas smarts
As seguintes ferramentas foram usadas na construção do projeto:
Para usar este plugin, adicione plugpag_flutter
como dependência ao seu arquivo pubspec.yaml
.
dependencies:
pagseguro_smart_flutter: any
This will get you the latest version.
Para integrar a biblioteca a biblioteca PlugPagService em aplicativos para Android é necessário adicionar a seguinte permissão ao AndroidManifest.xml.
<uses-permission android:name="br.com.uol.pagseguro.permission.MANAGE_PAYMENTS"/>
Para que seu aplicativo possa ser escolhido como aplicativo padrão de pagamento e receber Intents de inserção de cartão, é necessário adicionar o seguinte código em seu AndroidManifest.xml dentro da sua Activity principal.
<intent-filter>
<action android:name="br.com.uol.pagseguro.PAYMENT"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
Em seu build.gradle a nivel do app, a propriedade minSdkVersion
precisa ser level 23. Recurso este exigido pela versão 1.27.2 do plugpagservice da PagSeguro.
...
defaultConfig {
applicationId "com.example.pagseguro_example"
minSdkVersion 23
targetSdkVersion flutter.targetSdkVersion
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
}
...
Para começar é necessário criar uma classe que implemente ´PaymentHandler´, sendo que essa é a responsável por monitorar e retornar os dados da pagseguro.
class PaymentController extends PaymentHandler {
int saleValue = 0;
bool enable = false;
bool clickPayment = false;
bool enableRefund = false;
String? transactionCode;
String? transactionId;
String? response;
void setSaleValue(double value) {
if (value > 0.0) {
saleValue = (value * 100).toInt();
clickPayment = false;
enable = true;
} else {
clickPayment = false;
enable = false;
}
}
@override
void disposeDialog() {
BotToast.cleanAll();
}
@override
void onAbortedSuccessfully() {
BotToast.showText(text: "Operação cancelada");
}
@override
void onActivationDialog() {}
@override
void onAuthProgress(String message) {
BotToast.showLoading();
}
@override
void onError(String message) {
BotToast.showText(text: message);
}
@override
void onMessage(String message) {
BotToast.showText(text: message);
}
@override
void onFinishedResponse(String message) {
BotToast.showText(text: message);
}
@override
void onTransactionSuccess() {
BotToast.showText(text: "Transacao com successo!");
}
@override
void writeToFile({
String? transactionCode,
String? transactionId,
String? response,
}) {}
@override
void onLoading(bool show) {
if (show) {
BotToast.showLoading();
return;
}
BotToast.closeAllLoading();
}
@override
void onTransactionInfo({
String? transactionCode,
String? transactionId,
String? response,
}) {
this.transactionCode = transactionCode;
this.transactionId = transactionId;
this.response = response;
BotToast.showText(
text:
"{transactionCode: $transactionCode \n transactionId: $transactionId}");
enableRefund = true;
}
}
Acionado quando uma transação de abort é concluída com sucesso.
Acionado quando uma transação está em progresso. Retorno do status do Pinpad também é mapeado aqui.
Acionado quando uma transação retorna um estado de ´Erro´, devolvendo como parâmetro uma ´String´ com a mensagem.
Método responsável por devolver para o usuário uma mensagem retornada da PagSeguro.
Método responsável por devolver uma response da transação.
Método acionado quando a transação foi concluída com sucesso.
Método resposável por devolver uma response completa da transação, sendo possível mapear vários campos retornados.
Para iniciar a transação é necessário primeiro chamar a função de ativação do PinPad, passando como parâmetro o código de ativação daquele POS (código este informado na sua conta PagBank).
PagseguroSmart.instance().payment.activePinpad('12345');
Logo após ativação, o SDK da PagSeguro fornece algumas opções de transação como:
-
Crédito =
PagseguroSmart.instance().payment.creditPayment(12.50)
-
Crédito Parcelado =
PagseguroSmart.instance().payment.creditPaymentParc(controller.saleValue, 2)
-
Débito =
PagseguroSmart.instance().payment.debitPayment(12.50)
-
PIX =
PagseguroSmart.instance().payment.pixPayment.(12.50)
-
Voucher (alimentação) =
PagseguroSmart.instance().payment.voucherPayment(12.50)
-
startPayment(Permite chamar diretamente o método startPayment da biblioteca PlugPag) =
PagseguroSmart.instance().payment.startPayment( int type, int amount, int installmentType, int installments, String userReference, bool printReceipt, bool partialPay, bool isCarne)
-
Estorno =
PagseguroSmart.instance().payment.refund(transactionCode: controller.transactionCode, transactionId: controller.transactionId)
-
Abortar transação =
PagseguroSmart.instance().payment.abortTransaction()
-
Última transação =
PagseguroSmart.instance().payment.lastTransaction()
-
Obter status de ativação do Pinpad =
PagseguroSmart.instance().payment.isAuthenticated()
**Obs: A via do estabelecimento do estabelecimento pode ser impressa ou não baseada no parâmetro printReceipt. Após a finalização do pagamento, um popUp é exibido perguntando se deseja a via do consumidor.
PagseguroSmart.instance().payment.printerfromFile(path)
=> Fornecer o caminho absoluto ao arquivo que deve ser impresso.
Verificar se seu projeto tem a permissão de acesso aos arquivos dentro do dispositivo.
Igualmente a classe PagSeguroSmart, essa também é necessário configurar um hanlder e inicializar o plugin antes de qualquer função.
Handler -> Você precisa em uma hanlder que extenda de NfcHandler
Inicializar -> NfcSmart.instance.initNfc(handler);
Para a classe responsável com a integração por meio do NFC, temos os seguintes métodos:
NfcSmart.instance.nfc.<método>
//Responsável por fechar o handler de chamadas
Future<void> closeMethodCallHandler();
//Responsável por abortar uma transação em andamento
Future<bool> abortTransaction();
//Responsável por obter a última transação
Future<bool> lastTransaction();
//Responsável por realizar o estorno de uma transação
Future<bool> refund({required String transactionCode, required String transactionId});
//Responsável por ler as informações apartir do NFC
Future<bool> readNfc(idEvento);
//Responsável pela escrita do método NFC
Future<bool> writeNfc(valor, nome, cpf, numeroTag, celular, aberto, idEvento);
//Responsável por regravar informações
Future<bool> reWriteNfc(valor, idEvento);
//Responsável por fazer o estorno de uma transação utilizando NFC
Future<bool> refundNfc(valor, idEvento);
//Responsável por formatar os dados do cartão
Future<bool> formatNfc();
//Responsável por chamar função de débito utilizando NFC
Future<bool> debitNfc(idEvento, valor);
Este projeto foi desenvolvido por: