2020-02-22 22:56:06 +00:00
|
|
|
using System.Net.Http;
|
|
|
|
|
using System.Threading.Tasks;
|
2020-02-22 23:56:45 +00:00
|
|
|
using SuccessfulCode.BetfairApi.AccountModels;
|
|
|
|
|
using SuccessfulCode.BetfairApi.AccountModels.Enums;
|
2020-02-22 22:56:06 +00:00
|
|
|
|
2020-02-22 23:56:45 +00:00
|
|
|
namespace SuccessfulCode.BetfairApi
|
2020-02-22 22:56:06 +00:00
|
|
|
{
|
|
|
|
|
public class AccountApiClient
|
|
|
|
|
{
|
|
|
|
|
private readonly HttpClient _client;
|
|
|
|
|
private Authentication _authentication;
|
|
|
|
|
private const string _endpoint = "https://api.betfair.com/exchange/account/rest/v1.0/";
|
|
|
|
|
|
|
|
|
|
public AccountApiClient(Authentication authentication)
|
|
|
|
|
{
|
|
|
|
|
_client = new HttpClient();
|
|
|
|
|
_authentication = authentication;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Create 2 application keys for given user; one active and the other delayed
|
|
|
|
|
/// </summary>
|
|
|
|
|
public async Task<DeveloperApp> CreateDeveloperAppKeys(string appName)
|
|
|
|
|
{
|
|
|
|
|
var request = new
|
|
|
|
|
{
|
|
|
|
|
appName
|
|
|
|
|
};
|
|
|
|
|
var result = await ExecuteRequest<DeveloperApp>(_endpoint + "createDeveloperAppKeys/", request);
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Get all application keys owned by the given developer/vendor
|
|
|
|
|
/// </summary>
|
|
|
|
|
public async Task<DeveloperApp[]> GetDeveloperAppKeys()
|
|
|
|
|
{
|
|
|
|
|
var result = await ExecuteRequest<DeveloperApp[]>(_endpoint + "getDeveloperAppKeys/");
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Get available to bet amount.
|
|
|
|
|
/// </summary>
|
|
|
|
|
public async Task<AccountFundsResponse> GetAccountFunds(Wallet? wallet = null)
|
|
|
|
|
{
|
|
|
|
|
var request = new
|
|
|
|
|
{
|
|
|
|
|
wallet
|
|
|
|
|
};
|
|
|
|
|
var result = await ExecuteRequest<AccountFundsResponse>(_endpoint + "getAccountFunds/", request);
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Transfer funds between wallets
|
|
|
|
|
/// </summary>
|
|
|
|
|
public async Task<TransferResponse> TransferFunds(Wallet from, Wallet to, double amount)
|
|
|
|
|
{
|
|
|
|
|
var request = new
|
|
|
|
|
{
|
|
|
|
|
from,
|
|
|
|
|
to,
|
|
|
|
|
amount
|
|
|
|
|
};
|
|
|
|
|
var result = await ExecuteRequest<TransferResponse>(_endpoint + "transferFunds/", request);
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Get Account details.
|
|
|
|
|
/// </summary>
|
|
|
|
|
public async Task<AccountDetailsResponse> GetAccountDetails()
|
|
|
|
|
{
|
|
|
|
|
var result = await ExecuteRequest<AccountDetailsResponse>(_endpoint + "getAccountDetails/");
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Get vendor client id for customer account.
|
|
|
|
|
/// </summary>
|
|
|
|
|
public async Task<string> GetVendorClientId()
|
|
|
|
|
{
|
|
|
|
|
var result = await ExecuteRequest<string>(_endpoint + "getVendorClientId/");
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Returns the newly generate subscription token
|
|
|
|
|
/// </summary>
|
|
|
|
|
public async Task<string> GetApplicationSubscriptionToken(int? subscriptionLength = null, string clientReference = null)
|
|
|
|
|
{
|
|
|
|
|
var request = new
|
|
|
|
|
{
|
|
|
|
|
subscriptionLength,
|
|
|
|
|
clientReference
|
|
|
|
|
};
|
|
|
|
|
var result = await ExecuteRequest<string>(_endpoint + "getApplicationSubscriptionToken/", request);
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Activate the subscription token for the customer
|
|
|
|
|
/// </summary>
|
|
|
|
|
public async Task<Status> ActivateApplicationSubscription(string subscriptionToken)
|
|
|
|
|
{
|
|
|
|
|
var request = new
|
|
|
|
|
{
|
|
|
|
|
subscriptionToken
|
|
|
|
|
};
|
|
|
|
|
var result = await ExecuteRequest<Status>(_endpoint + "activateApplicationSubscription/", request);
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Cancel application subscription
|
|
|
|
|
/// </summary>
|
|
|
|
|
public async Task<Status> CancelApplicationSubscription(string subscriptionToken)
|
|
|
|
|
{
|
|
|
|
|
var request = new
|
|
|
|
|
{
|
|
|
|
|
subscriptionToken
|
|
|
|
|
};
|
|
|
|
|
var result = await ExecuteRequest<Status>(_endpoint + "cancelApplicationSubscription/", request);
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Update an application subscription with a new expiry date
|
|
|
|
|
/// </summary>
|
|
|
|
|
public async Task<string> UpdateApplicationSubscription(string vendorClientId, int subscriptionLength)
|
|
|
|
|
{
|
|
|
|
|
var request = new
|
|
|
|
|
{
|
|
|
|
|
vendorClientId,
|
|
|
|
|
subscriptionLength
|
|
|
|
|
};
|
|
|
|
|
var result = await ExecuteRequest<string>(_endpoint + "updateApplicationSubscription/", request);
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// List of subscription tokens for an application
|
|
|
|
|
/// </summary>
|
|
|
|
|
public async Task<ApplicationSubscription[]> ListApplicationSubscriptionTokens(SubscriptionStatus? subscriptionStatus = null)
|
|
|
|
|
{
|
|
|
|
|
var request = new
|
|
|
|
|
{
|
|
|
|
|
subscriptionStatus
|
|
|
|
|
};
|
|
|
|
|
var result = await ExecuteRequest<ApplicationSubscription[]>(_endpoint + "listApplicationSubscriptionTokens/", request);
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// List of subscription tokens associated with the account
|
|
|
|
|
/// </summary>
|
|
|
|
|
public async Task<AccountSubscription[]> ListAccountSubscriptionTokens()
|
|
|
|
|
{
|
|
|
|
|
var result = await ExecuteRequest<AccountSubscription[]>(_endpoint + "listAccountSubscriptionTokens/");
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Identify all subscriptions, regardless of status, for a single client for a single application key.
|
|
|
|
|
/// The operation may be called by either the application key owner or a client.
|
|
|
|
|
/// </summary>
|
|
|
|
|
public async Task<SubscriptionHistory[]> GetApplicationSubscriptionHistory(string vendorClientId = null, string applicationKey = null)
|
|
|
|
|
{
|
|
|
|
|
var request = new
|
|
|
|
|
{
|
|
|
|
|
vendorClientId,
|
|
|
|
|
applicationKey
|
|
|
|
|
};
|
|
|
|
|
var result = await ExecuteRequest<SubscriptionHistory[]>(_endpoint + "getApplicationSubscriptionHistory/", request);
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Get account statement
|
|
|
|
|
/// </summary>
|
|
|
|
|
public async Task<AccountStatementReport> GetAccountStatement(string locale = null, int? fromRecord = null, int? recordCount = null, TimeRange itemDateRange = null, IncludeItem? includeItem = null, Wallet? wallet = null)
|
|
|
|
|
{
|
|
|
|
|
var request = new
|
|
|
|
|
{
|
|
|
|
|
locale,
|
|
|
|
|
fromRecord,
|
|
|
|
|
recordCount,
|
|
|
|
|
itemDateRange,
|
|
|
|
|
includeItem,
|
|
|
|
|
wallet
|
|
|
|
|
};
|
|
|
|
|
var result = await ExecuteRequest<AccountStatementReport>(_endpoint + "getAccountStatement/", request);
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Returns a list of currency rates based on given currency
|
|
|
|
|
/// </summary>
|
|
|
|
|
public async Task<CurrencyRate[]> ListCurrencyRates(string fromCurrency = null)
|
|
|
|
|
{
|
|
|
|
|
var request = new
|
|
|
|
|
{
|
|
|
|
|
fromCurrency
|
|
|
|
|
};
|
|
|
|
|
var result = await ExecuteRequest<CurrencyRate[]>(_endpoint + "listCurrencyRates/", request);
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Generate auth code for web vendor, used to get vendor session
|
|
|
|
|
/// </summary>
|
|
|
|
|
public async Task<AuthorisationResponse> GetAuthorisationCode(string vendorId)
|
|
|
|
|
{
|
|
|
|
|
var request = new
|
|
|
|
|
{
|
|
|
|
|
vendorId
|
|
|
|
|
};
|
|
|
|
|
var result = await ExecuteRequest<AuthorisationResponse>(_endpoint + "getAuthorisationCode/", request);
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Generate web vendor session based on a standard session identifiable by auth code, vendor secret and app key
|
|
|
|
|
/// </summary>
|
|
|
|
|
public async Task<VendorAccessTokenInfo> Token(string client_id, string client_secret, GrantType grant_type, string code = null, string refresh_token = null)
|
|
|
|
|
{
|
|
|
|
|
var request = new
|
|
|
|
|
{
|
|
|
|
|
client_id,
|
|
|
|
|
grant_type,
|
|
|
|
|
code,
|
|
|
|
|
client_secret,
|
|
|
|
|
refresh_token
|
|
|
|
|
};
|
|
|
|
|
var result = await ExecuteRequest<VendorAccessTokenInfo>(_endpoint + "token/", request);
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Return details about a vendor from its identifier. Response includes Vendor Name and URL.
|
|
|
|
|
/// </summary>
|
|
|
|
|
public async Task<VendorDetails> GetVendorDetails(string vendorId)
|
|
|
|
|
{
|
|
|
|
|
var request = new
|
|
|
|
|
{
|
|
|
|
|
vendorId
|
|
|
|
|
};
|
|
|
|
|
var result = await ExecuteRequest<VendorDetails>(_endpoint + "getVendorDetails/", request);
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Remove the link between an account and a vendor web app. This will remove the refreshToken for this user-vendor pair subscription.
|
|
|
|
|
/// </summary>
|
|
|
|
|
public async Task<Status> RevokeAccessToWebApp(long vendorId)
|
|
|
|
|
{
|
|
|
|
|
var request = new
|
|
|
|
|
{
|
|
|
|
|
vendorId
|
|
|
|
|
};
|
|
|
|
|
var result = await ExecuteRequest<Status>(_endpoint + "revokeAccessToWebApp/", request);
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Retrieve all vendors applications currently subscribed to by the user making the request
|
|
|
|
|
/// </summary>
|
|
|
|
|
public async Task<VendorDetails[]> ListAuthorizedWebApps()
|
|
|
|
|
{
|
|
|
|
|
var result = await ExecuteRequest<VendorDetails[]>(_endpoint + "listAuthorizedWebApps/");
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Return whether an account has authorised a web app.
|
|
|
|
|
/// </summary>
|
|
|
|
|
public async Task<bool> IsAccountSubscribedToWebApp(string vendorId)
|
|
|
|
|
{
|
|
|
|
|
var request = new
|
|
|
|
|
{
|
|
|
|
|
vendorId
|
|
|
|
|
};
|
|
|
|
|
var result = await ExecuteRequest<bool>(_endpoint + "isAccountSubscribedToWebApp/", request);
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Return relation between a list of users and an affiliate
|
|
|
|
|
/// </summary>
|
|
|
|
|
public async Task<AffiliateRelation[]> GetAffiliateRelation(string[] vendorClientIds)
|
|
|
|
|
{
|
|
|
|
|
var request = new
|
|
|
|
|
{
|
|
|
|
|
vendorClientIds
|
|
|
|
|
};
|
|
|
|
|
var result = await ExecuteRequest<AffiliateRelation[]>(_endpoint + "getAffiliateRelation/", request);
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private Task<T> ExecuteRequest<T>(string endpoint, object request = null)
|
|
|
|
|
{
|
|
|
|
|
return _authentication.ExecuteRequest<T>(endpoint, request);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|