samrat415 / khalti-laravel
为Laravel提供的Khalti电子支付集成包
V1
2024-03-03 11:42 UTC
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
为Laravel提供的Khalti电子支付集成包
此Laravel包提供Khalti电子支付服务的简单集成。
安装
要安装包,请使用Composer
composer require samrat415/khalti-laravel
安装后,运行包的安装命令以发布配置文件
php artisan khalti-laravel:install
这将发布配置文件 khalti-laravel.php
到 config
文件夹。根据需要修改配置文件,然后运行
php artisan config:cache
用法
您可以使用包提供的 ePaymentInitiateRequest
方法来发起支付请求。以下是在控制器中使用它的示例
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; }
前端实现
要从前端发起支付请求,您可以创建一个包含单个金额字段和提交按钮的表单。以下是一个示例
<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>
将JavaScript代码替换为提供的代码以处理表单提交和响应。
验证示例
要完成支付并验证它,您可以使用以下方法
public function completePayment(Request $request){ $response = Khalti::ePaymentValidationRequest($request); return $response; }
以下是一个预期请求负载的示例
<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
请注意,Khalti::ePaymentValidationRequest($request)
期望 $request
对象具有 pidx
字段,并且 $request
是 Illuminate\Http\Request
类型。
安全漏洞
如果您在此包中发现安全漏洞,请通过电子邮件发送给维护者 support@khalti.com。
致谢
许可
本软件包是开源软件,采用MIT许可。