alexmihel / laravel-sberbank-acquiring
提供与Sberbank收单系统交互的功能
Requires
- php: ^7.3|^8.0
- ext-curl: *
- ext-json: *
Requires (Dev)
- mockery/mockery: ^1.4.2
- orchestra/testbench: ^6.18
- phpunit/phpunit: ^9.3.3
- squizlabs/php_codesniffer: ^3.6
This package is not auto-updated.
Last update: 2024-09-20 03:19:19 UTC
README
此包为您的应用程序提供与使用Sberbank收单系统进行支付的函数。功能
- 创建和存储支付
- 记录支付操作
在开始使用之前,请参阅Sberbank提供的文档。
要求
- PHP >= 8.0
- Laravel >= 5.8
- PHP 扩展:ext-json, ext-curl
- 关系数据库
安装
将包添加到依赖中
composer require avlyalin/laravel-sberbank-acquiring
发布配置文件
php artisan vendor:publish --provider="Avlyalin\SberbankAcquiring\Providers\AcquiringServiceProvider" --tag=config
运行迁移
php artisan migrate
概述
表格
为存储支付和操作历史,创建了几张表
- acquiring_payments - 基本支付表,存储所有支付系统的支付信息
- acquiring_payment_operations - 支付操作
- acquiring_sberbank_payments - 通过Sberbank系统直接进行的支付
- acquiring_apple_pay_payments - 通过Apple Pay进行的支付
- acquiring_samsung_pay_payments - 通过Samsung Pay进行的支付
- acquiring_google_pay_payments - 通过Google Pay进行的支付
- acquiring_payment_statuses - 支付状态参考表
- acquiring_payment_operation_types - 操作类型参考表
- acquiring_payment_systems - 支付系统参考表
基本支付和不同支付系统中的支付之间的关联是通过ORM级别的多态关系组织的。
客户端
包包含两个用于处理收单的客户端类
ApiClient
- 调用Sberbank的APIClient
- 对ApiClient
的封装,将支付和操作保存到数据库,使用配置文件。建议使用它。
ApiClient
和Client
已添加到服务容器中,并可被用于依赖注入。类解析
use Avlyalin\SberbankAcquiring\Client\ApiClient; use Avlyalin\SberbankAcquiring\Client\Client; $client = $this->app->make(Client::class); $apiClient = $this->app->make(ApiClient::class);
操作
目前支持以下收单操作
注册订单
必需参数 - 金额。
use Avlyalin\SberbankAcquiring\Client\HttpClientInterface; use Avlyalin\SberbankAcquiring\Client\Client; $client = $this->app->make(Client::class); $acquiringPayment = $client->register( 1000, // сумма ['orderNumber' => '123-456'], // необязательные параметры HttpClientInterface::METHOD_GET, // метод запроса ['Cache-Control' => 'no-cache'] // хэдеры запроса ); $status = $acquiringPayment->status->name; // 'Зарегистрирован'
如果第二个参数中没有指定参数 returnUrl 和 failUrl,则它们从配置文件中获取。
注册具有预授权的订单
必需参数 - 金额。
use Avlyalin\SberbankAcquiring\Client\HttpClientInterface; use Avlyalin\SberbankAcquiring\Client\Client; $client = $this->app->make(Client::class); $acquiringPayment = $client->registerPreAuth( 1000, // сумма ['orderNumber' => '123-456'], // необязательные параметры HttpClientInterface::METHOD_GET, // метод запроса ['Cache-Control' => 'no-cache'] // хэдеры запроса ); $status = $acquiringPayment->status->name; // 'Зарегистрирован'
如果第二个参数中没有指定参数 returnUrl 和 failUrl,则它们从配置文件中获取。
请求完成订单支付的请求
必需参数:支付模型ID(AcquiringPayment),金额。
use Avlyalin\SberbankAcquiring\Client\HttpClientInterface; use Avlyalin\SberbankAcquiring\Client\Client; $client = $this->app->make(Client::class); $acquiringPayment = $client->deposit( 1, // id модели платежа (AcquiringPayment) 1000, // сумма [], // необязательные параметры HttpClientInterface::METHOD_GET, // метод запроса ['Cache-Control' => 'no-cache'] // хэдеры запроса );
请求取消订单支付的请求
必需参数 - 支付模型ID(AcquiringPayment)。
use Avlyalin\SberbankAcquiring\Client\HttpClientInterface; use Avlyalin\SberbankAcquiring\Client\Client; $client = $this->app->make(Client::class); $acquiringPayment = $client->reverse( 1, // id модели платежа (AcquiringPayment) ['language' => 'EN'], // необязательные параметры HttpClientInterface::METHOD_GET, // метод запроса ['Cache-Control' => 'no-cache'] // хэдеры запроса );
请求退款订单支付的请求
必需参数:支付模型ID(AcquiringPayment),金额。
use Avlyalin\SberbankAcquiring\Client\HttpClientInterface; use Avlyalin\SberbankAcquiring\Client\Client; $client = $this->app->make(Client::class); $acquiringPayment = $client->refund( 1, // id модели платежа (AcquiringPayment) 500, // сумма ['language' => 'EN'], // необязательные параметры HttpClientInterface::METHOD_GET, // метод запроса ['Cache-Control' => 'no-cache'] // хэдеры запроса );
获取订单状态
必需参数 - 支付模型ID(AcquiringPayment)。
use Avlyalin\SberbankAcquiring\Client\HttpClientInterface; use Avlyalin\SberbankAcquiring\Client\Client; $client = $this->app->make(Client::class); $acquiringPayment = $client->getOrderStatusExtended( 1, // id модели платежа (AcquiringPayment) ['language' => 'EN'], // необязательные параметры HttpClientInterface::METHOD_GET, // метод запроса ['Cache-Control' => 'no-cache'] // хэдеры запроса );
请求通过Apple Pay进行支付
必需参数 - 从Apple Pay系统获得的paymentToken。更多信息这里。
use Avlyalin\SberbankAcquiring\Client\HttpClientInterface; use Avlyalin\SberbankAcquiring\Client\Client; $client = $this->app->make(Client::class); $acquiringPayment = $client->payWithApplePay( 'vnkXadsIDvejvKQPvcxbTqeEhfbPOG', // Токен, полученный от системы Apple Pay [ // необязательные параметры 'orderNumber' => '123_abc', 'language' => 'EN', 'description' => 'payment description', ], HttpClientInterface::METHOD_GET, // метод запроса ['Cache-Control' => 'no-cache'] // хэдеры запроса );
请求通过Samsung Pay进行支付
必需参数 - 从Samsung Pay系统获得的paymentToken。更多信息这里。
use Avlyalin\SberbankAcquiring\Client\HttpClientInterface; use Avlyalin\SberbankAcquiring\Client\Client; $client = $this->app->make(Client::class); $acquiringPayment = $client->payWithSamsungPay( 'vnkXadsIDvejvKQPvcxbTqeEhfbPOG', // Токен, полученный от системы Samsung Pay [ // необязательные параметры 'orderNumber' => '123_abc', 'language' => 'EN', 'description' => 'payment description', ], HttpClientInterface::METHOD_GET, // метод запроса ['Cache-Control' => 'no-cache'] // хэдеры запроса );
请求通过Google Pay进行支付
必需参数:从Google Pay系统获得的paymentToken,金额。更多信息这里。
use Avlyalin\SberbankAcquiring\Client\HttpClientInterface; use Avlyalin\SberbankAcquiring\Client\Client; $client = $this->app->make(Client::class); $acquiringPayment = $client->payWithGooglePay( 'vnkXadsIDvejvKQPvcxbTqeEhfbPOG', // Токен, полученный от системы Google Pay 1000, [ // необязательные параметры 'orderNumber' => '123_abc', 'language' => 'EN', 'description' => 'payment description', ], HttpClientInterface::METHOD_GET, // метод запроса ['Cache-Control' => 'no-cache'] // хэдеры запроса );
请求获取收据信息
描述这里。
use Avlyalin\SberbankAcquiring\Client\HttpClientInterface; use Avlyalin\SberbankAcquiring\Client\ApiClient; $apiClient = $this->app->make(ApiClient::class); $response = $apiClient->getReceiptStatus( [ // параметры 'orderId' => 'kvp431_Wmvx_gqQx', 'language' => 'EN' ], HttpClientInterface::METHOD_GET, // метод запроса ['Cache-Control' => 'no-cache'] // хэдеры запроса ); if ($response->isOk) { print_r($response->getResponseArray()); } else { print_r($response->getErrorMessage()); }
请求激活绑定
必需参数 - 已创建的绑定标识符。更多信息 请点击这里。
use Avlyalin\SberbankAcquiring\Client\HttpClientInterface; use Avlyalin\SberbankAcquiring\Client\ApiClient; $apiClient = $this->app->make(ApiClient::class); $response = $apiClient->bindCard( '131-cvlg-1vcvc-14cvx', // id связки [], // необязательные параметры HttpClientInterface::METHOD_GET, // метод запроса ['Cache-Control' => 'no-cache'] // хэдеры запроса ); if ($response->isOk) { print_r($response->getResponseArray()); } else { print_r($response->getErrorMessage()); }
解除绑定请求
必需参数 - 已创建的绑定标识符。更多信息 请点击这里。
use Avlyalin\SberbankAcquiring\Client\HttpClientInterface; use Avlyalin\SberbankAcquiring\Client\ApiClient; $apiClient = $this->app->make(ApiClient::class); $response = $apiClient->unBindCard( '131-cvlg-1vcvc-14cvx', // id связки [], // необязательные параметры HttpClientInterface::METHOD_GET, // метод запроса ['Cache-Control' => 'no-cache'] // хэдеры запроса ); if ($response->isOk) { print_r($response->getResponseArray()); } else { print_r($response->getErrorMessage()); }
获取客户所有绑定列表请求
必需参数 - 客户在商店系统中的编号(标识符)。更多信息 请点击这里。
use Avlyalin\SberbankAcquiring\Client\HttpClientInterface; use Avlyalin\SberbankAcquiring\Client\ApiClient; $apiClient = $this->app->make(ApiClient::class); $response = $apiClient->getBindings( 'client-id-1', // номер (идентификатор) клиента [], // необязательные параметры HttpClientInterface::METHOD_GET, // метод запроса ['Cache-Control' => 'no-cache'] // хэдеры запроса ); if ($response->isOk) { print_r($response->getResponseArray()); } else { print_r($response->getErrorMessage()); }
获取特定银行卡绑定列表请求
详细信息 请点击这里。
use Avlyalin\SberbankAcquiring\Client\HttpClientInterface; use Avlyalin\SberbankAcquiring\Client\ApiClient; $apiClient = $this->app->make(ApiClient::class); $response = $apiClient->getBindingsByCardOrId( 'client-id-1', // номер (идентификатор) клиента [], // необязательные параметры HttpClientInterface::METHOD_GET, // метод запроса ['Cache-Control' => 'no-cache'] // хэдеры запроса ); if ($response->isOk) { print_r($response->getResponseArray()); } else { print_r($response->getErrorMessage()); }
更改绑定有效期请求
必需参数 - 已创建的绑定标识符。更多信息 请点击这里。
use Avlyalin\SberbankAcquiring\Client\HttpClientInterface; use Avlyalin\SberbankAcquiring\Client\ApiClient; $apiClient = $this->app->make(ApiClient::class); $response = $apiClient->getBindingsByCardOrId( '131-cvlg-1vcvc-14cvx', // id связки [ // параметры 'newExpiry' => 202012, ], HttpClientInterface::METHOD_GET, // метод запроса ['Cache-Control' => 'no-cache'] // хэдеры запроса ); if ($response->isOk) { print_r($response->getResponseArray()); } else { print_r($response->getErrorMessage()); }
检查卡是否在3DS中参与请求
必需参数 - 用于支付的卡掩码号码(PAN)。更多信息 请点击这里。
use Avlyalin\SberbankAcquiring\Client\HttpClientInterface; use Avlyalin\SberbankAcquiring\Client\ApiClient; $apiClient = $this->app->make(ApiClient::class); $response = $apiClient->verifyEnrollment( '4111111111111111', // номер карты HttpClientInterface::METHOD_GET, // метод запроса ['Cache-Control' => 'no-cache'] // хэдеры запроса ); if ($response->isOk) { print_r($response->getResponseArray()); } else { print_r($response->getErrorMessage()); }
设置
请参阅 配置文件。
身份验证
在调用支付网关时,可以使用以下注册时获取的数据进行身份验证
- 服务账户的登录名/密码对
- 令牌
- 卖家登录名(在使用Apple Pay、Samsung Pay、Google Pay支付系统时)
配置文件提供设置认证数据的参数
...
'auth' => [
'userName' => env('SBERBANK_USERNAME', ''),
'password' => env('SBERBANK_PASSWORD', ''),
'token' => env('SBERBANK_TOKEN', ''),
],
'merchant_login' => env('SBERBANK_MERCHANT_LOGIN', ''),
...
可以通过编辑配置文件或在.env文件中指定数据来设置这些数据
SBERBANK_USERNAME=your_username SBERBANK_PASSWORD=your_password SBERBANK_TOKEN=your_token SBERBANK_MERCHANT_LOGIN=your_merchant_login
更新支付状态
某些操作不允许确定新的支付状态。为了更新状态,实现了一个名为artisan
的命令,该命令对具有指定状态的所有支付调用操作getOrderStatusExtended
。
命令接受一个名为id
的参数 - 需要更新状态的支付id集合
php artisan sberbank-acquiring:update-statuses --id=1 --id=7
建议将此命令添加到调度器中(app/Console/Kernel.php)
use Avlyalin\SberbankAcquiring\Commands\UpdateStatusCommand; use Avlyalin\SberbankAcquiring\Models\AcquiringPaymentStatus; protected function schedule(Schedule $schedule) { $schedule->command(UpdateStatusCommand::class, [ '--id' => [ AcquiringPaymentStatus::NEW, AcquiringPaymentStatus::ACS_AUTH, ], ])->everyMinute(); }
事件 (Events)
目前实现了一个事件
异常(Exceptions)
包在出现错误时抛出异常。
支持
如果这个项目对您有帮助,您可以通过 这里 支持其发展。
许可 (License)
MIT许可证(MIT)。有关更多信息,请参阅 许可证文件。