Download the PHP package techsolutions-projects/mobile-wallet-sdk without Composer

On this page you can find all versions of the php package techsolutions-projects/mobile-wallet-sdk. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.

FAQ

After the download, you have to make one include require_once('vendor/autoload.php');. After that you have to import the classes with use statements.

Example:
If you use only one package a project is not needed. But if you use more then one package, without a project it is not possible to import the classes with use statements.

In general, it is recommended to use always a project to download your libraries. In an application normally there is more than one library needed.
Some PHP packages are not free to download and because of that hosted in private repositories. In this case some credentials are needed to access such packages. Please use the auth.json textarea to insert credentials, if a package is coming from a private repository. You can look here for more information.

  • Some hosting areas are not accessible by a terminal or SSH. Then it is not possible to use Composer.
  • To use Composer is sometimes complicated. Especially for beginners.
  • Composer needs much resources. Sometimes they are not available on a simple webspace.
  • If you are using private repositories you don't need to share your credentials. You can set up everything on our site and then you provide a simple download link to your team member.
  • Simplify your Composer build process. Use our own command line tool to download the vendor folder as binary. This makes your build process faster and you don't need to expose your credentials for private repositories.
Please rate this library. Is it a good library?

Informations about the package mobile-wallet-sdk

Mobile Wallet SDK — Documentação Oficial

Pacote: techsolutions-projects/mobile-wallet-sdk Namespace: Techsolutions\Sdk\MobileWallets Compatibilidade: PHP 8.2–8.3 · Laravel 11–13 Licença: MIT — Techsolutions Lda


Índice

  1. Introdução
  2. Instalação e Configuração
  3. Arquitectura
  4. Conceitos Principais
  5. Utilização Básica
  6. API Fluente (Transaction Builder)
  7. Trait Billable
  8. Facade
  9. Enumerações
  10. Códigos de Resposta
  11. Sistema de Retry
  12. Eventos
  13. Webhooks
  14. WebSockets / Broadcasting
  15. Dashboard
  16. Drivers
  17. Gateways Externos
  18. Internacionalização
  19. Testes
  20. Análise Estática e Qualidade de Código
  21. Extensão — Criar um Driver Customizado
  22. Referência de Configuração
  23. FAQ

1. Introdução

O Mobile Wallet Gateway é um pacote Laravel que permite integrar múltiplas carteiras móveis moçambicanas através de uma única interface consistente.

O objectivo é simplificar a integração com APIs de pagamento como M-Pesa e E-Mola, garantindo ao mesmo tempo robustez, extensibilidade e qualidade de código.

Porquê este pacote?

Integrar directamente com cada provedor de pagamento móvel em Moçambique apresenta desafios:

Este pacote resolve estes problemas ao fornecer:

Princípios de design


2. Instalação e Configuração

Requisitos

Instalar via Composer

Publicar ficheiros

Publicar tudo de uma vez:

Ou separadamente:

Executar as migrations

Isto cria duas tabelas:

Tabela Descrição
mws_wallets Carteiras registadas (M-Pesa, E-Mola)
mws_transactions Transacções com estado, tentativas, resposta do gateway

Registar as carteiras

Antes de processar transacções, é necessário inserir as carteiras na base de dados:

Nota: Recomenda-se criar um seeder (MwgWalletSeeder) para automatizar este processo.

Configuração do ambiente (.env)


3. Arquitectura

O pacote segue uma arquitectura baseada em drivers, inspirada no padrão Manager do Laravel (à semelhança do DatabaseManager, MailManager, FilesystemManager).

Diagrama de camadas

Estrutura do pacote

Fluxo de uma transacção

  1. O programador invoca Transaction::onWallet($wallet)->c2b(...).
  2. O TransactionBuilder acumula configurações (callbacks, canal WebSocket, metadata).
  3. Ao invocar c2b() / b2c() / begin(), o builder cria um registo Transaction na base de dados com estado PENDING.
  4. O builder despacha um ProcessTransactionJob (síncrono ou via fila).
  5. O job resolve o driver correcto via GatewayManager.
  6. O driver chama a API do provedor (HTTP para M-Pesa, SOAP para E-Mola).
  7. Com base na resposta:
    • Sucesso → marca como SUCCEEDED, dispara TransactionSucceeded, executa callback.
    • Falha retentável → agenda retry com backoff exponencial, dispara TransactionRetried.
    • Falha terminal → marca como FAILED, dispara TransactionFailed, executa callback.

