samrat415 / khalti-laravel
Easy Khalti ePayment Integration Package for Laravel
Fund package maintenance!
Khalti
Requires
- php: ^8.1
- guzzlehttp/guzzle: ^7.8
- spatie/laravel-package-tools: ^1.14.0
Requires (Dev)
- larastan/larastan: ^2.0.1
- laravel/pint: ^1.0
- nunomaduro/collision: ^7.8
- orchestra/testbench: ^8.8
- pestphp/pest: ^2.20
- pestphp/pest-plugin-arch: ^2.5
- pestphp/pest-plugin-laravel: ^2.0
- phpstan/extension-installer: ^1.1
- phpstan/phpstan-deprecation-rules: ^1.0
- phpstan/phpstan-phpunit: ^1.0
This package is auto-updated.
Last update: 2024-09-08 06:02:14 UTC
README
Easy Khalti ePayment Integration Package for Laravel
This Laravel package provides easy integration for Khalti ePayment services.
Installation
To install the package, use Composer:
composer require samrat415/khalti-laravel
Once installed, run the package's installation command to publish the configuration file:
php artisan khalti-laravel:install
This will publish the configuration file khalti-laravel.php
to the config
folder. Modify the configuration file as needed, and then run:
php artisan config:cache
Usage
You can initiate a payment request using the ePaymentInitiateRequest
method provided by the package. Here's an example of how you can use it in your controller:
use Illuminate\Http\Request; use Khalti\KhaltiLaravel\Khalti; public function initiatePaymentRequest(Request $request) { $requestArray = [ 'purchase_order_id' => 1, // Your Purchase ID 'purchase_order_name' => "test", // Your Order Name 'amount' => $request->input('amount',100) ]; $request = new Request($requestArray); $response = Khalti::ePaymentInitiateRequest($request); // Must be of Illuminate\Http\Request return $response; }
Frontend Implementation
To initiate a payment request from the frontend, you can create a form with a single field for the amount and a submit button. Here's an example:
<form id="paymentForm" onsubmit="submitForm(event)"> <label for="amount">Amount:</label><br> {{ csrf_field() }} <input type="text" id="amount" name="amount" required><br><br> <input type="submit" value="Submit"> </form> <script> function submitForm(event) { event.preventDefault(); // Prevent the default form submission var form = document.getElementById("paymentForm"); var formData = new FormData(form); // Convert formData to JSON var formDataJson = {}; formData.forEach(function(value, key){ formDataJson[key] = value; }); // Make a POST request to the external service fetch("{{ route('khalti.ePayment-initiate') }}", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify(formDataJson) }) .then(response => response.json()) .then(data => { if (data.error_key === "validation_error") { // Handle validation error alert(data.detail); } else if (data.payment_url) { // Redirect to the payment_url if available window.location.href = data.payment_url; } else { console.log("Unexpected response from server:", data); } }) .catch(error => { console.error("Error:", error); }); } </script>
Replace the JavaScript code with the provided code to handle form submission and response.
Validation Example
To complete the payment and validate it, you can use the following method:
public function completePayment(Request $request){ $response = Khalti::ePaymentValidationRequest($request); return $response; }
Here's an example of the expected request payload:
<your_config_url>/?pidx=pUmazJyRT2F8a5Fz7xXSiK&transaction_id=XdcQ5qwWUfscAKbrGbKD9F&tidx=XdcQ5qwWUfscAKbrGbKD9F&amount=31500&total_amount=31500&mobile=98XXXXX005&status=Completed&purchase_order_id=1&purchase_order_name=test
Please note that Khalti::ePaymentValidationRequest($request)
expects the $request
object to have a pidx
field and $request
to be of type Illuminate\Http\Request
.
Security Vulnerabilities
If you discover a security vulnerability within this package, please send an email to the maintainer at support@khalti.com.
Credits
License
This package is open-sourced software licensed under the MIT license.