samrat415/khalti-laravel

为Laravel提供的Khalti电子支付集成包

V1 2024-03-03 11:42 UTC

README

为Laravel提供的Khalti电子支付集成包

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

此Laravel包提供Khalti电子支付服务的简单集成。

安装

要安装包,请使用Composer

composer require samrat415/khalti-laravel

安装后,运行包的安装命令以发布配置文件

php artisan khalti-laravel:install

这将发布配置文件 khalti-laravel.phpconfig 文件夹。根据需要修改配置文件,然后运行

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 字段,并且 $requestIlluminate\Http\Request 类型。

安全漏洞

如果您在此包中发现安全漏洞,请通过电子邮件发送给维护者 support@khalti.com

致谢

许可

本软件包是开源软件,采用MIT许可