alhelwany/laravel-ecash

Laravel Payment Gateway for Ecash (Syria)

1.1.1 2024-04-17 12:18 UTC

README

Latest Version on Packagist Total Downloads GitHub Tests Action Status GitHub Code Style Action Status

简化将Ecash支付集成到您的Laravel应用中。此包提供简化的设置和直观的API,以快速、安全地处理支付。

安装

您可以通过composer安装此包

composer require alhelwany/laravel-ecash

您可以使用以下命令发布和运行迁移

php artisan vendor:publish --tag="laravel-ecash-migrations"
php artisan migrate

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

php artisan vendor:publish --tag="laravel-ecash-config"

这是发布配置文件的内容

return [
    'gatewayUrl' => env('ECASH_GATEWAY_URL', 'https://checkout.ecash-pay.co'),
    'terminalKey' => env('ECASH_TERMINAL_KEY', null),
    'merchantId' => env('ECASH_MERCHANT_ID', null),
    'merchantSecret' => env('ECASH_MERCHANT_SECRET', null),
];

入门

  1. 设置您的环境变量
  2. 发布和运行迁移
  3. 要开始支付流程,使用checkout方法创建支付模型并生成支付URL
  4. 一旦支付完成,并且网关将用户重定向到重定向URL,支付状态将从待处理变为处理中
  5. 一旦网关调用回调URL,支付状态将从处理中变为失败或已支付
  6. 每次支付状态改变时,都会触发PaymentStatusUpdated事件,您可以配置监听器来更新订单的状态

枚举

枚举位于命名空间 "Alhelwany\LaravelEcash\Enums"

enum Lang: string
{
    case AR = 'AR';
    case EN = 'EN';
}
enum Currency: string
{
    case SYP = 'SYP'; // The only available currency by the gateway so far 
}
enum CheckoutType: string
{
    case QR = 'QR';
    case CARD = 'Card';
}
enum PaymentStatus: string
{
    case PENDING = 'pending';
    case PROCESSING = 'processing';
    case PAID = 'paid';
    case FAILED = 'failed';
}

异常

InvalidAmountException

当调用checkout函数时,如果金额为负数或0,则会抛出。

InvalidConfigurationException

当尝试在使用包之前设置.env变量时抛出。

事件

PaymentStatusUpdated

namespace Alhelwany\LaravelEcash\Events;

use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;
use Alhelwany\LaravelEcash\Models\EcashPayment;

class PaymentStatusUpdated
{
    use Dispatchable, InteractsWithSockets, SerializesModels;

    public function __construct(private EcashPayment $paymentModel)
    {
    }

    public function getPaymentModel(): EcashPayment
    {
        return $this->paymentModel;
    }
}

重要提示

The EcashPayment Model uses id of type UUID as a primary key

示例用法

Checkout

use App\Http\Controllers\Controller;

use Alhelwany\LaravelEcash\Facades\LaravelEcashClient;
use Alhelwany\LaravelEcash\DataObjects\PaymentDataObject;
use Alhelwany\LaravelEcash\Models\EcashPayment;
use Alhelwany\LaravelEcash\Enums\CheckoutType;
use Alhelwany\LaravelEcash\Enums\Lang;
use Alhelwany\LaravelEcash\Enums\Currency;

class ExampleController extends Controller
{
    public function checkout($request)
    {
        $paymentDataObject = new PaymentDataObject(CheckoutType::CARD, 100.10);

        $paymentDataObject->setRedirectUrl(route('payment-successful')); //optional
        $paymentDataObject->setLang(Lang::EN); //optional
        $paymentDataObject->setCurrency(Currency::SYP); //optional

        $model = LaravelEcashClient::checkout($paymentDataObject);

        // You may attach the EcashPayment model to your order
        return redirect($model['checkout_url']);
    }
}

测试

composer test

致谢

许可证

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