4. Conceitos Principais

Wallet

Representa um provedor de pagamento registado na base de dados. Cada carteira tem um name que corresponde a um driver.

Campos:

Campo Tipo Descrição
name string Chave do driver: m-pesa, e-mola
display_name string\|null Nome para exibição: "M-Pesa"
service_provider_code string\|null Código do provedor (M-Pesa)
is_active bool Se a carteira está activa
metadata array\|null Dados extra em JSON

Transaction

Representa uma transacção de pagamento com o seu estado completo.

Campos principais:

Campo Tipo Descrição
uuid string Identificador único UUID v4
mws_wallet_id int FK para a carteira
billable_type / billable_id string\|int Relação polimórfica (o que está a ser pago)
msisdn string Número de telefone do cliente
amount float Valor da transacção
transaction_type TransactionType Tipo: c2b, b2c, b2b, c2c
status TransactionStatus Estado actual
status_code string\|null Código de resposta do gateway (INS-0, EMOLA-07, EMOLA-GW-1000, etc.)
max_attempts int Número máximo de tentativas
current_attempt int Tentativa actual
gateway_transaction_id string\|null ID da transacção no provedor
gateway_raw_response array\|null Resposta bruta do provedor
streaming_channel string\|null Canal WebSocket (se configurado)
metadata array\|null Dados arbitrários

GatewayResponse

DTO (Data Transfer Object) imutável que encapsula a resposta de um gateway.


5. Utilização Básica

Transacção C2B (Cliente para Empresa)

O caso mais comum — cobrar um pagamento ao cliente:

Transacção B2C (Empresa para Cliente)

Desembolsar fundos para um cliente:

Formatos de valor aceites

O AmountParser aceita múltiplos formatos:


6. API Fluente (Transaction Builder)

O TransactionBuilder é o coração da API fluente. Todos os métodos de configuração são opcionais e encadeáveis. A transacção só é criada quando se invoca um método terminal (begin(), c2b(), b2c(), etc.).

Exemplo completo

Métodos de configuração

Método Descrição Obrigatório
forBillable(Billable $model) Associa um modelo pagável (Invoice, Order) Não
toSocket(string $channel) Activa broadcasting num canal WebSocket Não
onSuccess(Closure $fn) Callback para sucesso Não
onFail(Closure $fn) Callback para falha final Não
shouldRetry(Closure $fn) Override da lógica de retry Não
withMetadata(array $data) Anexa dados arbitrários Não

Métodos terminais (executam a transacção)

Método Tipo Descrição
c2b(msisdn, amount, attempts) Customer → Business Cobrança ao cliente
b2c(msisdn, amount, attempts) Business → Customer Desembolso
b2b(msisdn, amount, attempts) Business → Business Transferência entre empresas
c2c(msisdn, amount, attempts) Customer → Customer Transferência entre clientes
customerToBusiness(...) Alias de c2b()
businessToCustomer(...) Alias de b2c()
businessToBusiness(...) Alias de b2b()
customerToCustomer(...) Alias de c2c()
begin(msisdn, amount, attempts, type) Genérico Especificar o tipo como parâmetro

7. Trait Billable

O trait MwgBillable permite que qualquer modelo Eloquent se torne "pagável" — criando uma ligação directa entre o que está a ser pago e a transacção.

Implementar no modelo

O modelo deve implementar a interface Billable e usar o trait MwgBillable:

Interface Billable

Método Retorno Descrição
getMwgAmount() float Valor a cobrar
getMwgDescription() string Descrição legível
getMwgReference() string Referência única
getMwgMsisdn() ?string Número do cliente (pode ser null)

Métodos disponibilizados pelo trait

Pagamento directo

Builder fluente com billable

Consultas

Como funciona a ligação polimórfica

Quando se utiliza o trait, as colunas billable_type e billable_id na tabela mws_transactions são preenchidas automaticamente:

Isto permite:


8. Facade

A facade MobileWallet fornece um ponto de acesso estático ao GatewayManager:

A facade está registada como alias MWS no composer.json:


9. Enumerações

Todos os valores discretos do pacote são representados por enumerações PHP 8.1, garantindo segurança de tipo em tempo de compilação.

TransactionStatus

Estados possíveis de uma transacção:

