1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/lnsyzjw-yi-kd-web-client

Клонировать/Скачать
README.md 28 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 07.06.2025 17:01 a93585e

Описание и инструкции по использованию YiKdWebClient фреймворка

Реализация работы с внешними API-интерфейсами K3Cloud через веб, используя нативный фреймворк и чистый протокол HTTP, что позволяет избежать конфликтов различных фреймворков. Удалены зависимости от официального SDK и Newtonsoft.Json. Высокая совместимость; поддерживает .NET, .NET Framework, NetStandard.

1. Введение фреймворка:

Использование пакета nuget

Используйте встроенный менеджер пакетов nuget в Visual Studio для установки последней версии YiKdWebClient, как показано на следующем рисунке: Использование nuget

Адрес публикации nuget (можно загрузить и установить вручную):

https://www.nuget.org/packages/YiKdWebClient

2. Настройка конфигурационного файла:

Путь к конфигурационному файлу

Относительный путь конфигурационного файла: YiKdWebCfg/appsettings.xml, используется для авторизации и проверки подлинности API, а также для создания экземпляра класса AppSettingsModel из YiK3CloudClient.## Содержимое конфигурационного файла (файл appsettings.xml в папке YiKdWebCfg, если его нет, создайте вручную) Примечание: (в последней версии публичного облака могут быть введены обязательные требования к использованию шлюза (https://api.kingdee.com/galaxyapi/))
Для использования шлюза необходимо использовать режим проверки подлинности API.
По последней информации от штаба (октябрь 2024 года), использование шлюза в публичном облаке больше не является обязательным. Публичное облако может использовать API в обычном режиме, но фактическое использование зависит от официальных рекомендаций. Все функции включены в фреймворк и могут быть использованы.```

<!-- Используемый в данный момент ID учетной записи (т.е. ID центра данных) -->

<!-- ID учетной записи для авторизации внешней системы (т.е. ID центра данных на сайте open.kingdee.com) -->

<!-- После нажатия кнопки "Создать тестовую ссылку" на странице авторизации внешней системы можно увидеть ID учетной записи -->

<add key="X-KDApi-AcctID" value="629bd5285d655d"/>

<!-- Имя пользователя для авторизации внешней системы -->

<!-- Для версий патча PT-146894 [7.7.0.202111] и последующих версий, это может быть любое имя пользователя из списка авторизованных пользователей -->

<!-- Если внешняя система авторизации настроена на "Разрешить вход для всех пользователей", то ограничения не применяются -->

<add key="X-KDApi-UserName" value="Administrator"/>

<!-- ID приложения для авторизации внешней системы -->

<add key="X-KDApi-AppID" value="2********************P"/>

<!-- Секретный ключ приложения для авторизации внешней системы -->

<add key="X-KDApi-AppSec" value="a***********************7"/>

```markdown
<!-- Лингвистическая среда по умолчанию, по умолчанию 2052 -->

<add key="X-KDApi-LCID" value="2052"/>

<!-- Код организации, активен при использовании нескольких организаций (работает только при использовании подписи для аутентификации, остальные методы требуют тестирования, можно оставить пустым) -->

