amos-o-7/laravel-mpesa
Composer 安装命令:
composer require amos-o-7/laravel-mpesa
包简介
A Laravel package for M-Pesa C2B (Customer to Business) integration
README 文档
README
A Laravel package for M-Pesa integration supporting both C2B (Customer to Business) and STK Push operations.
Installation
You can install the package via composer:
composer require amos-o-7/laravel-mpesa
Configuration
- Publish the configuration file:
php artisan vendor:publish --provider="Mpesa\Providers\MpesaServiceProvider" --tag="config"
- Add these variables to your
.envfile:
MPESA_BASE_URL=https://sandbox.safaricom.co.ke MPESA_CONSUMER_KEY=your_consumer_key MPESA_CONSUMER_SECRET=your_consumer_secret MPESA_SHORTCODE=your_shortcode MPESA_PASSKEY=your_passkey MPESA_CALLBACK_URL=https://your-domain.com/api/mpesa/callback MPESA_VALIDATION_URL=https://your-domain.com/api/mpesa/validate MPESA_CONFIRMATION_URL=https://your-domain.com/api/mpesa/confirm
Usage
Basic Usage
use Mpesa\Services\C2BService; class PaymentController extends Controller { protected $mpesa; public function __construct(C2BService $mpesa) { $this->mpesa = $mpesa; } // Register URLs (only needs to be done once) public function registerUrls() { try { $response = $this->mpesa->registerUrls(); return response()->json($response); } catch (MpesaException $e) { return response()->json(['error' => $e->getMessage()], 500); } } // Simulate a C2B payment (sandbox only) public function simulatePayment() { try { $response = $this->mpesa->simulateTransaction([ 'Amount' => 100, 'BillRefNumber' => 'INV001', 'PhoneNumber' => '254727343690' ]); return response()->json($response); } catch (MpesaException $e) { return response()->json(['error' => $e->getMessage()], 500); } } }
Handling Callbacks
// Validation callback public function validation(Request $request) { Log::info('M-Pesa Validation', $request->all()); return response()->json([ 'ResultCode' => 0, 'ResultDesc' => 'Accepted' ]); } // Confirmation callback public function confirmation(Request $request) { Log::info('M-Pesa Confirmation', $request->all()); return response()->json([ 'ResultCode' => 0, 'ResultDesc' => 'Success' ]); }
STK Push (M-Pesa Express)
The STK Push feature allows you to initiate M-Pesa payments by sending a payment prompt to the customer's phone.
1. Basic Usage
use Mpesa\Services\STKPushService; class PaymentController extends Controller { protected $stkPush; public function __construct(STKPushService $stkPush) { $this->stkPush = $stkPush; } public function initiatePayment() { try { $response = $this->stkPush->initiateSTKPush( amount: 100, // Amount in KES phoneNumber: '254712345678', accountReference: 'INV001', transactionDesc: 'Payment for Invoice 001' ); return response()->json($response); } catch (\Exception $e) { return response()->json(['error' => $e->getMessage()], 500); } } }
2. Using the Built-in Controller
The package comes with a pre-built controller. Just make a POST request to /api/mpesa/stk/push with the following parameters:
{
"amount": 100,
"phone": "254712345678",
"account_reference": "INV001",
"transaction_desc": "Payment for Invoice 001",
"callback_url": "https://your-domain.com/custom-callback" // Optional
}
3. Handling Callbacks
Create a callback handler to process M-Pesa payment notifications:
use Illuminate\Support\Facades\Log; public function handleCallback(Request $request) { $callbackData = $request->input('Body.stkCallback'); if ($callbackData['ResultCode'] == 0) { // Payment successful $amount = $callbackData['CallbackMetadata']['Item'][0]['Value']; $mpesaReceiptNumber = $callbackData['CallbackMetadata']['Item'][1]['Value']; $transactionDate = $callbackData['CallbackMetadata']['Item'][2]['Value']; $phoneNumber = $callbackData['CallbackMetadata']['Item'][3]['Value']; // Process the payment... } else { // Payment failed $resultDesc = $callbackData['ResultDesc']; // Handle the failure... } }
Response Format
Successful Initiation
{
"MerchantRequestID": "29115-34620561-1",
"CheckoutRequestID": "ws_CO_191220191020363925",
"ResponseCode": "0",
"ResponseDescription": "Success. Request accepted for processing",
"CustomerMessage": "Success. Request accepted for processing"
}
Successful Payment Callback
{
"Body": {
"stkCallback": {
"MerchantRequestID": "29115-34620561-1",
"CheckoutRequestID": "ws_CO_191220191020363925",
"ResultCode": 0,
"ResultDesc": "The service request is processed successfully.",
"CallbackMetadata": {
"Item": [
{
"Name": "Amount",
"Value": 100.00
},
{
"Name": "MpesaReceiptNumber",
"Value": "NLJ7RT61SV"
},
{
"Name": "TransactionDate",
"Value": 20191219102115
},
{
"Name": "PhoneNumber",
"Value": 254712345678
}
]
}
}
}
}
Error Handling
The package throws MpesaException for M-Pesa API-related errors. Common error scenarios:
- Invalid phone number format
- Insufficient balance
- Invalid credentials
- Network errors
Always wrap your API calls in try-catch blocks to handle these errors gracefully.
Testing
composer test
Security
If you discover any security-related issues, please email amosondari7@gmail.com instead of using the issue tracker.
Features
- Token Generation
- URL Registration
- C2B Payment Simulation (Sandbox)
- STK Push (M-Pesa Express)
- Validation & Confirmation Handling
- Error Handling
- Automatic Token Management
Credits
License
The MIT License (MIT). Please see License File for more information.
amos-o-7/laravel-mpesa 适用场景与选型建议
amos-o-7/laravel-mpesa 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 113 次下载、GitHub Stars 达 2, 最近一次更新时间为 2025 年 02 月 06 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「payment」 「laravel」 「kenya」 「mpesa」 「safaricom」 「c2b」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 amos-o-7/laravel-mpesa 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 amos-o-7/laravel-mpesa 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 amos-o-7/laravel-mpesa 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
Alfabank REST API integration
Laravel package for Accurate Online API integration.
Official Safaricom Daraja M-Pesa integration for Laravel built on ysg/payment-core.
TrinkPOS Sanal POS (Virtual POS) API client for PHP
Shared RCX Laravel DataTables UI and configuration helpers.
Boot a Laravel project on any machine with one command: app:serve installs missing tools (PHP, Node, Composer, Herd, Docker), creates .env, sets up the database, runs migrations, builds assets, starts a queue worker and serves via Herd, Sail or artisan serve; app:down cleanly stops everything it sta
统计信息
- 总下载量: 113
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 4
- 点击次数: 38
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2025-02-06