首页 > 解决方案 > 如何使用 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>

标签: xmlpython-3.xpython-requestsodooodoo-12

解决方案


您试图向他们发送字典而不是 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))


推荐阅读