<!--<add key="X-KDApi-OrgNum" value="*****"/>-->
```<!-- URL-адрес сервиса (для частных облаков необходимо указать адрес продукта K3Cloud, заканчивающийся на /K3Cloud/. Если используется публичное облако, то значение должно быть пустым) -->

<add key="X-KDApi-ServerUrl" value="http://127.0.0.1/k3cloud/"/>
</appSettings>

</configuration>

3. Руководство по вызову API и примеры кода:

1. Аутентификация по цифровой подписи:

(необходимо настроить конфигурационный файл: YiKdWebCfg/appsettings.xml) (рекомендуемый метод) Обратите внимание: версии до PT-146911 8.0.0.202205 не поддерживают шифрование SHA256 и требуют использования SHA1

string Formid = "SEC_User";
string Json = @"{""IsUserModelInit"":""true"",""Number"":""Administrator"",""IsSortBySeq"":""false""}";
YiK3CloudClient yiK3CloudClient = new YiKdWebClient.YiK3CloudClient();
yiK3CloudClient.LoginType = LoginType.LoginBySignSHA1;
//yiK3CloudClient.LoginType = LoginType.LoginBySignSHA256;
string resultJson = yiK3CloudClient.View(Formid, Json);
``````markdown
/*Следующая информация может быть использована для отладки с помощью Postman*/
Console.WriteLine("Адрес для входа:");
Console.WriteLine(yiK3CloudClient.ReturnLoginWebModel.RequestUrl);
Console.WriteLine("Тело запроса для входа:");
Console.WriteLine(yiK3CloudClient.ReturnLoginWebModel.RealRequestBody);
//Адрес для выполнения операции
string RequestUrl = yiK3CloudClient.ReturnOperationWebModel.RequestUrl;
Console.WriteLine("Адрес для выполнения операции:");
Console.WriteLine(RequestUrl);
//Тело запроса для выполнения операции
string RealRequestBody = yiK3CloudClient.ReturnOperationWebModel.RealRequestBody;
Console.WriteLine("Тело запроса для выполнения операции:");
Console.WriteLine(RealRequestBody);
Console.WriteLine("Результат выполнения операции:");
Console.WriteLine(resultJson);
Console.ReadKey();

Примеры запросов и ответов: Пример запроса и ответа

2. Аутентификация с использованием сторонней авторизации:

(необходимо настроить конфигурационный файл: YiKdWebCfg/appsettings.xml)

/// third-party authorization authentication
string Formid = "SEC_User";
string Json = @"{""IsUserModelInit"":""true"",""Number"":""Administrator"",""IsSortBySeq"":""false""}";
YiK3CloudClient yiK3CloudClient = new YiKdWebClient.YiK3CloudClient();
yiK3CloudClient.LoginType = LoginType.LoginByAppSecret;
var resultJson = yiK3CloudClient.View(Formid, Json);
![Изображение запроса](%E8%AF%B7%E6%B1%82.png)
```Эту информацию можно использовать для отладки с помощью инструментов для отладки API, таких как Postman, что делает процесс более удобным и быстрым. Также можно использовать другие языки программирования для выполнения запросов, принцип работы будет таким же.

## 3. Старый метод аутентификации по имени пользователя и паролю: (не требуется настройка appsettings.xml)