TransactionType

Tipos de transacção suportados:

WalletDriver

Drivers disponíveis com resolução de aliases:

GatewayResponseCode

Detalhado na secção seguinte.


10. Códigos de Resposta

O enum GatewayResponseCode unifica os códigos de resposta de todos os provedores num único enum. Cada caso é prefixado com M_PESA_* ou E_MOLA_*.

Códigos M-Pesa

Caso do Enum Valor Descrição Retentável?
M_PESA_SUCCESS INS-0 Sucesso
M_PESA_INTERNAL_ERROR INS-1 Erro interno
M_PESA_INVALID_API_KEY INS-2 Chave API inválida
M_PESA_INSUFFICIENT_BALANCE INS-5 Saldo insuficiente
M_PESA_TRANSACTION_CANCELLED INS-6 Cancelada pelo cliente
M_PESA_TRANSACTION_FAILED INS-9 Falha no processamento
M_PESA_UNRESOLVED_ACCOUNT INS-10 MSISDN não registado
M_PESA_INVALID_SHORTCODE INS-12 Shortcode inválido
M_PESA_INVALID_REFERENCE INS-13 Referência inválida
M_PESA_INVALID_AMOUNT INS-14 Valor inválido
M_PESA_DUPLICATE_TRANSACTION INS-15 Transacção duplicada
M_PESA_INVALID_MSISDN INS-16 Número inválido
M_PESA_TRANSACTION_TIMEOUT INS-22 Timeout
M_PESA_LIMIT_EXCEEDED INS-23 Limite excedido
M_PESA_CUSTOMER_NOT_ACTIVE INS-26 Conta não activa
M_PESA_THROTTLE_LIMIT INS-998 Rate limit
M_PESA_SERVER_ERROR INS-999 Erro do servidor

Códigos E-Mola

Conforme a MOVITEL USSD PUSH API SPECIFICATION v1.5, a E-Mola devolve dois níveis de código de resposta: o nível transacção (<errorCode>, prefixo EMOLA-) e o nível gateway BCCS (<error>, prefixo EMOLA-GW-). Abaixo um subconjunto dos mais relevantes — a tabela completa está em src/Enums/GatewayResponseCode.php.

Nível transacção:

Caso do Enum Valor Descrição Retentável?
E_MOLA_SUCCESS EMOLA-0 Sucesso
E_MOLA_TRANSACTION_FAILED EMOLA-03 Transacção falhou
E_MOLA_INVALID_PARTNER EMOLA-05 Código de parceiro inválido
E_MOLA_INVALID_AMOUNT EMOLA-06 Valor inválido
E_MOLA_INVALID_MSISDN EMOLA-07 MSISDN inválido
E_MOLA_PIN_NOT_ENTERED EMOLA-11 Cliente não introduziu PIN (timeout USSD)
E_MOLA_NO_EMOLA_ACCOUNT EMOLA-12 Cliente sem conta E-Mola
E_MOLA_DUPLICATE_TRANSID EMOLA-14 transId já existente
E_MOLA_ISDN_IN_OTHER_PROCESS EMOLA-20 Número noutro processo
E_MOLA_ALREADY_PROCESSED EMOLA-28 Transacção já processada
E_MOLA_PROCESSING_ERROR EMOLA-99 Erro genérico

Nível gateway (BCCS):

Caso do Enum Valor Descrição Retentável?
E_MOLA_GW_USERNAME_INVALID EMOLA-GW-1000 Username inválido
E_MOLA_GW_TIMEOUT EMOLA-GW-2007 Timeout ao chamar a API
E_MOLA_GW_SYSTEM_OVERLOADED EMOLA-GW-6000 Sistema sobrecarregado
E_MOLA_GW_LOGIN_FAILED EMOLA-GW-6003 Falha de autenticação (credenciais/IP)
E_MOLA_GW_IP_INCORRECT EMOLA-GW-8000 IP do cliente incorrecto

Transporte (gerados pelo driver):

Caso do Enum Valor Descrição Retentável?
E_MOLA_SOAP_FAULT EMOLA-SOAP Erro SOAP
E_MOLA_CONNECTION_ERROR EMOLA-CONN Erro de ligação

Utilização


11. Sistema de Retry

O pacote inclui retry automático com backoff exponencial e decisão inteligente baseada nos códigos de resposta.

