xml - 如何使用 Odoo 12 使用他们的 API 将数据发布到其他公司?
问题描述
我有一个公司的 API,我必须从 odoo发布我的数据。我想为此使用请求模块。但我不知道它是否适用于 Odoo。我必须发布一些数据,例如用户名、密码、发票号码、总销售额等。
如何将数据发送到外部 API?数据必须以 JSON 格式发送。
将数据从 odoo 发送到其他 API 的另一种方式是什么?
单击该按钮时,我在发票表单中有一个按钮,必须发布数据并获取响应消息。我试过这个。
# -*- coding: utf-8 -*-
import datetime
import requests
import logging
from odoo import models, fields, api
logging.basicConfig(format='%(asctime)s %(levelname)-8s [%(filename)s:%(lineno)d] %(message)s',
datefmt='%d-%m-%Y %H:%M:%S',
level=logging.DEBUG,
filename='logs.txt'
)
logger = logging.getLogger('ird')
class invoice_ird(models.Model):
_inherit = "account.invoice"
def send_bill_ird(self):
payload = {
'username': "Test_CBMS",
'password': "test@321",
'seller_pan': f"{self.company_id.vat}",
'buyer_pan': f"{self.partner_id.vat}",
'buyer_name': f"{self.partner_id.parent_id}",
'fiscal_year': "2076.077",
'invoice_number': f"{self.number}",
'invoice_date': f"{self.date_invoice}",
'total_sales': self.amount_total,
'taxable_sales_vat': self.amount_untaxed,
'vat': self.amount_tax,
'excisable_amount': 0,
'excise': 0,
'taxable_sales_hst': 0,
'hst': 0,
'amount_for_esf': 0,
'esf': 0,
'export_sales': 0,
'tax_exempted_sales': 0,
'isrealtime': True,
'datetimeclient': datetime.datetime.now(),
}
r = requests.post('http://103.1.92.174:9050/api/bill', json=payload)
logger.info(f'Response Messages: {r}, {r.status_code}')
#print(r)
#print(r.text)
为什么没有创建我的logs.txt文件,如何查看我的响应消息?有没有最好的工作方式?
我的 XML 文件
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="invoice_to_ird" model="ir.ui.view">
<field name="name">inovice.to.ird</field>
<field name="model">account.invoice</field>
<field name="inherit_id" ref="account.invoice_form"/>
<field name="arch" type="xml">
<xpath position="after" expr="//form[@class = 'o_invoice_form']/header/button[@name = 'action_invoice_draft']">
<button class="oe_highlight" name="send_bill_ird" type="action" string="Upload To IRD" attrs="{'invisible':[('state', '!=','paid')]}" />
</xpath>
</field>
</record>
</odoo>
解决方案
您试图向他们发送字典而不是 json 数据。修复此更改
r = requests.post('http://103.1.92.174:9050/api/bill', json=payload)
至
r = requests.post('http://103.1.92.174:9050/api/bill', data=json.dumps(payload))
推荐阅读
- python - 为什么我的 Node.js gRPC 客户端需要 3 秒才能向我的 Python gRPC 服务器发送请求?
- javascript - 使用 (yourdomain.com/username) 的 firebase.json 中的重写规则配置 Firebase 托管行为
- docker - Docker Compose 将一项服务附加到标准输入和标准输出
- reactjs - 反应中渲染和重新渲染之间的区别?
- angular - 在 Angular 8 中单击按钮时多次调用 Subscribe() 方法
- c# - 我的 ViewModel 流程正确吗?如何将其发送回控制器并在控制器操作上刷新它?
- javascript - 如何通过单击正方形在使用 for 循环创建的板上显示 X
- c# - 更改 TextRange 字体颜色,但不更改将在其旁边写入的文本
- javascript - JS Slider 淡化图像而不是简单的改变
- php - 使用 PHP 将表单数据插入 MYSQL 数据库