```csharp
/// Старый метод аутентификации по имени пользователя и паролю
string Formid = "SEC_User";
string Json = @"{""IsUserModelInit"":""true"",""Number"":""Administrator"",""IsSortBySeq"":""false""}";
YiK3CloudClient yiK3CloudClient = new YiKdWebClient.YiK3CloudClient();
yiK3CloudClient.LoginType = LoginType.ValidateLogin;
yiK3CloudClient.validateLoginSettingsModel = new ValidateLoginSettingsModel() { Url = @"http://127.0.0.1/K3Cloud/", DbId = "629bd5285d655d", UserName = "demo", Password = "123456", lcid = 2052 };
var resultJson = yiK3CloudClient.View(Formid, Json);

4. Интеграция аутентификации с использованием ключевого файла: (не требуется настройка appsettings.xml)

string Formid = "SEC_User";
string Json = @"{""IsUserModelInit"":""true"",""Number"":""Administrator"",""IsSortBySeq"":""false""}";
YiK3CloudClient yiK3CloudClient = new YiKdWebClient.YiK3CloudClient();
yiK3CloudClient.LoginType = LoginType.LoginBySimplePassport;
string cnfFilePath = Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "YiKdWebCfg", "API тест.cnf");
yiK3CloudClient.LoginBySimplePassportModel = new LoginBySimplePassportModel() { Url = @"http://127.0.0.1/K3Cloud/", CnfFilePath = cnfFilePath };
var resultJson = yiK3CloudClient.View(Formid, Json);

5. Аутентификация с использованием подписи заголовка API: (требуется настройка файла конфигурации: YiKdWebCfg/appsettings.xml)~~~

string Formid = "SEC_User"; string Json = @"{""IsUserModelInit"":""true"",""Number"":""Администратор"",""IsSortBySeq"":""false""}"; YiK3CloudClient yiK3CloudClient = new YiKdWebClient.YiK3CloudClient(); yiK3CloudClient.LoginType = LoginType.LoginByApiSignHeaders; var resultJson = yiK3CloudClient.View(Formid, Json); Console.WriteLine(resultJson);

(Примечание: однако официальные представители уже удалили соответствующие посты и алгоритмы, поэтому использование этого метода требует осторожности)## Настройка отладки Postman, Apipost и т.д.:
Вот методы использования Postman, Apipost и т.д.:

//Строка с заголовками запроса, которую можно импортировать в Postman, Apipost string RequestHeadersString = yiK3CloudClient.RequestHeadersString; Console.WriteLine("Строка с заголовками запроса, которую можно импортировать в Postman, Apipost:"); Console.WriteLine(RequestHeadersString); //Адрес реального запроса string RequestUrl = yiK3CloudClient.ReturnOperationWebModel.RequestUrl; Console.WriteLine("Адрес реального запроса: "); Console.WriteLine(RequestUrl); //Тело реального запроса string RealRequestBody = yiK3CloudClient.ReturnOperationWebModel.RealRequestBody; Console.WriteLine("Тело реального запроса: "); Console.WriteLine(RealRequestBody); Console.WriteLine("Результат запроса: "); Console.WriteLine(resultJson);

Формат JSON, передаваемый методом, полностью соответствует формату, указанному в официальной документации Kingdee. Примечание: формат JSON в официальной документации не является окончательным форматом HTTP-запроса.
## Список функций
(Названия функций совпадают с названиями функций в официальной документации, и так далее), подробнее:| Название интерфейса | Описание интерфейса |
|------|------|
|Save|Сохранение|
|BatchSave|Пакетное сохранение|
|Audit|Аудит|
|Delete|Удаление|
|UnAudit|Отмена аудита|
|Submit|Подача|
|View|Просмотр|
|ExecuteBillQuery|Запрос данных о документах|
|Draft|Текущее сохранение|
|Allocate|Распределение|
|ExecuteOperation|Исполнение операции|
|FlexSave|Сохранение с переменной структурой|
|SendMsg|Отправка сообщения|
|Push|Пуш|
|GroupSave|Групповое сохранение|
|Disassembly|Распределение заказа|
|QueryBusinessInfo|Запрос информации о документах|
|QueryGroupInfo|Запрос информации о группах|
|WorkflowAudit|Аудит рабочего процесса|
|GroupDelete|Удаление группы|
|CancelAllocate|Отмена распределения|
|SwitchOrg|Переключение организации|
|CancelAssign|Отмена назначения|
|GetSysReportData|Получение данных отчета|
|AttachmentUpload|Загрузка вложения|
|AttachmentDownLoad|Загрузка вложения|## Как не использовать конфигурационный файл для настройки информации авторизации для третьих сторон
1. Когда у клиента есть несколько окружений SkyStar или одно окружение SkyStar содержит несколько центров данных, конфигурационный файл фреймворка позволяет настроить только одну информацию авторизации для входа третьих сторон. В этом случае, как следует интегрировать и интегрировать системы?2. В информации авторизации для третьих сторон настроены пользователи интеграции. При интеграции с WebAPI операционный пользователь будет пользователем интеграции, указанным в конфигурационной информации. Однако, когда для выполнения различных операций требуется смена пользователей, как следует настроить?Когда информация об окружении должна динамически изменяться, мы не можем использовать конфигурационный файл для инициализации фреймворка. Вместо этого следует использовать параметризированный подход для динамической инициализации экземпляров, передавая различные конфигурационные данные и пользователей интеграции, а затем вызывая соответствующие интерфейсы.

```csharp
string Formid = "SEC_User";
string Json = @"{""IsUserModelInit"":""true"",""Number"":""Администратор"",""IsSortBySeq"":""false""}";
AppSettingsModel appSettingsModel = new AppSettingsModel();
appSettingsModel.XKDApiAcctID = "набор счетов (то есть идентификатор центра данных)";
appSettingsModel.XKDApiUserName = "имя пользователя, авторизованного для входа в систему третьих сторон";
appSettingsModel.XKDApiAppID = "идентификатор приложения, авторизованного для входа в систему третьих сторон";
appSettingsModel.XKDApiAppSec = "ключ приложения, авторизованного для входа в систему третьих сторон";
appSettingsModel.XKDApiLCID = "языковая группа набора счетов, по умолчанию 2052";
appSettingsModel.XKDApiServerUrl = "адрес URL";
YiK3CloudClient yiK3CloudClient = new YiKdWebClient.YiK3CloudClient();
yiK3CloudClient.AppSettingsModel = appSettingsModel;
yiK3CloudClient.LoginType = LoginType.LoginByAppSecret;
string resultJson = yiK3CloudClient.View(Formid, Json);
```

# 4. Одноуровневая система входа (Single Sign-On)

## Пример вызова кода:
Этот метод (необходимо настроить конфигурационный файл: YiKdWebCfg/appsettings.xml) или параметры могут быть динамически указаны в sSOHelper.appSettingsModel

```csharp
string Formid = "SEC_User";
string Json = @"{""IsUserModelInit"":""true"",""Number"":""Администратор"",""IsSortBySeq"":""false""}";
AppSettingsModel appSettingsModel = new AppSettingsModel();
appSettingsModel.XKDApiAcctID = "набор счетов (то есть идентификатор центра данных)";
appSettingsModel.XKDApiUserName = "имя пользователя, авторизованного для входа в систему третьих сторон";
appSettingsModel.XKDApiAppID = "идентификатор приложения, авторизованного для входа в систему третьих сторон";
appSettingsModel.XKDApiAppSec = "ключ приложения, авторизованного для входа в систему третьих сторон";
appSettingsModel.XKDApiLCID = "языковая группа набора счетов, по умолчанию 2052";
appSettingsModel.XKDApiServerUrl = "адрес URL";
YiK3CloudClient yiK3CloudClient = new YiKdWebClient.YiK3CloudClient();
yiK3CloudClient.AppSettingsModel = appSettingsModel;
yiK3CloudClient.LoginType = LoginType.LoginByAppSecret;
string resultJson = yiK3CloudClient.View(Formid, Json);
``````
 SSOHelper sSOHelper = new SSOHelper(){};
 /*Если указан конфигурационный файл, достаточно указать пользователя здесь, если не указан, то будет автоматически получен интегрированный пользователь из конфигурационного файла*/
 sSOHelper.GetSsoUrlsV4("Administrator");/*Single Sign-On V4*/
 //sSOHelper.GetSsoUrlsV3("Administrator");/*Single Sign-On V3*/
 //sSOHelper.GetSsoUrlsV2("Administrator");/*Single Sign-On V2*/
 //sSOHelper.GetSsoUrlsV1("Administrator");/*Single Sign-On V1*/
 /*****Вот данные, полученные в результате вызова метода Single Sign-On***********************************/
 //ID центра данных
 Console.WriteLine("ID центра данных: " + " " + sSOHelper.simplePassportLoginArg.dbid);
 //ID приложения
 Console.WriteLine("ID приложения: " + " " + sSOHelper.simplePassportLoginArg.appid);
 //Имя пользователя
 Console.WriteLine("Имя пользователя: " + " " + sSOHelper.simplePassportLoginArg.username);
 //Временная метка
 Console.WriteLine("Временная метка: " + " " + sSOHelper.timestamp);
 //Подпись
 Console.WriteLine("Подпись: " + " " + sSOHelper.simplePassportLoginArg.signeddata);
 //Запрос параметров (в формате JSON)
 Console.WriteLine("Запрос параметров (в формате JSON): " + " " + sSOHelper.argJosn);
 //Формат параметров (Base64)
 Console.WriteLine("Формат параметров (Base64): " + " " + sSOHelper.argJsonBase64);
 //Ссылка на вход Silverlight
 Console.WriteLine("Ссылка на вход Silverlight:");
 Console.WriteLine(sSOHelper.SSOLoginUrlObject.silverlightUrl);
 //Ссылка на вход HTML5
 Console.WriteLine("Ссылка на вход HTML5:");
 Console.WriteLine(sSOHelper.SSOLoginUrlObject.html5Url);
 //Ссылка на вход для клиента
 Console.WriteLine("Ссылка на вход для клиента:");
 Console.WriteLine(sSOHelper.SSOLoginUrlObject.wpfUrl);
 Console.ReadKey();
 ```
 ## Возвращаемый результат:
 ! [Входное изображение](SSOV4%E7%BB%93%E6%9E%9C.png) # 5.Другие специальные функции и их использование
## Пользовательские пути конфигурационных файлов
```
/*Укажите путь к конфигурационному файлу перед запуском*/
YiKdWebClient.CommonService.XmlConfigHelper.AppConfigPath = @"C:\Users\Administrator\Desktop\test\appsettings.xml";
string Formid = "SEC_User";
string Json = @"{""IsUserModelInit"":""true"",""Number"":""Administrator"",""IsSortBySeq"":""false""}";
YiK3CloudClient yiK3CloudClient = new YiKdWebClient.YiK3CloudClient();
yiK3CloudClient.LoginType = LoginType.LoginBySignSHA256;
string resultJson = yiK3CloudClient.View(Formid, Json);
```
## Пользовательские webapi
Формат сообщений и параметры запросов можно найти в официальной документации по следующему адресу:
<br>
https://vip.kingdee.com/article/97030089581136896?specialId=448928749460099072&productLineId=1&isKnowledge=2&lang=zh-CN```
YiK3CloudClient yiK3CloudClient = new YiKdWebClient.YiK3CloudClient();
string jsonString = @"{""parameters"": [""SELECT TOP 10 * FROM T_BD_MATERIAL_L""]}";
YiKdWebClient.Model.CustomServicesStubpath customServicesStubpath = new()
{
    ProjetNamespace = "GlobalServiceCustom.WebApi",/*dll的命名空间*/
    ProjetClassName = "DataServiceHandler",/*对应的类名*/
    ProjetClassMethod = "CommonRunnerService"/*对应的方法名*/
};
string resultJson = yiK3CloudClient.CustomBusinessServiceByParameters(jsonString, customServicesStubpath);
```/* The following information is the message and address that can be debugged using Postman */
Console.WriteLine("Real login URL: ");
Console.WriteLine(yiK3CloudClient.ReturnLoginWebModel.RequestUrl);
Console.WriteLine("Real login message: ");
Console.WriteLine(yiK3CloudClient.ReturnLoginWebModel.RealRequestBody);
// Real operation request URL
string RequestUrl = yiK3CloudClient.ReturnOperationWebModel.RequestUrl;
Console.WriteLine("Real operation request URL: ");
Console.WriteLine(RequestUrl);
// Real operation request message
string RealRequestBody = yiK3CloudClient.ReturnOperationWebModel.RealRequestBody;
Console.WriteLine("Real operation request message: ");
Console.WriteLine(RealRequestBody);
Console.WriteLine("Real operation request return result: ");
Console.WriteLine(resultJson);
Console.ReadKey();
```
## Example of the returned result:
![введите описание изображения здесь](%E8%87%AA%E5%AE%9A%E4%B9%89webapi%E7%BB%93%E6%9E%9C.png)
## File upload:
### Split file upload (returns the final result)

