如果第一个 JSON 参数不是“params”,如何从 Odoo 中的 Webhook 访问数据?
Posted
技术标签:
【中文标题】如果第一个 JSON 参数不是“params”,如何从 Odoo 中的 Webhook 访问数据?【英文标题】:How to Access Data from Webhook in Odoo if first JSON parameter is not "params"? 【发布时间】:2019-12-26 19:56:43 【问题描述】:我正在尝试将来自第三方软件的 webhook 接收到 Odoo。我可以收到请求,但数据是空白的。
这是来自 webhook 的默认 JSON:
"event": "PARTICLE_EVENT_NAME",
"data": "PARTICLE_EVENT_VALUE",
"coreid": "PARTICLE_DEVICE_ID",
"published_at": "PARTICLE_PUBLISHED_AT"
但是,使用下面的 Odoo 代码,如果我使用 _logger “打印(kw)”,则它是一个空白字典。
from odoo import http
import json
import datetime
import logging
_logger = logging.getLogger(__name__)
class EquipmentTrackerApi(http.Controller):
@http.route('/api/v1/tracker_data', auth='public', csrf=False, type='json', methods=['POST'])
def _create_tracker_data(self, **kw):
_request = kw
_logger.info(kw)
在我的测试中,如果我将 JSON 更改为以下内容,那么我可以读取数据并完成我的操作。但是问题是我实际上无法在生产中改变它。那么如果我无法进行以下更改,我该如何访问 JSON 数据呢?
"params":
"event": "PARTICLE_EVENT_NAME",
"data": "PARTICLE_EVENT_VALUE",
"coreid": "PARTICLE_DEVICE_ID",
"published_at": "PARTICLE_PUBLISHED_AT"
我听说这是 Odoo 中的一个问题,以及它如何处理请求,但看不到任何解决方案。任何想法如何在 Odoo 中解决这个问题?我在 v12 和 v13 中遇到了同样的问题。
【问题讨论】:
【参考方案1】:你可以试试:
from odoo import http
import json, logging, request
_logger = logging.getLogger(__name__)
class EquipmentTrackerApi(http.Controller):
@http.route('/api/v1/tracker_data', auth='public', csrf=False, type='json', methods=['POST'])
def _create_tracker_data(self, **kw):
# data = json.loads(request.httprequest.args)
data = json.loads(request.httprequest.data)
_request = data
_logger.info(data)
【讨论】:
以上是关于如果第一个 JSON 参数不是“params”,如何从 Odoo 中的 Webhook 访问数据?的主要内容,如果未能解决你的问题,请参考以下文章