正确的。您可以通过放入 access_token 来下载 PDF。
这是我设法为 Odoo v.12 弄明白的唯一方法。在反复将我的头撞在砖墙上之后。我的示例编程语言是 Python 3,而不是 C#,但我相信你可以适应它。
odoo_url_host = "https://company.odoo.com"
可以在发票的 JSON 响应中找到access_token 。
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,请在尝试获取访问令牌之前执行此操作:
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。无论如何:) 快乐编码。