dgvai / laravel-sslcommerz
SSLCommerz 的 Laravel 扩展包
Requires
- guzzlehttp/guzzle: ~7.0
README
本扩展包是为 SSLCommerz 在线支付网关而构建的,适用于 Laravel 5.5+、6.x 和 7.x。 (未测试低于 5.5 的版本)
内容
安装
您可以通过 composer 安装此扩展包
composer require dgvai/laravel-sslcommerz
发布配置
发布配置文件
php artisan vendor:publish --tag=sslc-config
设置和配置
更新您的应用环境 (.env)
SSLC_STORE_ID = [YOUR SSLCOMMERZ STORE_ID]
SSLC_STORE_PASSWORD = [YOUR SSLCOMMERZ STORE_ID]
SSLC_STORE_CURRENCY = [STORE CURRENCY eg. BDT]
SSLC_ROUTE_SUCCESS = [route name of success_url, eg: payment.success]
SSLC_ROUTE_FAILURE = [eg: payment.failure]
SSLC_ROUTE_CANCE = [eg: payment.cancel]
SSLC_ROUTE_IPN = [eg: payment.ipn]
SSLC_ALLOW_LOCALHOST = [TRUE/FALSE]
注意 SSLC_ROUTE_* 变量是路由名(),不是 URL()
为 SSLCommerz 创建四个 POST
路由
Route::post('sslcommerz/success','PaymentController@success')->name('payment.success'); Route::post('sslcommerz/failure','PaymentController@failure')->name('failure'); Route::post('sslcommerz/cancel','PaymentController@cancel')->name('cancel'); Route::post('sslcommerz/ipn','PaymentController@ipn')->name('payment.ipn');
注意 这些命名路由在 .env 文件中使用
在 app\Http\Middleware\VerifyCsrfToken.php
中添加异常
protected $except = [ 'sslcommerz/*' ];
注意 这将是四个路由的初始组
配置完成后
php artisan config:cache
使用
发起支付
现在您可以在控制器方法中调用支付
use DGvai\SSLCommerz\SSLCommerz; use App\Http\Controllers\Controller; class PaymentController extends Controller { public function order() { ... // DO YOU ORDER SAVING PROCESS TO DB OR ANYTHING ... $sslc = new SSLCommerz(); $sslc->amount(20) ->trxid('DEMOTRX123') ->product('Demo Product Name') ->customer('Customer Name','custemail@email.com'); return $sslc->make_payment(); /** * * USE: $sslc->make_payment(true) FOR CHECKOUT INTEGRATION * * */ } public function success(Request $request) { $validate = SSLCommerz::validate_payment($request); if($validate) { $bankID = $request->bank_tran_id; // KEEP THIS bank_tran_id FOR REFUNDING ISSUE ... // Do the rest database saving works // take a look at dd($request->all()) to see what you need ... } } public function failure(Request $request) { ... // do the database works // also same goes for cancel() // for IPN() you can leave it untouched or can follow // official documentation about IPN from SSLCommerz Panel ... } }
注意 这是执行支付的最小基本需求。
退款流程
您还可以调用退款请求并检查退款状态
public function refund($bankID) { /** * SSLCommerz::refund($bank_trans_id, $amount [,$reason]) */ $refund = SSLCommerz::refund($bankID,$refund_amount); if($refund->status) { /** * States: * success : Refund request is initiated successfully * failed : Refund request is failed to initiate * processing : The refund has been initiated already */ $state = $refund->refund_state; /** * RefID will be used for post-refund status checking */ $refID = $refund->ref_id; /** * To get all the outputs */ dd($refund->output); } else { return $refund->message; } } public function check_refund_status($refID) { $refund = SSLCommerz::query_refund($refID); if($refund->status) { /** * States: * refunded : Refund request has been proceeded successfully * processing : Refund request is under processing * cancelled : Refund request has been proceeded successfully */ $state = $refund->refund_state; /** * RefID will be used for post-refund status checking */ $refID = $refund->ref_id; /** * To get all the outputs */ dd($refund->output); } else { return $refund->message; } }
交易查询
您还可以根据提供的交易 ID 查询您的交易。
public function get_transaction_status($trxID) { $query = SSLCommerz::query_transaction($trxID); if($query->status) { dd($query->output); } else { $query->message; } }
可用方法
必需 amount($amount)
描述:设置支付金额
用法:$sslc->amount(50)
必需 trxid($trxid = null)
描述:设置交易 ID。如果传递 null
,则 PHP 的 uniqid()
将用于生成 TrxID
用法:$sslc->trxid(mt_rand(10000000,999999999))
必需 product($name [,$category])
描述:设置产品名称(必需)和类别(可选)
用法:$sslc->product($product->name, $product->category)
必需 customer($name, $email [,$phone, $address, $city, $state, $postal, $country, $fax])
描述:设置客户名称和电子邮件(必需),电话、地址、城市、州、邮政编码、国家、传真代码(可选)
用法:$sslc->customer($user->name, $user->email, $user->phone)
可选 setUrl($url_array[])
描述:手动设置成功、失败、取消和 IPN URL,而不使用 .env 中的 URL
用法:$sslc->setUrl([route('custome.success'), route('custom.failure'), .. ])
可选 setCurrency($currency)
描述:手动设置货币,而不使用 .env 中的货币
用法:$sslc->setCurrency('USD')
可选 setBin($bin)
描述:您可以提供卡的 BIN 以允许必须通过此 BIN 完成交易。您可以通过逗号 ',' 分隔这些 BIN。例如:371598,371599,376947,376948,376949
用法:$sslc->setBin('371598,371599,376947')
可选 enableEMI($installment, $max_installment, bool $restrict_emi_only = false)
描述:此方法启用 EMI 支付。
installment = 客户从您的网站选择,因此网关页面不会显示任何分期选项
max_installment = 最大分期选项,在这里客户将在网关页面获得 3、6、9 期分期
restrict_emi_only = 值为 true/false,如果值为 true,则支付页面中仅可能进行 EMI 交易,不会显示移动银行和互联网银行渠道。
用法:$sslc->enableEMI(5,12,false)
可选 setShipping($product_number, $name, $address, $city [,$postal, $state, $country])
描述:此方法设置运输详情。通常不需要!
用法:$sslc->setShipping(5,'productname','24/7 北京街','达卡',1234)
可选 setAirlineTicketProfile($flight_type, $hours_till_departure, $pnr, $journey_from_to, $third_party_booking)
描述:此方法在product_profile为airline-tickets时为必填项!通常不需要!请参阅官方文档本节。
用法:$sslc->setAirlineTicketProfile('bus',3,1,'DHK-RAJ',null)
可选 setTravelVerticalProfile($hotel_name, $length_of_stay, $check_in_time, $hotel_city)
描述:此方法在product_profile为travel-vertical时为必填项!通常不需要!请参阅官方文档本节。
用法:$sslc->setTravelVerticalProfile('Dalas',3,'12:00pm',Rajshahi)
可选 setTelecomVerticleProfile($product_type, $topup_number, $country_topup)
描述:此方法在product_profile为telecom-vertical时为必填项!通常不需要!请参阅官方文档本节。
用法:$sslc->setTelecomVerticleProfile('Flexiload',0170000000,'BD')
可选 setCarts($cart, $product_amount, $vat, $discount_amount, $convenience_fee)
描述:此方法通常不使用!请参阅官方文档本节。
用法:$sslc->setCarts($cart_json,5,'3%','20%','500')
可选 setExtras($extra1, $extra2, $extra3, $extra4)
描述:此方法用于将额外参数传递给成功/失败响应,如果需要的话。非必填项!请参阅官方文档本节。
用法:$sslc->setExtras($my_token)
必填 make_payment($checkout = false)
描述:进行支付。1. 对于托管模式(默认),不传递任何内容/false。2. 对于结账模式,传递第一个参数true
,它将返回JSON
用法:$sslc->make_payment()
变更日志
请参阅变更日志获取最近更改的更多信息。
许可证
MIT许可(MIT)。请参阅许可文件获取更多信息。