travela/sslcommerz

为 Laravel 提供的 SSLCommerz 支付网关包。

v1.1.0 2023-04-01 17:36 UTC

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 URL
  • success URL
  • fail URL
  • cancel URL
  • ipn 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 配置

将信息设置为紧凑格式

其他获取器和设置器

* = 必需** = 依赖必需

许可证

MIT