You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Odoo 15中高效从ASP.NET电商网站采集发票数据并创建日记账?

解决方案:ASP.NET 电商网站同步发票至 Odoo 15 会计模块

针对你提到的 ASP.NET 电商网站向 Odoo 15 会计模块同步发票并创建对应日记账的需求,以下是几个高效简便的实现方案,避开官方文档提到的 XML-RPC 对 ASP.NET 的支持问题:

方案一:使用 Odoo REST API(推荐)

Odoo 15 支持 REST API 接口,这对 ASP.NET 来说是更友好的选择,无需依赖特定的 XML-RPC 库,直接用 HttpClient 即可完成交互:

  • 认证方式:使用 Basic Auth,将 Odoo 用户名和 API 密钥(在用户设置中生成)进行 Base64 编码后放入请求头
  • 核心步骤:
    1. 先创建日记账(如果需要自定义而非使用默认日记账):调用 account.journal 模型的 create 方法,传入名称、类型等参数
    2. 创建发票:调用 account.move 模型的 create 方法,关联刚创建的日记账 ID,同时传入发票的客户、金额、明细等数据
  • 示例代码片段:
using System.Net.Http;
using System.Text;
using System.Text.Json;

var httpClient = new HttpClient();
var authToken = Convert.ToBase64String(Encoding.ASCII.GetBytes("your-odoo-username:your-api-key"));
httpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", authToken);

// 创建日记账
var journalPayload = new
{
    name = "电商订单日记账",
    type = "sale",
    code = "ECOM-SALE",
    company_id = 1 // 替换为你的公司ID
};
var journalContent = new StringContent(JsonSerializer.Serialize(journalPayload), Encoding.UTF8, "application/json");
var journalResponse = await httpClient.PostAsync("https://your-odoo-instance/api/v2/object/account.journal/create", journalContent);
var journalResult = await journalResponse.Content.ReadFromJsonAsync<Dictionary<string, object>>();
var journalId = (int)journalResult["id"];

// 创建发票
var invoicePayload = new
{
    partner_id = 23, // 替换为对应客户ID
    journal_id = journalId,
    move_type = "out_invoice",
    invoice_line_ids = new[]
    {
        new {
            product_id = 45, // 替换为对应产品ID
            quantity = 1,
            price_unit = 99.99
        }
    }
};
var invoiceContent = new StringContent(JsonSerializer.Serialize(invoicePayload), Encoding.UTF8, "application/json");
var invoiceResponse = await httpClient.PostAsync("https://your-odoo-instance/api/v2/object/account.move/create", invoiceContent);

方案二:使用第三方 XML-RPC 库

Odoo 官方未提供 ASP.NET 的 XML-RPC SDK,但 XML-RPC 是标准协议,可通过第三方 NuGet 库实现交互,推荐使用 CookComputing.XmlRpcV2:

  • 步骤:
    1. 安装 NuGet 包:Install-Package CookComputing.XmlRpcV2
    2. 定义 Odoo XML-RPC 接口的代理类,对应 Odoo 的 execute_kw 方法
    3. 实例化代理类,传入 Odoo 实例地址,调用方法完成发票和日记账的创建
  • 示例代码片段:
using CookComputing.XmlRpc;

public interface IOdooXmlRpc : IXmlRpcProxy
{
    [XmlRpcMethod("execute_kw")]
    object ExecuteKw(string db, int uid, string password, string model, string method, object[] args, Dictionary<string, object> kwargs);
}

// 初始化代理
var proxy = XmlRpcProxyGen.Create<IOdooXmlRpc>();
proxy.Url = "https://your-odoo-instance/xmlrpc/2/object";

// 认证获取UID(如果未提前获取)
var authProxy = XmlRpcProxyGen.Create<IOdooXmlRpc>();
authProxy.Url = "https://your-odoo-instance/xmlrpc/2/common";
var uid = (int)authProxy.ExecuteKw("your-db-name", null, null, "authenticate", new object[] { "your-db-name", "username", "password", new Dictionary<string, object>() }, null);

// 创建日记账
var journalArgs = new object[]
{
    new Dictionary<string, object>
    {
        { "name", "电商订单日记账" },
        { "type", "sale" },
        { "code", "ECOM-SALE" },
        { "company_id", 1 }
    }
};
var journalId = (int)proxy.ExecuteKw("your-db-name", uid, "password", "account.journal", "create", journalArgs, null);

// 创建发票
var invoiceArgs = new object[]
{
    new Dictionary<string, object>
    {
        { "partner_id", 23 },
        { "journal_id", journalId },
        { "move_type", "out_invoice" },
        { "invoice_line_ids", new[]
            {
                new object[] { 0, 0, new Dictionary<string, object>
                    {
                        { "product_id", 45 },
                        { "quantity", 1 },
                        { "price_unit", 99.99 }
                    }
                }
            }
        }
    }
};
var invoiceId = (int)proxy.ExecuteKw("your-db-name", uid, "password", "account.move", "create", invoiceArgs, null);

方案三:中间层服务(适合复杂场景)

如果上述两种方案不符合你的需求,可搭建一个轻量中间层(比如用 Python),作为 ASP.NET 和 Odoo 的桥梁:

  • ASP.NET 通过 REST 请求将发票数据发送到中间层服务
  • 中间层服务使用 Odoo 官方支持的 Python XML-RPC 库与 Odoo 交互,完成日记账和发票的创建
  • 优势:隔离 ASP.NET 与 Odoo 的直接交互,便于后续扩展和维护

内容的提问来源于stack exchange,提问作者Mahfujul Hasan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 18:42:43