karim007/laravel-nagad

这是为 Laravel 定制的 Nagad 支付网关

v1.2 2024-06-02 06:08 UTC

This package is auto-updated.

Last update: 2024-09-05 06:27:35 UTC


README

Downloads Starts

功能

这是一个用于 Nagad MFS 的 PHP/Laravel 包装器包

要求

  • PHP >=7.4
  • Laravel >= 6

安装

composer require karim007/laravel-nagad

示例

nagad nagad nagad nagad nagad

点击下面的图片或 https://youtu.be/xue4EP5et58 查看视频教程

laravel nagad

vendor publish (配置)

php artisan vendor:publish --provider="Karim007\LaravelNagad\NagadServiceProvider"

发布配置文件后,设置您的凭据。您可以在配置目录中的 nagad.php 文件中看到这些。

"sandbox"         => env("NAGAD_SANDBOX", true), // if true it will redirect to sandbox url

"merchant_id"     => env("NAGAD_MERCHANT_ID", ""),
"merchant_number" => env("NAGAD_MERCHANT_NUMBER", ""),
"public_key"      => env("NAGAD_PUBLIC_KEY", ""),
"private_key"     => env("NAGAD_PRIVATE_KEY", ""),
"callback_url"    => env("NAGAD_CALLBACK_URL", "http://127.0.0.1:8000/nagad/callback"), // By default you can change it in your callback url

"merchant_id_2"     => env("NAGAD_MERCHANT_ID2", ""),
"merchant_number_2" => env("NAGAD_MERCHANT_NUMBER2", ""),
"public_key_2"      => env("NAGAD_PUBLIC_KEY2", ""),
"private_key_2"     => env("NAGAD_PRIVATE_KEY2", ""),
"callback_url_2"    => env("NAGAD_CALLBACK_URL2", "http://your_domain/nagad/callback"),

//you can add more account as your wise

'timezone'        => 'Asia/Dhaka', // By default
"response_type"   => "json" // By default json you can change response type json/html

设置 .env 配置

NAGAD_SANDBOX=true #for production use false

NAGAD_MERCHANT_ID=""
NAGAD_MERCHANT_NUMBER=""
NAGAD_PUBLIC_KEY=""
NAGAD_PRIVATE_KEY=""
NAGAD_CALLBACK_URL=""

NAGAD_MERCHANT_NUMBER2=
NAGAD_MERCHANT_ID2=
NAGAD_PUBLIC_KEY2=
NAGAD_PRIVATE_KEY2=
NAGAD_CALLBACK_URL2=


用法

1. 创建一个控制器

php artisan make:controller NagadController

2. 添加以下路由

Route::get('nagad/pay',[App\Http\Controllers\NagadController::class,'pay'])->name('nagad.pay');
Route::get('nagad/callback', [App\Http\Controllers\NagadController::class,'callback']);
Route::get('nagad/refund/{paymentRefId}', [App\Http\Controllers\NagadController::class,'refund']);

3. 创建支付

#必须包含在您的控制器中

use Karim007\LaravelNagad\Facade\NagadPayment;
use Karim007\LaravelNagad\Facade\NagadRefund;
public function pay()
{
    $amount = 1000;
    $trx_id = uniqid();
    //if you have multipule/dynamic callback url then uncomment bellow line and use dynamic callbackurl
    //otherwise don't do anything
    //config(['nagad.callback_url' => env('NAGAD_CALLBACK_URL')]);
    
    $response = NagadPayment::create($amount, $trx_id); // 1st parameter is amount and 2nd is unique invoice number

    //$response = NagadPayment::create($amount, $trx_id,1); // additional last parameter for manage difference account

    if (isset($response) && $response->status == "Success"){
        return redirect()->away($response->callBackUrl);
    }
    return redirect()->back()->with("error-alert", "Invalid request try again after few time later");
}

4. 验证支付

public function callback(Request $request)
{
    if (!$request->status && !$request->order_id) {
        return response()->json([
            "error" => "Not found any status"
        ], 500);
    }

    if (config("nagad.response_type") == "json") {
        return response()->json($request->all());
    }

    $verify = NagadPayment::verify($request->payment_ref_id); // $paymentRefId which you will find callback URL request parameter

    if (isset($verify->status) && $verify->status == "Success") {
        return $this->success($verify->orderId);
    } else {
        return $this->fail($verify->orderId);
    }

}

5. 退款支付


public function refund($paymentRefId)
{
    $refundAmount=1000;
    $verify = NagadRefund::refund($paymentRefId,$refundAmount);
    //$verify = NagadRefund::refund($paymentRefId,$refundAmount,'','sss',1); last parameter for manage account

    if (isset($verify->status) && $verify->status == "Success") {
        return $this->success($verify->orderId);
    } else {
        return $this->fail($verify->orderId);
    }
}

注意:对于退款方法,您必须传递两个额外的参数,一个是 参考号,另一个是 参考信息

5. 成功函数

public function success($transId)
{
    return view("nagad::success", compact('transId'));
}

6. 失败函数

public function fail($transId)
{
    return view("nagad::failed", compact('transId'));
}

###注意

  • 在实时模式集成中注意

    1. 登录 Nagad 控制面板
    1. 转到商家管理->商家集成详情
    1. 在此页面的顶部,您将看到商家 ID,将其用作您的 env "NAGAD_MERCHANT_ID"
    1. 您将看到默认标题为 "Nagad 支付网关服务器公钥",下载它或复制并用作您的 env "NAGAD_PUBLIC_KEY"
    1. 然后下面您将看到 "生成密钥(仅用于下载)",然后单击 "生成密钥" 按钮
    1. 单击后,将生成 2 个密钥 *_pri.pem 和 *_pub.pem,下载并妥善保管,因为每次都会生成新的密钥
    1. *_pri.pem 生成的密钥用于您的 env "NAGAD_PRIVATE_KEY"
    1. 然后转到 "商家集成" 菜单,选择集成类型 E-Commerch 从下拉菜单
    1. 提供您的回调 URL 域名/nagad/callback [如果您的回调 URL 不是这样,请使用您自己的回调 URL]
    1. 上传您下载的 *_pub.pem(这是在点击生成按钮后显示的公钥,而不是默认显示的公钥,默认显示的公钥已在步骤 4 的 env 文件中使用,非常重要,不要混淆匹配)
    1. 然后提交,提交后您将看到回调 URL 和公钥
    1. okk 您的任务已完成
  • "NAGAD_MERCHANT_NUMBER" 是您提供的商家号码,必须在 env 中使用

  • 注意:实时模式在本地不起作用。项目必须上传到服务器。如果您的服务器位于 BD 以外的地区,如我们、新加坡等,您需要联系 Nagad 并向他们提供您的服务器 IP 和您的回调 URL,然后他们将从他们的端对您的 IP 和回调函数进行白名单处理。之后,您的支付网关将开始工作。

  • 谢谢,祝您愉快。

欢迎为 Nagad 支付网关包做出贡献。在提交拉取请求之前,请注意以下指南。

  • 遵循 PSR-4 编码标准。
  • 首先阅读 Nagad API 文档。请联系 Nagad 获取他们的 API 文档和沙盒访问权限。

许可证

此存储库根据 MIT 许可证 许可。

版权 2022 md abdul karim。我们与 Nagad 无关,不提供任何保证。