6 个版本

0.1.5 2022年1月22日
0.1.4 2022年1月12日
0.1.2 2021年11月29日
0.1.0 2020年7月3日

11 in #refresh-token

36 个月下载量

MIT 许可证

31KB
461 行代码

tda-sdk-rs

与 TD Ameritrade API 交互的 SDK。

开发者文档

重要:在开始之前,您需要确保已创建开发应用程序(因此有一个客户端 ID),以及一个有效的刷新令牌。如果您需要帮助完成这些步骤中的任何一个,您应参考以下 API 指南页面

创建客户端并获取新令牌

创建 Client 后,您需要为其提供一个访问令牌。您可以使用数据库或文件系统中的现有令牌,或从 API 获取新的令牌。

use tda_sdk::Client;

let mut client = Client::new("CLIENT_ID", "REFRESH_TOKEN", None);

let access_token = client.get_access_token().unwrap();

// We must convert the token response into a token usable by the client.
client.set_access_token(&Some(access_token.into()));

创建客户端并使用旧令牌

use tda_sdk::{AccessToken, Client};

let access_token = AccessToken {
    expires_at: 0,
    token: "YOUR_TOKEN_STRING".to_string(),
    scope: Vec::new(),
};

let client = Client::new("CLIENT_ID", "REFRESH_TOKEN", Some(access_token));

获取所有账户的完整示例

设置令牌后,您可以调用任何 API 方法。您可以在 params 模块中查看所有请求参数。

use tda_sdk::{
    Client,
    params::GetAccountsParams,
    responses::SecuritiesAccount,
};

let mut client = Client::new("CLIENT_ID", "REFRESH_TOKEN", None);

let access_token = client.get_access_token().unwrap();
client.set_access_token(&Some(access_token.into()));

let accounts = client.get_accounts(GetAccountsParams::default()).unwrap();

for account in accounts {
    match account.securities_account {
        SecuritiesAccount::MarginAccount { r#type, account_id, .. } => {
            println!("Account ID: {}", account_id);
            println!("Account Type: {}", r#type);
        }
    }
}

令牌结构和过期

此库不处理令牌过期,这取决于用户。但是,AccessToken 结构体提供了一个方便的方法来检测其过期状态。

注意:响应结构 get_access_token() 与客户端期望的令牌结构不同。您需要解析响应。

use tda_sdk::{AccessToken, Client};

let client = Client::new("CLIENT_ID", "REFRESH_TOKEN", None);
let access_token: AccessToken = client.get_access_token().unwrap().into();

if access_token.has_expired() {
    panic!("Token has expired!");
}

依赖项

~3.5–5MB
~115K SLoC