```
YiK3CloudClient yiK3CloudClient = new YiKdWebClient.YiK3CloudClient();

// Set login type
yiK3CloudClient.LoginType = LoginType.LoginBySimplePassport;

// Configure the path to the configuration file
string cnfFilePath = Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "YiKdWebCfg", "API测试.cnf");

// Set login data
yiK3CloudClient.LoginBySimplePassportModel = new LoginBySimplePassportModel()
{
    Url = @"http://127.0.0.1/K3Cloud/",
    CnfFilePath = cnfFilePath
};

// File path
string path = @"D:\test1.pdf";

// Create upload model
UploadModel uploadModelTemplate = new UploadModel();
uploadModelTemplate.data.FormId = "BD_Currency";
uploadModelTemplate.data.InterId = "143717";
uploadModelTemplate.data.BillNO = "Тестовый код";
```// Upload attachment
string resJson = AttachmentHelper.AttachmentUploadByFilePath(path, yiK3CloudClient, uploadModelTemplate, 1024 * 1024 * 2);

// Output result
Console.WriteLine(resJson);```


### Фрагментированная загрузка файла (получение полного процесса загрузки)

```
YiK3CloudClient yiK3CloudClient = new YiKdWebClient.YiK3CloudClient();

// Установка типа входа
yiK3CloudClient.LoginType = LoginType.LoginBySimplePassport;

