bhekor / laravel-monnify
一个laravel包,可以在您的laravel应用程序中无缝集成Monnify API
Requires
- php: ^7.2|^8.0
- ext-json: *
- guzzlehttp/guzzle: ^7.2
- illuminate/support: ^7.0|^8.0|^9.0|^10.0
Requires (Dev)
- mockery/mockery: ^1.4.4
- orchestra/testbench: ^5.0|^6.0|^7.0|^8.0
- orchestra/testbench-dusk: ^5.2|^6.0|^7.0|^8.0
- phpunit/phpunit: ^10.0
README
一个laravel包,可以在您的laravel应用程序中无缝集成Monnify API
什么是Monnify
Monnify 是一家领先的支付技术公司,通过全渠道平台为商家提供无缝的交易体验
创建 Monnify 账户 注册。
查找 Monnify API 文档 API 文档。
安装
您可以通过composer安装此包
composer require bhekor/laravel-monnify
发布Monnify配置文件,迁移以及设置.env文件中的默认详细信息
php artisan monnify:init
Laravel Monnify Webhook 事件(应使用保留账户)
要处理Monnify基于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密钥 & Webhooks”,并将您的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 Bhekor\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
方法来启用它:[了解更多关于事件发现](https://laravel.net.cn/docs/events#event-discovery)
/** * Determine if events and listeners should be automatically discovered. * * @return bool */ public function shouldDiscoverEvents() { return true; }
用法
要使用monnify包,你必须使用以下导入语句导入Monnify Facades;其他类的导入取决于你的具体使用情况,将在相应的章节中突出显示。你还需要导入MonnifyFailedRequestException并处理该异常,因为所有失败请求都将抛出此异常,并带有相应的monnify消息和代码:[了解更多](https://docs.teamapt.com/display/MON/Transaction+Responses)
//... use Bhekor\LaravelMonnify\Facades\Monnify; use Bhekor\LaravelMonnify\Exceptions\MonnifyFailedRequestException; //...
重要通知!!!
从Laravel Monnify的早期版本迁移
这些新更改反映了我对模块化代码库的关注,我相信你迁移和重构代码库时应该不会有任何问题,但如果你有问题,请与我联系或使用问题选项卡,我将确保你的问题都得到解决。Monnify类已被拆分为五个类:Banks、CustomerReservedAccounts、Disbursements、SubAccounts和Transactions,以下为示例用法
//... use Bhekor\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 Bhekor\LaravelMonnify\Facades\Monnify; use Bhekor\LaravelMonnify\Classes\MonnifyPaymentMethod; use Bhekor\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 Bhekor\LaravelMonnify\Facades\Monnify; use Bhekor\LaravelMonnify\Classes\MonnifyPaymentMethod; use Bhekor\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 Bhekor\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
变更日志
请参阅[变更日志](https://github.com/bhekor/laravel-monnify/blob/HEAD/CHANGELOG.md)以获取有关最近更改的更多信息。
贡献
请参阅[贡献指南](https://github.com/bhekor/laravel-monnify/blob/HEAD/CONTRIBUTING.md)以获取详细信息。
错误与问题
如果你注意到此包中的任何错误或问题,请在此处创建问题:[问题](https://github.com/bhekor/laravel-monnify/issues)
安全
如果你发现任何与安全相关的问题,请通过电子邮件adeoluibidapo@gmail.com联系,而不是使用问题跟踪器。
鸣谢
许可协议
MIT许可协议(MIT)。请参阅[许可文件](https://github.com/bhekor/laravel-monnify/blob/HEAD/LICENSE.md)以获取更多信息。