master 1.0
yangbowen 1 year ago
commit 8b1b10caa3
  1. 15
      .gitignore
  2. 8
      .idea/.gitignore
  3. 14
      .idea/deployment.xml
  4. 8
      .idea/modules.xml
  5. 13
      .idea/php-sdk.iml
  6. 22
      .idea/php.xml
  7. 11
      .idea/phpunit.xml
  8. 23
      .openapi-generator-ignore
  9. 49
      .openapi-generator/FILES
  10. 1
      .openapi-generator/VERSION
  11. 1
      .openapi-generator/api-doc-php-sdk.sha256
  12. 29
      .php-cs-fixer.dist.php
  13. 8
      .travis.yml
  14. 174
      README.md
  15. 42
      composer.json
  16. 58
      docs/Api/AiApi.md
  17. 9
      docs/Model/ChatParam.md
  18. 9
      docs/Model/ChatResult.md
  19. 20
      docs/Model/ResponseOpenAPIChatResult.md
  20. 12
      docs/Model/SpeechResult.md
  21. 10
      docs/Model/StreamModule.md
  22. 11
      docs/Model/SynthesizerParam.md
  23. 57
      git_push.sh
  24. 476
      lib/Api/AiApi.php
  25. 330
      lib/ApiClient.php
  26. 119
      lib/ApiException.php
  27. 623
      lib/Configuration.php
  28. 245
      lib/HeaderSelector.php
  29. 413
      lib/Model/ChatParam.php
  30. 410
      lib/Model/ChatResult.php
  31. 111
      lib/Model/ModelInterface.php
  32. 784
      lib/Model/ResponseOpenAPIChatResult.php
  33. 512
      lib/Model/SpeechResult.php
  34. 444
      lib/Model/StreamModule.php
  35. 487
      lib/Model/SynthesizerParam.php
  36. 10
      lib/NotifyHandler.php
  37. 567
      lib/ObjectSerializer.php
  38. 103
      lib/StreamApiClient.php
  39. 29
      lib/StreamResponseHandler.php
  40. 18
      phpunit.xml.dist
  41. 85
      test/Api/AiApiTest.php
  42. 90
      test/Model/ChatParamTest.php
  43. 90
      test/Model/ChatResultTest.php
  44. 189
      test/Model/ResponseOpenAPIChatResultTest.php
  45. 117
      test/Model/SpeechResultTest.php
  46. 99
      test/Model/StreamModuleTest.php
  47. 108
      test/Model/SynthesizerParamTest.php

15
.gitignore vendored

@ -0,0 +1,15 @@
# ref: https://github.com/github/gitignore/blob/master/Composer.gitignore
composer.phar
/vendor/
# Commit your application's lock file https://getcomposer.org/doc/01-basic-usage.md#commit-your-composer-lock-file-to-version-control
# You may choose to ignore a library lock file http://getcomposer.org/doc/02-libraries.md#lock-file
# composer.lock
# php-cs-fixer cache
.php_cs.cache
.php-cs-fixer.cache
# PHPUnit cache
.phpunit.result.cache

8
.idea/.gitignore vendored

@ -0,0 +1,8 @@
# Default ignored files
/shelf/
/workspace.xml
# Editor-based HTTP Client requests
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="PublishConfigData" remoteFilesAllowedToDisappearOnAutoupload="false">
<serverData>
<paths name="docker">
<serverdata>
<mappings>
<mapping local="$PROJECT_DIR$" web="/" />
</mappings>
</serverdata>
</paths>
</serverData>
</component>
</project>

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/php-sdk.iml" filepath="$PROJECT_DIR$/.idea/php-sdk.iml" />
</modules>
</component>
</project>

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="WEB_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/lib" isTestSource="false" packagePrefix="OpenAPI\Client\" />
<sourceFolder url="file://$MODULE_DIR$/test" isTestSource="true" packagePrefix="OpenAPI\Client\Test\" />
<sourceFolder url="file://$MODULE_DIR$/test/Api" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/test/Model" isTestSource="true" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="MessDetectorOptionsConfiguration">
<option name="transferred" value="true" />
</component>
<component name="PHPCSFixerOptionsConfiguration">
<option name="transferred" value="true" />
</component>
<component name="PHPCodeSnifferOptionsConfiguration">
<option name="highlightLevel" value="WARNING" />
<option name="transferred" value="true" />
</component>
<component name="PhpProjectSharedConfiguration" php_language_level="8.0">
<option name="suggestChangeDefaultLanguageLevel" value="false" />
</component>
<component name="PhpStanOptionsConfiguration">
<option name="transferred" value="true" />
</component>
<component name="PsalmOptionsConfiguration">
<option name="transferred" value="true" />
</component>
</project>

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="PHPUnit">
<option name="directories">
<list>
<option value="$PROJECT_DIR$/test/Api" />
<option value="$PROJECT_DIR$/test/Model" />
</list>
</option>
</component>
</project>

@ -0,0 +1,23 @@
# OpenAPI Generator Ignore
# Generated by openapi-generator https://github.com/openapitools/openapi-generator
# Use this file to prevent files from being overwritten by the generator.
# The patterns follow closely to .gitignore or .dockerignore.
# As an example, the C# client generator defines ApiClient.cs.
# You can make changes and tell OpenAPI Generator to ignore just this file by uncommenting the following line:
#ApiClient.cs
# You can match any string of characters against a directory, file or extension with a single asterisk (*):
#foo/*/qux
# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux
# You can recursively match patterns against a directory, file or extension with a double asterisk (**):
#foo/**/qux
# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux
# You can also negate patterns with an exclamation (!).
# For example, you can ignore all files in a docs folder with the file extension .md:
#docs/*.md
# Then explicitly reverse the ignore rule for a single file:
#!docs/README.md

@ -0,0 +1,49 @@
.gitignore
.openapi-generator-ignore
.php-cs-fixer.dist.php
.travis.yml
README.md
README.md
composer.json
composer.json
docs/Api/AiApi.md
docs/Api/AiApi.md
docs/Model/ChatParam.md
docs/Model/ChatParam.md
docs/Model/ChatResult.md
docs/Model/ChatResult.md
docs/Model/ResponseOpenAPIChatResult.md
docs/Model/ResponseOpenAPIChatResult.md
docs/Model/SpeechResult.md
docs/Model/SpeechResult.md
docs/Model/StreamModule.md
docs/Model/StreamModule.md
docs/Model/SynthesizerParam.md
docs/Model/SynthesizerParam.md
git_push.sh
lib/ApiClient.php
lib/ApiException.php
lib/Api/AiApi.php
lib/Api/AiApi.php
lib/Configuration.php
lib/Configuration.php
lib/HeaderSelector.php
lib/Model/ChatParam.php
lib/Model/ChatResult.php
lib/Model/ModelInterface.php
lib/Model/ResponseOpenAPIChatResult.php
lib/Model/SpeechResult.php
lib/Model/StreamModule.php
lib/Model/SynthesizerParam.php
lib/NotifyHandler.php
lib/ObjectSerializer.php
lib/StreamApiClient.php
lib/StreamResponseHandler.php
phpunit.xml.dist
test/Api/AiApiTest.php
test/Model/ChatParamTest.php
test/Model/ChatResultTest.php
test/Model/ResponseOpenAPIChatResultTest.php
test/Model/SpeechResultTest.php
test/Model/StreamModuleTest.php
test/Model/SynthesizerParamTest.php

@ -0,0 +1 @@
08504b0248ce92ba6dce17da036909ea47284081432e1da812464ee138f82957

@ -0,0 +1,29 @@
<?php
/**
* @generated
* @link https://github.com/FriendsOfPHP/PHP-CS-Fixer/blob/HEAD/doc/config.rst
*/
$finder = PhpCsFixer\Finder::create()
->in(__DIR__)
->exclude('vendor')
->exclude('test')
->exclude('tests')
;
$config = new PhpCsFixer\Config();
return $config->setRules([
'@PSR12' => true,
'phpdoc_order' => true,
'array_syntax' => [ 'syntax' => 'short' ],
'strict_comparison' => true,
'strict_param' => true,
'no_trailing_whitespace' => false,
'no_trailing_whitespace_in_comment' => false,
'braces' => false,
'single_blank_line_at_eof' => false,
'blank_line_after_namespace' => false,
'no_leading_import_slash' => false,
])
->setFinder($finder)
;

@ -0,0 +1,8 @@
language: php
# Bionic environment has preinstalled PHP from 7.1 to 7.4
# https://docs.travis-ci.com/user/reference/bionic/#php-support
dist: bionic
php:
- 7.4
before_install: "composer install"
script: "vendor/bin/phpunit"

