> For the complete documentation index, see [llms.txt](https://queents.gitbook.io/vilt/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://queents.gitbook.io/vilt/plugins/payment.md).

# Payment

<figure><img src="/files/NlKTfxEgRQAOdFrUGoTZ" alt=""><figcaption></figcaption></figure>

Payment Services Integrations & Management Module for VILT Framework

### Install

You can install the package via composer:

```bash
composer require queents/payment-module
```

Install the package

```bash
php artisan payment:install
```

and now clear cache

```bash
php artisan optimize:clear
```

### List of providers

1. [Fawry Pay](https://fawry.com/)
2. [Paytabs](https://site.paytabs.com/en)
3. [Paymob](https://paymob.com/)

### How to use

you have 4 facade methods

```php
//request contain data that will sent to payment methods
\PaymentModule::pay($request->all())
//return error message empty if success
\PaymentModule::getErrorMessage()
//return array with data that contain the payment url
\PaymentModule::getData()
//takes payment method id and the request from payment getway
\PaymentModule::callback($request->all(),$paymentMethod)
```

### Database ERD

1. Payments table has **order\_id ,order\_table** morph relation

   > maybe you have orders table for customers and vendor\_orders for vendors
2. Payments table has **model\_id ,model\_table** morph relation

   > maybe you have users table for customers and vendors table for vendors
3. name and description columns are json format to allow you to use spatie translation if you want

### Classes

We have a facade class that use payment services as explained in how to use after that payment use factory pattern to fill payment methods from DB if it's available with it's integrations and have return payment instance for given payment id from request.

### Traits

We have 2 traits that you can use where ever you want

```php
use HttpHelper;
```

> This trait has post method using GuzzleHttp tacks **uri ,data** as parameters and public variables timeout as integer and header as array contain default header so you can change it from out side from the trait

```php
use PaymentSaveToLogs;
```

> Tacks only response and payload and store them as json
