【问题标题】:Creating a new invoice创建新发票
【发布时间】:2020-01-21 20:26:39
【问题描述】:

我可以看到使用来自 Xero-NetStandard 的 Xero OAuth 2 示例的组织的所有发票列表。我想为特定租户/组织创建新发票,如何创建发票对象以及 POST 方法应该是什么样的?下面的代码是我目前所拥有的:

        public async Task<string> InvoicesPostAsync() 
    {            
        var token = await _tokenStore.GetAccessTokenAsync(User.XeroUserId());
        var connections = await _xeroClient.GetConnectionsAsync(token);

        List<string> allinvoicenames = new List<string>();
        foreach (var connection in connections)
        {
            var tenantID = connection.TenantId.ToString();
            var request = (HttpWebRequest)WebRequest.Create("https://api.xero.com/api.xro/2.0/Invoices");

            var postData = "thing1=hello";
            var data = Encoding.ASCII.GetBytes(postData);
            request.Method = "POST";                
            request.Headers.Add("Authorization" , "Bearer "+ token);
            request.Headers.Add("Xero-tenant-id" , tenantID);
            request.ContentType = "application/x-www-form-urlencoded";
            request.Credentials = CredentialCache.DefaultCredentials;
            request.ContentLength = data.Length;

        using (var stream = request.GetRequestStream())
            {
                stream.Write(data, 0, data.Length);
            }
            var response = (HttpWebResponse)request.GetResponse();
        }

【问题讨论】:

    标签: xero-api


    【解决方案1】:

    出于好奇,您指的是哪个 OAuth2.0 示例?

    我制作的这个示例应用使用了我们新的 OAuth2.0 SDK - https://github.com/XeroAPI/xero-netstandard-oauth2-samples/tree/master/XeroOAuth2Sample

    相同的 SDK 可用于创建发票。下面是一些示例代码

    var invoice = new Invoice
    {
        Type = Invoice.TypeEnum.ACCREC,
        Contact = new Contact
        {
            Name = "Some contact name"
        },
        Date = DateTime.Today,
        DueDate = DateTime.Today.AddDays(7),
        Status = Invoice.StatusEnum.DRAFT,
        LineItems = new List<LineItem>
        {
            new LineItem
            {
                Description = "Manchester United Scarf",
                Quantity = 1,
                UnitAmount = 24.99,
                AccountCode = "200"
            }
        }
    };
    
    var createdInvoice = await _accountingApi.CreateInvoiceAsync(accessToken, tenantId, invoice);
    

    【讨论】:

    • 我使用了您提到的链接中的相同示例应用程序。我会试试代码,谢谢你的帮助。
    • 我可以使用上面的代码添加发票。还有一件事,如果我想更新已经存在的发票并将状态更改为 PAID,是否可以这样做?
    • 您不能直接将发票更新为 PAID。对于将状态更新为已支付的发票,其余额必须为 0,因此您需要创建付款/贷项通知单/预付款/超额付款并将发票余额分配给它们,直到发票没有剩余余额。
    猜你喜欢
    • 2018-11-05
    • 1970-01-01
    • 2011-08-20
    • 1970-01-01
    • 1970-01-01
    • 2012-08-11
    • 1970-01-01
    • 2014-06-19
    • 2015-06-04
    相关资源
    最近更新 更多