PHP code example of paybridge-np / sdk

1. Go to this page and download the library: Download paybridge-np/sdk 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/ */

    

paybridge-np / sdk example snippets


use PayBridgeNP\PayBridgeNP;

$paybridgenp = new PayBridgeNP(['api_key' => 'sk_test_...']);

$session = $paybridgenp->checkout->create([
    'amount'     => 5000,          // NPR 50.00 — always in paisa (NPR × 100)
    'return_url' => 'https://myshop.com/thank-you',
    'cancel_url' => 'https://myshop.com/cart',
    'metadata'   => ['order_id' => 'ORD-001'],
]);

header('Location: ' . $session['checkout_url']);
exit;

$paybridgenp = new PayBridgeNP([
    'api_key'     => 'sk_live_...',              // timeout'     => 30,                         // optional, seconds (default: 30)
    'max_retries' => 2,                          // optional, retries on 5xx (default: 2)
]);

$session = $paybridgenp->checkout->create([
    'amount'     => 10000,       // NPR 100.00 in paisa — /cart',       // optional
    'provider'   => 'esewa',     // optional — omit to let the customer pick
    'currency'   => 'NPR',       // optional, default: NPR
    'metadata'   => [            // optional — any key/value pairs
        'order_id'       => 'ORD-001',
        'customer_email' => '[email protected]',
    ],
]);

// $session['id']           — cs_xxxxxxxxxxxxxxxx
// $session['checkout_url'] — redirect the customer here
// $session['expires_at']   — ISO 8601 timestamp (1 hour from creation)

$paybridgenp->checkout->expire('cs_xxxxxxxxxxxxxxxx');

// routes/web.php
Route::post('/checkout', function (Request $request) {
    $paybridgenp = new PayBridgeNP(['api_key' => config('services.paybridgenp.key')]);

    $session = $paybridgenp->checkout->create([
        'amount'     => $request->input('amount'),
        'return_url' => route('checkout.return'),
        'cancel_url' => route('checkout.cancel'),
        'metadata'   => ['order_id' => $request->input('order_id')],
    ]);

    return redirect($session['checkout_url']);
});

Route::get('/checkout/return', function (Request $request) {
    $status    = $request->query('status');      // "success" or "failed"
    $paymentId = $request->query('payment_id');

    if ($status === 'success') {
        // fulfill the order
    }

    return view('checkout.result', compact('status', 'paymentId'));
});

$result = $paybridgenp->payments->list(['limit' => 20, 'offset' => 0]);

foreach ($result['data'] as $payment) {
    echo $payment['id'];        // pay_xxxxxxxxxxxxxxxx
    echo $payment['amount'];    // paisa
    echo $payment['status'];    // success | failed | pending | ...
    echo $payment['provider'];  // esewa | khalti | fonepay
}

// Pagination
$total  = $result['meta']['total'];
$limit  = $result['meta']['limit'];
$offset = $result['meta']['offset'];

$payment = $paybridgenp->payments->get('pay_xxxxxxxxxxxxxxxx');

echo $payment['status'];       // success
echo $payment['provider_ref']; // provider's own transaction ID
echo $payment['metadata']['order_id']; // data you passed at checkout

$endpoint = $paybridgenp->webhooks->create([
    'url'    => 'https://myshop.com/webhooks/paybridgenp',
    'events' => ['payment.succeeded', 'payment.failed'],
]);

// Save $endpoint['signing_secret'] somewhere safe (e.g. .env)
// It is shown ONCE and cannot be retrieved again.
echo $endpoint['signing_secret']; // whsec_...



ayBridgeNP\PayBridgeNP;
use PayBridgeNP\Exceptions\SignatureVerificationException;

$payload   = file_get_contents('php://input');
$signature = $_SERVER['HTTP_X_PAYBRIDGE_SIGNATURE'] ?? null;
$secret    = getenv('PAYBRIDGENP_WEBHOOK_SECRET'); // whsec_...

try {
    $event = PayBridgeNP::webhooks()->constructEvent($payload, $signature, $secret);
} catch (SignatureVerificationException $e) {
    http_response_code(400);
    exit('Invalid signature');
}

switch ($event['type']) {
    case 'payment.succeeded':
        $payment = $event['data'];
        $orderId = $payment['metadata']['order_id'] ?? null;
        // fulfill order, send receipt email, etc.
        break;

    case 'payment.failed':
        // notify customer, release reserved stock, etc.
        break;
}

http_response_code(200);

// routes/api.php
Route::post('/webhooks/paybridgenp', [WebhookController::class, 'handle']);

// app/Http/Controllers/WebhookController.php


namespace App\Http\Controllers;

use Illuminate\Http\Request;
use PayBridgeNP\PayBridgeNP;
use PayBridgeNP\Exceptions\SignatureVerificationException;

class WebhookController extends Controller
{
    public function handle(Request $request)
    {
        try {
            $event = PayBridgeNP::webhooks()->constructEvent(
                $request->getContent(),
                $request->header('X-PayBridgeNP-Signature'),
                config('services.paybridgenp.webhook_secret')
            );
        } catch (SignatureVerificationException $e) {
            return response('Invalid signature', 400);
        }

        match ($event['type']) {
            'payment.succeeded' => $this->handleSuccess($event['data']),
            'payment.failed'    => $this->handleFailed($event['data']),
            default             => null,
        };

        return response('OK', 200);
    }

    private function handleSuccess(array $payment): void
    {
        $orderId = $payment['metadata']['order_id'] ?? null;
        // fulfill order...
    }

    private function handleFailed(array $payment): void
    {
        // handle failure...
    }
}

// List all endpoints
$endpoints = $paybridgenp->webhooks->list();

// Delete an endpoint
$paybridgenp->webhooks->delete('we_xxxxxxxxxxxxxxxx');

[
    'id'      => 'evt_xxxxxxxxxxxxxxxx',
    'type'    => 'payment.succeeded',
    'created' => 1711234567,   // Unix timestamp
    'data'    => [
        'id'           => 'pay_xxxxxxxxxxxxxxxx',
        'amount'       => 5000,
        'currency'     => 'NPR',
        'status'       => 'success',
        'provider'     => 'esewa',
        'provider_ref' => 'TXN-ABC123',
        'metadata'     => ['order_id' => 'ORD-001'],
        'created_at'   => '2026-03-25T10:00:00.000Z',
    ],
]

use PayBridgeNP\Exceptions\PayBridgeException;
use PayBridgeNP\Exceptions\AuthenticationException;
use PayBridgeNP\Exceptions\InvalidRequestException;
use PayBridgeNP\Exceptions\RateLimitException;
use PayBridgeNP\Exceptions\SignatureVerificationException;

try {
    $session = $paybridgenp->checkout->create(['amount' => 5000, 'return_url' => 'https://...']);
} catch (AuthenticationException $e) {
    // Invalid or missing API key
    echo $e->getMessage();      // "Invalid or missing API key"
    echo $e->getStatusCode();   // 401
    echo $e->getErrorCode();    // "authentication_error"
} catch (InvalidRequestException $e) {
    // Bad parameters — check $e->getRaw() for field-level details
    print_r($e->getRaw());
} catch (RateLimitException $e) {
    // Too many requests — back off and retry
    sleep(5);
} catch (PayBridgeException $e) {
    // Catch-all for any other API error
    echo $e->getStatusCode();
    echo $e->getErrorCode();    // "api_error", "not_found_error", etc.
}