iranrenter-group/laravel-online-payment

为 Laravel 应用程序提供伊朗支付网关处理程序

v5.9 2022-08-09 19:05 UTC

README

BCH compliance

Laravel Online Payment :: LaraPay 组件

适用于 Laravel 5+ 的在线支付模块处理程序,称为 LaraPay 组件,与 banktest.ir 模拟器完全兼容

什么是 Banktest?

  • BankTest 是为所有伊朗在线支付网关提供的沙箱服务
  • بانک تست 是用于开发和测试软件的伊朗在线支付网关的模拟服务

当前支持

  • Mellat Bank Gateway - Laravel 的银行 Melli 网关
  • Saman Bank Gateway - Laravel 的银行 Saman 网关
  • Saderat Bank Gateway - Laravel 的银行 Saderat 网关
  • Pasargad Bank Gateway - Laravel 的银行 Pasargad 网关
  • Parsian Bank Gateway - Laravel 的银行 Parsian 网关
  • Melli Bank Gateway (Sadad) - Laravel 的银行 Melli / Sadad 网关
  • Pay.ir Gateway / 支付网关

安装

1. 通过 composer 安装

composer require tartan/laravel-online-payment:"^5.0"

2. 将此添加到您的 Laravel 版本 < 5.4 的应用程序服务提供者中

Tartan\Larapay\LarapayServiceProvider::class,

3. 将此添加到您的别名字符集中

'Larapay' => Tartan\Larapay\Facades\Larapay::class,

4. 发布软件包资源和配置

php artisan vendor:publish
  1. 为 larapay 集成准备您的数据库(Eloquent)模型

    • 您的交易/发票(Eloquent)模型必须实现
namespace App\Model;

use Tartan\Larapay\Transaction;

class Transaction extends Model implements TransactionInterface
{
    // set order reference Id
	public function setReferenceId($referenceId, $save = true){}

    // check if you transaction is ready for requesting payment token 
	public function checkForRequestToken(){}

    // check if transaction is ready for requesting verify transaction
	public function checkForVerify(){}

    // check if transaction is ready for requesting inqury transaction (if supported by gateway)
	public function checkForInquiry(){}

    // check if transaction is ready for requesting reverse transaction (if supported by gateway)
	public function checkForReverse(){}

    // check if transaction is ready for requesting settle/... transaction (if needed by gateway)
	public function checkForAfterVerify(){}

    // update transaction by paid card number (if provided by gateway)
	public function setCardNumber($cardNumber){}
    
    // mark transaction as verified
	public function setVerified(){}
    
    // mark transaction as settled/...
	public function setAfterVerified(){}

    // mark transaction as completed
	public function setSuccessful($flag){}

    // mark transaction as reversed
	public function setReversed(){}

    // get transaction amount
	public function getAmount(){}

    // set transactions's paid tme
	public function setPaidAt($time = 'now'){}

    // set transaction's extra details
	public function setExtra($key, $value, $save = false){}
}
  1. 准备在线支付
    public function payOnline (Request $request, Transaction $transaction)
    {
        // check if the selected payment is active or not from your gateways table
        $paymentGateway = Gateway::activeGate()
            ->where('slug', $request->input('by_online_gateway'))
            ->first();

        if (empty($paymentGateway)) {
            return view('gateway.notfound');
        }

        // get some additional parameters for updating transaction
        $parameters = [
            'description' => $request->input('by_online_description', ''),
            'bank'        => $request->input('by_online_gateway'),
        ];

        // update transaction payment method
        $transaction = $this->transactionsRepository->setTransactionPaid(
            $transaction, TransactionPayment::ONLINE, $parameters
        );

        // make larapay payment gateway instance
        $paymentGatewayHandler = Larapay::make($paymentGateway->slug, $transaction);


        // set payment params 
        $paymentParams = [
            'order_id'     => $transaction->getBankOrderId(),
            'redirect_url' => route('payment.callback', [
                'bank' => $paymentGateway->slug,
                'transactionId' => $transaction->guid
            ]),
            'amount'       => $transaction->amount,
            'submit_label' => trans('larapay::larapay.goto_gate')
        ];

        try {
            // get goto gate form
            $form = $paymentGatewayHandler->form($paymentParams);
        } catch (\Exception $e) {
            // could not generate goto gate form
            Log::emergency($paymentGateway->slug . ' #' . $e->getCode() . '-' . $e->getMessage());
            Session::flash('alert-danger', trans('trans.could_not_create_goto_bank_form', ['gateway' => $paymentGateway->name]));

            return redirect()->back()->withInput();
        }
        if (is_null($form)) {
            return redirect()->back()->withInput();
        }

        // view goto gate view
        return view('gateway.gotogate', [
            'gateway'     => $paymentGateway,
            'form'        => $form,
        ]);
    }

组件配置

