stone_payment_tech 1.1.1 copy "stone_payment_tech: ^1.1.1" to clipboard
stone_payment_tech: ^1.1.1 copied to clipboard

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

Stone Payment Tech #

Stone

Plugin Flutter não oficial para integração com o SDK da Stone Smart POS.
Compatível com maquininhas Android inteligentes.

SobreTecnologiasInstalaçãoConfiguração de FlavorsUsoModelo de Resposta


🚨 Aviso #

Este plugin é não oficial e foi desenvolvido de forma independente para facilitar a integração de pagamentos via SDK da Stone em dispositivos Android Smart POS.


🎯 Sobre #

O stone_payment_tech é um plugin Flutter para integração direta com o SDK Stone, permitindo a realização de transações em maquininhas smart Android.

Gradle #

O gradle.wrapper.properties utilizado está na versão 8.9 kotlin_version = '1.9.0' stone_sdk_version = '4.12.0' classpath 'com.android.tools.build:gradle:8.7.3'

🔐 Licenciamento #

Para adquirir uma licença, cadastre-se no site Licença JY Labtech.
Cada licença é válida por terminal. Após a compra, será gerada uma chave licenceKey vinculada ao terminal.

Inicialização com licença #

Obervação: A partir da versão 1.0.0 não é mais necessário passar o licenceKey como parâmetro.
await StonePaymentTech.initPayment(
  handler: controller,
);

A partir da versão 1.0.0 é necessário adicionar as chaves no seu arquivo local.properties na raiz da pasta android.

licenceKey=<sua_licenca>
licenceInternalKey=aHR0cHM6Ly9wb3MtcGF5bWVudHMtYXBpLTU3NzQ2NDIzNTQwOC5zb3V0aGFtZXJpY2EtZWFzdDEucnVuLmFwcC9wb3MtcGF5bWVudHMvbGljZW5jZS9jaGVjay9pbnZvaWNl

✅ Máquinas compatíveis #

  • Positivo L300
  • Positivo L400
  • Ingenico APOS A8
  • Sunmi P2
  • Gertec GPOS700X
  • Tectoy T2

🚀 Tecnologias #

  • Flutter
  • SDK Stone 4.12.0
  • Comunicação via Platform Channels

⚙️ Instalação #

1. pubspec.yaml #

Adicione a dependência:

dependencies:
  stone_payment_tech: any

2. build.gradle #

No arquivo android/app/build.gradle, defina o minSdkVersion como 23:

defaultConfig {
    ...
    minSdkVersion 23
    ...
}

⚠️ O SDK da Stone requer minSdkVersion >= 23.


🧩 Configuração de Flavors #

Para utilizar o plugin corretamente, você precisa configurar os seguintes productFlavors e signingConfigs no android/app/build.gradle do seu projeto:

👇 Exemplo completo: #

...

android {
    ....
    signingConfigs {
        release {
            storeFile keyProperties.storeFile
            keyAlias keyProperties.keyAlias
            keyPassword keyProperties.keyPassword
            storePassword keyProperties.storePassword
        }
    }

    flavorDimensions "model"
    productFlavors {
        gertecGPOS700X {
            dimension "model"
            signingConfig signingConfigs.release
        }
        positivoSeriesL {
            dimension "model"
            signingConfig signingConfigs.release
        }
        sunmi {
            dimension "model"
            signingConfig signingConfigs.release
        }
        tectoySeriesT {
            dimension "model"
            signingConfig signingConfigs.release
        }
        ingenico {
            dimension "model"
            signingConfig signingConfigs.release
        }
    }
}

Importante: mesmo que o seu projeto não use todos os modelos, você precisa declarar todos os flavors para evitar erro de compilação, pois o plugin depende da estrutura deles.


⚠️ O SDK da Stone requer minSdkVersion >= 23.


📦 Uso #

Criando um StoneHandler #

Crie uma classe que estenda IStoneHandler. Essa será responsável por monitorar os eventos e respostas da Stone:

class StoneHandler extends IStoneHandler {
  final Function(StoneTransaction?)? onTransaction;
  final Function(String)? onMessageMonitor;

  StoneHandler({this.onTransaction, this.onMessageMonitor});

  @override
  Future<void> onError(String message) async {}
  @override
  Future<void> onMessage(String message) async {}
  @override
  Future<void> onFinishedResponse(String message) async {}
  @override
  Future<void> onChanged(String message) async {}
  @override
  Future<void> onAuthProgress(String message) async {}
  @override
  Future<void> onTransactionSuccess() async {}
  @override
  Future<void> onLoading(bool show) async {}
}

Iniciando uma transação #

Ative primeiro o pinpad com seu StoneCode:

StoneTech.I.payment.activePinpad(stoneCode: '12345');