// Настройка пути к конфигурационному файлу
string cnfFilePath = Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "YiKdWebCfg", "API тест.cnf");

// Установка входных данных
yiK3CloudClient.LoginBySimplePassportModel = new LoginBySimplePassportModel()
{
    Url = @"http://127.0.0.1/K3Cloud/",
    CnfFilePath = cnfFilePath
};

// Путь к файлу
string path = @"D:\test1.pdf";

// Создание модели загрузки
UploadModel uploadModelTemplate = new UploadModel();
uploadModelTemplate.data.FormId = "BD_Currency";
uploadModelTemplate.data.InterId = "143717";
uploadModelTemplate.data.BillNO = "Тестовый код";

// Определение обратного вызова для отслеживания прогресса загрузки
Action<FileChunk, YiK3CloudClient> progressAction = (fileChunk, yiK3CloudClient) =>
{
    Console.WriteLine("Обрабатывается " + (fileChunk.Chunkindex + 1) + " фрагмент");
    Console.WriteLine("Запрос: " + yiK3CloudClient.ReturnOperationWebModel.RealRequestBody);
    Console.WriteLine("Ответ: " + yiK3CloudClient.ReturnOperationWebModel.RealResponseBody);
    if (fileChunk.IsLast)
    {
        Console.WriteLine("Обработка всех фрагментов завершена");
    }
};