Configuração

Comportamento padrão

  1. Se a resposta é um sucesso → para. Marca como SUCCEEDED.
  2. Se a resposta é uma falha terminal (ex.: INS-5 saldo insuficiente) → para imediatamente. Marca como FAILED. Não há razão para re-tentar.
  3. Se a resposta é uma falha retentável (ex.: INS-22 timeout) e current_attempt < max_attempts → agenda nova tentativa com backoff exponencial.
  4. Se as tentativas se esgotam → marca como FAILED.

Override via shouldRetry()


12. Eventos

O pacote dispara eventos Laravel em cada ponto do ciclo de vida da transacção:

Evento Quando é disparado Propriedades
TransactionStarted Na primeira tentativa $transaction
TransactionSucceeded Quando a transacção é bem-sucedida $transaction, $response
TransactionFailed Quando a transacção falha definitivamente $transaction, $response
TransactionRetried Quando uma nova tentativa é agendada $transaction, $lastResponse, $attemptNumber

Registar listeners

Exemplo de listener


13. Webhooks

Os provedores de pagamento enviam notificações assíncronas (callbacks) quando o estado de uma transacção muda. O pacote fornece um endpoint pronto a usar.

Endpoints

URL Provedor
POST /mws/webhook/m-pesa M-Pesa (Vodacom)
POST /mws/webhook/e-mola E-Mola (Movitel)

O prefixo pode ser alterado em config/mobile-wallet.php:

Segurança

Quando MWS_WEBHOOK_SECRET está definido, o middleware VerifyWebhookSignature valida:

  1. A presença dos cabeçalhos X-MWS-Signature e X-MWS-Timestamp.
  2. A tolerância temporal (por defeito 5 minutos).
  3. A assinatura HMAC-SHA256 do payload.

Configurar no provedor

Ao configurar webhooks no portal M-Pesa ou no acordo E-Mola, forneça:


14. WebSockets / Broadcasting

O pacote suporta notificações em tempo real via Laravel Broadcasting (Echo + Pusher/Soketi/Ably).

Activar

Utilizar

Ouvir no frontend (Laravel Echo)

Payload do broadcast


15. Dashboard

O pacote inclui endpoints JSON para um painel de controlo simples.

Activar

Endpoints

Método URL Descrição
GET /mws/dashboard Resumo: carteiras, estatísticas, transacções recentes
GET /mws/dashboard/transaction/{uuid} Detalhe de uma transacção

O middleware por defeito é ['web', 'auth'] — configurável em config/mobile-wallet.php.


16. Drivers

M-Pesa (Vodacom Moçambique)

Propriedade Valor
Protocolo REST/JSON
Autenticação Bearer token gerado por encriptação RSA
Tipos suportados C2B, B2C, B2B, C2C
Portal de developers developer.mpesa.vm.co.mz

Endpoints utilizados:

Tipo URL
C2B /ipg/v1x/c2bPayment/singleStage/
B2C /ipg/v1x/b2cPayment/
B2B /ipg/v1x/b2bPayment/
C2C /ipg/v1x/c2cPayment/
Query /ipg/v1x/queryTransactionStatus/

E-Mola (Movitel Moçambique)

Propriedade Valor
Protocolo SOAP — Viettel BCCS Gateway
Endpoint https://<ip>:<porto>/BCCSGateway/BCCSGateway?wsdl
Autenticação username/password dentro do <Input> + params key e partnerCode (NÃO em SoapHeader)
Tipos suportados C2B, B2C (depende do acordo)
Especificação MOVITEL USSD PUSH API SPECIFICATION v1.5
Documentação Não pública — obtida via acordo de parceria com a Movitel

Operações SOAP — uma única operação gwOperation cujo wscode determina a acção:

wscode Tipo
pushUssdMessage C2B (cobrança ao cliente)
pushUssdDisbursementB2C B2C (desembolso)
pushUssdQueryTrans Consulta de estado
queryAccountBalance Saldo do parceiro
queryBeneficiaryName Nome do beneficiário

A resposta tem dois níveis: a tag <error> no <Result> reflecte o estado do gateway BCCS (→ EMOLA-GW-*) e o <errorCode> real da transacção fica dentro do CDATA <original> (→ EMOLA-*). O driver faz o parsing dos dois automaticamente.

Métodos adicionais expostos por EMolaGateway:

