Files

7.6 KiB

Работа со счетами

С помощью SDK можно выставлять счета на оплату. Счет — это страница ЮKassa, на которой пользователь увидит описание заказа и сможет заплатить в любой удобный момент в течение заданного вами срока. Выставление счетов


Запрос на создание счета

Создание счета в документации

Используйте этот запрос, чтобы создать в ЮKassa объект счета. В запросе необходимо передать данные о заказе, которые отобразятся на странице счета, и данные для проведения платежа.

В ответ на запрос придет объект счета — InvoiceResponse — в актуальном статусе.

require_once 'vendor/autoload.php';

$client = new \YooKassa\Client();
$client->setAuth('xxxxxx', 'test_XXXXXXX');

try {
    $response = $client->createInvoice(
        [
            'payment_data' => [
                'amount' => [
                    'value' => '10.00',
                    'currency' => 'RUB',
                ],
                'capture' => true,
                'description' => 'Заказ №37',
                'metadata' => [
                    'order_id' => '37',
                ],
            ],
            'cart' => [
                [
                    'description' => 'Товар арт. 12345',
                    'price' => [
                        'value' => '9.00',
                        'currency' => 'RUB',
                    ],
                    'discount_price' => [
                        'value' => '7.00',
                        'currency' => 'RUB',
                    ],
                    'quantity' => 1.000,
                ],
                [
                    'description' => 'Товар арт. 67890',
                    'price' => [
                        'value' => '1.00',
                        'currency' => 'RUB',
                    ],
                    'quantity' => 3.000,
                ],
            ],
            'delivery_method_data' => [
                'type' => 'self',
            ],
            'locale' => 'ru_RU',
            'expires_at' => '2024-10-18T10:51:18.139Z',
            'description' => 'Счет на оплату заказа номер 37',
            'metadata' => [
                'order_id' => '37',
            ],
        ],
        uniqid('', true)
    );
    if ($response->getDeliveryMethod() && $response->getDeliveryMethod()->getType() === DeliveryMethodType::SELF) {
        echo $response->getDeliveryMethod()->getUrl(); // Получаем ссылку на счёт и передаем плательщику
    }
} catch (\Exception $e) {
    var_dump($response);
}

Запрос на создание счета через билдер

Информация о создании счета в документации

Билдер позволяет создать объект счета — CreateInvoiceRequest — программным способом, через объекты.

require_once 'vendor/autoload.php';

$client = new \YooKassa\Client();
$client->setAuth('xxxxxx', 'test_XXXXXXX');

try {
    $invoiceBuilder = \YooKassa\Request\Invoices\CreateInvoiceRequest::builder();
    $invoiceBuilder
        ->setPaymentData([
            'amount' => [
                'value' => '10.00',
                'currency' => 'RUB',
            ],
            'capture' => true,
            'description' => 'Заказ №37',
            'metadata' => [
                'order_id' => '37',
            ],
        ])
        ->addCartItem([
            'description' => 'Товар арт. 12345',
            'price' => [
                'value' => '9.00',
                'currency' => 'RUB',
            ],
            'discount_price' => [
                'value' => '7.00',
                'currency' => 'RUB',
            ],
            'quantity' => 1.000,
        ])
        ->addCartItem([
            'description' => 'Товар арт. 67890',
            'price' => [
                'value' => '1.00',
                'currency' => 'RUB',
            ],
            'quantity' => 3.000,
        ])
        ->setLocale('ru_RU')
        ->setExpiresAt('2024-10-18T10:51:18.139Z')
        ->setDeliveryMethodData(new \YooKassa\Request\Invoices\DeliveryMethodData\DeliveryMethodDataSelf())
        ->setDescription('Счет на оплату заказа номер #37')
        ->setMetadata([
            'order_id' => '37',
        ]);

    // Создаем объект запроса
    $request = $invoiceBuilder->build();

    // Можно изменить данные, если нужно
    $request->setDescription('Счет на оплату заказа номер 37');

    $idempotenceKey = uniqid('', true);
    $response = $client->createInvoice($request, $idempotenceKey);
    if ($response->getDeliveryMethod() && $response->getDeliveryMethod()->getType() === DeliveryMethodType::SELF) {
        echo $response->getDeliveryMethod()->getUrl(); // Получаем ссылку на счёт и передаем плательщику
    }
} catch (Exception $e) {
    var_dump($e);
}

Получить информацию о счете

Информация о счете в документации

Запрос позволяет получить информацию о текущем состоянии счета по его уникальному идентификатору.

В ответ на запрос придет объект счета — InvoiceResponse — в актуальном статусе.

require_once 'vendor/autoload.php';

$client = new \YooKassa\Client();
$client->setAuth('xxxxxx', 'test_XXXXXXX');

try {
    $invoiceId = 'in-e44e8088-bd73-43b1-959a-954f3a7d0c54';
    $response = $client->getInvoiceInfo($invoiceId);
    print_r($response->toArray());
    if ($response->getDeliveryMethod()) { // Если счет не оплачен
        if ($response->getDeliveryMethod()->getType() === DeliveryMethodType::SELF) {
            echo $response->getDeliveryMethod()->getUrl(); // Получаем ссылку на счёт и передаем плательщику
        }
    }
    if ($response->getPaymentDetails()) { // Если счет оплачен
        echo $response->getPaymentDetails()->getStatus();
        $paymentResponse = $client->getPaymentInfo($response->getPaymentDetails()->getId());
        echo $paymentResponse->getStatus();
    }

} catch (Exception $e) {
    var_dump($e);
}