karim007 / laravel-nagad
这是为 Laravel 定制的 Nagad 支付网关
v1.2
2024-06-02 06:08 UTC
Requires
- php: ^7.4|^8.0|^8.1|^8.2
- ext-openssl: *
README
功能
这是一个用于 Nagad MFS 的 PHP/Laravel 包装器包
要求
- PHP >=7.4
- Laravel >= 6
安装
composer require karim007/laravel-nagad
示例
点击下面的图片或 https://youtu.be/xue4EP5et58 查看视频教程
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'));
}
###注意
-
在实时模式集成中注意
-
- 登录 Nagad 控制面板
-
- 转到商家管理->商家集成详情
-
- 在此页面的顶部,您将看到商家 ID,将其用作您的 env "NAGAD_MERCHANT_ID"
-
- 您将看到默认标题为 "Nagad 支付网关服务器公钥",下载它或复制并用作您的 env "NAGAD_PUBLIC_KEY"
-
- 然后下面您将看到 "生成密钥(仅用于下载)",然后单击 "生成密钥" 按钮
-
- 单击后,将生成 2 个密钥 *_pri.pem 和 *_pub.pem,下载并妥善保管,因为每次都会生成新的密钥
-
- *_pri.pem 生成的密钥用于您的 env "NAGAD_PRIVATE_KEY"
-
- 然后转到 "商家集成" 菜单,选择集成类型 E-Commerch 从下拉菜单
-
- 提供您的回调 URL 域名/nagad/callback [如果您的回调 URL 不是这样,请使用您自己的回调 URL]
-
- 上传您下载的 *_pub.pem(这是在点击生成按钮后显示的公钥,而不是默认显示的公钥,默认显示的公钥已在步骤 4 的 env 文件中使用,非常重要,不要混淆匹配)
-
- 然后提交,提交后您将看到回调 URL 和公钥
-
- okk 您的任务已完成
-
"NAGAD_MERCHANT_NUMBER" 是您提供的商家号码,必须在 env 中使用
-
注意:实时模式在本地不起作用。项目必须上传到服务器。如果您的服务器位于 BD 以外的地区,如我们、新加坡等,您需要联系 Nagad 并向他们提供您的服务器 IP 和您的回调 URL,然后他们将从他们的端对您的 IP 和回调函数进行白名单处理。之后,您的支付网关将开始工作。
-
谢谢,祝您愉快。
欢迎为 Nagad 支付网关包做出贡献。在提交拉取请求之前,请注意以下指南。
- 遵循 PSR-4 编码标准。
- 首先阅读 Nagad API 文档。请联系 Nagad 获取他们的 API 文档和沙盒访问权限。
许可证
此存储库根据 MIT 许可证 许可。
版权 2022 md abdul karim。我们与 Nagad 无关,不提供任何保证。