Как правильно сформировать запрос Тинькофф API gRPC?

Ссылка скопирована
1 ответ

Здравствуйте.
На примере TINKOFF INVEST API пытаюсь реализовать клиента gRPC, конкретно реализовать его метод Currencies сервиса InstrumentsService. Часть кода я написал, а дописать не как не получается:

using Grpc.Core; using Grpc.Net.Client; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Text.Json; using System.Threading; using System.Threading.Tasks; using Tinkoff.InvestApi.V1;  namespace GrpcTest.Tinkoff.InvestApi.V1 {     internal class Instruments     {         public async Task BondAsync()         {             Metadata metadata = new Metadata             {                 { "Authorization", "Bearer {token}"}             };              using var channel = GrpcChannel.ForAddress("https://invest-public-api.tinkoff.ru:443");             var client = new InstrumentsService.InstrumentsServiceClient(channel);              var currencies = client.Currencies(new InstrumentsRequest(), metadata);              foreach (var future in currencies.Instruments.Count())             {                              }          }     } }

using Grpc.Core; using Grpc.Net.Client; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Text.Json; using System.Threading; using System.Threading.Tasks; using Tinkoff.InvestApi.V1; namespace GrpcTest.Tinkoff.InvestApi.V1 { internal class Instruments { public async Task BondAsync() { Metadata metadata = new Metadata { { "Authorization", "Bearer {token}"} }; using var channel = GrpcChannel.ForAddress("https://invest-public-api.tinkoff.ru:443"); var client = new InstrumentsService.InstrumentsServiceClient(channel); var currencies = client.Currencies(new InstrumentsRequest(), metadata); foreach (var future in currencies.Instruments.Count()) { } } } }

SDK у них без примеров, реализую без нее.
Помогите пожалуйста, подскажите куда копать, где что можно подглядеть.
В оф. документации запутался окончательно.

Спасибо.

Дополнительно:

1. Примеры есть, если напишешь issue, то пример новый добавят рано или поздно.
Для инструментов пример вот:
https://github.com/RussianInvestments/invest-api-c...

2. А что именно тебе нужно?
Вот например:

var settings = new Tinkoff.InvestApi.InvestApiSettings {     AccessToken = "..." }; var client = Tinkoff.InvestApi.InvestApiClientFactory.Create(settings); var currencies = client.Instruments.Currencies(); foreach (var currency in currencies.Instruments) {     Console.WriteLine(         $"{currency.Uid} {currency.Ticker} {currency.Name} {currency.Nominal.Units + currency.Nominal.Nano / 1000000000m} {currency.Nominal.Currency}"); }

var settings = new Tinkoff.InvestApi.InvestApiSettings { AccessToken = "..." }; var client = Tinkoff.InvestApi.InvestApiClientFactory.Create(settings); var currencies = client.Instruments.Currencies(); foreach (var currency in currencies.Instruments) { Console.WriteLine( $"{currency.Uid} {currency.Ticker} {currency.Name} {currency.Nominal.Units + currency.Nominal.Nano / 1000000000m} {currency.Nominal.Currency}"); }

PS: https://github.com/RussianInvestments/invest-api-c...

  • Спасибо, все получилось. Не смог сходу в документации к SDK разобраться.
Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Дмитрий К. Ответ

Для правильного формирования запроса к API Tinkoff через gRPC, вам потребуется использовать спецификацию и документацию, предоставленные разработчиками Tinkoff.

Прежде всего, убедитесь, что у вас установлены все необходимые зависимости для работы с gRPC. Для работы с gRPC в PHP вам понадобится установить библиотеку grpc/php-grpc с помощью Composer.

Далее, вам необходимо создать клиент gRPC для взаимодействия с API Tinkoff. Вам понадобится файл протокола (protobuf), который описывает доступные методы API и структуры данных.

Пример запроса к API Tinkoff через gRPC может выглядеть следующим образом:

// Импортируем сгенерированный код gRPC
require 'vendor/autoload.php';
require 'Tinkoff/Proto/Service/ServiceClient.php';
 
// Создаем клиент gRPC
$client = new Tinkoff\Proto\Service\ServiceClient('localhost:50051', [
    'credentials' => Grpc\ChannelCredentials::createInsecure(),
]);
 
// Формируем запрос
$request = new Tinkoff\Proto\Request();
$request->setParam1('value1');
$request->setParam2('value2');
 
// Вызываем метод API
list($response, $status) = $client->CallApiMethod($request)->wait();
 
if ($status->code !== Grpc\STATUS_OK) {
    echo 'Error: ' . $status->details . PHP_EOL;
} else {
    echo 'Response: ' . $response->getResult() . PHP_EOL;
}

// Импортируем сгенерированный код gRPC require 'vendor/autoload.php'; require 'Tinkoff/Proto/Service/ServiceClient.php'; // Создаем клиент gRPC $client = new Tinkoff\Proto\Service\ServiceClient('localhost:50051', [ 'credentials' => Grpc\ChannelCredentials::createInsecure(), ]); // Формируем запрос $request = new Tinkoff\Proto\Request(); $request->setParam1('value1'); $request->setParam2('value2'); // Вызываем метод API list($response, $status) = $client->CallApiMethod($request)->wait(); if ($status->code !== Grpc\STATUS_OK) { echo 'Error: ' . $status->details . PHP_EOL; } else { echo 'Response: ' . $response->getResult() . PHP_EOL; }

Не забудьте заменить 'localhost:50051' на адрес и порт сервера Tinkoff API, а также подставить реальные значения параметров запроса.

Помните, что для успешного взаимодействия с API Tinkoff через gRPC вам также понадобится наличие корректных учетных данных (токенов, ключей доступа и т.д.), которые вы должны передавать в запросе в соответствии с требованиями документации Tinkoff.

Надеюсь, этот пример поможет вам правильно сформировать запрос к API Tinkoff через gRPC. Если у вас возникнут дополнительные вопросы, не стесняйтесь обращаться за помощью!

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно