aadshalshihry / larahyp
适用于中东和北非地区(MENA)的Laravel Hyperpay支付网关包。
Requires
- php: ^7.3|^8.0
- guzzlehttp/guzzle: ^7.0
Requires (Dev)
- orchestra/testbench: ^4.0|^5.0|^6.0
- phpunit/phpunit: ^8.0|^9.3
This package is auto-updated.
Last update: 2024-09-11 19:46:14 UTC
README
Laravel HyperPay
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\User
或App\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_data
和hyperpay_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包的集成。