amirhs712/laravel-online-payment

适用于Laravel应用的伊朗支付网关处理器

v8.1.0 2021-02-17 20:49 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沙箱?

  • BankTest是所有伊朗在线支付网关的沙箱服务
  • BankTest是一个用于开发和测试目的的伊朗在线支付网关模拟服务

要求

Larapay版本6+需要PHP 7+

安装

  1. 通过composer安装
composer require tartan/laravel-online-payment
  1. 将包服务提供者添加到您的应用程序服务提供者中
Tartan\Larapay\LarapayServiceProvider::class,
Tartan\Log\XLogServiceProvider::class,
  1. 将包别名添加到您的应用程序别名中
'Larapay' => Tartan\Larapay\Facades\Larapay::class,
'XLog'    => Tartan\Log\Facades\XLog::class,
  1. 发布包资源和配置
php artisan vendor:publish --provider="Tartan\Larapay\LarapayServiceProvider"
  1. 运行迁移
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.commilad.kian@gmail.com 联系我们,而不是使用问题跟踪器。

团队

此组件由以下人员及其众多 优秀的贡献者 开发。

支持此项目

请为包的完善做出贡献。这是最好的支持。

许可证

Laravel 在线支付模块是开源软件,受 MIT 许可证 许可。