Nota importante: A E-Mola não disponibiliza uma API pública para developers. As credenciais (WSDL URL, username, password, key, partner code) são obtidas exclusivamente através de acordo comercial directo com a Movitel. A extensão PHP ext-soap é necessária para usar este driver directamente.

Sandbox

Driver de simulação para desenvolvimento e testes. Não faz chamadas HTTP/SOAP reais.


17. Gateways Externos

O pacote suporta integração com plataformas intermediárias que já implementaram a comunicação directa com os provedores. Em vez de cada developer obter credenciais directas da Vodacom ou fazer acordo de parceria com a Movitel, pode utilizar um intermediário que abstrai tudo numa API REST simples.

Conceito

O código da tua aplicação não muda — a mesma API fluente funciona independentemente de estar a usar a API directa ou um intermediário. A diferença está apenas na configuração.

Presets disponíveis

Preset Plataforma Descrição
eacacia EACACIA / Vitae ERP Gateway REST unificado para M-Pesa, E-Mola e M-Kesh
e2payments e2Payments / Explicador Gateway REST com OAuth2 para E-Mola
custom Qualquer Configuração manual completa de endpoints e mapeamento

Activar para uma wallet

Para usar a EACACIA em vez da API directa do M-Pesa, basta alterar a configuração:

O código da aplicação continua exactamente igual:

Configuração por preset

EACACIA (Vitae ERP)

O preset eacacia já sabe:

e2Payments (Explicador)

Gateway Customizado

Para qualquer API REST que não tenha um preset:

Códigos de resposta de gateways externos

Código Constante Retentável?
EXTERNAL-SUCCESS EXTERNAL_SUCCESS
EXTERNAL-FAIL EXTERNAL_FAIL
EXTERNAL-TIMEOUT EXTERNAL_TIMEOUT
EXTERNAL-AUTH EXTERNAL_AUTH_ERROR
EXTERNAL-PAYLOAD EXTERNAL_INVALID_PAYLOAD
EXTERNAL-CONN EXTERNAL_CONNECTION_ERROR

Misto: wallet directa + wallet externa

Pode-se ter uma wallet com driver directo e outra com externo no mesmo projecto:


18. Internacionalização

O pacote inclui ficheiros de tradução em Português Europeu (pré-reforma) e Inglês.

Ficheiros de língua

Ficheiro Conteúdo
messages.php Mensagens do sistema (transacção iniciada, falhou, etc.)
statuses.php Rótulos dos estados de transacção
types.php Rótulos dos tipos de transacção
response_codes.php Descrições dos códigos de resposta
errors.php Mensagens de erro

Utilização automática

Os enums utilizam o sistema de tradução automaticamente:

Publicar para customização

Os ficheiros são copiados para lang/vendor/mobile-wallet/.


19. Testes

O pacote inclui testes unitários e de integração utilizando o Orchestra Testbench.

Executar

Cobertura

Suite Ficheiro Cobertura
Unit CoreTest.php AmountParser, GatewayResponseCode, SandboxGateway, TransactionBuilder, Wallet scopes
Feature FlowTest.php Fluxo completo de transacção, retry, callbacks, facade, webhooks, trait Billable

Testar nos teus projectos

O SandboxGateway é activado automaticamente quando MWS_SANDBOX=true. Nos teus testes:


20. Análise Estática e Qualidade de Código

O pacote inclui configuração para Larastan (PHPStan para Laravel) e Rector.

Larastan (PHPStan nível 8)

Configuração em phpstan.neon — nível 8 (o mais rigoroso).

Rector

Configuração em rector.php — inclui sets de qualidade de código, tipos, early return e dead code.


21. Extensão — Criar um Driver Customizado

Para adicionar suporte a um novo provedor (ex.: mKesh, se a API for disponibilizada no futuro):

1. Criar o driver

2. Registar no GatewayManager

3. Adicionar configuração

4. Registar a wallet na base de dados


22. Referência de Configuração

Todas as opções disponíveis em config/mobile-wallet.php:

