stone_smart_flutter 1.0.18 stone_smart_flutter: ^1.0.18 copied to clipboard
Plugin Flutter para integrar sua aplicação com o SDK Android da Stone para meios de pagamento.
Stone Smart Flutter
Sobre | Tecnologias | Configuração | Autores |
Plugin não oficial!!! #
🎯 Sobre #
Projeto destinado a facilitar a integração com o SDK da Stone Smart no Flutter. Funciona somente com máquinas smarts.
Máquinas compatíveis:
- Positivo L300
- Positivo L400
- Ingenico APOS A8
- Sunmi P2
- Gertec GPOS700X
🚀 Tecnologias #
As seguintes ferramentas foram usadas na construção do projeto:
- Flutter
- SDK Stone version: 4.9.5
🏁 Configuração #
# Pubspec.yaml #
Para usar este plugin, adicione stone_smart_flutter
como dependência ao seu arquivo pubspec.yaml
.
dependencies:
stone_smart_flutter: any
This will get you the latest version.
# Build.gradle #
Em seu build.gradle a nivel do app, a propriedade minSdkVersion
precisa ser level 23. Recurso este exigido pela versão 4.9.5 do SDK Stone.
...
defaultConfig {
applicationId "com.example.stone_example"
minSdkVersion 23
targetSdkVersion flutter.targetSdkVersion
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
}
...
# Implementação #
Para começar é necessário criar uma classe que implemente ´StoneHandler´, sendo que essa é a responsável por monitorar e retornar os dados da Stone.
Criando classe StoneController #
class StoneController extends StoneHandler {
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;
}
@override
void onChanged(String message) {
}
}
Métodos da ´StoneHandler´
onAbortedSuccessfully
Acionado quando uma transação de abort é concluída com sucesso.
onAuthProgress
Acionado quando uma transação está em progresso. Retorno do status do Pinpad também é mapeado aqui.
onError
Acionado quando uma transação retorna um estado de ´Erro´, devolvendo como parâmetro um objeto em formato ´String´ com a mensagem e o método.
onMessage
Método responsável por devolver para o usuário uma mensagem retornada da Stone.
onFinishedResponse
Método responsável por devolver uma response da transação.
onTransactionSuccess
Método acionado quando a transação foi concluída com sucesso.
Iniciar transação
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).
StoneSmart.instance().payment.activePinpad(stoneCode: '12345');
Logo após ativação, o SDK da Stone fornece algumas opções de transação como:
-
Crédito =
StoneSmart.instance().payment.creditPayment(12.50)
-
Crédito Parcelado =
StoneSmart.instance().payment.creditPaymentParc(value: controller.amount, installment: 2)
-
Débito =
StoneSmart.instance().payment.debitPayment(12.50)
-
PIX =
StoneSmart.instance().payment.pixPayment.(amount: 1250, qrCodeAuthorization: '', qrCodeProviderid: '')
-
Voucher (alimentação) =
StoneSmart.instance().payment.voucherPayment(12.50)
-
Estorno =
StoneSmart.instance().payment.cancelTransaction(amount: controller.saleValue, transactionType: PaymentTypeTransaction.CREDIT)
-
Abortar transação =
StoneSmart.instance().payment.abortTransaction()
**Obs: Por padrão o SDK da Stone SEMPRE imprime a via do consumidor.
Modelo de resposta #
Método onAuthProgress, onChanged e onError
Estes métodos iram retornar um objeto em formato de string com a seguinte estrutura:
{
"method": "transaction",
"message": "Transação aprovada",
"errorMessage": "",
"result": 0,
}
O campo errorMessage
só é preenchido caso venha algum erro;
Métodos mapeados para o campo method
: abort, transaction, active, printer, reversal;
Método onFinishedResponse
Este método irá retornar um objeto em formato de String com a seguinte estrutura:
{
"method": "transaction",
"idFromBase": 0,
"amount": 1250,
"cardHolderNumber": "",
"cardBrand": "",
"date": "",
"time": "",
"aid": "",
"arcq": "",
"transactionReference": "",
"saleAffiliationKey": "",
"entryMode": "",
"typeOfTransactionEnum": "",
"serialNumber": "",
"manufacture": "",
"actionCode": "",
"transactionStatus": "",
"messageFromAuthorize": "",
"errorMessage": "",
"result": 0,
}
Observações:
Para a transação com PIX
é necessário fornecer nos parâmetros o qrCodeAuthroization
e o qrCodeProviderid
fornecidos pela Stone.
No método onChanged, pode vir um retorno com o campo "method" preenchido como "QRCode" e no campo message virá a imagem em formato Bitmap, convertida em String, ficando a cargo do desenvolvedor mostrar o QRCode gerado para o usuário final.
Cancelamento
Para cancelar uma transação é necessário chamar o método cancelTransaction
passando o ID da transação.
Caso você não tenha a informação do ID da transação, é necessário chamar o método getAllTransactions
para trazer todas transações em forma de lista, e você conseguir pegar as informações de valor, id e status.
📝 Autores #
Este projeto foi desenvolvido por: Jhonathan Queiroz