stone_smart_flutter 1.0.18 copy "stone_smart_flutter: ^1.0.18" to clipboard
stone_smart_flutter: ^1.0.18 copied to clipboard

PlatformAndroid

Plugin Flutter para integrar sua aplicação com o SDK Android da Stone para meios de pagamento.

Stone Smart Flutter

Stone

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:

🏁 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


Voltar para o topo

3
likes
140
pub points
67%
popularity

Publisher

unverified uploader

Plugin Flutter para integrar sua aplicação com o SDK Android da Stone para meios de pagamento.

Repository (GitHub)
View/report issues

Documentation

API reference

License

BSD-3-Clause (license)

Dependencies

flutter, plugin_platform_interface

More

Packages that depend on stone_smart_flutter