henryejemuta / laravel-monnify
一个用于在您的 Laravel 应用程序中无缝集成 monnify api 的包
Requires
- php: ^7.2|^8.0
- ext-json: *
- guzzlehttp/guzzle: ^7.0
- illuminate/support: ^7.0|^8.0
Requires (Dev)
- mockery/mockery: 1.*
- orchestra/testbench: ^5.0|^6.0
- phpunit/phpunit: ^8.0
This package is auto-updated.
Last update: 2024-09-30 01:37:56 UTC
README
一个用于在您的 Laravel 应用程序中无缝集成 monnify api 的包
什么是 Monnify
Monnify 是一家领先的支付技术公司,通过全渠道平台为商家提供无缝的交易体验
创建 Monnify 账户 注册。
查找 Monnify API 文档 API 文档。
安装
您可以通过 composer 安装此包
composer require henryejemuta/laravel-monnify
发布 Monnify 配置文件、迁移以及设置 .env 文件中的默认详情
php artisan monnify:init
Laravel Monnify Webhook 事件(应使用保留账户)
要处理基于 Webhook 的事件通知,Laravel Monnify 已经包含了所有必需的 Webhook 端点。登录到您的 Monnify 控制面板设置,在开发者菜单下,选择 Webhook URL,并将相应的 Webhook URL 设置如下
- 交易完成
https://your_domain/laravel-monnify/webhook/transaction-completion - 退款完成
https://your_domain/laravel-monnify/webhook/refund-completion - 拨款
https://your_domain/laravel-monnify/webhook/disbursement - 结算
https://your_domain/laravel-monnify/webhook/settlement
注意:请确保将 your_domain 替换为您服务器的 URL,例如 example.com
遗留 Webhook
要处理 Monnify 遗留 Webhook 通知,Laravel Monnify 已经包含了 Webhook 端点 https://your_domain/laravel-monnify/webhook,将 your_domain 替换为您服务器的 URL,例如 example.com
- 登录到您的 Monnify 控制面板设置,选择 API 密钥 & Webhook,并将您的 Webhook 设置为
https://your_domain/laravel-monnify/webhook
设置监听器
接下来,在您的项目目录中运行以下命令创建一个事件监听器;
php artisan make:listener MonnifyNotificationListener -e NewWebHookCallReceived
NewWebHookCallReceived 有两个属性
WebHookCall webHookCall=> 这是一个未受保护的模型,具有从 Webhook 调用中导出的属性$event->webHookCall->transactionReference,它提供了 Webhook 调用的 transactionReference,有关 Monnify API 文档中的交易完成 Webhook 属性的更多信息,请参阅 此处bool isValidTransactionHash=> 这为您提前执行交易哈希计算,如果您喜欢自己执行,则可以这样做:Monnify::Transactions()->calculateHash($event->webHookCall->paymentReference, $event->webHookCall->amountPaid, $event->webHookCall->paidOn, $event->webHookCall->transactionReference);Laravel Monnify Webhook 事件
请参阅 MonnifyLegacyNotificationListener.example.txt 了解 MonnifyNotificationListener 的遗留示例实现。请参阅 MonnifyNotificationListener.example.txt 了解 MonnifyNotificationListener 的遗留示例实现。
注意
为了确保您的监听器正确工作,如果未启用自动发现,您必须手动在您的 App\Providers\EventServiceProvider 中注册事件
手动注册事件
通常,应通过 EventServiceProvider 的 $listen 数组来注册事件;然而,您也可以在 EventServiceProvider 的 boot 方法中手动注册基于类或闭包的事件监听器:了解更多关于手动注册事件
use HenryEjemuta\LaravelMonnify\Events\NewWebHookCallReceived; use App\Listeners\MonnifyNotificationListener; /** * The event listener mappings for the application. * * @var array */ protected $listen = [ // ... Other Event Registeration NewWebHookCallReceived::class => [ MonnifyNotificationListener::class, // ... Other Listener you wish to also receive the WebHook call event ], ];
或者
启用事件发现
事件发现默认是禁用的,但您可以通过覆盖应用 EventServiceProvider 的 shouldDiscoverEvents 方法来启用它:了解更多关于事件发现
/** * Determine if events and listeners should be automatically discovered. * * @return bool */ public function shouldDiscoverEvents() { return true; }
用法
要使用 monnify 包,您必须使用以下导入语句导入 Monnify Facades;其他类的导入取决于您的具体使用,并在相应部分中突出显示。您还需要导入 MonnifyFailedRequestException 并处理该异常,因为所有失败的请求都将抛出此异常,并带有相应的 monnify 消息和代码 了解更多
//... use HenryEjemuta\LaravelMonnify\Facades\Monnify; use HenryEjemuta\LaravelMonnify\Exceptions\MonnifyFailedRequestException; //...
重要通知!!!
从 Laravel Monnify 早期版本迁移
这些新变化反映了我对模块化代码库的关注,我确信您在迁移和重构代码库时不会遇到任何问题,但如果您遇到任何问题,请与我联系或使用问题选项卡,我会确保您的所有关注都得到解决。Monnify 类已被分解,将所有操作分为五个(5)个类,分别是 Banks、CustomerReservedAccounts、Disbursements、SubAccounts 和 Transactions,下面是示例用法
//... use HenryEjemuta\LaravelMonnify\Facades\Monnify; //... $responseBody = Monnify::Transactions()->initializeTransaction(float $amount, string $customerName, string $customerEmail, string $paymentReference, string $paymentDescription, string $redirectUrl, MonnifyPaymentMethods $monnifyPaymentMethods, MonnifyIncomeSplitConfig $incomeSplitConfig = null, string $currencyCode = null); $responseBody = Monnify::Transactions()->getAllTransactions(array $queryParams); $responseBody = Monnify::Transactions()->calculateHash(string $paymentReference, $amountPaid, string $paidOn, string $transactionReference); $responseBody = Monnify::Transactions()->getTransactionStatus(string $transactions); $responseBody = Monnify::Transactions()->payWithBankTransfer(string $transactionReference, string $bankCode);
之前
//... use HenryEjemuta\LaravelMonnify\Facades\Monnify; use HenryEjemuta\LaravelMonnify\Classes\MonnifyPaymentMethod; use HenryEjemuta\LaravelMonnify\Classes\MonnifyPaymentMethods; //... Monnify::initializeTransaction( 15000, "Customer Name", "customer@example.com", "transaction_ref", "Transaction Description", "https://youdomain.com/afterpaymentendpoint", new MonnifyPaymentMethods(MonnifyPaymentMethod::CARD(), MonnifyPaymentMethod::ACCOUNT_TRANSFER()));
现在
//... use HenryEjemuta\LaravelMonnify\Facades\Monnify; use HenryEjemuta\LaravelMonnify\Classes\MonnifyPaymentMethod; use HenryEjemuta\LaravelMonnify\Classes\MonnifyPaymentMethods; //... Monnify::Transactions()->initializeTransaction( 15000, "Customer Name", "customer@example.com", "transaction_ref", "Transaction Description", "https://youdomain.com/afterpaymentendpoint", new MonnifyPaymentMethods(MonnifyPaymentMethod::CARD(), MonnifyPaymentMethod::ACCOUNT_TRANSFER()));
类似的实现适用于其他部分(例如:Banks、CustomerReservedAccounts、Disbursements 和 SubAccounts)
//... use HenryEjemuta\LaravelMonnify\Facades\Monnify; //... $responseBody = Monnify::Banks()->getBanks(); $responseBody = Monnify::Banks()->getBanksWithUSSDShortCode(); $responseBody = Monnify::Banks()->validateBankAccount(MonnifyBankAccount $bankAccount); $responseBody = Monnify::Disbursements()->initiateTransferSingle(float $amount, string $reference, string $narration, MonnifyBankAccount $bankAccount, string $currencyCode = null); $responseBody = Monnify::Disbursements()->initiateTransferSingleWithMonnifyTransaction(MonnifyTransaction $monnifyTransaction); $responseBody = Monnify::Disbursements()->initiateTransferBulk(string $title, string $batchReference, string $narration, MonnifyOnFailureValidate $onFailureValidate, int $notificationInterval, MonnifyTransactionList $transactionList); $responseBody = Monnify::Disbursements()->authorizeTransfer2FA(string $authorizationCode, string $reference, string $path); $responseBody = Monnify::SubAccounts()->createSubAccount(string $bankCode, string $accountNumber, string $email, string $currencyCode = null, string $splitPercentage = null); $responseBody = Monnify::SubAccounts()->createSubAccounts(array $accounts); $responseBody = Monnify::SubAccounts()->getSubAccounts(); $responseBody = Monnify::SubAccounts()->deleteSubAccount(string $subAccountCode); $responseBody = Monnify::ReservedAccounts()->getAllTransactions(array $queryParams); $responseBody = Monnify::ReservedAccounts()->reserveAccount(string $accountReference, string $accountName, string $customerEmail, string $customerName = null, string $customerBvn = null, string $currencyCode = null, bool $restrictPaymentSource = false, MonnifyAllowedPaymentSources $allowedPaymentSources = null, MonnifyIncomeSplitConfig $incomeSplitConfig = null); $responseBody = Monnify::ReservedAccounts()->getAccountDetails(string $accountReference); $responseBody = Monnify::ReservedAccounts()->updateSplitConfig(string $accountReference, MonnifyIncomeSplitConfig $incomeSplitConfig);
测试
composer test
变更日志
请参阅 CHANGELOG 了解最近更改的更多信息。
贡献
请参阅 CONTRIBUTING 了解详细信息。
错误和问题
如果您在此包中发现任何错误或问题,请在此处创建问题 问题
安全
如果您发现任何与安全相关的问题,请通过电子邮件 henry.ejemuta@gmail.com 而不是使用问题跟踪器。
致谢
许可证
MIT 许可证(MIT)。请参阅 许可证文件 了解更多信息。