PHP code example of vexpay / laravel

1. Go to this page and download the library: Download vexpay/laravel library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

vexpay / laravel example snippets


use VexPay\Laravel\Facades\VexPay;

$quote = VexPay::quotes()->retrieve(['usdAmount' => 25]);
$payment = VexPay::payments()->retrieve('pay_123');
$banks = VexPay::banks()->list();

use Illuminate\Database\Eloquent\Model;
use VexPay\Laravel\Billable;

class Order extends Model
{
    use Billable;
}

use App\Models\Order;

class PayOrderController
{
    public function __invoke(Order $order)
    {
        return $order->checkout($order->total_usd, [
            'description' => "Pedido #{$order->number}",
            'successUrl' => route('orders.thanks', $order),
            'cancelUrl' => route('cart'),
            'metadata' => ['orderNumber' => (string) $order->number],
        ]);
    }
}

use Illuminate\Support\Facades\Event;
use VexPay\Laravel\Events\Billing\PaymentFailed;
use VexPay\Laravel\Events\Billing\PaymentReversed;
use VexPay\Laravel\Events\Billing\PaymentSucceeded;

Event::listen(function (PaymentSucceeded $event) {
    $order = $event->billable();          // the Order that started the checkout
    $order->markPaid($event->payment->payment_id);
});

Event::listen(function (PaymentFailed $event) {
    logger()->info('payment failed', ['code' => $event->payment->failure_code]);
});

Event::listen(function (PaymentReversed $event) {
    $event->billable()->refundFulfilment();
});

use Illuminate\Contracts\Queue\ShouldQueue;
use VexPay\Laravel\Events\Webhooks\PayoutFailed;

class NotifySellerOfFailedPayout implements ShouldQueue
{
    public function handle(PayoutFailed $event): void
    {
        $seller = $event->owner();
        $code = $event->webhook->data['failureCode'] ?? null;
        // ...
    }
}

use Illuminate\Support\Facades\Route;
use VexPay\Laravel\Http\Controllers\WebhookController;
use VexPay\Laravel\Http\Middleware\VerifyWebhookSignature;

Route::post('/hooks/vexpay', WebhookController::class)->middleware(VerifyWebhookSignature::class);

use Illuminate\Database\Eloquent\Model;
use VexPay\Laravel\HasVexPayMerchant;

class Seller extends Model
{
    use HasVexPayMerchant;
}

$seller->createAsVexPayMerchant([
    'name' => 'María Pérez',
    'identification' => 'V12345678',
    'contactEmail' => '[email protected]',
    'contactPhone' => '04141234567',
]);

$method = $seller->addVexPayPayoutMethod(['bankCode' => '0102', 'phone' => '04141234567']);
$seller->startVexPayPayoutMethodVerification($method->payoutMethodId);
// later, with what the seller received:
$seller->confirmVexPayPayoutMethodVerification($method->payoutMethodId, ['amount' => '1.23']);

$seller->vexpayMerchantStatus();   // e.g. "verified"
$seller->vexpayBalance();

$seller->payout(1523.40, 'Venta #991', 'order-991');

use App\Models\Order;
use Tests\TestCase;
use VexPay\Laravel\Facades\VexPay;
use VexPay\Laravel\Testing\InteractsWithVexPay;
use VexPay\Testing\FakeHttpClient;

class CheckoutTest extends TestCase
{
    use InteractsWithVexPay;

    public function test_paid_orders_are_fulfilled(): void
    {
        config(['vexpay.webhook.secret' => 'whsec_test']);
        VexPay::fake(['CheckoutSessions_create' => ['url' => 'https://pay.vexwallet.co/c/cs_1']]);
        $order = Order::factory()->create(['total_usd' => 25]);

        $this->post(route('orders.pay', $order))->assertRedirect('https://pay.vexwallet.co/c/cs_1');
        VexPay::assertCheckoutCreated(25.00);

        $this->postVexPayPaymentWebhook($order->vexpayPayments()->first(), 'payment.completed')->assertNoContent();
        $this->assertTrue($order->fresh()->is_paid);
    }

    public function test_payout_conflicts_are_reported(): void
    {
        VexPay::fake(['Payouts_create' => FakeHttpClient::error(409, 'external_ref_conflict')]);
        // ...
        VexPay::assertPayoutCreated(fn (array $params) => $params['externalRef'] === 'order-991');
    }
}
sh
composer n vexpay:install
php artisan migrate
blade
<script>
    window.vexpayCheckouts['vexpay-checkout'].on('completed', ({ sessionId }) => {
        window.location.assign('/orders/thanks?session=' + sessionId);
    });
</script>