albertoadolfo27/mpesa_sdk

unofficial Vodacom M-Pesa SDK

v1.0.0 2025-04-19 22:32 UTC

This package is auto-updated.

Last update: 2025-07-19 23:00:44 UTC


README

M-Pesa SDK PHP (Não Oficial)

SDK não oficial para integração com a API da Vodacom M-Pesa Moçambique, desenvolvido em PHP.

Suporte a operações C2B, B2C, B2B, Reversão, Consulta de Transações e Consulta de Nome do Cliente.

Instalação

composer require albertoadolfo27/mpesa_sdk

Requisitos

  • PHP 8.0+
  • Extensão openssl habilitada
  • Chave pública fornecida pela Vodacom
  • API Key válida

Como Usar

1. Instanciar a SDK

use MpesaSdk\MPesa;

$mpesa = new MPesa(
    apiKey: 'SUA_API_KEY',
    publicKey: 'CHAVE_PUBLICA_DA_VODACOM'
);

2. Enviar pagamento C2B

$response = $mpesa->customerToBusiness(
    transactionReference: 'REF123456',
    customerNumber: '25884XXXXXXX',
    amount: '100',
    thirdPartyReference: 'MEU_REF_INTERNO'
);

3. Pagamento B2C

$response = $mpesa->businessToCustomer(
    transactionReference: 'REF789',
    customerNumber: '25884XXXXXXX',
    amount: '250',
    thirdPartyReference: 'REFCLIENTE123',
    businessCode: '171717'
);

4. Pagamento B2B

$response = $mpesa->businessToBusiness(
    transactionReference: 'REFXYZ',
    amount: '500',
    thirdPartyReference: 'REFB2B001',
    primaryBusinessCode: '171717',
    receiverBusinessCode: '123456'
);

5. Reverter uma transação

$response = $mpesa->reversal(
    transactionID: 'TX123456789',
    securityCredential: 'SEU_CREDENCIAL_SEGURANCA',
    initiatorIdentifier: 'INICIADOR',
    thirdPartyReference: 'REF001',
    businessCode: '171717',
    amount: '100'
);

6. Consultar transação

$response = $mpesa->transactionStatus(
    thirdPartyReference: 'REF001',
    queryReference: 'TX123456789',
    businessCode: '171717'
);

7. Consultar nome do cliente

$response = $mpesa->customerName(
    customerNumber: '25884XXXXXXX',
    businessCode: '171717',
    thirdPartyReference: 'NOMECONSULTA001'
);

Códigos de Resposta

Todos os métodos retornam um objeto contendo:

[
  'httpCode' => 200,
  'responseCode' => 'INS-0',
  'responseDescription' => 'Request processed successfully',
  'transactionID' => '...',
  'thirdPartyReference' => '...'
]

Verificando o Código de Resposta

O SDK define uma série de constantes na classe MPesaResponseCode para facilitar a verificação dos códigos de resposta retornados pela API. Isso torna seu código mais legível e seguro contra erros de digitação.

Exemplo de Uso:

use MpesaSdk\MPesaResponseCode;

$response = $mpesa->customerToBusiness(
    transactionReference: "TX123456",
    customerNumber: "841234567",
    amount: "100",
    thirdPartyReference: MPesa::generateUniqueReference()
);

if ($response->responseCode === MPesaResponseCode::SUCCESS) {
    echo "Transação realizada com sucesso!";
} else {
    echo "Erro: " . ($response->responseDescription ?? 'Erro desconhecido');
}

Aqui está a tabela de códigos de resposta da classe MPesaResponseCode

Constante Código Descrição
SUCCESSINS-0Transação bem-sucedida
CREATEDINS-0Transação criada com sucesso
INTERNAL_ERRORINS-1Erro interno
INVALID_API_KEYINS-2Chave de API inválida
USER_NOT_ACTIVEINS-4Usuário não está ativo
TRANSACTION_CANCELLEDINS-5Transação cancelada
TRANSACTION_FAILEDINS-6Falha na transação
REQUEST_TIMEOUTINS-9Tempo limite excedido
DUPLICATE_TRANSACTIONINS-10Transação duplicada
INVALID_SHORTCODEINS-13Código de serviço inválido
INVALID_REFERENCEINS-14Referência inválida
INVALID_AMOUNTINS-15Valor inválido
TEMPORARY_OVERLOADINS-16Sobrecarga temporária
INVALID_TRANSACTION_REFINS-17Referência de transação inválida
INVALID_TRANSACTION_IDINS-18ID da transação inválido
INVALID_THIRD_PARTY_REFINS-19Referência de terceiro inválida
MISSING_PARAMETERSINS-20Parâmetros ausentes
PARAMETER_VALIDATION_FAILEDINS-21Validação de parâmetro falhou
INVALID_OPERATION_TYPEINS-22Tipo de operação inválida
UNKNOWN_STATUSINS-23Status desconhecido
INVALID_INITIATOR_IDINS-24ID do iniciador inválido
INVALID_CREDENTIALINS-25Credencial inválida
NOT_AUTHORIZEDINS-26Não autorizado
DIRECT_DEBIT_MISSINGINS-993Débito direto ausente
DIRECT_DEBIT_EXISTSINS-994Débito direto já existe
CUSTOMER_PROFILE_ISSUEINS-995Problemas com perfil do cliente
ACCOUNT_NOT_ACTIVEINS-996Conta inativa
LINKING_TRANSACTION_MISSINGINS-997Transação de vinculação ausente
INVALID_MARKETINS-998Mercado inválido
INITIATOR_AUTH_ERRORINS-2001Erro de autenticação do iniciador
INVALID_RECEIVERINS-2002Destinatário inválido
INSUFFICIENT_BALANCEINS-2006Saldo insuficiente
INVALID_MSISDNINS-2051Número MSISDN inválido
INVALID_LANGUAGE_CODEINS-2057Código de idioma inválido

Gerando Referência Única

Para facilitar a criação de uma referência única a ser usada no parâmetro thirdPartyReference, o SDK oferece o método auxiliar:

use MpesaSdk\MPesa;

$uniqueReference = MPesa::generateUniqueReference();

Estrutura do Projeto

src/
├── MPesa.php              # Classe principal da SDK
├── MPesaResponse.php      # Formatação de resposta
└── MPesaResponseCode.php  # Lista de todos os códigos de resposta

To-Do

  • Testes unitários com PHPUnit
  • Implementar suporte a webhooks

Autor

Alberto Jordane Adolfo
Alberto Jordane Adolfo

Licença

Este projeto está licenciado sob a licença MIT.





EN

M-Pesa PHP SDK (Unofficial)

Unofficial SDK for integrating with the Vodacom M-Pesa Mozambique API, built in PHP.

Supports C2B, B2C, B2B operations, Reversal, Transaction Status, and Customer Name Lookup.

Installation

composer require albertoadolfo27/mpesa_sdk

Requirements

  • PHP 8.0+
  • openssl extension enabled
  • Public key provided by Vodacom
  • Valid API Key

How to Use

1. Instantiate the SDK

use MpesaSdk\MPesa;

$mpesa = new MPesa(
    apiKey: 'YOUR_API_KEY',
    publicKey: 'VODACOM_PUBLIC_KEY'
);

2. Send C2B Payment

$response = $mpesa->customerToBusiness(
    transactionReference: 'REF123456',
    customerNumber: '25884XXXXXXX',
    amount: '100',
    thirdPartyReference: 'MY_INTERNAL_REF'
);

3. B2C Payment

$response = $mpesa->businessToCustomer(
    transactionReference: 'REF789',
    customerNumber: '25884XXXXXXX',
    amount: '250',
    thirdPartyReference: 'CLIENTREF123',
    businessCode: '171717'
);

4. B2B Payment

$response = $mpesa->businessToBusiness(
    transactionReference: 'REFXYZ',
    amount: '500',
    thirdPartyReference: 'REFB2B001',
    primaryBusinessCode: '171717',
    receiverBusinessCode: '123456'
);

5. Reverse a Transaction

$response = $mpesa->reversal(
    transactionID: 'TX123456789',
    securityCredential: 'YOUR_SECURITY_CREDENTIAL',
    initiatorIdentifier: 'INITIATOR',
    thirdPartyReference: 'REF001',
    businessCode: '171717',
    amount: '100'
);

6. Check Transaction Status

$response = $mpesa->transactionStatus(
    thirdPartyReference: 'REF001',
    queryReference: 'TX123456789',
    businessCode: '171717'
);

7. Get Customer Name

$response = $mpesa->customerName(
    customerNumber: '25884XXXXXXX',
    businessCode: '171717',
    thirdPartyReference: 'NAMEQUERY001'
);

Response Codes

All methods return an object like:

[
  'httpCode' => 200,
  'responseCode' => 'INS-0',
  'responseDescription' => 'Request processed successfully',
  'transactionID' => '...',
  'thirdPartyReference' => '...'
]

Checking the Response Code

The SDK defines a set of constants in the MPesaResponseCode class to simplify checking the response codes returned by the API. This makes your code more readable and helps prevent typos.

Example:

use MpesaSdk\MPesaResponseCode;

$response = $mpesa->customerToBusiness(
    transactionReference: "TX123456",
    customerNumber: "841234567",
    amount: "100",
    thirdPartyReference: MPesa::generateUniqueReference()
);

if ($response->responseCode === MPesaResponseCode::SUCCESS) {
    echo "Transaction completed successfully!";
} else {
    echo "Error: " . ($response->responseDescription ?? 'Unknown error');
}

See the Full List of Response Codes from MPesaResponseCode

(The HTML table you asked for earlier contains the full list.)

Generating a Unique Reference

To easily generate a unique value to be used in the thirdPartyReference parameter, you can use the helper method provided by the SDK:

use MpesaSdk\MPesa;

$uniqueReference = MPesa::generateUniqueReference();

Project Structure

src/
├── MPesa.php              # Main SDK class
├── MPesaResponse.php      # Response formatting
└── MPesaResponseCode.php  # List of all response codes

To-Do

  • Unit tests with PHPUnit
  • Webhook support

Author

Alberto Jordane Adolfo
Alberto Jordane Adolfo

License

This project is licensed under the MIT license.