apxcde / laravel-mpesa-b2c
Laravel Mpesa B2C 包
v0.0.2
2022-11-04 05:20 UTC
Requires
- php: ^8.1
- ext-curl: *
- ext-openssl: *
- illuminate/contracts: ^9.3
- spatie/laravel-package-tools: ^1.13.0
Requires (Dev)
- laravel/pint: ^1.0
- nunomaduro/collision: ^6.0
- nunomaduro/larastan: ^2.0.1
- orchestra/testbench: ^7.0
- pestphp/pest: ^1.21
- pestphp/pest-plugin-laravel: ^1.1
- phpstan/extension-installer: ^1.1
- phpstan/phpstan-deprecation-rules: ^1.0
- phpstan/phpstan-phpunit: ^1.0
- phpunit/phpunit: ^9.5
This package is auto-updated.
Last update: 2024-09-09 16:22:15 UTC
README
安装
您可以通过 composer 安装此包
composer require apxcde/laravel-mpesa-b2c
您可以使用以下命令发布并运行迁移
php artisan vendor:publish --tag="laravel-mpesa-b2c-migrations"
php artisan migrate
您可以使用以下命令发布配置文件
php artisan vendor:publish --tag="laravel-mpesa-b2c-config"
这是已发布的配置文件的内容
return [ 'env' => env('MPESA_ENV', 'sandbox'), 'shortcode' => env('MPESA_SHORTCODE', '600980'), 'key' => env('MPESA_KEY', 'IWBJnpHUSMqGLVU21qhxFOdfTOzGjH5a'), 'secret' => env('MPESA_SECRET', 'uqUYObhDprZoWFnG'), 'username' => env('MPESA_USERNAME', 'testapi'), 'password' => env('MPESA_PASSWORD', 'Safaricom980!'), 'results_url' => env('MPESA_RESULTS_URL', ''), 'timeout_url' => env('MPESA_TIMEOUT_URL', ''), 'generated_password' => env('MPESA_GENERATED_PASSWORD', 'UNPMpfrhSfSeqN566HAlAQYaIQMeLvpEPZ5SiUR5pJn4faGYBnye251wCLGR56B3uOtT39UmoSeHtFhIa3torjhkXsfESm5NvKhIIOnHKa5Ry3rzeVxL+ruZE2st80HCLsbsJUQmvJ8vbE+h+NamH4DJi7JFHrHAPJ06BPjZuQEYbd/Lei1q4sdmQg6c38ZAnPIrvvWWidqxWc+uspbjqC+Dcyy6o9uwkfCCYGkvLtA8n2FM8MZazh/wgVjBOSV/RMmnt/cZjqoAiUVTkW6FMac77w1ejhweN4khV9mhmZvjmfaFmYi54nXbLSOC8FvkyiJf8uecNSAyWb5G/IhpaQ=='), 'party_public_name' => env('MPESA_PARTY_PUBLIC_NAME', '4'), ];
添加环境变量
在您的 .env 文件中设置以下变量。
MPESA_ENV=live MPESA_SHORTCODE= MPESA_KEY= MPESA_SECRET= MPESA_USERNAME="" MPESA_PASSWORD="" MPESA_RESULTS_URL="https://app-name.com/api/result-url" MPESA_TIMEOUT_URL="https://app-name.com/api/timeout-url" MPESA_PARTY_PUBLIC_NAME=2 MPESA_COMPLETED_DATE=3 MPESA_UTILITY_AVAILABLE=4 MPESA_WORKING_AVAILABLE=5 MPESA_REGISTERED=6 MPESA_CHARGES_PAID_ACCOUNT=7
以下值在您的环境文件中可能保持不变。这些值用于确定从 Mpesa API 返回的值。
MPESA_PARTY_PUBLIC_NAME=2 MPESA_COMPLETED_DATE=3 MPESA_UTILITY_AVAILABLE=4 MPESA_WORKING_AVAILABLE=5 MPESA_REGISTERED=6 MPESA_CHARGES_PAID_ACCOUNT=7
使用方法
use Apxcde\LaravelMpesaB2c\MpesaB2C; use Apxcde\LaravelMpesaB2c\Models\MpesaB2CTransaction; MpesaB2C::init([]); // Initialize the Mpesa B2C API MpesaB2C::send($phone_number, $amount, 'BusinessPayment', $remarks, null, function($response) use ($amount, $phone_number) { if (array_key_exists('errorCode', $response)) { return [ 'state' => 'Failed', 'error_code' => $response['errorCode'], 'error_message' => $response['errorMessage'] ]; } if($response["ResponseCode"] != 0) { return [ 'state' => 'Failed' ]; } // You can save the transaction to your database here // You can modify the table by publishing the migration file and adding values like phone_number, account_number, etc // Saving the transaction to the database is important because MPESA responds to the results url (value in the .env file). MpesaB2CTransaction::create([ 'originator_conversation_id' => $response["OriginatorConversationID"], 'conversation_id' => $response["ConversationID"], 'description' => $response["ResponseDescription"], 'transaction_amount' => $amount, 'transaction_id' => $transaction->id, ]); return [ 'state' => 'Pending', 'mpesa_transaction' => $mpesa_transaction, 'description' => "Request to send ".money($amount)." to ". $phone_number . " received successfully \n" ]; });
在您的结果 URL 的控制器中,您可以通过 originator_conversation_id 获取交易。控制器应如下所示
use Apxcde\LaravelMpesaB2c\Models\MpesaB2CTransaction; use Apxcde\LaravelMpesaB2c\MpesaB2C; class MpesaController extends Controller { public function resultsUrl(Request $request) { MpesaB2C::reconcile(function($request) { $Result = $request["Result"]; $ResultCode = $Result["ResultCode"]; $ResultDesc = $Result["ResultDesc"]; $TransactionID = $Result["TransactionID"]; $OriginatorConversationID = $Result["OriginatorConversationID"]; $transaction = MpesaB2CTransaction::find($OriginatorConversationID); // Check if the transaction failed if($ResultCode != 0) { // Update the saved transaction $transaction->update([ 'state' => 'Failed', 'description' => $ResultDesc, 'mpesa_transaction_id' => $TransactionID, ]); // Do something else here: Send an email, SMS, etc // Return so the function doesn't continue return null; } $ResultParameter = $Result["ResultParameters"]["ResultParameter"]; $ReceiverPartyPublicName = $ResultParameter[config('mpesa-b2c.party_public_name')]["Value"]; // Update the saved transaction because the B2C transaction was successful $transaction->update([ 'state' => 'Accepted', 'description' => $ResultDesc, 'mpesa_transaction_id' => $TransactionID, 'receiver_public_data' => $ReceiverPartyPublicName, ]); // You can do other things here: Send an email, SMS to the customer, etc // Also maybe update the customer's account in your database }); } }
## Testing
```bash
composer test
更新日志
有关最近更改的更多信息,请参阅 更新日志
贡献
有关详细信息,请参阅 贡献指南
安全漏洞
有关如何报告安全漏洞,请参阅 我们的安全策略
鸣谢
许可证
MIT 许可证 (MIT)。有关更多信息,请参阅 许可证文件