return [

	/*
	|--------------------------------------------------------------------------
	| Tartan e-payment component`s operation mode
	|--------------------------------------------------------------------------
	|
	| *** very important config ***
	| please do not change it if you don't know what BankTest is
	|
	| > production: component operates with real payments gateways
	| > development: component operates with simulated "BankTest" (banktest.ir) gateways
	|
	*/
	'mode'     => env('LARAPAY_MODE', 'production'),

	/*
	|--------------------------------------------------------------------------
	| ready to serve gateways
	|--------------------------------------------------------------------------
	|
	| specifies ready to serve gateways.
	| gateway characters are case sensitive and should be exactly same as their folder name.
	|    eg, "Jahanpay" is correct not "JahanPay" or "jahanpay"
	| the gateways list is comma separated
	|
	*/
	'gateways' => env('LARAPAY_GATES', 'Mellat,Saman,Pasargad'),

	/*
	|--------------------------------------------------------------------------
	| Mellat gateway configuration
	|--------------------------------------------------------------------------
	*/
	'mellat'   => [
		'username'     => env('MELLAT_USERNAME', ''),
		'password'     => env('MELLAT_PASSWORD',''),
		'terminal_id'  => env('MELLAT_TERMINAL_ID', ''),
		'callback_url' => env('MELLAT_CALLBACK_URL', '')
	],

	/*
	|--------------------------------------------------------------------------
	| Parsian gateway configuration
	|--------------------------------------------------------------------------
	*/
	'parsian'  => [
		'pin'          => env('PARSIAN_PIN', ''),
	],
	/*
	|--------------------------------------------------------------------------
	| Pasargad gateway configuration
	|--------------------------------------------------------------------------
	*/
	'pasargad' => [
		'terminalId'       => env('PASARGAD_TERMINAL_ID', ''),
		'merchantId'       => env('PASARGAD_MERCHANT_ID', ''),
		'certificate_path' => storage_path(env('PASARGAD_CERT_PATH', 'payment/pasargad/certificate.xml')),
		'callback_url'     => env('PASARGAD_CALLBACK_URL', '')
	],

	/*
	|--------------------------------------------------------------------------
	| Sadad gateway configuration
	|--------------------------------------------------------------------------
	*/
	'sadad'    => [
		'merchant'        => env('SADAD_MERCHANT', ''),
		'transaction_key' => env('SADAD_TRANS_KEY', ''),
		'terminal_id'     => env('SADAD_TERMINAL_ID', ''),
		'callback_url'    => env('SADAD_CALLBACK_URL', ''),
	],

	'saderat' => [
		'MID' => env('SADERAT_MID', ''),
		'TID' => env('SADERAT_TID', ''),
		'public_key_path' => storage_path(env('SADERAT_CERT_PATH', 'payment/saderat/public.key')),
		'private_key_path' => storage_path(env('SADERAT_CERT_PATH', 'payment/saderat/private.key')),
	],

	/*
	|--------------------------------------------------------------------------
	| Saman gateway configuration
	|--------------------------------------------------------------------------
	*/
	'saman'    => [
		'merchant_id'   => env('SAMAN_MERCHANT_ID', ''),
		'merchant_pass' => env('SAMAN_MERCHANT_PASS', ''),
	],

	/*
	|--------------------------------------------------------------------------
	| Zarinpal gateway configuration
	|--------------------------------------------------------------------------
	|
	| types: acceptable values  --- zarin-gate or normal
	| server: acceptable values --- germany or iran or test
	|
	*/
	'zarinpal' => [
		'merchant_id'  => env('ZARINPAL_MERCHANT_ID', ''),
		'type'         => env('ZARINPAL_TYPE', 'zarin-gate'),
		'callback_url' => env('ZARINPAL_CALLBACK_URL', ''),
		'server'       => env('ZARINPAL_SERVER', 'germany'),
		'email'        => env('ZARINPAL_EMAIL', ''),
		'mobile'       => env('ZARINPAL_MOBILE', '09xxxxxxxxx'),
		'description'  => env('ZARINPAL_MOBILE', 'powered-by-TartanPayment'),
	],
	/*
	|--------------------------------------------------------------------------
	| Pay.ir gateway configuration
	|--------------------------------------------------------------------------
	*/
	'pay_ir'    => [
        	'api'   => env('PAY_IR_API_KEY', ''),
    	],

    /*
    |--------------------------------------------------------------------------
    | SoapClient Options
    |--------------------------------------------------------------------------
    |
    | useOptions: true/false
    | options: soapClient Options
    |
    */
    'soap' => [
        'useOptions' => env('SOAP_HAS_OPTIONS', false),
        'options' => [
            'proxy_host' => env('SOAP_PROXY_HOST', ''),
            'proxy_port' => env('SOAP_PROXY_PORT', ''),
            'stream_context' => stream_context_create(
                [
                    'ssl' => [
                        'verify_peer' => false,
                        'verify_peer_name' => false,
                    ],
                ]
            ),
        ]
    ]
];

团队

此组件由以下人员开发和一群 出色的贡献者 开发。

支持此项目

Donate via Paypal

许可证

Laravel Online Payment 模块是开源软件,根据 MIT 许可证 发布。