Looking to hire Laravel developers? Try LaraJobs

laravel-tap-payments maintained by flexonexus

Description
Laravel integration for Tap Payments (charges, refunds, webhooks).
Last update
2025/09/30 13:23 (dev-main)
License
Links
Downloads
11

Comments
comments powered by Disqus

Laravel Tap Payments

Latest Version License

🚀 Elegant Laravel integration with Tap Payments: charges, refunds, webhooks — the clean Laravel way.


✨ Features

  • 🔑 Simple Facade API: Tap::createCharge(), Tap::refundCharge(), etc.
  • ⚙️ Configurable via .env (TAP_SECRET_KEY, TAP_MODE, etc.)
  • 🔔 Built-in Webhook signature verification
  • 📦 PSR-4 autoload & Laravel auto-discovery
  • 🧪 Testbench support for easy unit testing

📦 Installation & Setup

Follow these steps to fully install and configure the package:

1. Install via Composer

composer require flexonexus/laravel-tap-payments

2. Publish the Config File

php artisan vendor:publish --tag=tap-config

This will create:

config/tap.php

3. Add Environment Variables

In your .env file:

TAP_MERCHANT_ID=your_merchant_id_here # Your Merchant ID
TAP_SECRET_KEY=sk_test_xxx   # Your Tap secret key
TAP_PUBLIC_KEY=pk_test_xxx   # Your Tap public key
TAP_WEBHOOK_SECRET=whsec_xxx # Webhook secret for signature verification
TAP_MODE=sandbox             # sandbox | live

4. Configure Webhook URL

Set the webhook endpoint in your Tap dashboard:

https://your-domain.com/tap/webhook

The package already registers this route automatically.

5. Clear Cached Configs

If your app uses config caching, run:

php artisan config:clear

6. Test the Integration

Use the Facade to create a test charge:

use Tap;

$charge = Tap::createCharge([
    'amount'   => 50,
    'currency' => 'USD',
    'customer' => [
        'first_name' => 'Test',
        'email'      => 'test@example.com',
        'phone'      => ['country_code' => '966', 'number' => '500000000'],
    ],
    'merchant' => ['id' => config('tap.merchant_id')],
    'source'   => ['id' => 'src_all'],
    'redirect' => ['url' => route('checkout.callback')],
    'description' => 'Order #1001',
    // ...any other Tap fields you need
]);

dd($charge);

If you see a JSON response with a charge_id, 🎉 the package is working.


🚀 Usage Examples

Create a Charge

$charge = Tap::createCharge([
    'amount'   => 50,
    'currency' => 'USD',
    'customer' => [
        'first_name' => 'Mohamed',
        'email'      => 'mohamed@example.com',
        'phone'      => ['country_code' => '966', 'number' => '500000000'],
    ],
    'merchant' => ['id' => config('tap.merchant_id')],
    'source'   => ['id' => 'src_all'],
    'redirect' => ['url' => route('checkout.callback')],
    'description' => 'Order #1234',
    // ...any other Tap fields you need
]);

Retrieve a Charge

$charge = Tap::retrieveCharge($charge['id']);

Refund a Charge

$refund = Tap::refundCharge($charge['id'], [
    'amount' => 50,
    'reason' => 'customer_request'
]);

🔔 Webhooks

  • The package registers /tap/webhook automatically.
  • All requests are verified with TAP_WEBHOOK_SECRET.

Example: Listen for events

Event::listen('tap::charge.succeeded', function ($payload) {
    // Update your order, mark it as paid
});

🧪 Testing

composer test

This uses PHPUnit with Orchestra Testbench.


🤝 Contributing

PRs are welcome!
Please run composer test before submitting.


💡 Credits