Joseph Anderson
Joseph Anderson

Reputation: 4144

IPP Add Account - The Account Isn't Valid

I am trying to add a bank account to QuickBooks Online using IPP. My code fails and says the account isn't valid. Here is my code:

            Account account = new Account();
            account.Desc = "Desc";
            account.Name = "Checking2";
            account.Type = AccountTypeEnum.Revenue;
            account.TypeSpecified = true;
            account.Subtype = AccountSubtypeEnum.Bank.ToString();
            dataServices.Add(account);

Do I need to add fields? I also receive errors that an account with the same name exists, however, I do not see it.

I don't see any XML in my log:

            OAuthRequestValidator oauthValidator = new OAuthRequestValidator(accessToken, accessTokenSecret, ConfigurationManager.AppSettings["consumerKey"].ToString(), ConfigurationManager.AppSettings["consumerSecret"].ToString());
        ServiceContext context = new ServiceContext(oauthValidator, accessToken, companyID, IntuitServicesType.QBO);
        context.EnableServiceRequestsLogging = true;
        context.IdsLogger = new MyCustomLogger();
        dataServices = new DataServices(context);
        return "OK";


public class MyCustomLogger : ILogger
{
public MyCustomLogger()
{
}

public string ClearLog()
{
    try
    {
        string path = HttpContext.Current.Server.MapPath("/qblog.txt");

        if (File.Exists(path))
        {
            File.Delete(path);
        }

        return "OK";

    }
    catch (Exception ex)
    {
        return ex.ToString();
    }
}

public void Log(TraceLevel idsTraceLevel, string messageToWrite)
{
    string level = idsTraceLevel.ToString();
    WriteToLog(new ErrorMessage(MessageSeverity.Error, "QBFS", messageToWrite));
}

public string WriteToLog(ErrorMessage message)
{
    if (!String.IsNullOrEmpty(message.Message))
    {
        string path = HttpContext.Current.Server.MapPath(HttpContext.Current.Request.ApplicationPath + "/qblog.txt");
        FileStream fileStream = null;

        //If the file exists, then append it
        if (File.Exists(path))
        {
            fileStream = new FileStream(path, FileMode.Append);
        }
        else
        {
            fileStream = new FileStream(path, FileMode.OpenOrCreate);
        }
        StreamWriter sw = new StreamWriter(fileStream);
        try
        {
            sw.WriteLine(String.Format("{0} : {1} {2} {3}", message.ApplicationName, message.Severity, DateTime.Now, message.Message));
            return "OK";
        }
        //If there is an error, just do nothing. Don't stop.
        catch (Exception ex)
        {
            return ex.ToString();
        }
        finally
        {
            sw.Close();
            fileStream.Close();
        }

    }

    return "Message is null or empty";
}

}

Here is my xml request:

<?xml version="1.0" encoding="utf-8"?><q1:Account xmlns="http://www.intuit.com/sb/cdm/qbo" xmlns:q1="http://www.intuit.com/sb/cdm/v2"><q1:Name>Checking</q1:Name><q1:Desc>Desc</q1:Desc><q1:Subtype>Bank</q1:Subtype></q1:Account>

Here is my response:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><FaultInfo xmlns="http://www.intuit.com/sb/cdm/baseexceptionmodel/xsd"><Message>Another account is already using this name. Please use a different name.</Message><ErrorCode>BAD_REQUEST</ErrorCode><Cause>-11202</Cause></FaultInfo>

Upvotes: 1

Views: 141

Answers (1)

Joseph Anderson
Joseph Anderson

Reputation: 4144

I needed to specify the opening and current balance with the true variables:

            ac = new Account();
            ac.Desc = "Desc";
            ac.Name = "Testy";
            ac.Subtype = QboAccountDetailTypeEnum.Checking.ToString();
            ac.OpeningBalanceDate = DateTime.Now;
            ac.OpeningBalanceDateSpecified = true;
            ac.CurrentBalance = 0;
            ac.CurrentBalanceSpecified = true;
            dataServices.Add(ac);

My Subtype was also incorrect. I needed to use the QboAccountDetailTypeEnum.

Upvotes: 1

Related Questions