henryejemuta/laravel-monnify

一个用于在您的 Laravel 应用程序中无缝集成 monnify api 的包

v1.2.1 2022-01-02 21:13 UTC

This package is auto-updated.

Last update: 2024-09-30 01:37:56 UTC


README

Build Status Latest Version on Packagist Latest Stable Version Total Downloads License Quality Score

一个用于在您的 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 数组来注册事件;然而,您也可以在 EventServiceProviderboot 方法中手动注册基于类或闭包的事件监听器:了解更多关于手动注册事件

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
    ],
];

或者

启用事件发现

事件发现默认是禁用的,但您可以通过覆盖应用 EventServiceProvidershouldDiscoverEvents 方法来启用它:了解更多关于事件发现

/**
 * 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)。请参阅 许可证文件 了解更多信息。