aadshalshihry/larahyp

适用于中东和北非地区(MENA)的Laravel Hyperpay支付网关包。

dev-master 2023-03-11 16:09 UTC

This package is auto-updated.

Last update: 2024-09-11 19:46:14 UTC


README

Laravel Hyperpay

Laravel HyperPay

tests StyleCI Shield Latest Version on Packagist Total Downloads

Laravel HyperPay提供了一种简单的方式来处理不同状态的所有交易。

安装

您可以通过Composer安装此包

composer require aadshalshihry/larahyp

数据库迁移

larahyp提供迁移来处理自己的交易,安装后别忘了发布迁移

php artisan vendor:publish --tag="hyperpay-migrations"

然后执行迁移

php artisan migrate

此迁移有一个名为Transaction的模型,如果您的应用程序使用多租户,您可以根据hyperpay transaction模型创建一个新的交易模型。

use Hyn\Tenancy\Traits\UsesTenantConnection;
use AadshalshihryLaravelHyperpay\Models\Transaction as ModelsTransaction;

class Transaction extends ModelsTransaction
{
    use UsesTenantConnection;
}

别忘了更新配置文件app/hyperpay.php中的transaction_model路径

<?php

return [
    //
    "transaction_model" => 'YOUR_NEW_TRANSACTION_MODEL_NAMESPACE',
    //
];

设置和配置

您还可以使用以下命令发布配置文件

php artisan vendor:publish --tag="hyperpay-config"

之后,您可以在app/hyperpay.php中看到该文件

在开始使用larahyp之前,将ManageUserTransaction特质添加到您的User模型中,该特质提供多个任务,使您能够从指定的用户执行交易过程。

use AadshalshihryLaravelHyperpay\Traits\ManageUserTransactions;

class User extends Authenticatable
{
    use ManageUserTransactions;
}

此包使用User模型,该模型为App\UserApp\Models\User,否则您可以使用.env定义自己的用户模型。

PAYMENT_MODEL=App\Models\User

HyperPay密钥

接下来,您应该在应用程序的.env中配置Hyperpay环境

SANDBOX_MODE=true
ACCESS_TOKEN=
ENTITY_ID_MADA=
ENTITY_ID=
# default SAR
CURRENCY=

创建交易

要使用此包在Hyperpay中创建交易,我们需要准备结账,然后生成表单。

准备结账

use AadshalshihryLaravelHyperpay\Facades\LaravelHyperpay;

class PaymentController extends  Controller
{
    public function prepareCheckout(Request $request)
    {
        $trackable = [
            'product_id'=> 'bc842310-371f-49d1-b479-ad4b387f6630',
            'product_type' => 't-shirt'
        ];
        $user = User::first();
        $amount = 10;
        $brand = 'VISA' // MASTER OR MADA

        return LaravelHyperpay::checkout($trackable_data, $user, $amount, $brand, $request);
    }
}

您还可以通过创建使用此命令的结账类将账单数据附加到结账中,所有账单文件您都可以在app/Billing文件夹中找到。

php artisan make:billing HyperPayBilling

然后使用

use AadshalshihryLaravelHyperpay\Facades\LaravelHyperpay;
use App\Billing\HyperPayBilling

LaravelHyperpay::addBilling(new HyperPayBilling())->checkout($trackable_data, $user, $amount, $brand, $request);

您还可以通过使用addMerchantTransactionId($id)生成自己的商户交易ID,并告诉包使用它

use Illuminate\Support\Str;

$id = Str::random('64');

LaravelHyperpay::addMerchantTransactionId($id)->addBilling(new HyperPayBilling())->checkout($trackable_data, $user, $amount, $brand, $request);

接下来,prepareCheckout操作返回的响应

{
    "buildNumber": "",
    "id": "RANDOME_ID.uat01-vm-tx04",
    "message": "successfully created checkout",
    "ndc": "RANDOME_ID.uat01-vm-tx04",
    "result": {
        "code": "000.200.100",
        "description": "successfully created checkout"
    },
    "script_url": "https://test.oppwa.com/v1/paymentWidgets.js?checkoutId=RANDOME_ID.uat01-vm-tx04",
    "shopperResultUrl": "shopperResultUrl",
    "status": "200",
    "timestamp": "2021-04-05 11:16:50+0000"
}

要创建支付表单,您只需要将以下HTML/JavaScript行添加到您的页面中。

<script src="{{ script_url }}"></script>
<form
    action="{{shopperResultUrl}}"
    class="paymentWidgets"
    data-brands="VISA MASTER"
></form>

支付状态

交易过程完成后,Hyperpay会通过您可以在配置文件app/hyperpay.php中配置的shopperResultUrl将用户重定向到商家页面,通过更新redirect_url值。

// app/hyperpay.php

return [
    //
    "redirect_url" => "/hyperpay/finalize",
    //
]

您还可以通过addRedirectUrl($url)动态添加redirect_url,如果需要添加动态URL,如使用多租户或在重定向URL中添加一些参数,则可以覆盖默认配置redirect_url

$redirect_url = $req->headers->get('origin'). '/finalize';

LaravelHyperpay::addRedirectUrl($redirect_url)->addBilling(new HyperPayBilling())->checkout($trackable_data, $user, $amount, $brand, $request);

重定向后,您可以使用操作处理最终步骤

use AadshalshihryLaravelHyperpay\Facades\LaravelHyperpay;

class PaymentController extends Controller
{
    public function paymentStatus(Request $request)
    {
        $resourcePath = $request->get('resourcePath');
        $checkout_id = $request->get('id');
        return LaravelHyperpay::paymentStatus($resourcePath, $checkout_id);
    }
}

事件处理器

larahyp在交易过程中提供了两个事件,在最终完成时,此包会触发成功交易

每个事件都包含用于准备结账的trackable_datahyperpay_data

监听器示例

首先,我们使用以下命令创建一个新的监听器

php artisan make:listener TransactionSuccessListener

之后,转到app/Providers/EventServiceProvider并使用您的监听器注册事件

class EventServiceProvider extends ServiceProvider
{
    /**
     * The event listener mappings for the application.
     *
     * @var array
     */
    protected $listen = [
        Registered::class => [
            SendEmailVerificationNotification::class,
        ],
         'AadshalshihryLaravelHyperpay\Events\SuccessTransaction' => [
            'App\Listeners\TransactionSuccessListener',
        ],
    ];

    //
}

在每次成功交易中,larahyp包都会触发一个包含必要数据的带有事件,请查看我们的TransactionSuccessListener类。

<?php

namespace App\Listeners;

use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Support\Facades\Log;

class TransactionSuccessListener
{
    /**
     * Create the event listener.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Handle the event.
     *
     * @param  object  $event
     * @return void
     */
    public function handle($event)
    {
       $hyperpay_data =  $event->transaction['hyperpay_data'];

       $trackable_data =  $event->transaction['trackable_data'];
    }
}

您可以用同样的方式处理AadshalshihryLaravelHyperpay\Events\FailTransaction事件。

测试

composer test

变更日志

请参阅CHANGELOG获取最近更改的更多信息。

贡献

请参阅CONTRIBUTING以获取详细信息。

安全性

如果您发现任何与安全相关的问题,请通过电子邮件imad@Aadshalshihry.com联系,而不是使用问题跟踪器。

致谢

许可证

MIT许可证(MIT)。有关更多信息,请参阅许可证文件

Laravel hyperpay 模板

您可以使用此存储库来检查larahyp-boilerplate包的集成。