@ -0,0 +1,174 @@
# OpenAPIClient-php
碳丝路数据开放平台
更多信息,请访问[https://open.tsl3060.com/team](https://open.tsl3060.com/team).
## 安装与使用
### 要求
PHP 7.4 及更高版本。
还应该与 PHP 8.0 一起使用。
### Composer
要通过 [Composer](https:getcomposer.org) 安装绑定,请将以下内容添加到 `composer.json` 中:
```json
{
"repositories": [
{
"type": "vcs",
"url": "https://git.tsl3060.com/openapi/low-carbon-platform.git"
}
],
"require": {
"openapi/low-carbon-platform": "*@dev"
}
}
```
然后运行 `composer install`
### 手动安装
下载文件并包含 `autoload.php`:
```php
<?php
require_once('/path/to/OpenAPIClient-php/vendor/autoload.php');
```
## 入门
### 快速开始
初始化基础配置并调用api示例伪代码:
(调用api端点具体参照[**API端点文档**](README.md#api端点文档))
```php
function example()
{
// 基础配置
$config = new Configuration();
// 设置appId
$config->setAppid("your appId");
// 配置证书
$config->setPrivateKey(file_get_contents(__DIR__ . "your private key certs path"));
$config->setPublicKey(file_get_contents(__DIR__ . "your public key certs path"));
$config->setApiPublicKey(file_get_contents(__DIR__ . "your API public key certs path"));
// 访问服务路径 根据实际环境设置
$config->setHost("https://opendev.tsl3060.com");
// 调用端点api示例 (调用api端点具体参照API端点文档)
$api = new ExampleApi($config);
// 设置请求参数
$param = new ExampleParams();
$param->setValue("exampleValue");
// 发送请求
$result = $api->auth($param);
print_r($result);
}
```
### 流式调用API使用
```php
/**
* 语音转文字
* @throws ApiException
*/
public function speechToTextDemo()
{
// 获取完成基础配置的配置对象
$config = ...;
// 创建流式API调用客户端
$streamClient = new StreamApiClient($config);
// 获取二进制流数据(必须是16k采样率的音频二进制数据)
$binaryData = ...;
if ($binaryData) {
// 传入二进制流数据和StreamResponseHandler子类实例
$streamClient->speechToText($binaryData, new class() extends StreamResponseHandler {
// 必须重写对应处理器的方法,实时处理返回的文本
public function speechToTextHandle(SpeechResult $result): void
{
echo "result: "
// 文本内容
. $result->getText() . "-"
// 句子是否结束(每句结束前,之前的内容可能会被修正)
. ($result->getSentenceEnd() ? "true" : "false") . "-"
// 句子对应音频的开始时间
. $result->getBeginTime() . "-"
// 句子对应音频的结束时间(如果句子没有结束EndTime为null)
. $result->getEndTime() . "\n";
}
});
}
}
/**
* 语音合成
* @throws ApiException
*/
public function testTextToSpeech()
{
// 获取完成基础配置的配置对象
$config = ...;
// 创建流式API调用客户端
$streamClient = new StreamApiClient($config);
// 语音合成参数
$param = new SynthesizerParam();
// 需要转换的文本
$param->setText("你好,我的名字叫知楠。");
// 声音模型可选值参考地址:https://help.aliyun.com/zh/dashscope/developer-reference/model-list-old-version
$param->setModel("sambert-zhinan-v1");
// 可选值wav、mp3,默认mp3
// $param->setFormat("mp3");
// 传入语音合成参数和StreamResponseHandler子类实例
$streamClient->synthesizer($param, new class() extends StreamResponseHandler {
// 必须重写对应处理器的方法,实时处理返回的二进制流
public function synthesizerHandle(string $result): void
{
// 示例:将二进制流保存到文件
$filePath = '.../temp.mp3';
$file = fopen($filePath, 'ab');
if ($file === false) {
die('无法打开文件');
}
fwrite($file, $result);
fclose($file);
}
});
}
```
## API端点文档
Class | Method | HTTP request | Description
------------ | ------------- | ------------- | -------------
*AiApi* | [**chat**](docs/Api/AiApi.md#chat) | **POST** /v1/ai/chat | 元梦ai-对话
## 模型文档
- [ChatParam](docs/Model/ChatParam.md)
- [ChatResult](docs/Model/ChatResult.md)
- [ResponseOpenAPIChatResult](docs/Model/ResponseOpenAPIChatResult.md)
- [SpeechResult](docs/Model/SpeechResult.md)
- [StreamModule](docs/Model/StreamModule.md)
- [SynthesizerParam](docs/Model/SynthesizerParam.md)
## 测试
要运行测试,请使用:
```bash
composer install
vendor/bin/phpunit
```
## 关于
- API version: `0.4.8`
- Package version: `0.4.31`

@ -0,0 +1,42 @@
{
"name": "openapi/low-carbon-platform-php",
"version": "1.0",
"description": "碳丝路数据开放平台",
"keywords": [
"openapitools",
"openapi-generator",
"openapi",
"php",
"sdk",
"rest",
"api"
],
"homepage": "https://openapi-generator.tech",
"license": "unlicense",
"authors": [
{
"name": "OpenAPI",
"homepage": "https://openapi-generator.tech"
}
],
"require": {
"php": "^7.4 || ^8.0",
"ext-curl": "*",
"ext-json": "*",
"ext-mbstring": "*",
"guzzlehttp/guzzle": "^7.3",
"guzzlehttp/psr7": "^1.7 || ^2.0",
"ext-openssl": "*",
"amphp/websocket-client": "*"
},
"require-dev": {
"phpunit/phpunit": "^8.0 || ^9.0",
"friendsofphp/php-cs-fixer": "^3.5"
},
"autoload": {
"psr-4": { "OpenAPI\\Client\\" : "lib/" }
},
"autoload-dev": {
"psr-4": { "OpenAPI\\Client\\Test\\" : "test/" }
}
}

@ -0,0 +1,58 @@
# OpenAPI\Client\AiApi
| Method | HTTP request | Description |
| ------------- | ------------- | ------------- |
| [**chat()**](AiApi.md#chat) | **POST** /v1/ai/chat | 元梦ai-对话 |
## `chat()`
```php
chat($chat_param): \OpenAPI\Client\Model\ResponseOpenAPIChatResult
```
元梦ai-对话
元梦ai对话
### 示例
```php
<?php
require_once(__DIR__ . '/vendor/autoload.php');
$apiInstance = new OpenAPI\Client\Api\AiApi(
// If you want use custom http client, pass your client which implements `GuzzleHttp\ClientInterface`.
// This is optional, `GuzzleHttp\Client` will be used as default.
new GuzzleHttp\Client()
);
$chat_param = new \OpenAPI\Client\Model\ChatParam(); // \OpenAPI\Client\Model\ChatParam
try {
$result = $apiInstance->chat($chat_param);
print_r($result);
} catch (Exception $e) {
echo 'Exception when calling AiApi->chat: ', $e->getMessage(), PHP_EOL;
}
```
### 参数
| Name | Type | Description | Notes |
| ------------- | ------------- | ------------- | ------------- |
| **chat_param** | [**\OpenAPI\Client\Model\ChatParam**](../Model/ChatParam.md)| | [optional] |
### 返回类型
[**\OpenAPI\Client\Model\ResponseOpenAPIChatResult**](../Model/ResponseOpenAPIChatResult.md)
### HTTP请求头
- **Content-Type**: `application/json`
- **Accept**: `*/*`
[[回到顶部]](#) [[返回API列表]](../../README.md#api端点文档)
[[返回模型列表]](../../README.md#模型文档)
[[返回README]](../../README.md)

@ -0,0 +1,9 @@
# # ChatParam
## 属性
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**message** | **string** | message |
[[返回模型列表]](../../README.md#模型文档) [[返回API列表]](../../README.md#api端点文档) [[返回README]](../../README.md)

@ -0,0 +1,9 @@
# # ChatResult
## 属性
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**content** | **string** | AI回答内容 | [optional]
[[返回模型列表]](../../README.md#模型文档) [[返回API列表]](../../README.md#api端点文档) [[返回README]](../../README.md)

@ -0,0 +1,20 @@
# # ResponseOpenAPIChatResult
## 属性
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**time** | **string** | 该消息发生的时间 | [optional]
**openid** | **string** | | [optional]
**payload** | [**\OpenAPI\Client\Model\ChatResult**](ChatResult.md) | | [optional]
**sign** | **string** | | [optional]
**charset** | **string** | | [optional]
**description** | **string** | | [optional]
**response_id** | **string** | 消息的唯一ID | [optional]
**err_code** | **int** | 该消息的错误码 | [optional]
**err_msg** | **string** | 错误消息描述 | [optional]
**sub_err** | **int** | 子错误的具体的代号 | [optional]
**sub_msg** | **string** | 子错误对应的提示消息 | [optional]
**sign_type** | **string** | | [optional]
[[返回模型列表]](../../README.md#模型文档) [[返回API列表]](../../README.md#api端点文档) [[返回README]](../../README.md)

@ -0,0 +1,12 @@
# # SpeechResult
## 属性
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**text** | **string** | 语音识别的内容 | [optional]
**begin_time** | **int** | 开始时间 | [optional]
**end_time** | **int** | 结束时间 | [optional]
**sentence_end** | **bool** | 句子是否结尾 | [optional]
[[返回模型列表]](../../README.md#模型文档) [[返回API列表]](../../README.md#api端点文档) [[返回README]](../../README.md)

@ -0,0 +1,10 @@
# # StreamModule
## 属性
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**speech_to_text** | **string** | 语音转文字 | [optional]
**synthesis** | **string** | 语音合成 | [optional]
[[返回模型列表]](../../README.md#模型文档) [[返回API列表]](../../README.md#api端点文档) [[返回README]](../../README.md)

@ -0,0 +1,11 @@
# # SynthesizerParam
## 属性
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**text** | **string** | 需要转换为语音的文本 |
**model** | **string** | 使用的语音合成模型 |
**format** | **string** | 生成的音频格式 |
[[返回模型列表]](../../README.md#模型文档) [[返回API列表]](../../README.md#api端点文档) [[返回README]](../../README.md)

@ -0,0 +1,57 @@
#!/bin/sh
# ref: https://help.github.com/articles/adding-an-existing-project-to-github-using-the-command-line/
#
# Usage example: /bin/sh ./git_push.sh wing328 openapi-petstore-perl "minor update" "gitlab.com"
git_user_id=$1
git_repo_id=$2
release_note=$3
git_host=$4
if [ "$git_host" = "" ]; then
git_host="git.tsl3060.com"
echo "[INFO] No command line input provided. Set \$git_host to $git_host"
fi
if [ "$git_user_id" = "" ]; then
git_user_id="openapi"
echo "[INFO] No command line input provided. Set \$git_user_id to $git_user_id"
fi
if [ "$git_repo_id" = "" ]; then
git_repo_id="low-carbon-platform"
echo "[INFO] No command line input provided. Set \$git_repo_id to $git_repo_id"
fi
if [ "$release_note" = "" ]; then
release_note="Minor update"
echo "[INFO] No command line input provided. Set \$release_note to $release_note"
fi
# Initialize the local directory as a Git repository
git init
# Adds the files in the local repository and stages them for commit.
git add .
# Commits the tracked changes and prepares them to be pushed to a remote repository.
git commit -m "$release_note"
# Sets the new remote
git_remote=$(git remote)
if [ "$git_remote" = "" ]; then # git remote not defined
if [ "$GIT_TOKEN" = "" ]; then
echo "[INFO] \$GIT_TOKEN (environment variable) is not set. Using the git credential in your environment."
git remote add origin https://${git_host}/${git_user_id}/${git_repo_id}.git
else
git remote add origin https://${git_user_id}:"${GIT_TOKEN}"@${git_host}/${git_user_id}/${git_repo_id}.git
fi
fi
git pull origin master
# Pushes (Forces) the changes in the local repository up to the remote repository
echo "Git pushing to https://${git_host}/${git_user_id}/${git_repo_id}.git"
git push origin master 2>&1 | grep -v 'To https'

@ -0,0 +1,476 @@
<?php
/**
* AiApi
* PHP version 7.4
*
* @category Class
* @package OpenAPI\Client
* @author OpenAPI Generator team
* @link https://openapi-generator.tech
*/
/**
* 碳丝路数据开放平台API
*
* 碳丝路数据开放平台
*
* The version of the OpenAPI document: 0.4.8
* Generated by: https://openapi-generator.tech
* OpenAPI Generator version: 7.0.1
*/
/**
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
* https://openapi-generator.tech
* Do not edit the class manually.
*/
namespace OpenAPI\Client\Api;
use GuzzleHttp\Client;
use GuzzleHttp\ClientInterface;
use GuzzleHttp\Exception\ConnectException;
use GuzzleHttp\Exception\RequestException;
use GuzzleHttp\Psr7\MultipartStream;
use GuzzleHttp\Psr7\Request;
use GuzzleHttp\RequestOptions;
use OpenAPI\Client\ApiClient;
use OpenAPI\Client\ApiException;
use OpenAPI\Client\Configuration;
use OpenAPI\Client\HeaderSelector;
use OpenAPI\Client\ObjectSerializer;
/**
* AiApi Class Doc Comment
*
* @category Class
* @package OpenAPI\Client
* @author OpenAPI Generator team
* @link https://openapi-generator.tech
*/
class AiApi
{
/**
* @var ClientInterface
*/
protected $client;
/**
* @var Configuration
*/
protected $config;
/**
* @var HeaderSelector
*/
protected $headerSelector;
/**
* @var int Host index
*/
protected $hostIndex;
/**
* @var ApiClient api客户端
*/
protected $apiClient;
/** @var string[] $contentTypes **/
public const contentTypes = [
'chat' => [
'application/json',
],
];
/**
* @param ClientInterface $client
* @param Configuration $config
* @param HeaderSelector $selector
* @param int $hostIndex (Optional) host index to select the list of hosts if defined in the OpenAPI spec
*/
public function __construct(
Configuration $config = null,
ClientInterface $client = null,
HeaderSelector $selector = null,
$hostIndex = 0
) {
$this->client = $client ?: new Client();
$this->config = $config ?: new Configuration();
$this->headerSelector = $selector ?: new HeaderSelector();
$this->hostIndex = $hostIndex;
$this->apiClient = new ApiClient($config);
}
/**
* Set the host index
*
* @param int $hostIndex Host index (required)
*/
public function setHostIndex($hostIndex): void
{
$this->hostIndex = $hostIndex;
}
/**
* Get the host index
*
* @return int Host index
*/
public function getHostIndex()
{
return $this->hostIndex;
}
/**
* @return Configuration
*/
public function getConfig()
{
return $this->config;
}
/**
* Operation chat
*
* 元梦ai-对话
*
* @param \OpenAPI\Client\Model\ChatParam $chat_param chat_param (optional)
* @param string $contentType The value for the Content-Type header. Check self::contentTypes['chat'] to see the possible values for this operation
*
* @throws \OpenAPI\Client\ApiException on non-2xx response
* @throws \InvalidArgumentException
* @return \OpenAPI\Client\Model\ResponseOpenAPIChatResult
*/
public function chat($chat_param = null, string $contentType = self::contentTypes['chat'][0])
{
list($response) = $this->chatWithHttpInfo($chat_param, $contentType);
return $response;
}
/**
* Operation chatWithHttpInfo
*
* 元梦ai-对话
*
* @param \OpenAPI\Client\Model\ChatParam $chat_param (optional)
* @param string $contentType The value for the Content-Type header. Check self::contentTypes['chat'] to see the possible values for this operation
*
* @throws \OpenAPI\Client\ApiException on non-2xx response
* @throws \InvalidArgumentException
* @return array of \OpenAPI\Client\Model\ResponseOpenAPIChatResult, HTTP status code, HTTP response headers (array of strings)
*/
public function chatWithHttpInfo($chat_param = null, string $contentType = self::contentTypes['chat'][0])
{
$request = $this->chatRequest($chat_param, $contentType);
try {
$options = $this->createHttpClientOption();
try {
$response = $this->client->send($request, $options);
} catch (RequestException $e) {
throw new ApiException(
"[{$e->getCode()}] {$e->getMessage()}",
(int) $e->getCode(),
$e->getResponse() ? $e->getResponse()->getHeaders() : null,
$e->getResponse() ? (string) $e->getResponse()->getBody() : null
);
} catch (ConnectException $e) {
throw new ApiException(
"[{$e->getCode()}] {$e->getMessage()}",
(int) $e->getCode(),
null,
null
);
}
// 响应预处理
$data = json_decode($response->getBody(), true);
if (json_last_error() !== JSON_ERROR_NONE) {
throw new ApiException("JSON解码错误: " . json_last_error_msg());
}
// 验证签名
if (!$this->apiClient->verifySign($data)) {
throw new ApiException(
'Verification failed',
$response->getStatusCode(),
$response->getHeaders(),
$response->getBody()
);
}
$statusCode = $response->getStatusCode();
if ($statusCode < 200 || $statusCode > 299) {
throw new ApiException(
sprintf(
'[%d] Error connecting to the API (%s)',
$statusCode,
(string) $request->getUri()
),
$statusCode,
$response->getHeaders(),
(string) $response->getBody()
);
}
switch($statusCode) {
case 200:
if ('\OpenAPI\Client\Model\ResponseOpenAPIChatResult' === '\SplFileObject') {
$content = $response->getBody(); //stream goes to serializer
} else {
$content = (string) $response->getBody();
if ('\OpenAPI\Client\Model\ResponseOpenAPIChatResult' !== 'string') {
$content = json_decode($content);
}
}
return [
ObjectSerializer::deserialize($content, '\OpenAPI\Client\Model\ResponseOpenAPIChatResult', []),
$response->getStatusCode(),
$response->getHeaders()
];
}
$returnType = '\OpenAPI\Client\Model\ResponseOpenAPIChatResult';
if ($returnType === '\SplFileObject') {
$content = $response->getBody(); //stream goes to serializer
} else {
$content = (string) $response->getBody();
if ($returnType !== 'string') {
$content = json_decode($content);
}
}
return [
ObjectSerializer::deserialize($content, $returnType, []),
$response->getStatusCode(),
$response->getHeaders()
];
} catch (ApiException $e) {
switch ($e->getCode()) {
case 200:
$data = ObjectSerializer::deserialize(
$e->getResponseBody(),
'\OpenAPI\Client\Model\ResponseOpenAPIChatResult',
$e->getResponseHeaders()
);
$e->setResponseObject($data);
break;
}
throw $e;
}
}
/**
* Operation chatAsync
*
* 元梦ai-对话
*
* @param \OpenAPI\Client\Model\ChatParam $chat_param (optional)
* @param string $contentType The value for the Content-Type header. Check self::contentTypes['chat'] to see the possible values for this operation
*
* @throws \InvalidArgumentException
* @return \GuzzleHttp\Promise\PromiseInterface
*/
public function chatAsync($chat_param = null, string $contentType = self::contentTypes['chat'][0])
{
return $this->chatAsyncWithHttpInfo($chat_param, $contentType)
->then(
function ($response) {
return $response[0];
}
);
}
/**
* Operation chatAsyncWithHttpInfo
*
* 元梦ai-对话
*
* @param \OpenAPI\Client\Model\ChatParam $chat_param (optional)
* @param string $contentType The value for the Content-Type header. Check self::contentTypes['chat'] to see the possible values for this operation
*
* @throws \InvalidArgumentException
* @return \GuzzleHttp\Promise\PromiseInterface
*/
public function chatAsyncWithHttpInfo($chat_param = null, string $contentType = self::contentTypes['chat'][0])
{
$returnType = '\OpenAPI\Client\Model\ResponseOpenAPIChatResult';
$request = $this->chatRequest($chat_param, $contentType);
return $this->client
->sendAsync($request, $this->createHttpClientOption())
->then(
function ($response) use ($returnType) {
if ($returnType === '\SplFileObject') {
$content = $response->getBody(); //stream goes to serializer
} else {
$content = (string) $response->getBody();
if ($returnType !== 'string') {
$content = json_decode($content);
}
}
return [
ObjectSerializer::deserialize($content, $returnType, []),
$response->getStatusCode(),
$response->getHeaders()
];
},
function ($exception) {
$response = $exception->getResponse();
$statusCode = $response->getStatusCode();
throw new ApiException(
sprintf(
'[%d] Error connecting to the API (%s)',
$statusCode,
$exception->getRequest()->getUri()
),
$statusCode,
$response->getHeaders(),
(string) $response->getBody()
);
}
);
}
/**
* Create request for operation 'chat'
*
* @param \OpenAPI\Client\Model\ChatParam $chat_param (optional)
* @param string $contentType The value for the Content-Type header. Check self::contentTypes['chat'] to see the possible values for this operation
*
* @throws \InvalidArgumentException
* @return \GuzzleHttp\Psr7\Request
*/
public function chatRequest($chat_param = null, string $contentType = self::contentTypes['chat'][0])
{
$resourcePath = '/v1/ai/chat';
$formParams = [];
$queryParams = [];
$headerParams = [];
$httpBody = '';
$multipart = false;
$headers = $this->headerSelector->selectHeaders(
['*/*', ],
$contentType,
$multipart
);
// for model (json/xml)
if (isset($chat_param)) {
if (stripos($headers['Content-Type'], 'application/json') !== false) {
# if Content-Type contains "application/json", json_encode the body
$httpBody = \GuzzleHttp\Utils::jsonEncode(ObjectSerializer::sanitizeForSerialization($chat_param));
} else {
$httpBody = $chat_param;
}
} elseif (count($formParams) > 0) {
if ($multipart) {
$multipartContents = [];
foreach ($formParams as $formParamName => $formParamValue) {
$formParamValueItems = is_array($formParamValue) ? $formParamValue : [$formParamValue];
foreach ($formParamValueItems as $formParamValueItem) {
$multipartContents[] = [
'name' => $formParamName,
'contents' => $formParamValueItem
];
}
}
// for HTTP post (form)
$httpBody = new MultipartStream($multipartContents);
} elseif (stripos($headers['Content-Type'], 'application/json') !== false) {
# if Content-Type contains "application/json", json_encode the form parameters
$httpBody = \GuzzleHttp\Utils::jsonEncode($formParams);
} else {
// for HTTP post (form)
$httpBody = ObjectSerializer::buildQuery($formParams);
}
}
// 初始化额外的参数
$additionalParams = [
'payload' => json_decode($httpBody, true),
'path' => $resourcePath,
'charset' => $this->config->getCharset(),
'time' => date($this->config->getDataFormat(), time()),
'sign_type' => $this->config->getSignType(),
'access_token' => '',
'app_id' => $this->config->getAppid(),
'sign' => ''
];
$additionalParams['sign'] = $this->apiClient->requestSign($additionalParams);
// 根据Content-Type决定如何合并额外的参数
if (stripos($headers['Content-Type'], 'application/json') !== false) {
// 如果是application/json,将额外的参数合并到现有的JSON对象中
$existingParams = json_decode($httpBody, true);
if ($existingParams === null) {
$existingParams = [];
}
$mergedParams = array_merge($existingParams, $additionalParams);
$httpBody = json_encode($mergedParams, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
} else {
// 如果不是application/json,将额外的参数合并到现有的查询字符串中
$existingParams = [];
if ($httpBody != null) {
parse_str($httpBody, $existingParams);
}
$mergedParams = array_merge($existingParams, $additionalParams);
$httpBody = ObjectSerializer::buildQuery($mergedParams);
}
$defaultHeaders = [];
if ($this->config->getUserAgent()) {
$defaultHeaders['User-Agent'] = $this->config->getUserAgent();
}
$headers = array_merge(
$defaultHeaders,
$headerParams,
$headers
);
$operationHost = $this->config->getHost();
$query = ObjectSerializer::buildQuery($queryParams);
return new Request(
'POST',
$operationHost . $resourcePath . ($query ? "?{$query}" : ''),
$headers,
$httpBody
);
}
/**
* Create http client option
*
* @throws \RuntimeException on file opening failure
* @return array of http client options
*/
protected function createHttpClientOption()
{
$options = [];
if ($this->config->getDebug()) {
$options[RequestOptions::DEBUG] = fopen($this->config->getDebugFile(), 'a');
if (!$options[RequestOptions::DEBUG]) {
throw new \RuntimeException('Failed to open the debug file: ' . $this->config->getDebugFile());
}
}
return $options;
}
}

@ -0,0 +1,330 @@
<?php
namespace OpenAPI\Client;
use Exception;
use OpenAPI\Client\Model\AsyncNotifyRequest;
use OpenAPI\Client\Model\AsyncNotifyResponse;
class ApiClient
{
/**
* @var Configuration 基础配置
*/
private Configuration $config;
/**
* @var array 通知回调处理路由表
*/
private array $notifyRouter;
public function __construct(Configuration $config)
{
// 初始化配置
$this->config = $config;
// 初始化路由
}
/**
* 执行默认数据类型的通知方法
* @param string $raw 源数据
* @param NotifyHandler $handler 通知处理器
* @return string 处理结果
* @throws ApiException
*/
public function notifyRunDefault(string $raw, NotifyHandler $handler): string
{
return $this->notifyRun($raw, "application/json", "application/json", $handler);
}
/**
* 执行通知方法
* @param string $raw 源数据
* @param string $contentType 服务端发送的数据类型
* @param string $accept 服务端需要接收的数据类型
* @param NotifyHandler $handler 通知处理器
* @return string 处理结果
* @throws ApiException
*/
public function notifyRun(string $raw, string $contentType, string $accept, NotifyHandler $handler): string
{
if (empty(trim($raw))) {
throw new ApiException("内容为空");
}
// 解析请求数据
$notifyRequest = null;
if ($contentType === 'application/json') {
$content = json_decode($raw);
$notifyRequest = ObjectSerializer::deserialize($content, '\OpenAPI\Client\Model\AsyncNotifyRequest', []);
} elseif ($contentType === 'application/xml') {
// XML格式暂不支持
throw new ApiException("暂不支持的格式: " . $contentType);
} else {
throw new ApiException("不支持的数据格式: " . $contentType);
}
if ($notifyRequest instanceof AsyncNotifyRequest) {
// 检查签名类型
if ($notifyRequest->getSignType() !== 'RSA') {
throw new ApiException("不支持的签名类型: " . $notifyRequest->getSignType());
}
// 验证通知
if (!$this->verifyNotify($notifyRequest)) {
throw new ApiException("签名错误: " . json_encode($notifyRequest));
}
$resp = new AsyncNotifyResponse();
// 调用对应通知处理方法
$module = $notifyRequest->getModule();
// 检查路径是否在路由表中
if (array_key_exists($module, $this->notifyRouter)) {
// 调用对应的函数
$function = $this->notifyRouter[$module];
try {
$answer = $function($handler, $notifyRequest->getPayload());
$resp->setPayload($answer);
$resp->setResult("ok");
} catch (Exception $e) {
echo sprintf("调用通知回调处理方法失败:在 %s 的第 %d 行: [%d] %s", $e->getFile(), $e->getLine(), $e->getCode(), $e->getMessage());
$resp->setResult("fail");
}
$resp->setAnswerId($notifyRequest->getNotifyId());
$resp->setAppId($this->config->getAppid());
$resp->setTime(date($this->config->getDataFormat(), time()));
$resp->setSignType($this->config->getSignType());
$resp->setCharset($this->config->getCharset());
$resp->setSign($this->answerSign($resp));
//处理完成
if ($accept === "application/json") {
return json_encode($resp);
} else if ($accept === "application/xml") {
//返回XML格式
throw new ApiException("暂不支持的数据接收格式:" . $accept);
} else {
//未知的格式
throw new ApiException("未知的数据接收格式:" . $accept);
}
} else {
// 如果路由不存在,抛出异常或进行相应的错误处理
throw new ApiException("路由未定义: " . $module);
}
} else {
throw new ApiException("对象格式错误");
}
}
/**
* @throws ApiException
*/
function requestSign($params): string
{
// 获取payload和其他参数
$payload = $params['payload'];
$content = sprintf(
"%s&%s&%s&%s&%s&%s&%s",
$params['path'],
$params['app_id'],
$params['access_token'],
$params['sign_type'],
$params['charset'],
$params['time'],
$this->object2LinkStr($payload)
);
// 计算SHA-256摘要
$bytesContent = mb_convert_encoding($content, $params['charset']);
$digestData = hash('sha256', $bytesContent, true);
// 加载私钥
$privateKeyContent = $this->config->getPrivateKey();
$privateKey = openssl_pkey_get_private($privateKeyContent);
if ($privateKey === false) {
while ($errMsg = openssl_error_string()) {
error_log($errMsg);
}
throw new ApiException('Invalid private key');
}
// 使用SHA256withRSA签名
$signature = '';
$result = openssl_sign($digestData, $signature, $privateKey, OPENSSL_ALGO_SHA256);
if ($result === false) {
throw new ApiException('Failed to sign data');
}
// 检查PHP版本,只有在PHP 7.x版本中才释放私钥资源
if (PHP_VERSION_ID < 80000) {
openssl_pkey_free($privateKey);
}
// 返回十六进制编码的签名
return bin2hex($signature);
}
/**
* @throws ApiException
*/
private function answerSign(AsyncNotifyResponse $resp): string
{
// 获取payload和其他参数
$content = sprintf(
"%s&%s&%s&%s&%s&%s&%s",
$resp->getAnswerId(),
$resp->getAppId(),
$resp->getResult(),
$resp->getSignType(),
$resp->getCharset(),
$resp->getTime(),
$this->object2LinkStr($resp->getPayload())
);
// 计算SHA-256摘要
$bytesContent = mb_convert_encoding($content, $resp->getCharset());
$digestData = hash('sha256', $bytesContent, true);
// 加载私钥
$privateKeyContent = $this->config->getPrivateKey();
$privateKey = openssl_pkey_get_private($privateKeyContent);
if ($privateKey === false) {
while ($errMsg = openssl_error_string()) {
error_log($errMsg);
}
throw new ApiException('Invalid private key');
}
// 使用SHA256withRSA签名
$signature = '';
$result = openssl_sign($digestData, $signature, $privateKey, OPENSSL_ALGO_SHA256);
if ($result === false) {
throw new ApiException('Failed to sign data');
}
// 检查PHP版本,只有在PHP 7.x版本中才释放私钥资源
if (PHP_VERSION_ID < 80000) {
openssl_pkey_free($privateKey);
}
// 返回十六进制编码的签名
return bin2hex($signature);
}
function object2LinkStr($o): string
{
if ($o === null) {
return "";
}
// 处理简单值类型
if (is_numeric($o) || is_string($o)) {
return strval($o);
}
if (is_bool($o)) {
return $o ? 'true' : 'false';
}
// 处理数组
if (is_array($o)) {
// 检查数组是否是关联数组
if (array_keys($o) !== range(0, count($o) - 1)) {
// 对关联数组按键进行字典排序
ksort($o);
$result = [];
foreach ($o as $key => $value) {
// 递归处理数组内部的每个元素
$result[] = $key . "=" . $this->object2LinkStr($value);
}
return implode("&", $result);
} else {
// 非关联数组,按元素顺序处理
return implode(",", array_map([$this, 'object2LinkStr'], $o));
}
}
// 其他类型数据处理
return strval($o);
}
/**
* @throws ApiException
*/
function verifySign($data): bool
{
// 检查签名类型
$signType = $data['sign_type'] ?? null;
if ($signType !== 'RSA') {
throw new ApiException("不支持的签名类型: {$signType}");
}
$waitStr = $this->object2LinkStr($data['payload']);
$formatStr = sprintf(
"%s&%s&%s&%s&%s&%s&%s&%s&%s&%s&%s",
$data['response_id'] ?? '',
$data['err_code'] ?? '',
$data['err_msg'] ?? '',
$data['sub_err'] ?? '',
$data['sub_msg'] ?? '',
$data['time'] ?? '',
$data['open_id'] ?? '',
$data['sign_type'] ?? '',
$data['charset'] ?? 'UTF-8',
$data['description'] ?? '',
$waitStr
);
$bodyCharset = $data['charset'] ?? 'UTF-8';
$bytesContent = mb_convert_encoding($formatStr, $bodyCharset);
$digestData = hash('sha256', $bytesContent, true);
$pubKey = openssl_pkey_get_public($this->config->getApiPublicKey());
if ($pubKey === false) {
while ($errMsg = openssl_error_string()) {
error_log($errMsg);
}
return false;
}
$signature = openssl_verify($digestData, hex2bin($data['sign']), $pubKey, OPENSSL_ALGO_SHA256);
// 检查PHP版本,只有在PHP 7.x版本中才释放公钥资源
if (PHP_VERSION_ID < 80000) {
openssl_free_key($pubKey);
}
return $signature === 1;
}
/**
* @throws ApiException
*/
function verifyNotify(AsyncNotifyRequest $request): bool
{
// 检查签名类型
$signType = $request->getSignType() ?? null;
if ($signType !== 'RSA') {
throw new ApiException("不支持的签名类型: {$signType}");
}
// 检查payload
$waitStr = $this->object2LinkStr($request->getPayload());
$formatStr = sprintf(
"%s&%s&%s&%s&%s&%s&%s&%s&%s&%s&%s&%s&%s",
$request->getNotifyId() ?? '',
$request->getSourceId() ?? '',
$request->getAppId() ?? '',
$request->getErrCode() ?? '',
$request->getErrMsg() ?? '',
$request->getSubErr() ?? '',
$request->getSubMsg() ?? '',
$request->getTime() ?? '',
$request->getOpenId() ?? '',
$request->getSignType() ?? '',
$request->getCharset() ?? 'UTF-8',
$request->getDescription() ?? '',
$waitStr
);
$bodyCharset = $request->getCharset() ?? 'UTF-8';
$bytesContent = mb_convert_encoding($formatStr, $bodyCharset);
$digestData = hash('sha256', $bytesContent, true);
$pubKey = openssl_pkey_get_public($this->config->getApiPublicKey());
if ($pubKey === false) {
while ($errMsg = openssl_error_string()) {
error_log($errMsg);
}
return false;
}
$signature = openssl_verify($digestData, hex2bin($request->getSign()), $pubKey, OPENSSL_ALGO_SHA256);
// 检查PHP版本,只有在PHP 7.x版本中才释放公钥资源
if (PHP_VERSION_ID < 80000) {
openssl_free_key($pubKey);
}
return $signature === 1;
}
}

@ -0,0 +1,119 @@
<?php
/**
* ApiException
* PHP version 7.4
*
* @category Class
* @package OpenAPI\Client
* @author OpenAPI Generator team
* @link https://openapi-generator.tech
*/
/**
* 碳丝路数据开放平台API
*
* 碳丝路数据开放平台
*
* The version of the OpenAPI document: 0.4.8
* Generated by: https://openapi-generator.tech
* OpenAPI Generator version: 7.0.1
*/
/**
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
* https://openapi-generator.tech
* Do not edit the class manually.
*/
namespace OpenAPI\Client;
use \Exception;
/**
* ApiException Class Doc Comment
*
* @category Class
* @package OpenAPI\Client
* @author OpenAPI Generator team
* @link https://openapi-generator.tech
*/
class ApiException extends Exception
{
/**
* The HTTP body of the server response either as Json or string.
*
* @var \stdClass|string|null
*/
protected $responseBody;
/**
* The HTTP header of the server response.
*
* @var string[]|null
*/
protected $responseHeaders;
/**
* The deserialized response object
*
* @var \stdClass|string|null
*/
protected $responseObject;
/**
* Constructor
*
* @param string $message Error message
* @param int $code HTTP status code
* @param string[]|null $responseHeaders HTTP response header
* @param \stdClass|string|null $responseBody HTTP decoded body of the server response either as \stdClass or string
*/
public function __construct($message = "", $code = 0, $responseHeaders = [], $responseBody = null)
{
parent::__construct($message, $code);
$this->responseHeaders = $responseHeaders;
$this->responseBody = $responseBody;
}
/**
* Gets the HTTP response header
*
* @return string[]|null HTTP response header
*/
public function getResponseHeaders()
{
return $this->responseHeaders;
}
/**
* Gets the HTTP body of the server response either as Json or string
*
* @return \stdClass|string|null HTTP body of the server response either as \stdClass or string
*/
public function getResponseBody()
{
return $this->responseBody;
}
/**
* Sets the deserialized response object (during deserialization)
*
* @param mixed $obj Deserialized response object
*
* @return void
*/
public function setResponseObject($obj)
{
$this->responseObject = $obj;
}
/**
* Gets the deserialized response object (during deserialization)
*
* @return mixed the deserialized response object
*/
public function getResponseObject()
{
return $this->responseObject;
}
}

@ -0,0 +1,623 @@
<?php
/**
* Configuration
* PHP version 7.4
*
* @category Class
* @package OpenAPI\Client
* @author OpenAPI Generator team
* @link https://openapi-generator.tech
*/
/**
* 碳丝路数据开放平台API
*
* 碳丝路数据开放平台
*
* The version of the OpenAPI document: 0.4.8
* Generated by: https://openapi-generator.tech
* OpenAPI Generator version: 7.0.1
*/
/**
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
* https://openapi-generator.tech
* Do not edit the class manually.
*/
namespace OpenAPI\Client;
/**
* Configuration Class Doc Comment
* PHP version 7.4
*
* @category Class
* @package OpenAPI\Client
* @author OpenAPI Generator team
* @link https://openapi-generator.tech
*/
class Configuration
{
public const BOOLEAN_FORMAT_INT = 'int';
public const BOOLEAN_FORMAT_STRING = 'string';
/**
* @var Configuration
*/
private static $defaultConfiguration;
/**
* Associate array to store API key(s)
*
* @var string[]
*/
protected $apiKeys = [];
/**
* Associate array to store API prefix (e.g. Bearer)
*
* @var string[]
*/
protected $apiKeyPrefixes = [];
/**
* Access token for OAuth/Bearer authentication
*
* @var string
*/
protected $accessToken = '';
/**
* Boolean format for query string
*
* @var string
*/
protected $booleanFormatForQueryString = self::BOOLEAN_FORMAT_INT;
/**
* Username for HTTP basic authentication
*
* @var string
*/
protected $username = '';
/**
* Password for HTTP basic authentication
*
* @var string
*/
protected $password = '';
/**
* The host
*
* @var string
*/
protected $host = 'https://opendev.tsl3060.com';
/**
* User agent of the HTTP request, set to "OpenAPI-Generator/{version}/PHP" by default
*
* @var string
*/
protected $userAgent = 'OpenAPI-Generator/0.4.31/PHP';
/**
* Debug switch (default set to false)
*
* @var bool
*/
protected $debug = false;
/**
* Debug file location (log to STDOUT by default)
*
* @var string
*/
protected $debugFile = 'php://output';
/**
* Debug file location (log to STDOUT by default)
*
* @var string
*/
protected $tempFolderPath;
protected $privateKey = "";
protected $publicKey = "";
protected $apiPublicKey = "";
protected $appid = "";
protected $signType = "RSA";
protected $charset = "utf-8";
protected $dataFormat = "Y-m-d H:i:s";
protected $timeout = 25000;
public function getPrivateKey(): string
{
return $this->privateKey;
}
public function setPrivateKey(string $privateKey): void
{
$this->privateKey = $privateKey;
}
public function getPublicKey(): string
{
return $this->publicKey;
}
public function setPublicKey(string $publicKey): void
{
$this->publicKey = $publicKey;
}
public function getApiPublicKey(): string
{
return $this->apiPublicKey;
}
public function setApiPublicKey(string $apiPublicKey): void
{
$this->apiPublicKey = $apiPublicKey;
}
public function getAppid(): string
{
return $this->appid;
}
public function setAppid(string $appid): void
{
$this->appid = $appid;
}
public function getSignType(): string
{
return $this->signType;
}
public function setSignType(string $signType): void
{
$this->signType = $signType;
}
public function getCharset(): string
{
return $this->charset;
}
public function setCharset(string $charset): void
{
$this->charset = $charset;
}
public function getDataFormat(): string
{
return $this->dataFormat;
}
public function setDataFormat(string $dataFormat): void
{
$this->dataFormat = $dataFormat;
}
public function getTimeout(): int
{
return $this->timeout;
}
public function setTimeout(int $timeout): void
{
$this->timeout = $timeout;
}
/**
* Constructor
*/
public function __construct()
{
$this->tempFolderPath = sys_get_temp_dir();
}
/**
* Sets API key
*
* @param string $apiKeyIdentifier API key identifier (authentication scheme)
* @param string $key API key or token
*
* @return $this
*/
public function setApiKey($apiKeyIdentifier, $key)
{
$this->apiKeys[$apiKeyIdentifier] = $key;
return $this;
}
/**
* Gets API key
*
* @param string $apiKeyIdentifier API key identifier (authentication scheme)
*
* @return null|string API key or token
*/
public function getApiKey($apiKeyIdentifier)
{
return isset($this->apiKeys[$apiKeyIdentifier]) ? $this->apiKeys[$apiKeyIdentifier] : null;
}
/**
* Sets the prefix for API key (e.g. Bearer)
*
* @param string $apiKeyIdentifier API key identifier (authentication scheme)
* @param string $prefix API key prefix, e.g. Bearer
*
* @return $this
*/
public function setApiKeyPrefix($apiKeyIdentifier, $prefix)
{
$this->apiKeyPrefixes[$apiKeyIdentifier] = $prefix;
return $this;
}
/**
* Gets API key prefix
*
* @param string $apiKeyIdentifier API key identifier (authentication scheme)
*
* @return null|string
*/
public function getApiKeyPrefix($apiKeyIdentifier)
{
return isset($this->apiKeyPrefixes[$apiKeyIdentifier]) ? $this->apiKeyPrefixes[$apiKeyIdentifier] : null;
}
/**
* Sets the access token for OAuth
*
* @param string $accessToken Token for OAuth
*
* @return $this
*/
public function setAccessToken($accessToken)
{
$this->accessToken = $accessToken;
return $this;
}
/**
* Gets the access token for OAuth
*
* @return string Access token for OAuth
*/
public function getAccessToken()
{
return $this->accessToken;
}
/**
* Sets boolean format for query string.
*
* @param string $booleanFormatForQueryString Boolean format for query string
*
* @return $this
*/
public function setBooleanFormatForQueryString(string $booleanFormat)
{
$this->booleanFormatForQueryString = $booleanFormat;
return $this;
}
/**
* Gets boolean format for query string.
*
* @return string Boolean format for query string
*/
public function getBooleanFormatForQueryString(): string
{
return $this->booleanFormatForQueryString;
}
/**
* Sets the username for HTTP basic authentication
*
* @param string $username Username for HTTP basic authentication
*
* @return $this
*/
public function setUsername($username)
{
$this->username = $username;
return $this;
}
/**
* Gets the username for HTTP basic authentication
*
* @return string Username for HTTP basic authentication
*/
public function getUsername()
{
return $this->username;
}
/**
* Sets the password for HTTP basic authentication
*
* @param string $password Password for HTTP basic authentication
*
* @return $this
*/
public function setPassword($password)
{
$this->password = $password;
return $this;
}
/**
* Gets the password for HTTP basic authentication
*
* @return string Password for HTTP basic authentication
*/
public function getPassword()
{
return $this->password;
}
/**
* Sets the host
*
* @param string $host Host
*
* @return $this
*/
public function setHost($host)
{
$this->host = $host;
return $this;
}
/**
* Gets the host
*
* @return string Host
*/
public function getHost()
{
return $this->host;
}
/**
* Sets the user agent of the api client
*
* @param string $userAgent the user agent of the api client
*
* @throws \InvalidArgumentException
* @return $this
*/
public function setUserAgent($userAgent)
{
if (!is_string($userAgent)) {
throw new \InvalidArgumentException('User-agent must be a string.');
}
$this->userAgent = $userAgent;
return $this;
}
/**
* Gets the user agent of the api client
*
* @return string user agent
*/
public function getUserAgent()
{
return $this->userAgent;
}
/**
* Sets debug flag
*
* @param bool $debug Debug flag
*
* @return $this
*/
public function setDebug($debug)
{
$this->debug = $debug;
return $this;
}
/**
* Gets the debug flag
*
* @return bool
*/
public function getDebug()
{
return $this->debug;
}
/**
* Sets the debug file
*
* @param string $debugFile Debug file
*
* @return $this
*/
public function setDebugFile($debugFile)
{
$this->debugFile = $debugFile;
return $this;
}
/**
* Gets the debug file
*
* @return string
*/
public function getDebugFile()
{
return $this->debugFile;
}
/**
* Sets the temp folder path
*
* @param string $tempFolderPath Temp folder path
*
* @return $this
*/
public function setTempFolderPath($tempFolderPath)
{
$this->tempFolderPath = $tempFolderPath;
return $this;
}
/**
* Gets the temp folder path
*
* @return string Temp folder path
*/
public function getTempFolderPath()
{
return $this->tempFolderPath;
}
/**
* Gets the default configuration instance
*
* @return Configuration
*/
public static function getDefaultConfiguration()
{
if (self::$defaultConfiguration === null) {
self::$defaultConfiguration = new Configuration();
}
return self::$defaultConfiguration;
}
/**
* Sets the default configuration instance
*
* @param Configuration $config An instance of the Configuration Object
*
* @return void
*/
public static function setDefaultConfiguration(Configuration $config)
{
self::$defaultConfiguration = $config;
}
/**
* Gets the essential information for debugging
*
* @return string The report for debugging
*/
public static function toDebugReport()
{
$report = 'PHP SDK (OpenAPI\Client) Debug Report:' . PHP_EOL;
$report .= ' OS: ' . php_uname() . PHP_EOL;
$report .= ' PHP Version: ' . PHP_VERSION . PHP_EOL;
$report .= ' The version of the OpenAPI document: 0.4.8' . PHP_EOL;
$report .= ' SDK Package Version: 0.4.31' . PHP_EOL;
$report .= ' Temp Folder Path: ' . self::getDefaultConfiguration()->getTempFolderPath() . PHP_EOL;
return $report;
}
/**
* Get API key (with prefix if set)
*
* @param string $apiKeyIdentifier name of apikey
*
* @return null|string API key with the prefix
*/
public function getApiKeyWithPrefix($apiKeyIdentifier)
{
$prefix = $this->getApiKeyPrefix($apiKeyIdentifier);
$apiKey = $this->getApiKey($apiKeyIdentifier);
if ($apiKey === null) {
return null;
}
if ($prefix === null) {
$keyWithPrefix = $apiKey;
} else {
$keyWithPrefix = $prefix . ' ' . $apiKey;
}
return $keyWithPrefix;
}
/**
* Returns an array of host settings
*
* @return array an array of host settings
*/
public function getHostSettings()
{
return [
[
"url" => "https://opendev.tsl3060.com",
"description" => "沙箱服务",
]
];
}
/**
* Returns URL based on host settings, index and variables
*
* @param array $hostSettings array of host settings, generated from getHostSettings() or equivalent from the API clients
* @param int $hostIndex index of the host settings
* @param array|null $variables hash of variable and the corresponding value (optional)
* @return string URL based on host settings
*/
public static function getHostString(array $hostsSettings, $hostIndex, array $variables = null)
{
if (null === $variables) {
$variables = [];
}
// check array index out of bound
if ($hostIndex < 0 || $hostIndex >= count($hostsSettings)) {
throw new \InvalidArgumentException("Invalid index $hostIndex when selecting the host. Must be less than ".count($hostsSettings));
}
$host = $hostsSettings[$hostIndex];
$url = $host["url"];
// go through variable and assign a value
foreach ($host["variables"] ?? [] as $name => $variable) {
if (array_key_exists($name, $variables)) { // check to see if it's in the variables provided by the user
if (!isset($variable['enum_values']) || in_array($variables[$name], $variable["enum_values"], true)) { // check to see if the value is in the enum
$url = str_replace("{".$name."}", $variables[$name], $url);
} else {
throw new \InvalidArgumentException("The variable `$name` in the host URL has invalid value ".$variables[$name].". Must be ".join(',', $variable["enum_values"]).".");
}
} else {
// use default value
$url = str_replace("{".$name."}", $variable["default_value"], $url);
}
}
return $url;
}
/**
* Returns URL based on the index and variables
*
* @param int $index index of the host settings
* @param array|null $variables hash of variable and the corresponding value (optional)
* @return string URL based on host settings
*/
public function getHostFromSettings($index, $variables = null)
{
return self::getHostString($this->getHostSettings(), $index, $variables);
}
}

@ -0,0 +1,245 @@
<?php
/**
* HeaderSelector
* PHP version 7.4
*
* @category Class
* @package OpenAPI\Client
* @author OpenAPI Generator team
* @link https://openapi-generator.tech
*/
/**
* 碳丝路数据开放平台API
*
* 碳丝路数据开放平台
*
* The version of the OpenAPI document: 0.4.8
* Generated by: https://openapi-generator.tech
* OpenAPI Generator version: 7.0.1
*/
/**
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
* https://openapi-generator.tech
* Do not edit the class manually.
*/
namespace OpenAPI\Client;
/**
* HeaderSelector Class Doc Comment
*
* @category Class
* @package OpenAPI\Client
* @author OpenAPI Generator team
* @link https://openapi-generator.tech
*/
class HeaderSelector
{
/**
* @param string[] $accept
* @param string $contentType
* @param bool $isMultipart
* @return string[]
*/
public function selectHeaders(array $accept, string $contentType, bool $isMultipart): array
{
$headers = [];
$accept = $this->selectAcceptHeader($accept);
if ($accept !== null) {
$headers['Accept'] = $accept;
}
if (!$isMultipart) {
if($contentType === '') {
$contentType = 'application/json';
}
$headers['Content-Type'] = $contentType;
}
return $headers;
}
/**
* Return the header 'Accept' based on an array of Accept provided.
*
* @param string[] $accept Array of header
*
* @return null|string Accept (e.g. application/json)
*/
private function selectAcceptHeader(array $accept): ?string
{
# filter out empty entries
$accept = array_filter($accept);
if (count($accept) === 0) {
return null;
}
# If there's only one Accept header, just use it
if (count($accept) === 1) {
return reset($accept);
}
# If none of the available Accept headers is of type "json", then just use all them
$headersWithJson = preg_grep('~(?i)^(application/json|[^;/ \t]+/[^;/ \t]+[+]json)[ \t]*(;.*)?$~', $accept);
if (count($headersWithJson) === 0) {
return implode(',', $accept);
}
# If we got here, then we need add quality values (weight), as described in IETF RFC 9110, Items 12.4.2/12.5.1,
# to give the highest priority to json-like headers - recalculating the existing ones, if needed
return $this->getAcceptHeaderWithAdjustedWeight($accept, $headersWithJson);
}
/**
* Create an Accept header string from the given "Accept" headers array, recalculating all weights
*
* @param string[] $accept Array of Accept Headers
* @param string[] $headersWithJson Array of Accept Headers of type "json"
*
* @return string "Accept" Header (e.g. "application/json, text/html; q=0.9")
*/
private function getAcceptHeaderWithAdjustedWeight(array $accept, array $headersWithJson): string
{
$processedHeaders = [
'withApplicationJson' => [],
'withJson' => [],
'withoutJson' => [],
];
foreach ($accept as $header) {
$headerData = $this->getHeaderAndWeight($header);
if (stripos($headerData['header'], 'application/json') === 0) {
$processedHeaders['withApplicationJson'][] = $headerData;
} elseif (in_array($header, $headersWithJson, true)) {
$processedHeaders['withJson'][] = $headerData;
} else {
$processedHeaders['withoutJson'][] = $headerData;
}
}
$acceptHeaders = [];
$currentWeight = 1000;
$hasMoreThan28Headers = count($accept) > 28;
foreach($processedHeaders as $headers) {
if (count($headers) > 0) {
$acceptHeaders[] = $this->adjustWeight($headers, $currentWeight, $hasMoreThan28Headers);
}
}
$acceptHeaders = array_merge(...$acceptHeaders);
return implode(',', $acceptHeaders);
}
/**
* Given an Accept header, returns an associative array splitting the header and its weight
*
* @param string $header "Accept" Header
*
* @return array with the header and its weight
*/
private function getHeaderAndWeight(string $header): array
{
# matches headers with weight, splitting the header and the weight in $outputArray
if (preg_match('/(.*);\s*q=(1(?:\.0+)?|0\.\d+)$/', $header, $outputArray) === 1) {
$headerData = [
'header' => $outputArray[1],
'weight' => (int)($outputArray[2] * 1000),
];
} else {
$headerData = [
'header' => trim($header),
'weight' => 1000,
];
}
return $headerData;
}
/**
* @param array[] $headers
* @param float $currentWeight
* @param bool $hasMoreThan28Headers
* @return string[] array of adjusted "Accept" headers
*/
private function adjustWeight(array $headers, float &$currentWeight, bool $hasMoreThan28Headers): array
{
usort($headers, function (array $a, array $b) {
return $b['weight'] - $a['weight'];
});
$acceptHeaders = [];
foreach ($headers as $index => $header) {
if($index > 0 && $headers[$index - 1]['weight'] > $header['weight'])
{
$currentWeight = $this->getNextWeight($currentWeight, $hasMoreThan28Headers);
}
$weight = $currentWeight;
$acceptHeaders[] = $this->buildAcceptHeader($header['header'], $weight);
}
$currentWeight = $this->getNextWeight($currentWeight, $hasMoreThan28Headers);
return $acceptHeaders;
}
/**
* @param string $header
* @param int $weight
* @return string
*/
private function buildAcceptHeader(string $header, int $weight): string
{
if($weight === 1000) {
return $header;
}
return trim($header, '; ') . ';q=' . rtrim(sprintf('%0.3f', $weight / 1000), '0');
}
/**
* Calculate the next weight, based on the current one.
*
* If there are less than 28 "Accept" headers, the weights will be decreased by 1 on its highest significant digit, using the
* following formula:
*
* next weight = current weight - 10 ^ (floor(log(current weight - 1)))
*
* ( current weight minus ( 10 raised to the power of ( floor of (log to the base 10 of ( current weight minus 1 ) ) ) ) )
*
* Starting from 1000, this generates the following series:
*
* 1000, 900, 800, 700, 600, 500, 400, 300, 200, 100, 90, 80, 70, 60, 50, 40, 30, 20, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1
*
* The resulting quality codes are closer to the average "normal" usage of them (like "q=0.9", "q=0.8" and so on), but it only works
* if there is a maximum of 28 "Accept" headers. If we have more than that (which is extremely unlikely), then we fall back to a 1-by-1
* decrement rule, which will result in quality codes like "q=0.999", "q=0.998" etc.
*
* @param int $currentWeight varying from 1 to 1000 (will be divided by 1000 to build the quality value)
* @param bool $hasMoreThan28Headers
* @return int
*/
public function getNextWeight(int $currentWeight, bool $hasMoreThan28Headers): int
{
if ($currentWeight <= 1) {
return 1;
}
if ($hasMoreThan28Headers) {
return $currentWeight - 1;
}
return $currentWeight - 10 ** floor( log10($currentWeight - 1) );
}
}

@ -0,0 +1,413 @@
<?php
/**
* ChatParam
*
* PHP version 7.4
*
* @category Class
* @package OpenAPI\Client
* @author OpenAPI Generator team
* @link https://openapi-generator.tech
*/
/**
* 碳丝路数据开放平台API
*
* 碳丝路数据开放平台
*
* The version of the OpenAPI document: 0.4.8
* Generated by: https://openapi-generator.tech
* OpenAPI Generator version: 7.0.1
*/
/**
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
* https://openapi-generator.tech
* Do not edit the class manually.
*/
namespace OpenAPI\Client\Model;
use \ArrayAccess;
use \OpenAPI\Client\ObjectSerializer;
/**
* ChatParam Class Doc Comment
*
* @category Class
* @description 发送给AI的消息
* @package OpenAPI\Client
* @author OpenAPI Generator team
* @link https://openapi-generator.tech
* @implements \ArrayAccess<string, mixed>
*/
class ChatParam implements ModelInterface, ArrayAccess, \JsonSerializable
{
public const DISCRIMINATOR = null;
/**
* The original name of the model.
*
* @var string
*/
protected static $openAPIModelName = 'ChatParam';
/**
* Array of property to type mappings. Used for (de)serialization
*
* @var string[]
*/
protected static $openAPITypes = [
'message' => 'string'
];
/**
* Array of property to format mappings. Used for (de)serialization
*
* @var string[]
* @phpstan-var array<string, string|null>
* @psalm-var array<string, string|null>
*/
protected static $openAPIFormats = [
'message' => null
];
/**
* Array of nullable properties. Used for (de)serialization
*
* @var boolean[]
*/
protected static array $openAPINullables = [
'message' => false
];
/**
* If a nullable field gets set to null, insert it here
*
* @var boolean[]
*/
protected array $openAPINullablesSetToNull = [];
/**
* Array of property to type mappings. Used for (de)serialization
*
* @return array
*/
public static function openAPITypes()
{
return self::$openAPITypes;
}
/**
* Array of property to format mappings. Used for (de)serialization
*
* @return array
*/
public static function openAPIFormats()
{
return self::$openAPIFormats;
}
/**
* Array of nullable properties
*
* @return array
*/
protected static function openAPINullables(): array
{
return self::$openAPINullables;
}
/**
* Array of nullable field names deliberately set to null
*
* @return boolean[]
*/
private function getOpenAPINullablesSetToNull(): array
{
return $this->openAPINullablesSetToNull;
}
/**
* Setter - Array of nullable field names deliberately set to null
*
* @param boolean[] $openAPINullablesSetToNull
*/
private function setOpenAPINullablesSetToNull(array $openAPINullablesSetToNull): void
{
$this->openAPINullablesSetToNull = $openAPINullablesSetToNull;
}
/**
* Checks if a property is nullable
*
* @param string $property
* @return bool
*/
public static function isNullable(string $property): bool
{
return self::openAPINullables()[$property] ?? false;
}
/**
* Checks if a nullable property is set to null.
*
* @param string $property
* @return bool
*/
public function isNullableSetToNull(string $property): bool
{
return in_array($property, $this->getOpenAPINullablesSetToNull(), true);
}
/**
* Array of attributes where the key is the local name,
* and the value is the original name
*
* @var string[]
*/
protected static $attributeMap = [
'message' => 'message'
];
/**
* Array of attributes to setter functions (for deserialization of responses)
*
* @var string[]
*/
protected static $setters = [
'message' => 'setMessage'
];
/**
* Array of attributes to getter functions (for serialization of requests)
*
* @var string[]
*/
protected static $getters = [
'message' => 'getMessage'
];
/**
* Array of attributes where the key is the local name,
* and the value is the original name
*
* @return array
*/
public static function attributeMap()
{
return self::$attributeMap;
}
/**
* Array of attributes to setter functions (for deserialization of responses)
*
* @return array
*/
public static function setters()
{
return self::$setters;
}
/**
* Array of attributes to getter functions (for serialization of requests)
*
* @return array
*/
public static function getters()
{
return self::$getters;
}
/**
* The original name of the model.
*
* @return string
*/
public function getModelName()
{
return self::$openAPIModelName;
}
/**
* Associative array for storing property values
*
* @var mixed[]
*/
protected $container = [];
/**
* Constructor
*
* @param mixed[] $data Associated array of property values
* initializing the model
*/
public function __construct(array $data = null)
{
$this->setIfExists('message', $data ?? [], null);
}
/**
* Sets $this->container[$variableName] to the given data or to the given default Value; if $variableName
* is nullable and its value is set to null in the $fields array, then mark it as "set to null" in the
* $this->openAPINullablesSetToNull array
*
* @param string $variableName
* @param array $fields
* @param mixed $defaultValue
*/
private function setIfExists(string $variableName, array $fields, $defaultValue): void
{
if (self::isNullable($variableName) && array_key_exists($variableName, $fields) && is_null($fields[$variableName])) {
$this->openAPINullablesSetToNull[] = $variableName;
}
$this->container[$variableName] = $fields[$variableName] ?? $defaultValue;
}
/**
* Show all the invalid properties with reasons.
*
* @return array invalid properties with reasons
*/
public function listInvalidProperties()
{
$invalidProperties = [];
if ($this->container['message'] === null) {
$invalidProperties[] = "'message' can't be null";
}
return $invalidProperties;
}
/**
* Validate all the properties in the model
* return true if all passed
*
* @return bool True if all properties are valid
*/
public function valid()
{
return count($this->listInvalidProperties()) === 0;
}
/**
* Gets message
*
* @return string
*/
public function getMessage()
{
return $this->container['message'];
}
/**
* Sets message
*
* @param string $message message
*
* @return self
*/
public function setMessage($message)
{
if (is_null($message)) {
throw new \InvalidArgumentException('non-nullable message cannot be null');
}
$this->container['message'] = $message;
return $this;
}
/**
* Returns true if offset exists. False otherwise.
*
* @param integer $offset Offset
*
* @return boolean
*/
public function offsetExists($offset): bool
{
return isset($this->container[$offset]);
}
/**
* Gets offset.
*
* @param integer $offset Offset
*
* @return mixed|null
*/
#[\ReturnTypeWillChange]
public function offsetGet($offset)
{
return $this->container[$offset] ?? null;
}
/**
* Sets value based on offset.
*
* @param int|null $offset Offset
* @param mixed $value Value to be set
*
* @return void
*/
public function offsetSet($offset, $value): void
{
if (is_null($offset)) {
$this->container[] = $value;
} else {
$this->container[$offset] = $value;
}
}
/**
* Unsets offset.
*
* @param integer $offset Offset
*
* @return void
*/
public function offsetUnset($offset): void
{
unset($this->container[$offset]);
}
/**
* Serializes the object to a value that can be serialized natively by json_encode().
* @link https://www.php.net/manual/en/jsonserializable.jsonserialize.php
*
* @return mixed Returns data which can be serialized by json_encode(), which is a value
* of any type other than a resource.
*/
#[\ReturnTypeWillChange]
public function jsonSerialize()
{
return ObjectSerializer::sanitizeForSerialization($this);
}
/**
* Gets the string presentation of the object
*
* @return string
*/
public function __toString()
{
return json_encode(
ObjectSerializer::sanitizeForSerialization($this),
JSON_PRETTY_PRINT
);
}
/**
* Gets a header-safe presentation of the object
*
* @return string
*/
public function toHeaderValue()
{
return json_encode(ObjectSerializer::sanitizeForSerialization($this));
}
}

@ -0,0 +1,410 @@
<?php
/**
* ChatResult
*
* PHP version 7.4
*
* @category Class
* @package OpenAPI\Client
* @author OpenAPI Generator team
* @link https://openapi-generator.tech
*/
/**
* 碳丝路数据开放平台API
*
* 碳丝路数据开放平台
*
* The version of the OpenAPI document: 0.4.8
* Generated by: https://openapi-generator.tech
* OpenAPI Generator version: 7.0.1
*/
/**
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
* https://openapi-generator.tech
* Do not edit the class manually.
*/
namespace OpenAPI\Client\Model;
use \ArrayAccess;
use \OpenAPI\Client\ObjectSerializer;
/**
* ChatResult Class Doc Comment
*
* @category Class
* @description AI回答的消息
* @package OpenAPI\Client
* @author OpenAPI Generator team
* @link https://openapi-generator.tech
* @implements \ArrayAccess<string, mixed>
*/
class ChatResult implements ModelInterface, ArrayAccess, \JsonSerializable
{
public const DISCRIMINATOR = null;
/**
* The original name of the model.
*
* @var string
*/
protected static $openAPIModelName = 'ChatResult';
/**
* Array of property to type mappings. Used for (de)serialization
*
* @var string[]
*/
protected static $openAPITypes = [
'content' => 'string'
];
/**
* Array of property to format mappings. Used for (de)serialization
*
* @var string[]
* @phpstan-var array<string, string|null>
* @psalm-var array<string, string|null>
*/
protected static $openAPIFormats = [
'content' => null
];
/**
* Array of nullable properties. Used for (de)serialization
*
* @var boolean[]
*/
protected static array $openAPINullables = [
'content' => false
];
/**
* If a nullable field gets set to null, insert it here
*
* @var boolean[]
*/
protected array $openAPINullablesSetToNull = [];
/**
* Array of property to type mappings. Used for (de)serialization
*
* @return array
*/
public static function openAPITypes()
{
return self::$openAPITypes;
}
/**
* Array of property to format mappings. Used for (de)serialization
*
* @return array
*/
public static function openAPIFormats()
{
return self::$openAPIFormats;
}
/**
* Array of nullable properties
*
* @return array
*/
protected static function openAPINullables(): array
{
return self::$openAPINullables;
}
/**
* Array of nullable field names deliberately set to null
*
* @return boolean[]
*/
private function getOpenAPINullablesSetToNull(): array
{
return $this->openAPINullablesSetToNull;
}
/**
* Setter - Array of nullable field names deliberately set to null
*
* @param boolean[] $openAPINullablesSetToNull
*/
private function setOpenAPINullablesSetToNull(array $openAPINullablesSetToNull): void
{
$this->openAPINullablesSetToNull = $openAPINullablesSetToNull;
}
/**
* Checks if a property is nullable
*
* @param string $property
* @return bool
*/
public static function isNullable(string $property): bool
{
return self::openAPINullables()[$property] ?? false;
}
/**
* Checks if a nullable property is set to null.
*
* @param string $property
* @return bool
*/
public function isNullableSetToNull(string $property): bool
{
return in_array($property, $this->getOpenAPINullablesSetToNull(), true);
}
/**
* Array of attributes where the key is the local name,
* and the value is the original name
*
* @var string[]
*/
protected static $attributeMap = [
'content' => 'content'
];
/**
* Array of attributes to setter functions (for deserialization of responses)
*
* @var string[]
*/
protected static $setters = [
'content' => 'setContent'
];
/**
* Array of attributes to getter functions (for serialization of requests)
*
* @var string[]
*/
protected static $getters = [
'content' => 'getContent'
];
/**
* Array of attributes where the key is the local name,
* and the value is the original name
*
* @return array
*/
public static function attributeMap()
{
return self::$attributeMap;
}
/**
* Array of attributes to setter functions (for deserialization of responses)
*
* @return array
*/
public static function setters()
{
return self::$setters;
}
/**
* Array of attributes to getter functions (for serialization of requests)
*
* @return array
*/
public static function getters()
{
return self::$getters;
}
/**
* The original name of the model.
*
* @return string
*/
public function getModelName()
{
return self::$openAPIModelName;
}
/**
* Associative array for storing property values
*
* @var mixed[]
*/
protected $container = [];
/**
* Constructor
*
* @param mixed[] $data Associated array of property values
* initializing the model
*/
public function __construct(array $data = null)
{
$this->setIfExists('content', $data ?? [], null);
}
/**
* Sets $this->container[$variableName] to the given data or to the given default Value; if $variableName
* is nullable and its value is set to null in the $fields array, then mark it as "set to null" in the
* $this->openAPINullablesSetToNull array
*
* @param string $variableName
* @param array $fields
* @param mixed $defaultValue
*/
private function setIfExists(string $variableName, array $fields, $defaultValue): void
{
if (self::isNullable($variableName) && array_key_exists($variableName, $fields) && is_null($fields[$variableName])) {
$this->openAPINullablesSetToNull[] = $variableName;
}
$this->container[$variableName] = $fields[$variableName] ?? $defaultValue;
}
/**
* Show all the invalid properties with reasons.
*
* @return array invalid properties with reasons
*/
public function listInvalidProperties()
{
$invalidProperties = [];
return $invalidProperties;
}
/**
* Validate all the properties in the model
* return true if all passed
*
* @return bool True if all properties are valid
*/
public function valid()
{
return count($this->listInvalidProperties()) === 0;
}
/**
* Gets content
*
* @return string|null
*/
public function getContent()
{
return $this->container['content'];
}
/**
* Sets content
*
* @param string|null $content AI回答内容
*
* @return self
*/
public function setContent($content)
{
if (is_null($content)) {
throw new \InvalidArgumentException('non-nullable content cannot be null');
}
$this->container['content'] = $content;
return $this;
}
/**
* Returns true if offset exists. False otherwise.
*
* @param integer $offset Offset
*
* @return boolean
*/
public function offsetExists($offset): bool
{
return isset($this->container[$offset]);
}
/**
* Gets offset.
*
* @param integer $offset Offset
*
* @return mixed|null
*/
#[\ReturnTypeWillChange]
public function offsetGet($offset)
{
return $this->container[$offset] ?? null;
}
/**
* Sets value based on offset.
*
* @param int|null $offset Offset
* @param mixed $value Value to be set
*
* @return void
*/
public function offsetSet($offset, $value): void
{
if (is_null($offset)) {
$this->container[] = $value;
} else {
$this->container[$offset] = $value;
}
}
/**
* Unsets offset.
*
* @param integer $offset Offset
*
* @return void
*/
public function offsetUnset($offset): void
{
unset($this->container[$offset]);
}
/**
* Serializes the object to a value that can be serialized natively by json_encode().
* @link https://www.php.net/manual/en/jsonserializable.jsonserialize.php
*
* @return mixed Returns data which can be serialized by json_encode(), which is a value
* of any type other than a resource.
*/
#[\ReturnTypeWillChange]
public function jsonSerialize()
{
return ObjectSerializer::sanitizeForSerialization($this);
}
/**
* Gets the string presentation of the object
*
* @return string
*/
public function __toString()
{
return json_encode(
ObjectSerializer::sanitizeForSerialization($this),
JSON_PRETTY_PRINT
);
}
/**
* Gets a header-safe presentation of the object
*
* @return string
*/
public function toHeaderValue()
{
return json_encode(ObjectSerializer::sanitizeForSerialization($this));
}
}

@ -0,0 +1,111 @@
<?php
/**
* ModelInterface
*
* PHP version 7.4
*
* @category Class
* @package OpenAPI\Client\Model
* @author OpenAPI Generator team
* @link https://openapi-generator.tech
*/
/**
* 碳丝路数据开放平台API
*
* 碳丝路数据开放平台
*
* The version of the OpenAPI document: 0.4.8
* Generated by: https://openapi-generator.tech
* OpenAPI Generator version: 7.0.1
*/
/**
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
* https://openapi-generator.tech
* Do not edit the class manually.
*/
namespace OpenAPI\Client\Model;
/**
* Interface abstracting model access.
*
* @package OpenAPI\Client\Model
* @author OpenAPI Generator team
*/
interface ModelInterface
{
/**
* The original name of the model.
*
* @return string
*/
public function getModelName();
/**
* Array of property to type mappings. Used for (de)serialization
*
* @return array
*/
public static function openAPITypes();
/**
* Array of property to format mappings. Used for (de)serialization
*
* @return array
*/
public static function openAPIFormats();
/**
* Array of attributes where the key is the local name, and the value is the original name
*
* @return array
*/
public static function attributeMap();
/**
* Array of attributes to setter functions (for deserialization of responses)
*
* @return array
*/
public static function setters();
/**
* Array of attributes to getter functions (for serialization of requests)
*
* @return array
*/
public static function getters();
/**
* Show all the invalid properties with reasons.
*
* @return array
*/
public function listInvalidProperties();
/**
* Validate all the properties in the model
* return true if all passed
*
* @return bool
*/
public function valid();
/**
* Checks if a property is nullable
*
* @param string $property
* @return bool
*/
public static function isNullable(string $property): bool;
/**
* Checks if a nullable property is set to null.
*
* @param string $property
* @return bool
*/
public function isNullableSetToNull(string $property): bool;
}

@ -0,0 +1,784 @@
<?php
/**
* ResponseOpenAPIChatResult
*
* PHP version 7.4
*
* @category Class
* @package OpenAPI\Client
* @author OpenAPI Generator team
* @link https://openapi-generator.tech
*/
/**
* 碳丝路数据开放平台API
*
* 碳丝路数据开放平台
*
* The version of the OpenAPI document: 0.4.8
* Generated by: https://openapi-generator.tech
* OpenAPI Generator version: 7.0.1
*/
/**
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
* https://openapi-generator.tech
* Do not edit the class manually.
*/
namespace OpenAPI\Client\Model;
use \ArrayAccess;
use \OpenAPI\Client\ObjectSerializer;
/**
* ResponseOpenAPIChatResult Class Doc Comment
*
* @category Class
* @description 消息载体对象
* @package OpenAPI\Client
* @author OpenAPI Generator team
* @link https://openapi-generator.tech
* @implements \ArrayAccess<string, mixed>
*/
class ResponseOpenAPIChatResult implements ModelInterface, ArrayAccess, \JsonSerializable
{
public const DISCRIMINATOR = null;
/**
* The original name of the model.
*
* @var string
*/
protected static $openAPIModelName = 'ResponseOpenAPIChatResult';
/**
* Array of property to type mappings. Used for (de)serialization
*
* @var string[]
*/
protected static $openAPITypes = [
'time' => 'string',
'openid' => 'string',
'payload' => '\OpenAPI\Client\Model\ChatResult',
'sign' => 'string',
'charset' => 'string',
'description' => 'string',
'response_id' => 'string',
'err_code' => 'int',
'err_msg' => 'string',
'sub_err' => 'int',
'sub_msg' => 'string',
'sign_type' => 'string'
];
/**
* Array of property to format mappings. Used for (de)serialization
*
* @var string[]
* @phpstan-var array<string, string|null>
* @psalm-var array<string, string|null>
*/
protected static $openAPIFormats = [
'time' => null,
'openid' => null,
'payload' => null,
'sign' => null,
'charset' => null,
'description' => null,
'response_id' => null,
'err_code' => 'int32',
'err_msg' => null,
'sub_err' => 'int32',
'sub_msg' => null,
'sign_type' => null
];
/**
* Array of nullable properties. Used for (de)serialization
*
* @var boolean[]
*/
protected static array $openAPINullables = [
'time' => false,
'openid' => false,
'payload' => false,
'sign' => false,
'charset' => false,
'description' => false,
'response_id' => false,
'err_code' => false,
'err_msg' => false,
'sub_err' => false,
'sub_msg' => false,
'sign_type' => false
];
/**
* If a nullable field gets set to null, insert it here
*
* @var boolean[]
*/
protected array $openAPINullablesSetToNull = [];
/**
* Array of property to type mappings. Used for (de)serialization
*
* @return array
*/
public static function openAPITypes()
{
return self::$openAPITypes;
}
/**
* Array of property to format mappings. Used for (de)serialization
*
* @return array
*/
public static function openAPIFormats()
{
return self::$openAPIFormats;
}
/**
* Array of nullable properties
*
* @return array
*/
protected static function openAPINullables(): array
{
return self::$openAPINullables;
}
/**
* Array of nullable field names deliberately set to null
*
* @return boolean[]
*/
private function getOpenAPINullablesSetToNull(): array
{
return $this->openAPINullablesSetToNull;
}
/**
* Setter - Array of nullable field names deliberately set to null
*
* @param boolean[] $openAPINullablesSetToNull
*/
private function setOpenAPINullablesSetToNull(array $openAPINullablesSetToNull): void
{
$this->openAPINullablesSetToNull = $openAPINullablesSetToNull;
}
/**
* Checks if a property is nullable
*
* @param string $property
* @return bool
*/
public static function isNullable(string $property): bool
{
return self::openAPINullables()[$property] ?? false;
}
/**
* Checks if a nullable property is set to null.
*
* @param string $property
* @return bool
*/
public function isNullableSetToNull(string $property): bool
{
return in_array($property, $this->getOpenAPINullablesSetToNull(), true);
}
/**
* Array of attributes where the key is the local name,
* and the value is the original name
*
* @var string[]
*/
protected static $attributeMap = [
'time' => 'time',
'openid' => 'openid',
'payload' => 'payload',
'sign' => 'sign',
'charset' => 'charset',
'description' => 'description',
'response_id' => 'response_id',
'err_code' => 'err_code',
'err_msg' => 'err_msg',
'sub_err' => 'sub_err',
'sub_msg' => 'sub_msg',
'sign_type' => 'sign_type'
];
/**
* Array of attributes to setter functions (for deserialization of responses)
*
* @var string[]
*/
protected static $setters = [
'time' => 'setTime',
'openid' => 'setOpenid',
'payload' => 'setPayload',
'sign' => 'setSign',
'charset' => 'setCharset',
'description' => 'setDescription',
'response_id' => 'setResponseId',
'err_code' => 'setErrCode',
'err_msg' => 'setErrMsg',
'sub_err' => 'setSubErr',
'sub_msg' => 'setSubMsg',
'sign_type' => 'setSignType'
];
/**
* Array of attributes to getter functions (for serialization of requests)
*
* @var string[]
*/
protected static $getters = [
'time' => 'getTime',
'openid' => 'getOpenid',
'payload' => 'getPayload',
'sign' => 'getSign',
'charset' => 'getCharset',
'description' => 'getDescription',
'response_id' => 'getResponseId',
'err_code' => 'getErrCode',
'err_msg' => 'getErrMsg',
'sub_err' => 'getSubErr',
'sub_msg' => 'getSubMsg',
'sign_type' => 'getSignType'
];
/**
* Array of attributes where the key is the local name,
* and the value is the original name
*
* @return array
*/
public static function attributeMap()
{
return self::$attributeMap;
}
/**
* Array of attributes to setter functions (for deserialization of responses)
*
* @return array
*/
public static function setters()
{
return self::$setters;
}
/**
* Array of attributes to getter functions (for serialization of requests)
*
* @return array
*/
public static function getters()
{
return self::$getters;
}
/**
* The original name of the model.
*
* @return string
*/
public function getModelName()
{
return self::$openAPIModelName;
}
/**
* Associative array for storing property values
*
* @var mixed[]
*/
protected $container = [];
/**
* Constructor
*
* @param mixed[] $data Associated array of property values
* initializing the model
*/
public function __construct(array $data = null)
{
$this->setIfExists('time', $data ?? [], null);
$this->setIfExists('openid', $data ?? [], null);
$this->setIfExists('payload', $data ?? [], null);
$this->setIfExists('sign', $data ?? [], null);
$this->setIfExists('charset', $data ?? [], null);
$this->setIfExists('description', $data ?? [], null);
$this->setIfExists('response_id', $data ?? [], null);
$this->setIfExists('err_code', $data ?? [], null);
$this->setIfExists('err_msg', $data ?? [], null);
$this->setIfExists('sub_err', $data ?? [], null);
$this->setIfExists('sub_msg', $data ?? [], null);
$this->setIfExists('sign_type', $data ?? [], null);
}
/**
* Sets $this->container[$variableName] to the given data or to the given default Value; if $variableName
* is nullable and its value is set to null in the $fields array, then mark it as "set to null" in the
* $this->openAPINullablesSetToNull array
*
* @param string $variableName
* @param array $fields
* @param mixed $defaultValue
*/
private function setIfExists(string $variableName, array $fields, $defaultValue): void
{
if (self::isNullable($variableName) && array_key_exists($variableName, $fields) && is_null($fields[$variableName])) {
$this->openAPINullablesSetToNull[] = $variableName;
}
$this->container[$variableName] = $fields[$variableName] ?? $defaultValue;
}
/**
* Show all the invalid properties with reasons.
*
* @return array invalid properties with reasons
*/
public function listInvalidProperties()
{
$invalidProperties = [];
return $invalidProperties;
}
/**
* Validate all the properties in the model
* return true if all passed
*
* @return bool True if all properties are valid
*/
public function valid()
{
return count($this->listInvalidProperties()) === 0;
}
/**
* Gets time
*
* @return string|null
*/
public function getTime()
{
return $this->container['time'];
}
/**
* Sets time
*
* @param string|null $time 该消息发生的时间
*
* @return self
*/
public function setTime($time)
{
if (is_null($time)) {
throw new \InvalidArgumentException('non-nullable time cannot be null');
}
$this->container['time'] = $time;
return $this;
}
/**
* Gets openid
*
* @return string|null
*/
public function getOpenid()
{
return $this->container['openid'];
}
/**
* Sets openid
*
* @param string|null $openid openid
*
* @return self
*/
public function setOpenid($openid)
{
if (is_null($openid)) {
throw new \InvalidArgumentException('non-nullable openid cannot be null');
}
$this->container['openid'] = $openid;
return $this;
}
/**
* Gets payload
*
* @return \OpenAPI\Client\Model\ChatResult|null
*/
public function getPayload()
{
return $this->container['payload'];
}
/**
* Sets payload
*
* @param \OpenAPI\Client\Model\ChatResult|null $payload payload
*
* @return self
*/
public function setPayload($payload)
{
if (is_null($payload)) {
throw new \InvalidArgumentException('non-nullable payload cannot be null');
}
$this->container['payload'] = $payload;
return $this;
}
/**
* Gets sign
*
* @return string|null
*/
public function getSign()
{
return $this->container['sign'];
}
/**
* Sets sign
*
* @param string|null $sign sign
*
* @return self
*/
public function setSign($sign)
{
if (is_null($sign)) {
throw new \InvalidArgumentException('non-nullable sign cannot be null');
}
$this->container['sign'] = $sign;
return $this;
}
/**
* Gets charset
*
* @return string|null
*/
public function getCharset()
{
return $this->container['charset'];
}
/**
* Sets charset
*
* @param string|null $charset charset
*
* @return self
*/
public function setCharset($charset)
{
if (is_null($charset)) {
throw new \InvalidArgumentException('non-nullable charset cannot be null');
}
$this->container['charset'] = $charset;
return $this;
}
/**
* Gets description
*
* @return string|null
*/
public function getDescription()
{
return $this->container['description'];
}
/**
* Sets description
*
* @param string|null $description description
*
* @return self
*/
public function setDescription($description)
{
if (is_null($description)) {
throw new \InvalidArgumentException('non-nullable description cannot be null');
}
$this->container['description'] = $description;
return $this;
}
/**
* Gets response_id
*
* @return string|null
*/
public function getResponseId()
{
return $this->container['response_id'];
}
/**
* Sets response_id
*
* @param string|null $response_id 消息的唯一ID
*
* @return self
*/
public function setResponseId($response_id)
{
if (is_null($response_id)) {
throw new \InvalidArgumentException('non-nullable response_id cannot be null');
}
$this->container['response_id'] = $response_id;
return $this;
}
/**
* Gets err_code
*
* @return int|null
*/
public function getErrCode()
{
return $this->container['err_code'];
}
/**
* Sets err_code
*
* @param int|null $err_code 该消息的错误码
*
* @return self
*/
public function setErrCode($err_code)
{
if (is_null($err_code)) {
throw new \InvalidArgumentException('non-nullable err_code cannot be null');
}
$this->container['err_code'] = $err_code;
return $this;
}
/**
* Gets err_msg
*
* @return string|null
*/
public function getErrMsg()
{
return $this->container['err_msg'];
}
/**
* Sets err_msg
*
* @param string|null $err_msg 错误消息描述
*
* @return self
*/
public function setErrMsg($err_msg)
{
if (is_null($err_msg)) {
throw new \InvalidArgumentException('non-nullable err_msg cannot be null');
}
$this->container['err_msg'] = $err_msg;
return $this;
}
/**
* Gets sub_err
*
* @return int|null
*/
public function getSubErr()
{
return $this->container['sub_err'];
}
/**
* Sets sub_err
*
* @param int|null $sub_err 子错误的具体的代号
*
* @return self
*/
public function setSubErr($sub_err)
{
if (is_null($sub_err)) {
throw new \InvalidArgumentException('non-nullable sub_err cannot be null');
}
$this->container['sub_err'] = $sub_err;
return $this;
}
/**
* Gets sub_msg
*
* @return string|null
*/
public function getSubMsg()
{
return $this->container['sub_msg'];
}
/**
* Sets sub_msg
*
* @param string|null $sub_msg 子错误对应的提示消息
*
* @return self
*/
public function setSubMsg($sub_msg)
{
if (is_null($sub_msg)) {
throw new \InvalidArgumentException('non-nullable sub_msg cannot be null');
}
$this->container['sub_msg'] = $sub_msg;
return $this;
}
/**
* Gets sign_type
*
* @return string|null
*/
public function getSignType()
{
return $this->container['sign_type'];
}
/**
* Sets sign_type
*
* @param string|null $sign_type sign_type
*
* @return self
*/
public function setSignType($sign_type)
{
if (is_null($sign_type)) {
throw new \InvalidArgumentException('non-nullable sign_type cannot be null');
}
$this->container['sign_type'] = $sign_type;
return $this;
}
/**
* Returns true if offset exists. False otherwise.
*
* @param integer $offset Offset
*
* @return boolean
*/
public function offsetExists($offset): bool
{
return isset($this->container[$offset]);
}
/**
* Gets offset.
*
* @param integer $offset Offset
*
* @return mixed|null
*/
#[\ReturnTypeWillChange]
public function offsetGet($offset)
{
return $this->container[$offset] ?? null;
}
/**
* Sets value based on offset.
*
* @param int|null $offset Offset
* @param mixed $value Value to be set
*
* @return void
*/
public function offsetSet($offset, $value): void
{
if (is_null($offset)) {
$this->container[] = $value;
} else {
$this->container[$offset] = $value;
}
}
/**
* Unsets offset.
*
* @param integer $offset Offset
*
* @return void
*/
public function offsetUnset($offset): void
{
unset($this->container[$offset]);
}
/**
* Serializes the object to a value that can be serialized natively by json_encode().
* @link https://www.php.net/manual/en/jsonserializable.jsonserialize.php
*
* @return mixed Returns data which can be serialized by json_encode(), which is a value
* of any type other than a resource.
*/
#[\ReturnTypeWillChange]
public function jsonSerialize()
{
return ObjectSerializer::sanitizeForSerialization($this);
}
/**
* Gets the string presentation of the object
*
* @return string
*/
public function __toString()
{
return json_encode(
ObjectSerializer::sanitizeForSerialization($this),
JSON_PRETTY_PRINT
);
}
/**
* Gets a header-safe presentation of the object
*
* @return string
*/
public function toHeaderValue()
{
return json_encode(ObjectSerializer::sanitizeForSerialization($this));
}
}

@ -0,0 +1,512 @@
<?php
/**
* SpeechResult
*
* PHP version 7.4
*
* @category Class
* @package OpenAPI\Client
* @author OpenAPI Generator team
* @link https://openapi-generator.tech
*/
/**
* 碳丝路数据开放平台API
*
* 碳丝路数据开放平台
*
* The version of the OpenAPI document: 0.4.8
* Generated by: https://openapi-generator.tech
* OpenAPI Generator version: 7.0.1
*/
/**
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
* https://openapi-generator.tech
* Do not edit the class manually.
*/
namespace OpenAPI\Client\Model;
use \ArrayAccess;
use \OpenAPI\Client\ObjectSerializer;
/**
* SpeechResult Class Doc Comment
*
* @category Class
* @description 语音识别后的内容
* @package OpenAPI\Client
* @author OpenAPI Generator team
* @link https://openapi-generator.tech
* @implements \ArrayAccess<string, mixed>
*/
class SpeechResult implements ModelInterface, ArrayAccess, \JsonSerializable
{
public const DISCRIMINATOR = null;
/**
* The original name of the model.
*
* @var string
*/
protected static $openAPIModelName = 'SpeechResult';
/**
* Array of property to type mappings. Used for (de)serialization
*
* @var string[]
*/
protected static $openAPITypes = [
'text' => 'string',
'begin_time' => 'int',
'end_time' => 'int',
'sentence_end' => 'bool'
];
/**
* Array of property to format mappings. Used for (de)serialization
*
* @var string[]
* @phpstan-var array<string, string|null>
* @psalm-var array<string, string|null>
*/
protected static $openAPIFormats = [
'text' => null,
'begin_time' => 'int64',
'end_time' => 'int64',
'sentence_end' => null
];
/**
* Array of nullable properties. Used for (de)serialization
*
* @var boolean[]
*/
protected static array $openAPINullables = [
'text' => false,
'begin_time' => false,
'end_time' => false,
'sentence_end' => false
];
/**
* If a nullable field gets set to null, insert it here
*
* @var boolean[]
*/
protected array $openAPINullablesSetToNull = [];
/**
* Array of property to type mappings. Used for (de)serialization
*
* @return array
*/
public static function openAPITypes()
{
return self::$openAPITypes;
}
/**
* Array of property to format mappings. Used for (de)serialization
*
* @return array
*/
public static function openAPIFormats()
{
return self::$openAPIFormats;
}
/**
* Array of nullable properties
*
* @return array
*/
protected static function openAPINullables(): array
{
return self::$openAPINullables;
}
/**
* Array of nullable field names deliberately set to null
*
* @return boolean[]
*/
private function getOpenAPINullablesSetToNull(): array
{
return $this->openAPINullablesSetToNull;
}
/**
* Setter - Array of nullable field names deliberately set to null
*
* @param boolean[] $openAPINullablesSetToNull
*/
private function setOpenAPINullablesSetToNull(array $openAPINullablesSetToNull): void
{
$this->openAPINullablesSetToNull = $openAPINullablesSetToNull;
}
/**
* Checks if a property is nullable
*
* @param string $property
* @return bool
*/
public static function isNullable(string $property): bool
{
return self::openAPINullables()[$property] ?? false;
}
/**
* Checks if a nullable property is set to null.
*
* @param string $property
* @return bool
*/
public function isNullableSetToNull(string $property): bool
{
return in_array($property, $this->getOpenAPINullablesSetToNull(), true);
}
/**
* Array of attributes where the key is the local name,
* and the value is the original name
*
* @var string[]
*/
protected static $attributeMap = [
'text' => 'text',
'begin_time' => 'beginTime',
'end_time' => 'endTime',
'sentence_end' => 'sentenceEnd'
];
/**
* Array of attributes to setter functions (for deserialization of responses)
*
* @var string[]
*/
protected static $setters = [
'text' => 'setText',
'begin_time' => 'setBeginTime',
'end_time' => 'setEndTime',
'sentence_end' => 'setSentenceEnd'
];
/**
* Array of attributes to getter functions (for serialization of requests)
*
* @var string[]
*/
protected static $getters = [
'text' => 'getText',
'begin_time' => 'getBeginTime',
'end_time' => 'getEndTime',
'sentence_end' => 'getSentenceEnd'
];
/**
* Array of attributes where the key is the local name,
* and the value is the original name
*
* @return array
*/
public static function attributeMap()
{
return self::$attributeMap;
}
/**
* Array of attributes to setter functions (for deserialization of responses)
*
* @return array
*/
public static function setters()
{
return self::$setters;
}
/**
* Array of attributes to getter functions (for serialization of requests)
*
* @return array
*/
public static function getters()
{
return self::$getters;
}
/**
* The original name of the model.
*
* @return string
*/
public function getModelName()
{
return self::$openAPIModelName;
}
/**
* Associative array for storing property values
*
* @var mixed[]
*/
protected $container = [];
/**
* Constructor
*
* @param mixed[] $data Associated array of property values
* initializing the model
*/
public function __construct(array $data = null)
{
$this->setIfExists('text', $data ?? [], null);
$this->setIfExists('begin_time', $data ?? [], null);
$this->setIfExists('end_time', $data ?? [], null);
$this->setIfExists('sentence_end', $data ?? [], null);
}
/**
* Sets $this->container[$variableName] to the given data or to the given default Value; if $variableName
* is nullable and its value is set to null in the $fields array, then mark it as "set to null" in the
* $this->openAPINullablesSetToNull array
*
* @param string $variableName
* @param array $fields
* @param mixed $defaultValue
*/
private function setIfExists(string $variableName, array $fields, $defaultValue): void
{
if (self::isNullable($variableName) && array_key_exists($variableName, $fields) && is_null($fields[$variableName])) {
$this->openAPINullablesSetToNull[] = $variableName;
}
$this->container[$variableName] = $fields[$variableName] ?? $defaultValue;
}
/**
* Show all the invalid properties with reasons.
*
* @return array invalid properties with reasons
*/
public function listInvalidProperties()
{
$invalidProperties = [];
return $invalidProperties;
}
/**
* Validate all the properties in the model
* return true if all passed
*
* @return bool True if all properties are valid
*/
public function valid()
{
return count($this->listInvalidProperties()) === 0;
}
/**
* Gets text
*
* @return string|null
*/
public function getText()
{
return $this->container['text'];
}
/**
* Sets text
*
* @param string|null $text 语音识别的内容
*
* @return self
*/
public function setText($text)
{
if (is_null($text)) {
throw new \InvalidArgumentException('non-nullable text cannot be null');
}
$this->container['text'] = $text;
return $this;
}
/**
* Gets begin_time
*
* @return int|null
*/
public function getBeginTime()
{
return $this->container['begin_time'];
}
/**
* Sets begin_time
*
* @param int|null $begin_time 开始时间
*
* @return self
*/
public function setBeginTime($begin_time)
{
if (is_null($begin_time)) {
throw new \InvalidArgumentException('non-nullable begin_time cannot be null');
}
$this->container['begin_time'] = $begin_time;
return $this;
}
/**
* Gets end_time
*
* @return int|null
*/
public function getEndTime()
{
return $this->container['end_time'];
}
/**
* Sets end_time
*
* @param int|null $end_time 结束时间
*
* @return self
*/
public function setEndTime($end_time)
{
if (is_null($end_time)) {
throw new \InvalidArgumentException('non-nullable end_time cannot be null');
}
$this->container['end_time'] = $end_time;
return $this;
}
/**
* Gets sentence_end
*
* @return bool|null
*/
public function getSentenceEnd()
{
return $this->container['sentence_end'];
}
/**
* Sets sentence_end
*
* @param bool|null $sentence_end 句子是否结尾
*
* @return self
*/
public function setSentenceEnd($sentence_end)
{
if (is_null($sentence_end)) {
throw new \InvalidArgumentException('non-nullable sentence_end cannot be null');
}
$this->container['sentence_end'] = $sentence_end;
return $this;
}
/**
* Returns true if offset exists. False otherwise.
*
* @param integer $offset Offset
*
* @return boolean
*/
public function offsetExists($offset): bool
{
return isset($this->container[$offset]);
}
/**
* Gets offset.
*
* @param integer $offset Offset
*
* @return mixed|null
*/
#[\ReturnTypeWillChange]
public function offsetGet($offset)
{
return $this->container[$offset] ?? null;
}
/**
* Sets value based on offset.
*
* @param int|null $offset Offset
* @param mixed $value Value to be set
*
* @return void
*/
public function offsetSet($offset, $value): void
{
if (is_null($offset)) {
$this->container[] = $value;
} else {
$this->container[$offset] = $value;
}
}
/**
* Unsets offset.
*
* @param integer $offset Offset
*
* @return void
*/
public function offsetUnset($offset): void
{
unset($this->container[$offset]);
}
/**
* Serializes the object to a value that can be serialized natively by json_encode().
* @link https://www.php.net/manual/en/jsonserializable.jsonserialize.php
*
* @return mixed Returns data which can be serialized by json_encode(), which is a value
* of any type other than a resource.
*/
#[\ReturnTypeWillChange]
public function jsonSerialize()
{
return ObjectSerializer::sanitizeForSerialization($this);
}
/**
* Gets the string presentation of the object
*
* @return string
*/
public function __toString()
{
return json_encode(
ObjectSerializer::sanitizeForSerialization($this),
JSON_PRETTY_PRINT
);
}
/**
* Gets a header-safe presentation of the object
*
* @return string
*/
public function toHeaderValue()
{
return json_encode(ObjectSerializer::sanitizeForSerialization($this));
}
}

@ -0,0 +1,444 @@
<?php
/**
* StreamModule
*
* PHP version 7.4
*
* @category Class
* @package OpenAPI\Client
* @author OpenAPI Generator team
* @link https://openapi-generator.tech
*/
/**
* 碳丝路数据开放平台API
*
* 碳丝路数据开放平台
*
* The version of the OpenAPI document: 0.4.8
* Generated by: https://openapi-generator.tech
* OpenAPI Generator version: 7.0.1
*/
/**
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
* https://openapi-generator.tech
* Do not edit the class manually.
*/
namespace OpenAPI\Client\Model;
use \ArrayAccess;
use \OpenAPI\Client\ObjectSerializer;
/**
* StreamModule Class Doc Comment
*
* @category Class
* @description 流式调用模块定义常量
* @package OpenAPI\Client
* @author OpenAPI Generator team
* @link https://openapi-generator.tech
* @implements \ArrayAccess<string, mixed>
*/
class StreamModule implements ModelInterface, ArrayAccess, \JsonSerializable
{
public const DISCRIMINATOR = null;
/**
* The original name of the model.
*
* @var string
*/
protected static $openAPIModelName = 'StreamModule';
/**
* Array of property to type mappings. Used for (de)serialization
*
* @var string[]
*/
protected static $openAPITypes = [
'speech_to_text' => 'string',
'synthesis' => 'string'
];
/**
* Array of property to format mappings. Used for (de)serialization
*
* @var string[]
* @phpstan-var array<string, string|null>
* @psalm-var array<string, string|null>
*/
protected static $openAPIFormats = [
'speech_to_text' => null,
'synthesis' => null
];
/**
* Array of nullable properties. Used for (de)serialization
*
* @var boolean[]
*/
protected static array $openAPINullables = [
'speech_to_text' => false,
'synthesis' => false
];
/**
* If a nullable field gets set to null, insert it here
*
* @var boolean[]
*/
protected array $openAPINullablesSetToNull = [];
/**
* Array of property to type mappings. Used for (de)serialization
*
* @return array
*/
public static function openAPITypes()
{
return self::$openAPITypes;
}
/**
* Array of property to format mappings. Used for (de)serialization
*
* @return array
*/
public static function openAPIFormats()
{
return self::$openAPIFormats;
}
/**
* Array of nullable properties
*
* @return array
*/
protected static function openAPINullables(): array
{
return self::$openAPINullables;
}
/**
* Array of nullable field names deliberately set to null
*
* @return boolean[]
*/
private function getOpenAPINullablesSetToNull(): array
{
return $this->openAPINullablesSetToNull;
}
/**
* Setter - Array of nullable field names deliberately set to null
*
* @param boolean[] $openAPINullablesSetToNull
*/
private function setOpenAPINullablesSetToNull(array $openAPINullablesSetToNull): void
{
$this->openAPINullablesSetToNull = $openAPINullablesSetToNull;
}
/**
* Checks if a property is nullable
*
* @param string $property
* @return bool
*/
public static function isNullable(string $property): bool
{
return self::openAPINullables()[$property] ?? false;
}
/**
* Checks if a nullable property is set to null.
*
* @param string $property
* @return bool
*/
public function isNullableSetToNull(string $property): bool
{
return in_array($property, $this->getOpenAPINullablesSetToNull(), true);
}
/**
* Array of attributes where the key is the local name,
* and the value is the original name
*
* @var string[]
*/
protected static $attributeMap = [
'speech_to_text' => 'speechToText',
'synthesis' => 'synthesis'
];
/**
* Array of attributes to setter functions (for deserialization of responses)
*
* @var string[]
*/
protected static $setters = [
'speech_to_text' => 'setSpeechToText',
'synthesis' => 'setSynthesis'
];
/**
* Array of attributes to getter functions (for serialization of requests)
*
* @var string[]
*/
protected static $getters = [
'speech_to_text' => 'getSpeechToText',
'synthesis' => 'getSynthesis'
];
/**
* Array of attributes where the key is the local name,
* and the value is the original name
*
* @return array
*/
public static function attributeMap()
{
return self::$attributeMap;
}
/**
* Array of attributes to setter functions (for deserialization of responses)
*
* @return array
*/
public static function setters()
{
return self::$setters;
}
/**
* Array of attributes to getter functions (for serialization of requests)
*
* @return array
*/
public static function getters()
{
return self::$getters;
}
/**
* The original name of the model.
*
* @return string
*/
public function getModelName()
{
return self::$openAPIModelName;
}
/**
* Associative array for storing property values
*
* @var mixed[]
*/
protected $container = [];
/**
* Constructor
*
* @param mixed[] $data Associated array of property values
* initializing the model
*/
public function __construct(array $data = null)
{
$this->setIfExists('speech_to_text', $data ?? [], null);
$this->setIfExists('synthesis', $data ?? [], null);
}
/**
* Sets $this->container[$variableName] to the given data or to the given default Value; if $variableName
* is nullable and its value is set to null in the $fields array, then mark it as "set to null" in the
* $this->openAPINullablesSetToNull array
*
* @param string $variableName
* @param array $fields
* @param mixed $defaultValue
*/
private function setIfExists(string $variableName, array $fields, $defaultValue): void
{
if (self::isNullable($variableName) && array_key_exists($variableName, $fields) && is_null($fields[$variableName])) {
$this->openAPINullablesSetToNull[] = $variableName;
}
$this->container[$variableName] = $fields[$variableName] ?? $defaultValue;
}
/**
* Show all the invalid properties with reasons.
*
* @return array invalid properties with reasons
*/
public function listInvalidProperties()
{
$invalidProperties = [];
return $invalidProperties;
}
/**
* Validate all the properties in the model
* return true if all passed
*
* @return bool True if all properties are valid
*/
public function valid()
{
return count($this->listInvalidProperties()) === 0;
}
/**
* Gets speech_to_text
*
* @return string|null
*/
public function getSpeechToText()
{
return $this->container['speech_to_text'];
}
/**
* Sets speech_to_text
*
* @param string|null $speech_to_text 语音转文字
*
* @return self
*/
public function setSpeechToText($speech_to_text)
{
if (is_null($speech_to_text)) {
throw new \InvalidArgumentException('non-nullable speech_to_text cannot be null');
}
$this->container['speech_to_text'] = $speech_to_text;
return $this;
}
/**
* Gets synthesis
*
* @return string|null
*/
public function getSynthesis()
{
return $this->container['synthesis'];
}
/**
* Sets synthesis
*
* @param string|null $synthesis 语音合成
*
* @return self
*/
public function setSynthesis($synthesis)
{
if (is_null($synthesis)) {
throw new \InvalidArgumentException('non-nullable synthesis cannot be null');
}
$this->container['synthesis'] = $synthesis;
return $this;
}
/**
* Returns true if offset exists. False otherwise.
*
* @param integer $offset Offset
*
* @return boolean
*/
public function offsetExists($offset): bool
{
return isset($this->container[$offset]);
}
/**
* Gets offset.
*
* @param integer $offset Offset
*
* @return mixed|null
*/
#[\ReturnTypeWillChange]
public function offsetGet($offset)
{
return $this->container[$offset] ?? null;
}
/**
* Sets value based on offset.
*
* @param int|null $offset Offset
* @param mixed $value Value to be set
*
* @return void
*/
public function offsetSet($offset, $value): void
{
if (is_null($offset)) {
$this->container[] = $value;
} else {
$this->container[$offset] = $value;
}
}
/**
* Unsets offset.
*
* @param integer $offset Offset
*
* @return void
*/
public function offsetUnset($offset): void
{
unset($this->container[$offset]);
}
/**
* Serializes the object to a value that can be serialized natively by json_encode().
* @link https://www.php.net/manual/en/jsonserializable.jsonserialize.php
*
* @return mixed Returns data which can be serialized by json_encode(), which is a value
* of any type other than a resource.
*/
#[\ReturnTypeWillChange]
public function jsonSerialize()
{
return ObjectSerializer::sanitizeForSerialization($this);
}
/**
* Gets the string presentation of the object
*
* @return string
*/
public function __toString()
{
return json_encode(
ObjectSerializer::sanitizeForSerialization($this),
JSON_PRETTY_PRINT
);
}
/**
* Gets a header-safe presentation of the object
*
* @return string
*/
public function toHeaderValue()
{
return json_encode(ObjectSerializer::sanitizeForSerialization($this));
}
}

@ -0,0 +1,487 @@
<?php
/**
* SynthesizerParam
*
* PHP version 7.4
*
* @category Class
* @package OpenAPI\Client
* @author OpenAPI Generator team
* @link https://openapi-generator.tech
*/
/**
* 碳丝路数据开放平台API
*
* 碳丝路数据开放平台
*
* The version of the OpenAPI document: 0.4.8
* Generated by: https://openapi-generator.tech
* OpenAPI Generator version: 7.0.1
*/
/**
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
* https://openapi-generator.tech
* Do not edit the class manually.
*/
namespace OpenAPI\Client\Model;
use \ArrayAccess;
use \OpenAPI\Client\ObjectSerializer;
/**
* SynthesizerParam Class Doc Comment
*
* @category Class
* @description 发送给语音合成服务的请求参数
* @package OpenAPI\Client
* @author OpenAPI Generator team
* @link https://openapi-generator.tech
* @implements \ArrayAccess<string, mixed>
*/
class SynthesizerParam implements ModelInterface, ArrayAccess, \JsonSerializable
{
public const DISCRIMINATOR = null;
/**
* The original name of the model.
*
* @var string
*/
protected static $openAPIModelName = 'SynthesizerParam';
/**
* Array of property to type mappings. Used for (de)serialization
*
* @var string[]
*/
protected static $openAPITypes = [
'text' => 'string',
'model' => 'string',
'format' => 'string'
];
/**
* Array of property to format mappings. Used for (de)serialization
*
* @var string[]
* @phpstan-var array<string, string|null>
* @psalm-var array<string, string|null>
*/
protected static $openAPIFormats = [
'text' => null,
'model' => null,
'format' => null
];
/**
* Array of nullable properties. Used for (de)serialization
*
* @var boolean[]
*/
protected static array $openAPINullables = [
'text' => false,
'model' => false,
'format' => false
];
/**
* If a nullable field gets set to null, insert it here
*
* @var boolean[]
*/
protected array $openAPINullablesSetToNull = [];
/**
* Array of property to type mappings. Used for (de)serialization
*
* @return array
*/
public static function openAPITypes()
{
return self::$openAPITypes;
}
/**
* Array of property to format mappings. Used for (de)serialization
*
* @return array
*/
public static function openAPIFormats()
{
return self::$openAPIFormats;
}
/**
* Array of nullable properties
*
* @return array
*/
protected static function openAPINullables(): array
{
return self::$openAPINullables;
}
/**
* Array of nullable field names deliberately set to null
*
* @return boolean[]
*/
private function getOpenAPINullablesSetToNull(): array
{
return $this->openAPINullablesSetToNull;
}
/**
* Setter - Array of nullable field names deliberately set to null
*
* @param boolean[] $openAPINullablesSetToNull
*/
private function setOpenAPINullablesSetToNull(array $openAPINullablesSetToNull): void
{
$this->openAPINullablesSetToNull = $openAPINullablesSetToNull;
}
/**
* Checks if a property is nullable
*
* @param string $property
* @return bool
*/
public static function isNullable(string $property): bool
{
return self::openAPINullables()[$property] ?? false;
}
/**
* Checks if a nullable property is set to null.
*
* @param string $property
* @return bool
*/
public function isNullableSetToNull(string $property): bool
{
return in_array($property, $this->getOpenAPINullablesSetToNull(), true);
}
/**
* Array of attributes where the key is the local name,
* and the value is the original name
*
* @var string[]
*/
protected static $attributeMap = [
'text' => 'text',
'model' => 'model',
'format' => 'format'
];
/**
* Array of attributes to setter functions (for deserialization of responses)
*
* @var string[]
*/
protected static $setters = [
'text' => 'setText',
'model' => 'setModel',
'format' => 'setFormat'
];
/**
* Array of attributes to getter functions (for serialization of requests)
*
* @var string[]
*/
protected static $getters = [
'text' => 'getText',
'model' => 'getModel',
'format' => 'getFormat'
];
/**
* Array of attributes where the key is the local name,
* and the value is the original name
*
* @return array
*/
public static function attributeMap()
{
return self::$attributeMap;
}
/**
* Array of attributes to setter functions (for deserialization of responses)
*
* @return array
*/
public static function setters()
{
return self::$setters;
}
/**
* Array of attributes to getter functions (for serialization of requests)
*
* @return array
*/
public static function getters()
{
return self::$getters;
}
/**
* The original name of the model.
*
* @return string
*/
public function getModelName()
{
return self::$openAPIModelName;
}
/**
* Associative array for storing property values
*
* @var mixed[]
*/
protected $container = [];
/**
* Constructor
*
* @param mixed[] $data Associated array of property values
* initializing the model
*/
public function __construct(array $data = null)
{
$this->setIfExists('text', $data ?? [], null);
$this->setIfExists('model', $data ?? [], null);
$this->setIfExists('format', $data ?? [], null);
}
/**
* Sets $this->container[$variableName] to the given data or to the given default Value; if $variableName
* is nullable and its value is set to null in the $fields array, then mark it as "set to null" in the
* $this->openAPINullablesSetToNull array
*
* @param string $variableName
* @param array $fields
* @param mixed $defaultValue
*/
private function setIfExists(string $variableName, array $fields, $defaultValue): void
{
if (self::isNullable($variableName) && array_key_exists($variableName, $fields) && is_null($fields[$variableName])) {
$this->openAPINullablesSetToNull[] = $variableName;
}
$this->container[$variableName] = $fields[$variableName] ?? $defaultValue;
}
/**
* Show all the invalid properties with reasons.
*
* @return array invalid properties with reasons
*/
public function listInvalidProperties()
{
$invalidProperties = [];
if ($this->container['text'] === null) {
$invalidProperties[] = "'text' can't be null";
}
if ($this->container['model'] === null) {
$invalidProperties[] = "'model' can't be null";
}
if ($this->container['format'] === null) {
$invalidProperties[] = "'format' can't be null";
}
return $invalidProperties;
}
/**
* Validate all the properties in the model
* return true if all passed
*
* @return bool True if all properties are valid
*/
public function valid()
{
return count($this->listInvalidProperties()) === 0;
}
/**
* Gets text
*
* @return string
*/
public function getText()
{
return $this->container['text'];
}
/**
* Sets text
*
* @param string $text 需要转换为语音的文本
*
* @return self
*/
public function setText($text)
{
if (is_null($text)) {
throw new \InvalidArgumentException('non-nullable text cannot be null');
}
$this->container['text'] = $text;
return $this;
}
/**
* Gets model
*
* @return string
*/
public function getModel()
{
return $this->container['model'];
}
/**
* Sets model
*
* @param string $model 使用的语音合成模型
*
* @return self
*/
public function setModel($model)
{
if (is_null($model)) {
throw new \InvalidArgumentException('non-nullable model cannot be null');
}
$this->container['model'] = $model;
return $this;
}
/**
* Gets format
*
* @return string
*/
public function getFormat()
{
return $this->container['format'];
}
/**
* Sets format
*
* @param string $format 生成的音频格式
*
* @return self
*/
public function setFormat($format)
{
if (is_null($format)) {
throw new \InvalidArgumentException('non-nullable format cannot be null');
}
$this->container['format'] = $format;
return $this;
}
/**
* Returns true if offset exists. False otherwise.
*
* @param integer $offset Offset
*
* @return boolean
*/
public function offsetExists($offset): bool
{
return isset($this->container[$offset]);
}
/**
* Gets offset.
*
* @param integer $offset Offset
*
* @return mixed|null
*/
#[\ReturnTypeWillChange]
public function offsetGet($offset)
{
return $this->container[$offset] ?? null;
}
/**
* Sets value based on offset.
*
* @param int|null $offset Offset
* @param mixed $value Value to be set
*
* @return void
*/
public function offsetSet($offset, $value): void
{
if (is_null($offset)) {
$this->container[] = $value;
} else {
$this->container[$offset] = $value;
}
}
/**
* Unsets offset.
*
* @param integer $offset Offset
*
* @return void
*/
public function offsetUnset($offset): void
{
unset($this->container[$offset]);
}
/**
* Serializes the object to a value that can be serialized natively by json_encode().
* @link https://www.php.net/manual/en/jsonserializable.jsonserialize.php
*
* @return mixed Returns data which can be serialized by json_encode(), which is a value
* of any type other than a resource.
*/
#[\ReturnTypeWillChange]
public function jsonSerialize()
{
return ObjectSerializer::sanitizeForSerialization($this);
}
/**
* Gets the string presentation of the object
*
* @return string
*/
public function __toString()
{
return json_encode(
ObjectSerializer::sanitizeForSerialization($this),
JSON_PRETTY_PRINT
);
}
/**
* Gets a header-safe presentation of the object
*
* @return string
*/
public function toHeaderValue()
{
return json_encode(ObjectSerializer::sanitizeForSerialization($this));
}
}

@ -0,0 +1,10 @@
<?php
namespace OpenAPI\Client;
// 回调通知理器
class NotifyHandler
{
}

@ -0,0 +1,567 @@
<?php
/**
* ObjectSerializer
*
* PHP version 7.4
*
* @category Class
* @package OpenAPI\Client
* @author OpenAPI Generator team
* @link https://openapi-generator.tech
*/
/**
* 碳丝路数据开放平台API
*
* 碳丝路数据开放平台
*
* The version of the OpenAPI document: 0.4.8
* Generated by: https://openapi-generator.tech
* OpenAPI Generator version: 7.0.1
*/
/**
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
* https://openapi-generator.tech
* Do not edit the class manually.
*/
namespace OpenAPI\Client;
use GuzzleHttp\Psr7\Utils;
use OpenAPI\Client\Model\ModelInterface;
/**
* ObjectSerializer Class Doc Comment
*
* @category Class
* @package OpenAPI\Client
* @author OpenAPI Generator team
* @link https://openapi-generator.tech
*/
class ObjectSerializer
{
/** @var string */
private static $dateTimeFormat = \DateTime::ATOM;
/**
* Change the date format
*
* @param string $format the new date format to use
*/
public static function setDateTimeFormat($format)
{
self::$dateTimeFormat = $format;
}
/**
* Serialize data
*
* @param mixed $data the data to serialize
* @param string $type the OpenAPIToolsType of the data
* @param string $format the format of the OpenAPITools type of the data
*
* @return scalar|object|array|null serialized form of $data
*/
public static function sanitizeForSerialization($data, $type = null, $format = null)
{
if (is_scalar($data) || null === $data) {
return $data;
}
if ($data instanceof \DateTime) {
return ($format === 'date') ? $data->format('Y-m-d') : $data->format(self::$dateTimeFormat);
}
if (is_array($data)) {
foreach ($data as $property => $value) {
$data[$property] = self::sanitizeForSerialization($value);
}
return $data;
}
if (is_object($data)) {
$values = [];
if ($data instanceof ModelInterface) {
$formats = $data::openAPIFormats();
foreach ($data::openAPITypes() as $property => $openAPIType) {
$getter = $data::getters()[$property];
$value = $data->$getter();
if ($value !== null && !in_array($openAPIType, ['\DateTime', '\SplFileObject', 'array', 'bool', 'boolean', 'byte', 'float', 'int', 'integer', 'mixed', 'number', 'object', 'string', 'void'], true)) {
$callable = [$openAPIType, 'getAllowableEnumValues'];
if (is_callable($callable)) {
/** array $callable */
$allowedEnumTypes = $callable();
if (!in_array($value, $allowedEnumTypes, true)) {
$imploded = implode("', '", $allowedEnumTypes);
throw new \InvalidArgumentException("Invalid value for enum '$openAPIType', must be one of: '$imploded'");
}
}
}
if (($data::isNullable($property) && $data->isNullableSetToNull($property)) || $value !== null) {
$values[$data::attributeMap()[$property]] = self::sanitizeForSerialization($value, $openAPIType, $formats[$property]);
}
}
} else {
foreach($data as $property => $value) {
$values[$property] = self::sanitizeForSerialization($value);
}
}
return (object)$values;
} else {
return (string)$data;
}
}
/**
* Sanitize filename by removing path.
* e.g. ../../sun.gif becomes sun.gif
*
* @param string $filename filename to be sanitized
*
* @return string the sanitized filename
*/
public static function sanitizeFilename($filename)
{
if (preg_match("/.*[\/\\\\](.*)$/", $filename, $match)) {
return $match[1];
} else {
return $filename;
}
}
/**
* Shorter timestamp microseconds to 6 digits length.
*
* @param string $timestamp Original timestamp
*
* @return string the shorten timestamp
*/
public static function sanitizeTimestamp($timestamp)
{
if (!is_string($timestamp)) return $timestamp;
return preg_replace('/(:\d{2}.\d{6})\d*/', '$1', $timestamp);
}
/**
* Take value and turn it into a string suitable for inclusion in
* the path, by url-encoding.
*
* @param string $value a string which will be part of the path
*
* @return string the serialized object
*/
public static function toPathValue($value)
{
return rawurlencode(self::toString($value));
}
/**
* Checks if a value is empty, based on its OpenAPI type.
*
* @param mixed $value
* @param string $openApiType
*
* @return bool true if $value is empty
*/
private static function isEmptyValue($value, string $openApiType): bool
{
# If empty() returns false, it is not empty regardless of its type.
if (!empty($value)) {
return false;
}
# Null is always empty, as we cannot send a real "null" value in a query parameter.
if ($value === null) {
return true;
}
switch ($openApiType) {
# For numeric values, false and '' are considered empty.
# This comparison is safe for floating point values, since the previous call to empty() will
# filter out values that don't match 0.
case 'int':
case 'integer':
return $value !== 0;
case 'number':
case 'float':
return $value !== 0 && $value !== 0.0;
# For boolean values, '' is considered empty
case 'bool':
case 'boolean':
return !in_array($value, [false, 0], true);
# For all the other types, any value at this point can be considered empty.
default:
return true;
}
}
/**
* Take query parameter properties and turn it into an array suitable for
* native http_build_query or GuzzleHttp\Psr7\Query::build.
*
* @param mixed $value Parameter value
* @param string $paramName Parameter name
* @param string $openApiType OpenAPIType eg. array or object
* @param string $style Parameter serialization style
* @param bool $explode Parameter explode option
* @param bool $required Whether query param is required or not
*
* @return array
*/
public static function toQueryValue(
$value,
string $paramName,
string $openApiType = 'string',
string $style = 'form',
bool $explode = true,
bool $required = true
): array {
# Check if we should omit this parameter from the query. This should only happen when:
# - Parameter is NOT required; AND
# - its value is set to a value that is equivalent to "empty", depending on its OpenAPI type. For
# example, 0 as "int" or "boolean" is NOT an empty value.
if (self::isEmptyValue($value, $openApiType)) {
if ($required) {
return ["{$paramName}" => ''];
} else {
return [];
}
}
# Handle DateTime objects in query
if($openApiType === "\\DateTime" && $value instanceof \DateTime) {
return ["{$paramName}" => $value->format(self::$dateTimeFormat)];
}
$query = [];
$value = (in_array($openApiType, ['object', 'array'], true)) ? (array)$value : $value;
// since \GuzzleHttp\Psr7\Query::build fails with nested arrays
// need to flatten array first
$flattenArray = function ($arr, $name, &$result = []) use (&$flattenArray, $style, $explode) {
if (!is_array($arr)) return $arr;
foreach ($arr as $k => $v) {
$prop = ($style === 'deepObject') ? $prop = "{$name}[{$k}]" : $k;
if (is_array($v)) {
$flattenArray($v, $prop, $result);
} else {
if ($style !== 'deepObject' && !$explode) {
// push key itself
$result[] = $prop;
}
$result[$prop] = $v;
}
}
return $result;
};
$value = $flattenArray($value, $paramName);
if ($openApiType === 'object' && ($style === 'deepObject' || $explode)) {
return $value;
}
if ('boolean' === $openApiType && is_bool($value)) {
$value = self::convertBoolToQueryStringFormat($value);
}
// handle style in serializeCollection
$query[$paramName] = ($explode) ? $value : self::serializeCollection((array)$value, $style);
return $query;
}
/**
* Convert boolean value to format for query string.
*
* @param bool $value Boolean value
*
* @return int|string Boolean value in format
*/
public static function convertBoolToQueryStringFormat(bool $value)
{
if (Configuration::BOOLEAN_FORMAT_STRING == Configuration::getDefaultConfiguration()->getBooleanFormatForQueryString()) {
return $value ? 'true' : 'false';
}
return (int) $value;
}
/**
* Take value and turn it into a string suitable for inclusion in
* the header. If it's a string, pass through unchanged
* If it's a datetime object, format it in ISO8601
*
* @param string $value a string which will be part of the header
*
* @return string the header string
*/
public static function toHeaderValue($value)
{
$callable = [$value, 'toHeaderValue'];
if (is_callable($callable)) {
return $callable();
}
return self::toString($value);
}
/**
* Take value and turn it into a string suitable for inclusion in
* the http body (form parameter). If it's a string, pass through unchanged
* If it's a datetime object, format it in ISO8601
*
* @param string|\SplFileObject $value the value of the form parameter
*
* @return string the form string
*/
public static function toFormValue($value)
{
if ($value instanceof \SplFileObject) {
return $value->getRealPath();
} else {
return self::toString($value);
}
}
/**
* Take value and turn it into a string suitable for inclusion in
* the parameter. If it's a string, pass through unchanged
* If it's a datetime object, format it in ISO8601
* If it's a boolean, convert it to "true" or "false".
*
* @param string|bool|\DateTime $value the value of the parameter
*
* @return string the header string
*/
public static function toString($value)
{
if ($value instanceof \DateTime) { // datetime in ISO8601 format
return $value->format(self::$dateTimeFormat);
} elseif (is_bool($value)) {
return $value ? 'true' : 'false';
} else {
return (string) $value;
}
}
/**
* Serialize an array to a string.
*
* @param array $collection collection to serialize to a string
* @param string $style the format use for serialization (csv,
* ssv, tsv, pipes, multi)
* @param bool $allowCollectionFormatMulti allow collection format to be a multidimensional array
*
* @return string
*/
public static function serializeCollection(array $collection, $style, $allowCollectionFormatMulti = false)
{
if ($allowCollectionFormatMulti && ('multi' === $style)) {
// http_build_query() almost does the job for us. We just
// need to fix the result of multidimensional arrays.
return preg_replace('/%5B[0-9]+%5D=/', '=', http_build_query($collection, '', '&'));
}
switch ($style) {
case 'pipeDelimited':
case 'pipes':
return implode('|', $collection);
case 'tsv':
return implode("\t", $collection);
case 'spaceDelimited':
case 'ssv':
return implode(' ', $collection);
case 'simple':
case 'csv':
// Deliberate fall through. CSV is default format.
default:
return implode(',', $collection);
}
}
/**
* Deserialize a JSON string into an object
*
* @param mixed $data object or primitive to be deserialized
* @param string $class class name is passed as a string
* @param string[] $httpHeaders HTTP headers
* @param string $discriminator discriminator if polymorphism is used
*
* @return object|array|null a single or an array of $class instances
*/
public static function deserialize($data, $class, $httpHeaders = null)
{
if (null === $data) {
return null;
}
if (strcasecmp(substr($class, -2), '[]') === 0) {
$data = is_string($data) ? json_decode($data) : $data;
if (!is_array($data)) {
throw new \InvalidArgumentException("Invalid array '$class'");
}
$subClass = substr($class, 0, -2);
$values = [];
foreach ($data as $key => $value) {
$values[] = self::deserialize($value, $subClass, null);
}
return $values;
}
if (preg_match('/^(array<|map\[)/', $class)) { // for associative array e.g. array<string,int>
$data = is_string($data) ? json_decode($data) : $data;
settype($data, 'array');
$inner = substr($class, 4, -1);
$deserialized = [];
if (strrpos($inner, ",") !== false) {
$subClass_array = explode(',', $inner, 2);
$subClass = $subClass_array[1];
foreach ($data as $key => $value) {
$deserialized[$key] = self::deserialize($value, $subClass, null);
}
}
return $deserialized;
}
if ($class === 'object') {
settype($data, 'array');
return $data;
} elseif ($class === 'mixed') {
settype($data, gettype($data));
return $data;
}
if ($class === '\DateTime') {
// Some APIs return an invalid, empty string as a
// date-time property. DateTime::__construct() will return
// the current time for empty input which is probably not
// what is meant. The invalid empty string is probably to
// be interpreted as a missing field/value. Let's handle
// this graceful.
if (!empty($data)) {
try {
return new \DateTime($data);
} catch (\Exception $exception) {
// Some APIs return a date-time with too high nanosecond
// precision for php's DateTime to handle.
// With provided regexp 6 digits of microseconds saved
return new \DateTime(self::sanitizeTimestamp($data));
}
} else {
return null;
}
}
if ($class === '\SplFileObject') {
$data = Utils::streamFor($data);
/** @var \Psr\Http\Message\StreamInterface $data */
// determine file name
if (
is_array($httpHeaders)
&& array_key_exists('Content-Disposition', $httpHeaders)
&& preg_match('/inline; filename=[\'"]?([^\'"\s]+)[\'"]?$/i', $httpHeaders['Content-Disposition'], $match)
) {
$filename = Configuration::getDefaultConfiguration()->getTempFolderPath() . DIRECTORY_SEPARATOR . self::sanitizeFilename($match[1]);
} else {
$filename = tempnam(Configuration::getDefaultConfiguration()->getTempFolderPath(), '');
}
$file = fopen($filename, 'w');
while ($chunk = $data->read(200)) {
fwrite($file, $chunk);
}
fclose($file);
return new \SplFileObject($filename, 'r');
}
/** @psalm-suppress ParadoxicalCondition */
if (in_array($class, ['\DateTime', '\SplFileObject', 'array', 'bool', 'boolean', 'byte', 'float', 'int', 'integer', 'mixed', 'number', 'object', 'string', 'void'], true)) {
settype($data, $class);
return $data;
}
if (method_exists($class, 'getAllowableEnumValues')) {
if (!in_array($data, $class::getAllowableEnumValues(), true)) {
$imploded = implode("', '", $class::getAllowableEnumValues());
throw new \InvalidArgumentException("Invalid value for enum '$class', must be one of: '$imploded'");
}
return $data;
} else {
$data = is_string($data) ? json_decode($data) : $data;
if (is_array($data)) {
$data = (object)$data;
}
// If a discriminator is defined and points to a valid subclass, use it.
$discriminator = $class::DISCRIMINATOR;
if (!empty($discriminator) && isset($data->{$discriminator}) && is_string($data->{$discriminator})) {
$subclass = '\OpenAPI\Client\Model\\' . $data->{$discriminator};
if (is_subclass_of($subclass, $class)) {
$class = $subclass;
}
}
/** @var ModelInterface $instance */
$instance = new $class();
foreach ($instance::openAPITypes() as $property => $type) {
$propertySetter = $instance::setters()[$property];
if (!isset($propertySetter)) {
continue;
}
if (!isset($data->{$instance::attributeMap()[$property]})) {
if ($instance::isNullable($property)) {
$instance->$propertySetter(null);
}
continue;
}
if (isset($data->{$instance::attributeMap()[$property]})) {
$propertyValue = $data->{$instance::attributeMap()[$property]};
$instance->$propertySetter(self::deserialize($propertyValue, $type, null));
}
}
return $instance;
}
}
/**
* Native `http_build_query` wrapper.
* @see https://www.php.net/manual/en/function.http-build-query
*
* @param array|object $data May be an array or object containing properties.
* @param string $numeric_prefix If numeric indices are used in the base array and this parameter is provided, it will be prepended to the numeric index for elements in the base array only.
* @param string|null $arg_separator arg_separator.output is used to separate arguments but may be overridden by specifying this parameter.
* @param int $encoding_type Encoding type. By default, PHP_QUERY_RFC1738.
*
* @return string
*/
public static function buildQuery(
$data,
string $numeric_prefix = '',
?string $arg_separator = null,
int $encoding_type = \PHP_QUERY_RFC3986
): string {
return \GuzzleHttp\Psr7\Query::build($data, $encoding_type);
}
}

@ -0,0 +1,103 @@
<?php
namespace OpenAPI\Client;
use Amp\Loop;
use Amp\Websocket\Client\Handshake;
use function Amp\Websocket\Client\connect;
use OpenAPI\Client\Model\SpeechResult;
use OpenAPI\Client\Model\SynthesizerParam;
// 流请求API客户端
class StreamApiClient
{
/**
* @var ApiClient api客户端
*/
protected ApiClient $apiClient;
/**
* @var Configuration api配置
*/
protected Configuration $config;
/**
* @param Configuration $config api配置
*/
function __construct(Configuration $config)
{
$this->config = $config;
$this->apiClient = new ApiClient($config);
}
/**
* 语音转文字
* @param string $binaryData 16k采样率的音频二进制数据
* @param StreamResponseHandler $handler 流响应处理器
* @return void
* @throws ApiException
*/
public function speechToText(string $binaryData, StreamResponseHandler $handler): void
{
$path = "/ws/speechToText";
$host = $this->config->getHost();
$host = str_replace(["http", "https"], ["ws", "wss"], $host) . $path;
$signParams = [
'payload' => null,
'path' => $path,
'charset' => $this->config->getCharset(),
'time' => date($this->config->getDataFormat(), time()),
'sign_type' => $this->config->getSignType(),
'access_token' => null,
'app_id' => $this->config->getAppid(),
'sign' => ''
];
$signParams['sign'] = $this->apiClient->requestSign($signParams);
Loop::run(function () use ($host, $signParams, $binaryData, $handler) {
$handshake = (new Handshake($host))->withHeaders($signParams);
$connection = yield connect($handshake);
yield $connection->sendBinary($binaryData);
while ($message = yield $connection->receive()) {
$payload = yield $message->buffer();
$content = json_decode($payload);
$result = ObjectSerializer::deserialize($content, '\OpenAPI\Client\Model\SpeechResult', []);
if ($result instanceof SpeechResult) {
$handler->speechToTextHandle($result);
}
}
});
}
/**
* 语音合成
* @param SynthesizerParam $synthesizerParam 语音合成参数
* @param StreamResponseHandler $handler 流响应处理器
* @return void
* @throws ApiException
*/
public function synthesizer(SynthesizerParam $synthesizerParam, StreamResponseHandler $handler): void
{
$path = "/ws/synthesis";
$host = $this->config->getHost();
$host = str_replace(["http", "https"], ["ws", "wss"], $host) . $path;
$signParams = [
'payload' => null,
'path' => $path,
'charset' => $this->config->getCharset(),
'time' => date($this->config->getDataFormat(), time()),
'sign_type' => $this->config->getSignType(),
'access_token' => null,
'app_id' => $this->config->getAppid(),
'sign' => ''
];
$signParams['sign'] = $this->apiClient->requestSign($signParams);
Loop::run(function () use ($host, $signParams, $synthesizerParam, $handler) {
$handshake = (new Handshake($host))->withHeaders($signParams);
$connection = yield connect($handshake);
yield $connection->send(json_encode($synthesizerParam));
while ($message = yield $connection->receive()) {
$payload = yield $message->buffer();
$handler->synthesizerHandle($payload);
}
});
}
}

@ -0,0 +1,29 @@
<?php
namespace OpenAPI\Client;
use InvalidArgumentException;
use OpenAPI\Client\Model\SpeechResult;
// 流式响应处理器
class StreamResponseHandler
{
/**
* 语音转文字响应处理
* @param SpeechResult $result 语音转文字结果
*/
public function speechToTextHandle(SpeechResult $result): void
{
throw new InvalidArgumentException('调用speechToText方法,传入的StreamResponseHandler实例需要重写speechToTextHandle用以处理响应数据');
}
/**
* 语音合成响应处理
* @param string $result 语音合成结果
*/
public function synthesizerHandle(string $result): void
{
throw new InvalidArgumentException('调用synthesizer方法,传入的StreamResponseHandler实例需要重写synthesizerHandle用以处理响应数据');
}
}

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" bootstrap="./vendor/autoload.php" colors="true" convertErrorsToExceptions="true" convertNoticesToExceptions="true" convertWarningsToExceptions="true" stopOnFailure="false" xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/9.3/phpunit.xsd">
<coverage processUncoveredFiles="true">
<include>
<directory suffix=".php">./lib/Api</directory>
<directory suffix=".php">./lib/Model</directory>
</include>
</coverage>
<testsuites>
<testsuite name="tests">
<directory>./test/Api</directory>
<directory>./test/Model</directory>
</testsuite>
</testsuites>
<php>
<ini name="error_reporting" value="E_ALL"/>
</php>
</phpunit>

@ -0,0 +1,85 @@
<?php
/**
* AiApiTest
* PHP version 7.4
*
* @category Class
* @package OpenAPI\Client
* @author OpenAPI Generator team
* @link https://openapi-generator.tech
*/
/**
* 碳丝路数据开放平台API
*
* 碳丝路数据开放平台
*
* The version of the OpenAPI document: 0.4.8
* Generated by: https://openapi-generator.tech
* OpenAPI Generator version: 7.0.1
*/
/**
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
* https://openapi-generator.tech
* Please update the test case below to test the endpoint.
*/
namespace OpenAPI\Client\Test\Api;
use \OpenAPI\Client\Configuration;
use \OpenAPI\Client\ApiException;
use \OpenAPI\Client\ObjectSerializer;
use PHPUnit\Framework\TestCase;
/**
* AiApiTest Class Doc Comment
*
* @category Class
* @package OpenAPI\Client
* @author OpenAPI Generator team
* @link https://openapi-generator.tech
*/
class AiApiTest extends TestCase
{
/**
* Setup before running any test cases
*/
public static function setUpBeforeClass(): void
{
}
/**
* Setup before running each test case
*/
public function setUp(): void
{
}
/**
* Clean up after running each test case
*/
public function tearDown(): void
{
}
/**
* Clean up after running all test cases
*/
public static function tearDownAfterClass(): void
{
}
/**
* Test case for chat
*
* 元梦ai-对话.
*
*/
public function testChat()
{
// TODO: implement
$this->markTestIncomplete('Not implemented');
}
}

@ -0,0 +1,90 @@
<?php
/**
* ChatParamTest
*
* PHP version 7.4
*
* @category Class
* @package OpenAPI\Client
* @author OpenAPI Generator team
* @link https://openapi-generator.tech
*/
/**
* 碳丝路数据开放平台API
*
* 碳丝路数据开放平台
*
* The version of the OpenAPI document: 0.4.8
* Generated by: https://openapi-generator.tech
* OpenAPI Generator version: 7.0.1
*/
/**
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
* https://openapi-generator.tech
* Please update the test case below to test the model.
*/
namespace OpenAPI\Client\Test\Model;
use PHPUnit\Framework\TestCase;
/**
* ChatParamTest Class Doc Comment
*
* @category Class
* @description 发送给AI的消息
* @package OpenAPI\Client
* @author OpenAPI Generator team
* @link https://openapi-generator.tech
*/
class ChatParamTest extends TestCase
{
/**
* Setup before running any test case
*/
public static function setUpBeforeClass(): void
{
}
/**
* Setup before running each test case
*/
public function setUp(): void
{
}
/**
* Clean up after running each test case
*/
public function tearDown(): void
{
}
/**
* Clean up after running all test cases
*/
public static function tearDownAfterClass(): void
{
}
/**
* Test "ChatParam"
*/
public function testChatParam()
{
// TODO: implement
$this->markTestIncomplete('Not implemented');
}
/**
* Test attribute "message"
*/
public function testPropertyMessage()
{
// TODO: implement
$this->markTestIncomplete('Not implemented');
}
}

@ -0,0 +1,90 @@
<?php
/**
* ChatResultTest
*
* PHP version 7.4
*
* @category Class
* @package OpenAPI\Client
* @author OpenAPI Generator team
* @link https://openapi-generator.tech
*/
/**
* 碳丝路数据开放平台API
*
* 碳丝路数据开放平台
*
* The version of the OpenAPI document: 0.4.8
* Generated by: https://openapi-generator.tech
* OpenAPI Generator version: 7.0.1
*/
/**
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
* https://openapi-generator.tech
* Please update the test case below to test the model.
*/
namespace OpenAPI\Client\Test\Model;
use PHPUnit\Framework\TestCase;
/**
* ChatResultTest Class Doc Comment
*
* @category Class
* @description AI回答的消息
* @package OpenAPI\Client
* @author OpenAPI Generator team
* @link https://openapi-generator.tech
*/
class ChatResultTest extends TestCase
{
/**
* Setup before running any test case
*/
public static function setUpBeforeClass(): void
{
}
/**
* Setup before running each test case
*/
public function setUp(): void
{
}
/**
* Clean up after running each test case
*/
public function tearDown(): void
{
}
/**
* Clean up after running all test cases
*/
public static function tearDownAfterClass(): void
{
}
/**
* Test "ChatResult"
*/
public function testChatResult()
{
// TODO: implement
$this->markTestIncomplete('Not implemented');
}
/**
* Test attribute "content"
*/
public function testPropertyContent()
{
// TODO: implement
$this->markTestIncomplete('Not implemented');
}
}

@ -0,0 +1,189 @@
<?php
/**
* ResponseOpenAPIChatResultTest
*
* PHP version 7.4
*
* @category Class
* @package OpenAPI\Client
* @author OpenAPI Generator team
* @link https://openapi-generator.tech
*/
/**
* 碳丝路数据开放平台API
*
* 碳丝路数据开放平台
*
* The version of the OpenAPI document: 0.4.8
* Generated by: https://openapi-generator.tech
* OpenAPI Generator version: 7.0.1
*/
/**
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
* https://openapi-generator.tech
* Please update the test case below to test the model.
*/
namespace OpenAPI\Client\Test\Model;
use PHPUnit\Framework\TestCase;
/**
* ResponseOpenAPIChatResultTest Class Doc Comment
*
* @category Class
* @description 消息载体对象
* @package OpenAPI\Client
* @author OpenAPI Generator team
* @link https://openapi-generator.tech
*/
class ResponseOpenAPIChatResultTest extends TestCase
{
/**
* Setup before running any test case
*/
public static function setUpBeforeClass(): void
{
}
/**
* Setup before running each test case
*/
public function setUp(): void
{
}
/**
* Clean up after running each test case
*/
public function tearDown(): void
{
}
/**
* Clean up after running all test cases
*/
public static function tearDownAfterClass(): void
{
}
/**
* Test "ResponseOpenAPIChatResult"
*/
public function testResponseOpenAPIChatResult()
{
// TODO: implement
$this->markTestIncomplete('Not implemented');
}
/**
* Test attribute "time"
*/
public function testPropertyTime()
{
// TODO: implement
$this->markTestIncomplete('Not implemented');
}
/**
* Test attribute "openid"
*/
public function testPropertyOpenid()
{
// TODO: implement
$this->markTestIncomplete('Not implemented');
}
/**
* Test attribute "payload"
*/
public function testPropertyPayload()
{
// TODO: implement
$this->markTestIncomplete('Not implemented');
}
/**
* Test attribute "sign"
*/
public function testPropertySign()
{
// TODO: implement
$this->markTestIncomplete('Not implemented');
}
/**
* Test attribute "charset"
*/
public function testPropertyCharset()
{
// TODO: implement
$this->markTestIncomplete('Not implemented');
}
/**
* Test attribute "description"
*/
public function testPropertyDescription()
{
// TODO: implement
$this->markTestIncomplete('Not implemented');
}
/**
* Test attribute "response_id"
*/
public function testPropertyResponseId()
{
// TODO: implement
$this->markTestIncomplete('Not implemented');
}
/**
* Test attribute "err_code"
*/
public function testPropertyErrCode()
{
// TODO: implement
$this->markTestIncomplete('Not implemented');
}
/**
* Test attribute "err_msg"
*/
public function testPropertyErrMsg()
{
// TODO: implement
$this->markTestIncomplete('Not implemented');
}
/**
* Test attribute "sub_err"
*/
public function testPropertySubErr()
{
// TODO: implement
$this->markTestIncomplete('Not implemented');
}
/**
* Test attribute "sub_msg"
*/
public function testPropertySubMsg()
{
// TODO: implement
$this->markTestIncomplete('Not implemented');
}
/**
* Test attribute "sign_type"
*/
public function testPropertySignType()
{
// TODO: implement
$this->markTestIncomplete('Not implemented');
}
}

@ -0,0 +1,117 @@
<?php
/**
* SpeechResultTest
*
* PHP version 7.4
*
* @category Class
* @package OpenAPI\Client
* @author OpenAPI Generator team
* @link https://openapi-generator.tech
*/
/**
* 碳丝路数据开放平台API
*
* 碳丝路数据开放平台
*
* The version of the OpenAPI document: 0.4.8
* Generated by: https://openapi-generator.tech
* OpenAPI Generator version: 7.0.1
*/
/**
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
* https://openapi-generator.tech
* Please update the test case below to test the model.
*/
namespace OpenAPI\Client\Test\Model;
use PHPUnit\Framework\TestCase;
/**
* SpeechResultTest Class Doc Comment
*
* @category Class
* @description 语音识别后的内容
* @package OpenAPI\Client
* @author OpenAPI Generator team
* @link https://openapi-generator.tech
*/
class SpeechResultTest extends TestCase
{
/**
* Setup before running any test case
*/
public static function setUpBeforeClass(): void
{
}
/**
* Setup before running each test case
*/
public function setUp(): void
{
}
/**
* Clean up after running each test case
*/
public function tearDown(): void
{
}
/**
* Clean up after running all test cases
*/
public static function tearDownAfterClass(): void
{
}
/**
* Test "SpeechResult"
*/
public function testSpeechResult()
{
// TODO: implement
$this->markTestIncomplete('Not implemented');
}
/**
* Test attribute "text"
*/
public function testPropertyText()
{
// TODO: implement
$this->markTestIncomplete('Not implemented');
}
/**
* Test attribute "begin_time"
*/
public function testPropertyBeginTime()
{
// TODO: implement
$this->markTestIncomplete('Not implemented');
}
/**
* Test attribute "end_time"
*/
public function testPropertyEndTime()
{
// TODO: implement
$this->markTestIncomplete('Not implemented');
}
/**
* Test attribute "sentence_end"
*/
public function testPropertySentenceEnd()
{
// TODO: implement
$this->markTestIncomplete('Not implemented');
}
}

@ -0,0 +1,99 @@
<?php
/**
* StreamModuleTest
*
* PHP version 7.4
*
* @category Class
* @package OpenAPI\Client
* @author OpenAPI Generator team
* @link https://openapi-generator.tech
*/
/**
* 碳丝路数据开放平台API
*
* 碳丝路数据开放平台
*
* The version of the OpenAPI document: 0.4.8
* Generated by: https://openapi-generator.tech
* OpenAPI Generator version: 7.0.1
*/
/**
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
* https://openapi-generator.tech
* Please update the test case below to test the model.
*/
namespace OpenAPI\Client\Test\Model;
use PHPUnit\Framework\TestCase;
/**
* StreamModuleTest Class Doc Comment
*
* @category Class
* @description 流式调用模块定义常量
* @package OpenAPI\Client
* @author OpenAPI Generator team
* @link https://openapi-generator.tech
*/
class StreamModuleTest extends TestCase
{
/**
* Setup before running any test case
*/
public static function setUpBeforeClass(): void
{
}
/**
* Setup before running each test case
*/
public function setUp(): void
{
}
/**
* Clean up after running each test case
*/
public function tearDown(): void
{
}
/**
* Clean up after running all test cases
*/
public static function tearDownAfterClass(): void
{
}
/**
* Test "StreamModule"
*/
public function testStreamModule()
{
// TODO: implement
$this->markTestIncomplete('Not implemented');
}
/**
* Test attribute "speech_to_text"
*/
public function testPropertySpeechToText()
{
// TODO: implement
$this->markTestIncomplete('Not implemented');
}
/**
* Test attribute "synthesis"
*/
public function testPropertySynthesis()
{
// TODO: implement
$this->markTestIncomplete('Not implemented');
}
}

@ -0,0 +1,108 @@
<?php
/**
* SynthesizerParamTest
*
* PHP version 7.4
*
* @category Class
* @package OpenAPI\Client
* @author OpenAPI Generator team
* @link https://openapi-generator.tech
*/
/**
* 碳丝路数据开放平台API
*
* 碳丝路数据开放平台
*
* The version of the OpenAPI document: 0.4.8
* Generated by: https://openapi-generator.tech
* OpenAPI Generator version: 7.0.1
*/
/**
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
* https://openapi-generator.tech
* Please update the test case below to test the model.
*/
namespace OpenAPI\Client\Test\Model;
use PHPUnit\Framework\TestCase;
/**
* SynthesizerParamTest Class Doc Comment
*
* @category Class
* @description 发送给语音合成服务的请求参数
* @package OpenAPI\Client
* @author OpenAPI Generator team
* @link https://openapi-generator.tech
*/
class SynthesizerParamTest extends TestCase
{
/**
* Setup before running any test case
*/
public static function setUpBeforeClass(): void
{
}
/**
* Setup before running each test case
*/
public function setUp(): void
{
}
/**
* Clean up after running each test case
*/
public function tearDown(): void
{
}
/**
* Clean up after running all test cases
*/
public static function tearDownAfterClass(): void
{
}
/**
* Test "SynthesizerParam"
*/
public function testSynthesizerParam()
{
// TODO: implement
$this->markTestIncomplete('Not implemented');
}
/**
* Test attribute "text"
*/
public function testPropertyText()
{
// TODO: implement
$this->markTestIncomplete('Not implemented');
}
/**
* Test attribute "model"
*/
public function testPropertyModel()
{
// TODO: implement
$this->markTestIncomplete('Not implemented');
}
/**
* Test attribute "format"
*/
public function testPropertyFormat()
{
// TODO: implement
$this->markTestIncomplete('Not implemented');
}
}
Loading…
Cancel
Save