voronkovich/sberbank-acquiring-client

Sberbank 的收购 REST API 客户端

v2.9 2024-09-19 06:28 UTC

README

Build Status Latest Stable Version Total Downloads License

用于 Sberbank 和 Alfabank REST API 的 PHP 客户端。

需求

  • PHP 7.1 或更高版本(PHP 5 的旧版本可以在 此处 找到)
  • TLS 1.2 或更高版本(更多信息可以在 此处 找到)
  • php-json 扩展已安装

安装

composer require 'voronkovich/sberbank-acquiring-client'

使用

实例化客户端

在大多数情况下,您需要将您的 用户名密码 传递给工厂以实例化客户端

use Voronkovich\SberbankAcquiring\ClientFactory;

// Sberbank production environment
$client = ClientFactory::sberbank(['userName' => 'username', 'password' => 'password']);

// Sberbank testing environment
$client = ClientFactory::sberbankTest(['userName' => 'username', 'password' => 'password']);

// Alfabank production environment
$client = ClientFactory::alfabank(['userName' => 'username', 'password' => 'password']);

// Alfabank testing environment
$client = ClientFactory::alfabankTest(['userName' => 'username', 'password' => 'password']);

或者您可以使用 令牌 进行身份验证

$client = ClientFactory::sberbank(['token' => 'sberbank-token']);

更高级的示例

use Voronkovich\SberbankAcquiring\ClientFactory;
use Voronkovich\SberbankAcquiring\Currency;
use Voronkovich\SberbankAcquiring\HttpClient\HttpClientInterface;

$client = ClientFactory::sberbank([
    'userName' => 'username',
    'password' => 'password',
    // A language code in ISO 639-1 format.
    // Use this option to set a language of error messages.
    'language' => 'ru',

    // A currency code in ISO 4217 format.
    // Use this option to set a currency used by default.
    'currency' => Currency::RUB,

    // An HTTP method to use in requests.
    // Must be "GET" or "POST" ("POST" is used by default).
    'httpMethod' => HttpClientInterface::METHOD_GET,

    // An HTTP client for sending requests.
    // Use this option when you don't want to use
    // a default HTTP client implementation distributed
    // with this package (for example, when you have'nt
    // a CURL extension installed in your server).
    'httpClient' => new YourCustomHttpClient(),
]);

您还可以使用 Guzzle 的适配器

use Voronkovich\SberbankAcquiring\ClientFactory;
use Voronkovich\SberbankAcquiring\HttpClient\GuzzleAdapter;

use GuzzleHttp\Client as Guzzle;

$client = ClientFactory::sberbank([
    'userName' => 'username',
    'password' => 'password',
    'httpClient' => new GuzzleAdapter(new Guzzle()),
]);

此外,还有适用于 SymfonyPSR-18 HTTP 客户端的适配器。

低级方法 "execute"

您可以使用低级方法 execute 与网关 REST API 交互

$client->execute('/ecomm/gw/partner/api/v1/register.do', [ 
    'orderNumber' => 1111,
    'amount' => 10,
    'returnUrl' => 'https:///sberbank/success',
]);

$status = $client->execute('/ecomm/gw/partner/api/v1/getOrderStatusExtended.do', [
    'orderId' => '64fc8831-a2b0-721b-64fc-883100001553',
]);

但使用以下列出的快捷方式会更方便。

创建新订单

Sberbank Alfabank

use Voronkovich\SberbankAcquiring\Currency;

// Required arguments
$orderId     = 1234;
$orderAmount = 1000;
$returnUrl   = 'http://mycoolshop.local/payment-success';

// You can pass additional parameters like a currency code and etc.
$params['currency'] = Currency::EUR;
$params['failUrl']  = 'http://mycoolshop.local/payment-failure';

$result = $client->registerOrder($orderId, $orderAmount, $returnUrl, $params);

$paymentOrderId = $result['orderId'];
$paymentFormUrl = $result['formUrl'];

header('Location: ' . $paymentFormUrl);

如果您想使用订单的 UUID 标识符(例如,由您的数据库分配),则应将它们转换为十六进制格式

use Ramsey\Uuid\Uuid;

$orderId = Uuid::uuid4();

$result = $client->registerOrder($orderId->getHex(), $orderAmount, $returnUrl);

使用 registerOrderPreAuth 方法创建两步订单。

获取现有订单的状态

Sberbank Alfabank

use Voronkovich\SberbankAcquiring\OrderStatus;

$result = $client->getOrderStatus($orderId);

if (OrderStatus::isDeposited($result['orderStatus'])) {
    echo "Order #$orderId is deposited!";
}

if (OrderStatus::isDeclined($result['orderStatus'])) {
    echo "Order #$orderId was declined!";
}

您还可以通过使用您自己的标识符(例如,由您的数据库分配)来获取订单的状态

$result = $client->getOrderStatusByOwnId($orderId);

撤销现有订单

Sberbank Alfabank

$result = $client->reverseOrder($orderId);

退款现有订单

Sberbank Alfabank

$result = $client->refundOrder($orderId, $amountToRefund);

使用 QR 码的 SBP 支付

目前仅由 Alfabank 支持,请参阅 文档

$result = $client->getSbpDynamicQr($orderId, [
    'qrHeight' => 100,
    'qrWidth' => 100,
    'qrFormat' => 'image',
]);

echo sprintf(
    '<a href="%s"><img src="%s" /></a>',
    $result['payload'],
    'data:image/png;base64,' . $result['renderedQr']
);

查看 Client 源代码以查找用于支付绑定和处理两步支付的方法。

许可

版权(c)Voronkovich Oleg。在 MIT 许可下分发。