api - Odoo v12 API 获取发票 PDF

标签 api odoo xml-rpc invoice odoo-12

This question让我开始使用我的 C# Odoo API 实现。我有使用 CookComputing.XmlRpcV2 检索发票列表的工作代码。

我想要实现的是检索/下载所选发票的 PDF 的选项。有人知道我需要什么来完成这项工作吗?

当我搜索时,我发现论坛帖子声明自 V11 以来报告不起作用,例如 this one .我也没有在 V12 的在线文档中看到它,尽管在 V10 的页面底部提到了它。

更新

有人提到要构造一个 URL:

http://localhost:8069/my/invoices/1?report_type=pdf&download=true&access_token=<ACCESSTOKEN>

在哪里 1是发票 ID。从技术上讲,这是可行的,但需要我使用浏览器登录到门户。即使我可以从我的 C# 服务登录到门户,我也不知道在哪里/如何检索正确的访问 token 。我可以看到这是 GUID 形式的。有谁知道这是否是我可以从 OAuth2 REST API(这是一个付费模块 b.t.w.)中检索到的同一个 token ?

最佳答案

正确的。您可以通过放入 access_token 来下载 PDF。

这是我设法为 Odoo v.12 弄明白的唯一方法。在反复将我的头撞在砖墙上之后。我的示例编程语言是 Python 3,而不是 C#,但我相信你可以适应它。

odoo_url_host = "https://company.odoo.com"

访问 token 可以在发票的 JSON 响应中找到。
invoice_id = 1234
models = xmlrpcclient.ServerProxy('{}/xmlrpc/2/object'.format(odoo_url_host))
invoice = models.execute_kw(db, uid, password, "account.invoice", read, [[invoice_id]])

如果您取回找到的发票,您可以像这样使用响应:
print(invoice["access_token"])

download_url = "%s/%s/my/invoices/%d?report_type=pdf&download=true&access_token=%s" % (odoo_url_host, invoice_id, invoice["access_token"])

如果您只是想自动下载,可以这样做:
import urllib.request

pdf_destination = "./invoices/invoice-%d.pdf" % invoice_id

urllib.request.urlretrieve(download_url, pdf_destination)

您需要更改为 Python 2.7 编写的方式。

此外,请确保您单击发票上的“共享”(在 odoo 内),因为有时不会为该发票生成 access_token,否则返回 false。

或者,如果您想无缝生成 access_token,请在尝试获取访问 token 之前执行此操作:
ctx = {'active_model': 'account.invoice', 'active_id': invoice_id}
print(models.execute_kw(db, uid, password, 'portal.share', 'default_get',[{}],{'context': ctx}))

这应该会为您提供整个文档的 share_link,但您只需要生成 access_token。如果您愿意,可以从 JSON 响应中的 share_link 值中提取 access_token。无论如何:) 快乐编码。

关于api - Odoo v12 API 获取发票 PDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54441130/

相关文章:

api - 这个api是restful吗?

odoo - 如何编写接受多个子类的父类(super class)字段?

python - 如何将输出重定向到客户端

java - XML-RPC - 在 Java 中从服务器向客户端抛出异常

python - 在 XMLRPC 中处理 unicode 数据

php - 从 json api 到 mysql

api - REST API 中的并发

c# - Exchange 2013 API - 获取房间属性

python - 如何更改 odoo 9 中 float 字段的文本对齐方式

odoo - 将自定义字段值从销售订单传递到发票