diff --git a/readme.md b/readme.md index e0d5163..c7af1fb 100644 --- a/readme.md +++ b/readme.md @@ -1,121 +1,152 @@ -**Introduction** +# MPESA-PHP-SDK +[![GitHub forks](https://img.shields.io/github/forks/safaricom/mpesa-php-sdk?style=flat-square)](https://github.com/safaricom/mpesa-php-sdk/network) +[![GitHub stars](https://img.shields.io/github/stars/safaricom/mpesa-php-sdk?color=yellow&style=flat-square)](https://github.com/safaricom/mpesa-php-sdk/stargazers) [![GitHub issues](https://img.shields.io/github/issues/safaricom/mpesa-php-sdk?color=red&style=flat-square)](https://github.com/safaricom/mpesa-php-sdk/issues) [![GitHub license](https://img.shields.io/github/license/safaricom/mpesa-php-sdk?style=flat-square)](https://github.com/safaricom/mpesa-php-sdk) + +## Introduction This package seeks to help php developers implement the various Mpesa APIs without much hustle. It is based on the REST API whose documentation is available on https://developer.safaricom.co.ke. - **Installation using composer**
+ ## Installation using composer
`composer require safaricom/mpesa`
- **Configuration**
+ ## Configuration
At your project root, create a .env file and in it set the consumer key and consumer secret as follows - `MPESA_CONSUMER_KEY= [consumer key]`
- `MPESA_CONSUMER_SECRET=[consumer secret]`
- `MPESA_ENV=[live or sandbox]`
- For Laravel users, open the Config/App.php file and add `\Safaricom\Mpesa\MpesaServiceProvider::class` under providers and ` 'Mpesa'=> \Safaricom\Mpesa\MpesaServiceProvider::class` under aliases. + ```PHP + MPESA_CONSUMER_KEY= [consumer key] + MPESA_CONSUMER_SECRET=[consumer secret] + MPESA_ENV=[live or sandbox] + ``` + For Laravel users, open the Config/App.php file and add `\Safaricom\Mpesa\MpesaServiceProvider::class` under providers and ` 'Mpesa'=> \Safaricom\Mpesa\MpesaServiceProvider::class` under aliases.
- _Remember to edit the consumer_key and consumer_secret values appropriately when switching between sandbox and live_ + > **NOTE:** + > _Remember to edit the consumer_key and consumer_secret values appropriately when switching between sandbox and live_ - **Usage** +## Usage - **Confirmation and validation urls** +### Confirmation and validation urls -**B2C Payment Request** +### B2C Payment Request - This creates transaction between an M-Pesa short code to a phone number registered on M-Pesa. +This creates transaction between an M-Pesa short code to a phone number registered on M-Pesa. -`$mpesa= new \Safaricom\Mpesa\Mpesa();` - -`$b2cTransaction=$mpesa->b2c($InitiatorName, $SecurityCredential, $CommandID, $Amount, $PartyA, $PartyB, $Remarks, $QueueTimeOutURL, $ResultURL, $Occasion);` +```PHP +$mpesa= new \Safaricom\Mpesa\Mpesa(); +$b2cTransaction=$mpesa->b2c($InitiatorName, $SecurityCredential, $CommandID, $Amount, $PartyA, $PartyB, $Remarks, $QueueTimeOutURL, $ResultURL, $Occasion); +``` +
-**Account Balance Request** +### Account Balance Request This is used to enquire the balance on an M-Pesa BuyGoods (Till Number) -`$mpesa= new \Safaricom\Mpesa\Mpesa();` - -`$balanceInquiry=$mpesa->accountBalance($CommandID, $Initiator, $SecurityCredential, $PartyA, $IdentifierType, $Remarks, $QueueTimeOutURL, $ResultURL);` +```PHP +$mpesa= new \Safaricom\Mpesa\Mpesa(); +$balanceInquiry=$mpesa->accountBalance($CommandID, $Initiator, $SecurityCredential, $PartyA, $IdentifierType, $Remarks, $QueueTimeOutURL, $ResultURL); +``` +
-**Transaction Status Request** +### Transaction Status Request This is used to check the status of transaction. -`$mpesa= new \Safaricom\Mpesa\Mpesa();` +```PHP +$mpesa= new \Safaricom\Mpesa\Mpesa(); -`$trasactionStatus=$mpesa->transactionStatus($Initiator, $SecurityCredential, $CommandID, $TransactionID, $PartyA, $IdentifierType, $ResultURL, $QueueTimeOutURL, $Remarks, $Occasion);` +$trasactionStatus=$mpesa->transactionStatus($Initiator, $SecurityCredential, $CommandID, $TransactionID, $PartyA, $IdentifierType, $ResultURL, $QueueTimeOutURL, $Remarks, $Occasion); +``` +
- -**B2B Payment Request** +### B2B Payment Request This is used to transfer funds between two companies. -`$mpesa= new \Safaricom\Mpesa\Mpesa();` - -`$b2bTransaction=$mpesa->b2b($ShortCode, $CommandID, $Amount, $Msisdn, $BillRefNumber );` +```PHP +$mpesa= new \Safaricom\Mpesa\Mpesa(); +$b2bTransaction=$mpesa->b2b($ShortCode, $CommandID, $Amount, $Msisdn, $BillRefNumber ); +``` +
-**C2B Payment Request** +### C2B Payment Request This is used to Simulate transfer of funds between a customer and business. -`$mpesa= new \Safaricom\Mpesa\Mpesa();` - -`$b2bTransaction=$mpesa->c2b($ShortCode, $CommandID, $Amount, $Msisdn, $BillRefNumber );` +```PHP +$mpesa= new \Safaricom\Mpesa\Mpesa(); -_Also important to note is that you should have registered validation and confirmation urls where the callback responses will be sent._ +$b2bTransaction=$mpesa->c2b($ShortCode, $CommandID, $Amount, $Msisdn, $BillRefNumber ); +``` +
+>NOTE: _Also important to note is that you should have registered validation and confirmation urls where the callback responses will be sent._ +
-**STK Push Simulation** +### STK Push Simulation This is used to initiate online payment on behalf of a customer. -`$mpesa= new \Safaricom\Mpesa\Mpesa();` +```PHP +$mpesa= new \Safaricom\Mpesa\Mpesa(); -`$stkPushSimulation=$mpesa->STKPushSimulation($BusinessShortCode, $LipaNaMpesaPasskey, $TransactionType, $Amount, $PartyA, $PartyB, $PhoneNumber, $CallBackURL, $AccountReference, $TransactionDesc, $Remarks);` +$stkPushSimulation=$mpesa->STKPushSimulation($BusinessShortCode, $LipaNaMpesaPasskey, $TransactionType, $Amount, $PartyA, $PartyB, $PhoneNumber, $CallBackURL, $AccountReference, $TransactionDesc, $Remarks); +``` +
- -**STK Push Status Query** +### STK Push Status Query This is used to check the status of a Lipa Na M-Pesa Online Payment. -`$mpesa= new \Safaricom\Mpesa\Mpesa();` - -`$STKPushRequestStatus=$mpesa->STKPushQuery($checkoutRequestID,$businessShortCode,$password,$timestamp);` +```PHP +$mpesa= new \Safaricom\Mpesa\Mpesa();` +`$STKPushRequestStatus=$mpesa->STKPushQuery($checkoutRequestID,$businessShortCode,$password,$timestamp); +``` +
-**Callback Routes** +### Callback Routes M-Pesa APIs are asynchronous. When a valid M-Pesa API request is received by the API Gateway, it is sent to M-Pesa where it is added to a queue. M-Pesa then processes the requests in the queue and sends a response to the API Gateway which then forwards the response to the URL registered in the CallBackURL or ResultURL request parameter. Whenever M-Pesa receives more requests than the queue can handle, M-Pesa responds by rejecting any more requests and the API Gateway sends a queue timeout response to the URL registered in the QueueTimeOutURL request parameter. -**Obtaining post data from callbacks** +
+ +### Obtaining post data from callbacks This is used to get post data from callback in json format. The data can be decoded and stored in a database. - `$mpesa= new \Safaricom\Mpesa\Mpesa();` + ```PHP + $mpesa= new \Safaricom\Mpesa\Mpesa(); - `$callbackData=$mpesa->getDataFromCallback();` - - **Finishing a transaction** + $callbackData=$mpesa->getDataFromCallback(); + ``` +
+ + ### Finishing a transaction After obtaining the Post data from the callbacks, use this at the end of your callback routes to complete the transaction - `$mpesa= new \Safaricom\Mpesa\Mpesa();` + ```PHP + $mpesa= new \Safaricom\Mpesa\Mpesa(); - `$callbackData=$mpesa->finishTransaction();` - + $callbackData=$mpesa->finishTransaction(); + ``` +
If validation fails, pass `false` to `finishTransaction()` - `$mpesa= new \Safaricom\Mpesa\Mpesa();` + ```PHP + $mpesa= new \Safaricom\Mpesa\Mpesa();` - `$callbackData=$mpesa->finishTransaction(false);` + $callbackData=$mpesa->finishTransaction(false); + ```