alexmihel/laravel-sberbank-acquiring

提供与Sberbank收单系统交互的功能

0.1.4 2021-07-01 12:41 UTC

This package is not auto-updated.

Last update: 2024-09-20 03:19:19 UTC


README

CI codecov MIT license

此包为您的应用程序提供与使用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 - 支付系统参考表

图表: conversion screenshot

基本支付和不同支付系统中的支付之间的关联是通过ORM级别的多态关系组织的。

客户端

包包含两个用于处理收单的客户端类

  • ApiClient - 调用Sberbank的API
  • Client - 对ApiClient的封装,将支付和操作保存到数据库,使用配置文件。建议使用它。

ApiClientClient已添加到服务容器中,并可被用于依赖注入。类解析

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; // 'Зарегистрирован'

如果第二个参数中没有指定参数 returnUrlfailUrl,则它们从配置文件中获取。

注册具有预授权的订单

必需参数 - 金额。

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; // 'Зарегистрирован'

如果第二个参数中没有指定参数 returnUrlfailUrl,则它们从配置文件中获取。

请求完成订单支付的请求

必需参数:支付模型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)。有关更多信息,请参阅 许可证文件