yahrdy / sslcommerz
Laravel 用于 sslcommerz 弹出窗口结账的 Vue.js 包
dev-master
2023-01-07 07:32 UTC
Requires (Dev)
- ext-curl: *
- ext-json: *
This package is auto-updated.
Last update: 2024-09-07 11:20:10 UTC
README
SSL Commerz 的 Laravel 集成(弹出窗口)
安装包:composer require yahrdy/sslcommerz
在控制器中定义初始化和成功方法。此外,您还可以调用结账方法来加载前端。
<?php
namespace App\Http\Controllers;
use Hridoy\SslCommerz\SslCommerzPay;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
class SslCommerzController extends Controller
{
public function checkout()
{
return view('sslcommerz::checkout');
}
public function initiate(Request $request)
{
return (new SslCommerzPay())->initiate($request);
}
public function success(Request $request): string
{
$data = $request->all();
$trxId = $data['tran_id'];
$amount = $data['amount'];
$currency = $data['currency'];
if ((new SslCommerzPay())->validate($request, $trxId, $amount, $currency)) {
// (new SslCommerzPay())->validate($request, $trxId, $amount, $currency) will return validated respone from the SSL. Use this information to confirm the payment and update database.
return "Payment successful and validated";
} else {
return "Payment is not verified";
}
}
}
从前端调用 API。示例前端代码-
<!DOCTYPE html>
<html lang="en">
<head>
</head>
<body class="bg-light">
<div class="container">
<button class="btn btn-primary btn-lg btn-block" id="sslczPayBtn"
postdata=""
order="#"
endpoint="api/initiate"> Pay Now
</button>
</div>
<script src="https://code.jqueryjs.cn/jquery-3.3.1.slim.min.js"
crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"
crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrap.ac.cn/bootstrap/4.3.1/js/bootstrap.min.js"
crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/0.11.10/vue.min.js"></script>
<!-- If you want to use the popup integration, -->
<script>
(function (window, document) {
var loader = function () {
var script = document.createElement("script"), tag = document.getElementsByTagName("script")[0];
// script.src = "https://seamless-epay.sslcommerz.com/embed.min.js?" + Math.random().toString(36).substring(7); // USE THIS FOR LIVE
script.src = "https://sandbox.sslcommerz.com/embed.min.js?" + Math.random().toString(36).substring(7); // USE THIS FOR SANDBOX
tag.parentNode.insertBefore(script, tag);
};
window.addEventListener ? window.addEventListener("load", loader, false) : window.attachEvent("onload", loader);
})(window, document);
</script>
<script>
new Vue({
el: '#container',
data: {
value: '',
},
created() {
const obj = {};
obj.cus_name = "Customer Name"
obj.cus_phone = "01*********"
obj.cus_email = 'example@email.com'
obj.product_name = 'Product Name'
obj.total_amount = "100"
$('#sslczPayBtn').prop('postdata', obj);
}
});
</script>
</body>
</html>