voronkovich / sberbank-acquiring-client

PHP client for Sberbank and Alphabank acquiring REST APIs
MIT License
190 stars 55 forks source link

OFD 1.05 support #8

Closed nixprosoft closed 10 months ago

nixprosoft commented 5 years ago

feature request

Did you planning to implement supporting v.1.05 OFD data format? https://securepayments.sberbank.ru/wiki/doku.php/integration:api:rest:requests:register_cart#itemattributes

There is itemAttributes added in cart items.

voronkovich commented 5 years ago

@nixprosoft, I don't understand what you mean. You can use the itemAttributes right now:

$result = $client->registerOrder($orderId, $orderAmount, $returnUrl, [
    'orderBundle' => [
        'cartItems' => [
            'items' => [
                // First item
                [ 'itemAttributes' => [] ],
                // Second item
                [ 'itemAttributes' => [] ],
            ],
        ],
    ]
]);
nixprosoft commented 5 years ago

Yep, but in documentation in link below there is error: array need to be formed like this:

// ...
'itemPrice' => 1000,
'itemAttributes' =>
                [
                    'attributes' => [
                        [
                            'name' => 'paymentMethod',
                            'value' => 1,
                        ],
                        [
                            'name' => 'paymentObject',
                            'value' => 4,
                        ],
                        // ...
                    ],
                ],
// ...

in another case there will be error

8:orderBundle incorrect

RU: В документации Сбербанк накосячил, и формат массива с атрибутами, необходимыми для перехода на ОФД 1.05, должен быть такой, какой я указал в примере выше. В исходных кодах Вашего решения я не нашел упоминания этих атрибутов. Т.е. конечно можно не трогать исходники и оставить всё как есть. Но мало ли...

voronkovich commented 5 years ago

@nixprosoft, Если у вас есть желание, можете создать пулл-реквест. Я бы предложил просто сделать несколько вспомогательных DTO-классов, сереализующихся в JSON, наподобии:


class OrderBundle implements \JsonSerialize
{
    public function addItem(CartItem $item): void {}
    public function setDeliveryInfo(DeliveryInfo $item): void {}
}

Тогда экземпляр OrderBundle можно будет просто передавать в качестве параметра в метод registerOrder:

$result = $client->registerOrder($orderId, $orderAmount, $returnUrl, [
    'orderBundle' => new OrderBundle(),
]);
nixprosoft commented 5 years ago

@voronkovich Сам хотел предложить ;) Кстати, данный протокол также используется в Альфабанке. Различия так малы, что двойное назначение возможно. В ближайшее время обновляю эквайринг при переезде на Laravel, так что займусь.