travela / sslcommerz
为 Laravel 提供的 SSLCommerz 支付网关包。
v1.1.0
2023-04-01 17:36 UTC
Requires
- php: >=8.2
- guzzlehttp/guzzle: ^7.0.1
- laravel/framework: ^10.0
This package is not auto-updated.
Last update: 2024-10-01 01:19:53 UTC
README
SSLCommerz 是孟加拉国的第一家支付网关,为商家打开了通过其在线商店在网上接收支付的门户。
官方文档在这里。
安装
$ composer require travela/sslcommerz
供应商
$ php artisan vendor:publish --provider="SSLCZ\SSLCommerz\SSLCommerzServiceProvider"
运行上述命令后,会在 config
目录中添加一个名为 sslcommerz.php
的文件。我们需要将配置设置到 .env
文件中,如下所示
STORE_ID="your-store-id" STORE_PASSWORD="your-store-password" IS_PRODUCTION=false
对于开发模式,我们需要设置 IS_PRODUCTION=false
,而对于生产模式,则设置为 IS_PRODUCTION=true
。有关 SSLCommerz 的更多信息,请参阅官方 文档。
使用
启动支付
$sslcommerz = new SSLCommerz(); $sslcommerz->setPaymentDisplayType('hosted'); // enum('hosted', 'checkout') $sslcommerz->setPrimaryInformation([ 'total_amount' => 1000, 'currency' => 'BDT', ]); $sslcommerz->setTranId('your-transaction-id'); // set your transaction id here $sslcommerz->setSuccessUrl('http://www.example.com/success'); $sslcommerz->setFailUrl('http://www.example.com/fail'); $sslcommerz->setCancelUrl('http://www.example.com/cancel'); $sslcommerz->setCustomerInformation([ 'cus_name' => 'John Doe', 'cus_email' => 'john.doe@yahoo.com', 'cus_add1' => 'Dhaka', 'cus_add2' => 'Dhaka', 'cus_city' => 'Dhaka', 'cus_state' => 'Dhaka', 'cus_postcode' => '1000', 'cus_country' => 'Bangladesh', 'cus_phone' => '+880**********', ]); $sslcommerz->setShipmentInformation([ 'ship_name' => 'Store Test', 'ship_add1' => 'Dhaka', 'ship_add2' => 'Dhaka', 'ship_city' => 'Dhaka', 'ship_state' => 'Dhaka', 'ship_postcode' => '1000', 'ship_country' => 'Bangladesh', 'shipping_method' => 'NO', ]); $sslcommerz->setAdditionalInformation([ 'value_a' => 'CPT-112-A', 'value_b' => 'CPT-112-B', 'value_c' => 'CPT-112-C', 'value_d' => 'CPT-112-D', ]); $sslcommerz->setEmiOption(1); // enum(1, 0) $sslcommerz->setProductInformation([ 'product_name' => 'Computer', 'product_category' => 'Goods', 'product_profile' => 'physical-goods', ]); $sslcommerz->setCart([ ['product' => 'Product X', 'amount' => '2000.00'], ['product' => 'Product Y', 'amount' => '4000.00'], ['product' => 'Product Z', 'amount' => '8000.00'], ]); $sslcommerz->setProductAmount('1000'); $sslcommerz->setVat('100'); $sslcommerz->setDiscountAmount('0'); $sslcommerz->setConvenienceFee('50'); $response = $sslcommerz->initPayment($sslcommerz);
动态设置商店信息
$sslcommerz = new SSLCommerz([ 'store_id' => 'your-store-id', 'store_password' => 'your-store-password', 'is_production' => false ]);
响应
您将在启动支付后获得一个响应,您可以据此进行处理。您可以在官方文档中查看示例响应格式。
托管支付集成
// Controller $sslcommerz = new SSLCommerz(); $sslcommerz->setPaymentDisplayType('hosted'); // --- $response = $sslcommerz->initPayment($sslcommerz); return redirect($response['GatewayPageURL']); // redirect to gateway page url
简易结账集成
// View(js) - Step 1 (function (window, document) { var loader = function () { var script = document.createElement("script"), tag = document.getElementsByTagName("script")[0]; script.src = "{{ 'Sandbox or Live(Production) Script' }}" + Math.random().toString(36).substring(7); tag.parentNode.insertBefore(script, tag); }; window.addEventListener ? window.addEventListener("load", loader, false) : window.attachEvent("onload", loader); })(window, document); /* Sandbox Script URL: https://sandbox.sslcommerz.com/embed.min.js? Live or Production Script URL: https://seamless-epay.sslcommerz.com/embed.min.js? */
<!-- View(js) - Step 2 --> <button class="your-button-class" id="sslczPayBtn" token="if you have any token validation" postdata="your javascript arrays or objects which requires in backend" order="If you already have the transaction generated for current order" endpoint="{{ 'your-easy-checkout-pay-url' }}" > Pay Now </button>
// Controller $sslcommerz = new SSLCommerz(); $sslcommerz->setPaymentDisplayType('checkout'); // --- $response = $sslcommerz->initPayment($sslcommerz); echo $sslcommerz->formatCheckoutResponse($response); // show easycheckout pay popup
禁用 CSRF 保护
以下 URL 的 CSRF 保护将被禁用。
init-payment-via-ajax
URLsuccess
URLfail
URLcancel
URLipn
URL
在 VerifyCsrfToken
中间件中禁用它们。
// VerifyCsrfToken.php protected $except = [ '/init-payment-via-ajax', '/success', '/cancel', '/fail', '/ipn' ];
订单验证
$sslcommerz = new SSLCommerz(); $response = $sslcommerz->orderValidate([ 'val_id' => $request->input('val_id'), 'store_id' => 'your-store-id', // Optional: by default `$sslcommerz->getStoreId()` 'store_password' => 'your-store-password', // Optional: by default `$sslcommerz->getStorePassword()` 'v' => '1', // Optional: by default `1` 'format' => 'json' // Optional: by default `json` ]);
交易查询
$sslcommerz = new SSLCommerz(); // by Transaction Id $response = $sslcommerz->transactionQueryById([ 'tran_id' => $request->input('tran_id'), 'store_id' => 'your-store-id', // Optional: by default `$sslcommerz->getStoreId()` 'store_password' => 'your-store-password', // Optional: by default `$sslcommerz->getStorePassword()` ]); // by Session Id $response = $sslcommerz->transactionQueryBySessionId([ 'sessionkey' => 'initiated-session-key', 'store_id' => 'your-store-id', // Optional: by default `$sslcommerz->getStoreId()` 'store_password' => 'your-store-password', // Optional: by default `$sslcommerz->getStorePassword()` ]);
退款
$sslcommerz = new SSLCommerz(); // Initiate $response = $sslcommerz->refundPayment([ 'bank_tran_id' => $request->input('bank_tran_id'), 'store_id' => 'your-store-id', // Optional: by default `$sslcommerz->getStoreId()` 'store_password' => 'your-store-password', // Optional: by default `$sslcommerz->getStorePassword()` 'refund_amount' => 1000, 'refund_remarks' => 'your-refund-remarks', 'refe_id' => 'your-ref-id', // Optional 'format' => 'json', // Optional: by default `json` ]); // Status $response = $sslcommerz->refundStatus([ 'refund_ref_id' => 'refund-ref-id', 'store_id' => 'your-store-id', // Optional: by default `$sslcommerz->getStoreId()` 'store_password' => 'your-store-password', // Optional: by default `$sslcommerz->getStorePassword()` ]);
可用的环境变量和 API
环境: getApiEnvironment()
- 沙盒 (
IS_PRODUCTION
false) - 生产 (
IS_PRODUCTION
true)
域名: getApiDomain()
API
getApiUrl()
([api_domain]/gwprocess/v4/api.php)getOrderValidateApiUrl()
([api_domain]/validator/api/validationserverAPI.php)getTransactionStatusApiUrl()
([api_domain]/validator/api/merchantTransIDvalidationAPI.php)getRefundPaymentApiUrl()
([api_domain]/validator/api/merchantTransIDvalidationAPI.php)getRefundStatusApiUrl()
([api_domain]/validator/api/merchantTransIDvalidationAPI.php)
可用方法
环境与域名相关配置
API URL 配置
将信息设置为紧凑格式
其他获取器和设置器
*
= 必需 和 **
= 依赖必需。