Chave Tipo Default Descrição
default string 'm-pesa' Carteira padrão
sandbox bool true Modo sandbox (todas as transacções são simuladas)
wallets.m-pesa.base_url string sandbox URL URL base da API M-Pesa
wallets.m-pesa.api_key string '' Chave API M-Pesa
wallets.m-pesa.public_key string '' Chave pública RSA M-Pesa
wallets.m-pesa.service_provider_code string '' Código do provedor M-Pesa
wallets.m-pesa.origin string '*' Cabeçalho Origin
wallets.m-pesa.timeout int 30 Timeout HTTP em segundos
wallets.e-mola.wsdl_url string '' URL do WSDL E-Mola
wallets.e-mola.username string '' Username SOAP E-Mola
wallets.e-mola.password string '' Password SOAP E-Mola
wallets.e-mola.api_key string '' Chave API E-Mola
wallets.e-mola.partner_code string '' Código de parceiro E-Mola
wallets.e-mola.language string 'pt' Língua das respostas (pt|en)
wallets.e-mola.ssl_verify_off bool false Desactivar verificação SSL
retry.max_attempts int 3 Tentativas máximas
retry.backoff_base int 2 Base do backoff (segundos)
retry.backoff_multiplier int 2 Multiplicador exponencial
queue.enabled bool true Processar via fila
queue.connection string\|null null Ligação da fila
queue.queue string 'mws' Nome da fila
webhook.prefix string 'mws/webhook' Prefixo das rotas de webhook
webhook.signing_secret string '' Segredo HMAC (vazio = sem verificação)
webhook.tolerance int 300 Tolerância temporal em segundos
broadcasting.enabled bool false Activar broadcasting WebSocket
logging.enabled bool true Activar logging
logging.channel string 'mobile-wallet' Canal de log
dashboard.enabled bool false Activar endpoints do dashboard
dashboard.prefix string 'mws/dashboard' Prefixo das rotas do dashboard
dashboard.middleware array ['web', 'auth'] Middleware do dashboard

23. FAQ

P: Posso usar sem filas (synchronous)?

Sim. Defina MWS_QUEUE_ENABLED=false no .env. O ProcessTransactionJob será executado sincronicamente via dispatch_sync().

P: Os callbacks onSuccess/onFail funcionam com filas?

Sim. Os closures são serializados usando Illuminate\Queue\SerializableClosure. No entanto, tome cuidado para não capturar objectos complexos ou não serializáveis na closure.

P: A E-Mola suporta B2B e C2C?

Não. A API SOAP da E-Mola suporta oficialmente apenas C2B. O suporte a B2C (desembolso) depende do acordo de parceria com a Movitel. B2B e C2C não são suportados — tentar utilizá-los lançará um GatewayException.

P: Como mudo para produção?

  1. Defina MWS_SANDBOX=false no .env.
  2. Altere MWS_MPESA_BASE_URL para a URL de produção: https://api.vm.co.mz.
  3. Use credenciais de produção para M-Pesa e E-Mola.
  4. Configure MWS_WEBHOOK_SECRET com uma chave forte.

P: O pacote cria alguma rota automaticamente?

Sim:

P: Posso adicionar novos provedores no futuro?

Sim. Consulte a secção 20. Extensão. O sistema de drivers permite adicionar novos provedores sem alterar o código do pacote.

P: Como funciona o retry inteligente?

O ProcessTransactionJob consulta o GatewayResponseCode enum para determinar se o erro é retentável ou terminal. Erros como "saldo insuficiente" (INS-5) ou "cancelado pelo cliente" (INS-6) são terminais — o pacote para imediatamente em vez de desperdiçar tentativas. Erros como "timeout" (INS-22) ou "erro do servidor" (INS-999) são retentáveis.

P: Como sei qual versão do PHP/Laravel é suportada?

PHP Laravel
8.1 10, 11
8.2 10, 11, 12
8.3 10, 11, 12, 13

Documentação mantida por Techsolutions Lda.


All versions of mobile-wallet-sdk with dependencies

PHP Build Version
Package Version
Requires php Version ^8.2
illuminate/support Version ^10.0|^11.0|^12.0
illuminate/database Version ^10.0|^11.0|^12.0
illuminate/queue Version ^10.0|^11.0|^12.0
illuminate/events Version ^10.0|^11.0|^12.0
illuminate/http Version ^10.0|^11.0|^12.0
guzzlehttp/guzzle Version ^7.0
Composer command for our command line client (download client) This client runs in each environment. You don't need a specific PHP version etc. The first 20 API calls are free. Standard composer command

The package techsolutions-projects/mobile-wallet-sdk contains the following files

Loading the files please wait ...