API returning errors for all requests
Problem reported by Adrian Bhagat 5 years ago
I am trying to make use of the API from a C# client but I am getting errors returned for all queries.
1) A simple query to listPaymentMethods or listAccountCodes returns null. 2) Listing invoices returns a message that the maximum message size has been exceeded. Increasing the max message size gives a null result. 3) Creating an invoice returns "You are trying to process a transaction prior to the opening accounting date." even though the creation date is set to today.
The C# example code provided in the documentation seems to be out of date.
I have included my code below. Any help you can give would be much appreciated.
class ClearbooksClient { public static string ServiceUrl = "https://secure.clearbooks.co.uk/api/accounting/soap/"; public static EndpointAddress endpoint = new EndpointAddress(ServiceUrl); public static string ApiKey = "redacted";
private static readonly Clearbooks.authenticate auth = new Clearbooks.authenticate
{
apiKey = ApiKey
};
public ClearbooksClient()
{
}
public async Task AddInvoice()
{
try
{
BasicHttpBinding binding = new BasicHttpBinding(BasicHttpSecurityMode.Transport)
{
//MaxReceivedMessageSize = 1048576
};
Clearbooks.AccountingPortClient client = new Clearbooks.AccountingPortClient(binding, endpoint);
Clearbooks.listPaymentMethodsResponse r1 = await client.listPaymentMethodsAsync(auth);
Clearbooks.PaymentMethod[] res1 = r1.listPaymentMethodsResult;
//res1 is null
Clearbooks.InvoiceQuery query2 = new Clearbooks.InvoiceQuery
{
ledger = "sales",
id = new int[] { 1000 }
};
Clearbooks.listInvoicesResponse r2 = await client.listInvoicesAsync(auth, query2);
Clearbooks.Invoice[] res2 = r2.listInvoicesResult;
//res2 is null
Clearbooks.InvoiceQuery query3 = new Clearbooks.InvoiceQuery
{
ledger = "sales",
status = "all",
};
Clearbooks.listInvoicesResponse r3 = await client.listInvoicesAsync(auth, query3);
Clearbooks.Invoice[] res3 = r3.listInvoicesResult;
//Throws exception "The maximum message size quota for incoming messages (65536) has been exceeded.
//If the MaxReceivedMessageSize is increased on the binding, res3 is null
Clearbooks.Invoice invoice = new Clearbooks.Invoice
{
dateCreated = DateTime.Now,
dateDue = DateTime.Now,
description = "Shop items",
type = "sales",
entityId = 2, //'shop customers'
creditTerms = 0,
status = "approved"
};
Clearbooks.Item item = new Clearbooks.Item
{
description = "Shop sales",
unitPrice = 123.00,
quantity = 1.0,
//vatRate
vat = 11.40,
vatSpecified = true,
type = 1001001 //'shop items'?
};
invoice.items = new Clearbooks.Item[] { item };
Clearbooks.createInvoiceResponse r4 = await client.createInvoiceAsync(auth, invoice);
//Throws exception: "You are trying to process a transaction prior to the opening accounting date."
Clearbooks.InvoiceReturn res4 = r4.createInvoiceResult;
Clearbooks.listAccountCodesResponse r5 = await client.listAccountCodesAsync(auth);
Clearbooks.AccountCode[] res5 = r5.listAccountCodesResult;
//res5 is null
return true;
}
catch (Exception ex)
{
Debug.WriteLine( ex.Message);
return false;
}
}
}