【发布时间】:2015-06-14 17:54:45
【问题描述】:
有谁知道如何以编程方式检查 Twilio 中的帐户余额(通过 API)?没有实施吗?
【问题讨论】:
有谁知道如何以编程方式检查 Twilio 中的帐户余额(通过 API)?没有实施吗?
【问题讨论】:
您可以获取 Twilio Account details,然后使用来自帐户响应的 subresource_uris.balance 请求获得余额
{
"status": "active",
"subresource_uris": {
...
"balance": "/2010-04-01/Accounts/ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/Balance.json"
},
"type": "Full",
...
}
这是一个 sn-p - https://gist.github.com/andriichuk/d1c81e58398b19979a3ddbe8a64b316b
【讨论】:
balance 属性,但在向该端点发出 HTTP GET 时收到了 404 状态代码。我不认为 /Balance 可用于子帐户,只有主项目帐户。
/2010-04-01/Accounts/{AC####}/Usage/Records.json?Category=totalprice
无法通过 Twilio API 检查帐户余额。
请参阅 REST API 文档了解可能的情况:https://www.twilio.com/docs/api/rest
【讨论】:
2020 年 6 月 27 日更新 - Twilio 的网站现在包含一个示例 cURL 脚本,它可以包装在 HTML GET 请求中: https://support.twilio.com/hc/en-us/articles/360025294494-Check-Your-Twilio-Project-Balance
这是我用来获取值的 C# 代码:
using System.Net;
using Newtonsoft.Json;
string url = "https://api.twilio.com/2010-04-01/Accounts/" + accountSid + "/Balance.json";
var client = new WebClient();
client.Credentials = new NetworkCredential(accountSid, authToken);
string responseString = client.DownloadString(url);
dynamic responseObject = JsonConvert.DeserializeObject<object>(responseString);
double accountBalance = Double.Parse(responseObject["balance"].Value);
accountBalance = Math.Round((double)accountBalance,2);
【讨论】:
我确认没有 API 调用来获取您的帐户余额。即使在这个问题被问到两年后。我已经提交了一张要求采取这种基本行动的票,并被告知“它在to-do 名单上”,但他们并不太有说服力。无论出于何种原因,设计使您无法保持平衡。很遗憾,因为他们拥有如此强大的 API 和功能集。
【讨论】:
这可以通过使用 HttpClient 来实现。 这是一个 C# 示例:
public static string GetTwilioBalance(string accountSid, string authToken)
{
// declare variable to assign later on
dynamic balance = null;
// check required parameters value
if (!string.IsNullOrEmpty(accountSid) && !string.IsNullOrEmpty(authToken))
{
// initialize the TwilioClient using credentials passed as parameters
TwilioClient.Init(accountSid, authToken);
// declare instance of HttpClient
using (var httpClient = new HttpClient())
{
// declaring and assigning the authorization value to pass as a parameter in the request to the API
string base64authorization = Convert.ToBase64String(Encoding.ASCII.GetBytes(accountSid + ":" + authToken));
// adding it and using Basic authentication
httpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", base64authorization);
// receiving the raws response (got url from reading docs and other posts from other languages)
HttpResponseMessage response = httpClient.GetAsync("https://api.twilio.com/2010-04-01/Accounts/" + accountSid + "/Balance.json").Result;
// assigning the content to a variable
HttpContent content = response.Content;
// reading the string
string result = content.ReadAsStringAsync().Result;
// multiple ways of reading Json (which we will receive as result, here are 2
//dynamic value = JObject.Parse(result);
//string result1 = value.balance;
//string result2 = value["balance"];
// I prefer this one but this is a preference :)
balance = JObject.Parse(result)["balance"].ToString();
}
}
// you can handle this as you like
// for example purposes I am returning either the value of the Balance or a string value to flag/check afterwards if not succesful
return (balance != null) ? balance : "BalanceNotRetrieved";
}
你可以这样使用它:
string twilioBalance = GetTwilioBalance(accountSid, authToken);
希望它对某人有所帮助!
【讨论】:
对于那些使用node.js (javascript) 的人来说,最好的方法是:
require('dotenv').config();
const client = require('twilio')(process.env.ACCOUNT_SID, process.env.AUTH_TOKEN)
client.balance.fetch()
.then((data) => {
const balance = Math.round(data.balance * 100) / 100;
const currency = data.currency;
console.log(`Your account balance is ${balance} ${currency}.`)
});
更多信息 => https://www.twilio.com/blog/check-twilio-account-balance-javascript
完美运行!
【讨论】:
您可以使用此脚本通过 Python 获取余额:
from twilio.rest import Client
client = Client()
balance_data = client.api.v2010.balance.fetch()
balance = float(balance_data.balance)
currency = balance_data.currency
print(f'Your account has {balance:.2f}{currency} left.')
检查此Tutorial 为我工作,为帐户和子帐户工作
【讨论】:
我抓取所有记录并在 python 中使用它(for loop in records):
Balance = 1024 - round_decimal(r.price)
1024 是我支付的金额(需要在适用时更新),价格是我从 API 中花费的金额。这是我想出的最好的,将您所知道的与 API 提供的有限信息相结合。
【讨论】: