amirhs712 / laravel-online-payment
适用于Laravel应用的伊朗支付网关处理器
Requires
- php: >=7.4
- ext-bcmath: *
- ext-json: *
- ext-simplexml: *
- ext-soap: *
- illuminate/contracts: >=7.0
- illuminate/database: >=7.0
- illuminate/http: >=7.0
- illuminate/routing: >=7.0
- illuminate/support: >=7.0
- illuminate/view: >=7.0
- tartan/laravel-xlog: ^1.0
Requires (Dev)
- mockery/mockery: ^1.0
- orchestra/testbench: ^3.8|^4.0|^5.0
- phpunit/phpunit: ^7.5|^8.0
- dev-master
- v8.1.0
- v8.0.5
- v8.0.4
- v8.0.3
- v8.0.2
- v8.0.1
- v8.0.0
- v7.1.10
- v7.1.9
- v7.1.8
- v7.1.7
- v7.1.6
- v7.1.5
- v7.1.4
- V7.1.3
- V7.1.2
- V7.1.1
- v7.1.0
- v7.0.13
- v7.0.12
- v7.0.11
- v7.0.9
- v7.0.8
- v7.0.7
- v7.0.6
- v7.0.5
- v7.0.4
- v7.0.3
- v7.0.2
- v7.0.1
- v7.0.0
- v6.1.2
- v6.1.1
- v6.1.0
- v6.0.5
- v6.0.4
- v6.0.3
- v6.0.2
- v6.0.1
- v6.0.0
- v6.0.0-alpha
- v5.1.5
- v5.1.4
- v5.1.0
- v5.0.3
- v5.0.2
- v5.0.1
- v5.0.0
- v2.0.2
- v2.0.1
- v2.0.0
- dev-issue-33
- dev-demo-gateway
This package is auto-updated.
Last update: 2024-09-09 18:56:58 UTC
README
Laravel 5+ 和 6 的在线支付模块处理器,称为LaraPay组件,与BankTest沙箱完全兼容。Larapay将所有伊朗支付网关集成到一个组件中。
以下是您能做的一些简单示例
- 从订单模型创建新事务表单并生成银行表单
$transaction = $order->createTransaction(Bank::MELLAT); $form = $transaction->generateForm();
- 处理网关回调(验证/结算/...)
$transaction = Larapay::verifyTransaction($request); //if the gateway supports reverse method $transaction->reverseTransaction(); $order = $transaction->model;
- 获取订单事务信息
$allTransactions = $order->transations; $accomplishedTransactions = $order->accomplishedTransactions; $isPaid = $order->isPaid(); $paidAmount = $order->paidAmount();
当前支持
- Mellat Bank Gateway - 伊朗银行Mellat的Laravel网关
- Saman Bank Gateway - 伊朗银行Saman的Laravel网关
- Saderat/Mabna Card Bank Gateway - 伊朗银行Saderat / Mabna Card的Laravel网关 - 由于网关更改,需要修正
- Pasargad Bank Gateway - 伊朗银行Pasargad的Laravel网关
- Parsian Bank Gateway - 伊朗银行Parsian的Laravel网关
- Melli/Sadad Bank Gateway (Sadad) - 伊朗银行Melli / Sadad的Laravel网关
- Pay.ir Gateway / 伊朗支付网关Pay
- Zarinpal Gateway / 伊朗支付网关Zarinpal
- ...
- 其他网关,即将推出...请您也参与完善此包
但什么是Banktest沙箱?
要求
Larapay版本6+需要PHP 7+
安装
- 通过composer安装
composer require tartan/laravel-online-payment
- 将包服务提供者添加到您的应用程序服务提供者中
Tartan\Larapay\LarapayServiceProvider::class, Tartan\Log\XLogServiceProvider::class,
- 将包别名添加到您的应用程序别名中
'Larapay' => Tartan\Larapay\Facades\Larapay::class, 'XLog' => Tartan\Log\Facades\XLog::class,
- 发布包资源和配置
php artisan vendor:publish --provider="Tartan\Larapay\LarapayServiceProvider"
- 运行迁移
php artisan migrate
配置
如果您正确完成安装步骤,您可以在项目配置文件中找到Larapay配置文件,名为larapay.php。
对于沙箱(banktest),您应该在.env文件中将LARAPAY_MODE=development
设置为开发模式,否则设置为LARAPAY_MODE=production
如果您选择开发模式,Larapay将使用banktest.ir作为其支付网关。
在.env文件中设置您的网关(们)的配置。以下是一些示例
LARAPAY_MODE=development SAMAN_MERCHANT_ID=bmcf**** SAMAN_MERCHANT_PASS=98221*** MELLAT_USERNAME=user*** MELLAT_PASSWORD=80714*** MELLAT_TERMINAL_ID=747
设置回调路由
您应该创建一个处理来自银行的回调的路由,并在.env文件中设置您的路由名称
例如,在routes文件夹中创建一个POST路由,在web.php中如下所示
Route::post('payment/callback', 'YourController@handleCallback')->name('payment.callback');
然后在.env文件中设置路由名称
LARAPAY_PAYMENT_CALLBACK=payment.callback
用法
准备可支付模型
在您的订单模型或任何其他模型(如用户)中使用Payable
特质以获取支付功能并实现它。
您可以实现getAmount()方法以返回模型的伊朗铁路
金额。
use Tartan\Larapay\Payable; class Order extends Model { use Payable; public function getAmount(){ return intval($this->amount) * 10; } }
现在您只需完成3个步骤即可完成支付
1- 创建事务
在您的银行控制器中为您的订单创建一个事务,并生成银行表单以将用户转移到支付网关。
use Tartan\Larapay\Models\Enum\Bank; class BankController extends Controller { public function index() { //your logic and prepare your order // ... //if you implement getAmount() method you can set amount to null $amount = 1200000; //Rial at least 1000 //order or user description $description = 'I pay my order with Larapay <3'; //some additional data that you need store on transaction $additionalData = []; //create transaction $transaction = $order->createTransaction(Bank::MELLAT, $amount, $description, $additionalData); //auto submit bank form and transfer user to gateway $autoSubmit = true; //callback route name. if you set it on your .env file you can set this to null $callbackRouteName = 'payment.callback'; //adapter config $adapterConfig = []; //generate bank form $form = $transaction->generateForm($autoSubmit, $callbackRouteName, $adapterConfig); return view('go-to-bank',[ 'form' => $form, ]); } }
2- 显示银行转账表单
现在您可以在您的go-to-bank
视图文件中显示$form
。
<div>
{!! $form !!}
</div>
您可以在以下位置修改银行表单
resources/views/vendor/larapy
3- 处理回调
支付后,银行将调用您的回调路由
use Illuminate\Http\Request; use Tartan\Larapay\Facades\Larapay; class YourController extends Controller { public function handleCallback(Request $request) { try{ $adapterConfig = []; $transaction = Larapay::verifyTransaction($request, $adapterConfig); $order = $transaction->model; //transaction done. payment is successful } catch (\Exception $e){ // transaction not complete!!! // show error to your user } } }
如果您想撤销事务并且您的银行支持它,您可以这样做
$transaction->reverseTransaction();
方法
在Paybel
特质和您的订单模型中可用的方法
$order->transactions
:获取此模型的全部交易$order->accomplishedTransactions
:获取全部完成的交易$order->isPaid()
:如果此模型至少有一个完成的交易,则返回 true$order->paidAmount()
:返回完成的交易金额总和(单位:里亚尔)$order->createTransaction( $paymentGateway, $amount = null, $description = null, array $additionalData = [] )
:创建交易。
LarapayTransaction
模型中可用的方法
$transaction->model
:返回创建此交易的模型。例如$order
$transaction->reverseTransaction()
:撤销交易并将资金退回用户(如果银行支持撤销交易)$transaction->generateForm($autoSubmit = false, $callback = null)
:生成银行转账表单$transaction->gatewayHandler()
:获取用于高级使用的 gatewayHandler。
LarapayTransaction
模型中可用的字段
id
created_at
updated_at
状态(布尔值)
accomplished
verified
after_verified
reversed
submitted
approved
rejected
网关信息
payment_method
bank_order_id
gate_name
gate_refid
gate_status
extra_params
additional_data
订单信息
amount
description
paid_at
LarapayTransaction
您可以使用 LarapayTransaction
模型来查找您的交易
use Tartan\Larapay\Models\LarapayTransaction; public function getTransaction($transactionId){ //find single transaction by transaction id $transaction = LarapayTransaction::find($transactionId); //get all accomplished transaction $accomplishedTransactions = LarapayTransaction::where('accomplished',true)->get(); //get all reversed transaction $reversedTransactions = LarapayTransaction::where('reversed',true)->get(); }
此类使用 SoftDeletes。您可以在您的交易模型上调用 delete() 来软删除它,或者调用 forceDelete() 从数据库中真正删除它。
安全性
如果您发现任何与安全相关的问题,请通过电子邮件 a6oozar@gmail.com 或 milad.kian@gmail.com 联系我们,而不是使用问题跟踪器。
团队
此组件由以下人员及其众多 优秀的贡献者 开发。
支持此项目
请为包的完善做出贡献。这是最好的支持。
许可证
Laravel 在线支付模块是开源软件,受 MIT 许可证 许可。