Após ativar, você pode iniciar uma das transações disponíveis:

StoneTech.I.payment.creditPayment(12.50);
StoneTech.I.payment.creditPaymentParc(value: 12.50, installment: 2);
StoneTech.I.payment.debitPayment(12.50);
StoneTech.I.payment.voucherPayment(12.50);
StoneTech.I.payment.pixPayment(
  amount: 1250,
  qrCodeAuthorization: '',
  qrCodeProviderid: '',
);
StoneTech.I.payment.cancelTransaction(
  amount: 12.50,
  transactionType: PaymentTypeTransaction.CREDIT,
);
StoneTech.I.payment.abortTransaction();

🔖 Obs: o SDK imprime automaticamente a via do consumidor.

Implementação de página #

Abaixo segue um exemplo usando uma tela pré montada, onde você deve passar os parâmetros solicitados e a tela faz todo o fluxo de transação, e ao terminar lhe devolve um StoneTransactionModel.

 final result = await Navigator.push(
  context,
  MaterialPageRoute(
    builder: (context) => StoneStreamPage(
      stonePaymentParams: StonePaymentParams(
        amount: 15,
        type: StonePaymentType.debit,
        credentials: StoneCredentialsModel(
          stoneCode: 'StoneCode',
          appName: 'nome_do_seu_app',
        ),
      ),
    ),
  ),
);

Implementação usando Dialog #

Abaixo segue um exemplo usando um dialog pré montado, onde você deve passar os parâmetros solicitados e o dialog faz todo o fluxo de transação, e ao terminar lhe devolve um StoneTransactionModel.

await showDialog(
  context: context,
  builder: (context) {
    return StoneStreamDialog(
      stonePaymentParams: StonePaymentParams(
        amount: 15,
        type: StonePaymentType.debit,
        credentials: StoneCredentialsModel(
          stoneCode: 'StoneCode',
          appName: 'nome_do_seu_app',
        ),
      ),
      onConfirmPayment: (transaction) {
        print('***Response dialog: $transaction');
      },
    );
  });

Implementação usando Tela para IMPRESSÃO #

 final result = await Navigator.push(
  context,
  MaterialPageRoute(
    builder: (context) => StonePrinterPage(
      credentials: StoneCredentialsModel(
          stoneCode: 'StoneCode',
          appName: 'nome_do_seu_app',
        ),
        child: <Seu widget montando seu layout para impressão>
    ),
  ),
);

Ele vai devolver um boolean, informando se deu certo a impressão ou não.

Style

Caso queira passar um estilo diferente para o StoneStreamDialog ou para StoneStreamPage, é só passar o parâmetro style, sendo este a classe StoneStreamStyle.


📥 Callbacks implementáveis (StoneHandler) #

Método Descrição
onAbortedSuccessfully Transação abortada com sucesso
onAuthProgress Status de autenticação (inclui PIN pad)
onError Erro em uma operação
onMessage Mensagem bruta vinda da Stone
onFinishedResponse Resultado final da transação
onTransactionSuccess Sucesso da transação

📄 Modelo de resposta #

Exemplo: onAuthProgress, onChanged, onError #

{
  "method": "transaction",
  "message": "Transação aprovada",
  "errorMessage": "",
  "result": 0
}

Exemplo: onFinishedResponse #

{
  "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 importantes #

  • Para transações PIX, forneça qrCodeAuthorization e qrCodeProviderid.
  • Para exibir QRCode (campo method: QRCode), o retorno virá em message como uma imagem em Bitmap convertida para String.
  • O método getAllTransactions() pode ser usado para buscar transações anteriores para fins de estorno.

💡 Dica #

A resposta mais completa da SDK Stone virá sempre no método onFinishedResponse. Use o campo method da resposta para identificar o tipo de evento:

void onFinishedResponseMonitor(StoneTransaction? stoneTransaction) {
  switch (stoneTransaction?.method) {
    case 'licence':
    //se result vier == 0, licença ativada, do contrário o objeto "errorMessage" irá trazer a descrição do erro.
    case 'active':
      // Terminal ativado
      break;
    case 'transaction':
      // Transação finalizada
      break;
    case 'abort':
    case 'abortPix':
    case 'cancel':
    case 'printer':
    case 'QRCode':
      // Exibir QR Code
      break;
    case 'PaymentOptions':
      // Use _stoneTech.payment.setPaymentOption(option: ...)
      break;
    case 'reversal':
      break;
    default:
  }
}


🔝 Voltar ao topo

3
likes
0
points
257
downloads

Publisher

verified publisherjylabtech.com.br

Weekly Downloads

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

Repository (GitHub)
View/report issues

License

unknown (license)

Dependencies

flutter

More

Packages that depend on stone_payment_tech

Packages that implement stone_payment_tech