bhekor/laravel-monnify

一个laravel包,可以在您的laravel应用程序中无缝集成Monnify API

v0.0.3 2023-08-05 10:01 UTC

This package is auto-updated.

Last update: 2024-09-05 12:33:00 UTC


README

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

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

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

开启事件发现

事件发现默认是禁用的,但你可以通过覆盖应用程序的 EventServiceProvidershouldDiscoverEvents 方法来启用它:[了解更多关于事件发现](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)以获取更多信息。