// Загрузка вложения
string resJson = AttachmentHelper.AttachmentUploadByFilePath(path, yiK3CloudClient, uploadModelTemplate, 1024 * 1024 * 2, progressAction);

// Вывод результата
Console.WriteLine(resJson);

```

### Функция помощи для фрагментированной загрузки вложения в формате base64
AttachmentUploadByFilePath функция заменена на AttachmentUploadByBase64

### Официальная структура сообщений и принцип работы
https://vip.kingdee.com/article/296577252589190400?productLineId=1&isKnowledge=2&lang=zh-CN
# Справка по совместимости
Текущие версии, поддерживающие компиляцию, следующие:
<br>
net9.0;net8.0;net7.0;net6.0;net5.0;net481;net48;net472;net471;net47;net462;netstandard2.1;netstandard2.0;

# Основные зависимости проекта
Написан на основе следующих встроенных библиотек, не включая сторонние плагины (следующие плагины не требуют дополнительного включения):
<br>
System.Net.Http;
<br>System.Text.Json;
<br>System.Security.Cryptography.Cng;

# Адрес проекта
https://gitee.com/lnsyzjw/yi-kd-web-client

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/lnsyzjw-yi-kd-web-client.git
git@api.gitlife.ru:oschina-mirror/lnsyzjw-yi-kd-web-client.git
oschina-mirror
lnsyzjw-yi-kd-web-client
lnsyzjw-yi-kd-web-client
master