支付交易

class odoo.addons.payment.models.payment_transaction.PaymentTransaction[源代码]
_apply_updates(payment_data)[源代码]

根据从提供商收到的支付数据更新交易。

更新通常包括支付状态、提供商参考和所选支付方法。

不应直接调用此方法;支付数据应通过 _process() 处理。

提供商必须重写此方法以根据支付数据更新交易。

注意:来自 _process()self.ensure_one()

参数

payment_data (dict) – 提供商发送的支付数据。

返回

_compute_reference(provider_code, prefix=None, separator='-', **kwargs)[源代码]

为交易计算唯一参考编号。

如果不存在具有相同前缀的其他交易,则参考编号对应于前缀。否则,它遵循以下模式:{computed_prefix}{separator}{sequence_number} ,其中:

  • {computed_prefix} 是:

    • 提供的自定义前缀(如果有)。

    • 如果未填写自定义前缀但填写了 kwargs,则为 _compute_reference_prefix() 的计算结果。

    • 'tx-{datetime}' 如果既未填写自定义前缀也未填写 kwargs。

  • {separator} 是用于分隔前缀和序列号的字符串。

  • {sequence_number} 是共享相同前缀的参考编号序列中的下一个整数。如果只有一个匹配的参考编号,序列从 1 开始。

Example

  • 给定自定义前缀 'example' ,且其与现有参考编号无匹配项,则完整参考编号将为 'example'

  • 给定自定义前缀 'example' ,且其与现有参考编号 'example' 匹配,并使用自定义分隔符 '-' ,则完整参考编号将为 'example-1'

  • 给定 kwargs {'invoice_ids': [1, 2]}、自定义分隔符 '-' 且无自定义前缀,如果没有现有参考编号具有相同前缀,则完整参考编号将为 'INV1-INV2'`(或类似),或者如果有 `n 个现有参考编号具有相同前缀,则为 'INV1-INV2-n'

参数
  • provider_code (str) – 处理交易的提供商代码。

  • prefix (str) – 用于计算完整参考编号的自定义前缀。

  • separator (str) – 用于分隔前缀和后缀的自定义分隔符。

  • kwargs (dict) – 如果没有提供自定义前缀,则传递给 _compute_reference_prefix() 的可选值。

返回

交易的唯一参考编号。

返回类型

str

_compute_reference_prefix(separator, **values)[源代码]

根据交易值计算参考前缀。

注意:此方法应在 sudo 模式下调用,以便访问交易值中引用的文档(如发票、销售订单)。

参数
  • separator (str) – 用于分隔计算参考前缀各部分的自定义分隔符。

  • values (dict) – 用于计算参考前缀的交易值。

返回

计算出的参考前缀。

返回类型

str

_extract_amount_data(payment_data)[源代码]

从支付数据中提取金额、货币和舍入精度。

提供商必须重写此方法以从支付数据中解析金额数据。如果提供商返回 None ,则跳过金额验证。

参数

payment_data (dict) – 提供商发送的支付数据。

返回

金额数据,格式为 {amount: float, currency_code: str, precision_digits: int} 。

返回类型

dict|None

_extract_reference(provider_code, payment_data)[源代码]

从支付数据中提取交易参考。

提供商必须重写此方法以从支付数据中提取参考。

参数
  • provider_code (str) – 处理交易的提供商代码。

  • payment_data (dict) – 提供商发送的支付数据。

返回

交易参考。

返回类型

str

_extract_token_values(payment_data)[源代码]

从支付数据中提取令牌的创建值。

提供商可以重写此方法以基于支付数据提供自己的令牌数据。

注意:来自 :meth: _tokenize 的 self.ensure_one()

参数

payment_data (dict) – 提供商发送的数据。

返回

创建支付令牌的数据。

返回类型

dict

_get_specific_create_values(provider_code, values)[源代码]

使用提供商特定的值完成 create 方法的值。

为了添加自己的创建值,提供商必须覆盖此方法并返回一个值字典。提供商特定的值优先于通用创建值字典中的值。

参数
  • provider_code (str) – 处理交易的提供商代码。

  • values (dict) – 原始创建值。

返回

提供商特定的创建值字典。

返回类型

dict

_get_specific_processing_values(processing_values)[源代码]

返回用于处理交易的提供商特定值的字典。

为了使提供商添加自己的处理值,它必须重写此方法,并基于此方法返回的通用值返回一个包含提供商特定值的字典。提供商特定值优先于通用处理值字典中的值。

参数

processing_values (dict) – 交易的通用处理值。

返回

提供商特定处理值的字典。

返回类型

dict

_get_specific_rendering_values(processing_values)[源代码]

返回用于渲染重定向表单的提供商特定值的字典。

为了使提供商添加自己的渲染值,它必须重写此方法,并基于处理值(包括提供商特定处理值)返回一个包含提供商特定值的字典。

参数

processing_values (dict) – 交易的处理值。

返回

提供商特定渲染值的字典。

返回类型

dict

_process(provider_code, payment_data)[源代码]

处理从提供商收到的支付数据并更新交易。

参数
  • provider_code (str) – 处理交易的提供商代码。

  • payment_data (dict) – 提供商发送的支付数据。

返回

更新后的交易。

返回类型

payment.transaction

_search_by_reference(provider_code, payment_data)[源代码]

基于支付数据搜索交易。

参数
  • provider_code (str) – 处理交易的提供商代码。

  • payment_data (dict) – 提供商发送的支付数据。

返回

找到的交易。

返回类型

payment.transaction

_send_api_request(method, endpoint, *, params=None, data=None, json=None, **kwargs)[源代码]

向 API 发送请求。

此方法用作辅助工具以:

  1. 将交易参考传递给提供商的 _send_api_request() 方法。

  2. 如果请求失败,将交易状态设置为 error ,并将异常消息作为 state_message

注意:self.ensure_one()

参数
  • method (str) – 请求的 HTTP 方法。

  • endpoint (str) – 请求要到达的 API 端点。

  • params (dict) – 请求的查询字符串参数。

  • data (dict|str) – 请求的正文。

  • json (dict) – 请求的 JSON 格式正文。

  • kwargs (dict) – 转发给专门辅助方法的提供商特定数据。

返回

响应的格式化内容。

返回类型

dict|str

引发

ValidationError – 如果发生 HTTP 错误。

_send_capture_request()[源代码]

请求处理交易的提供商发送捕获请求。

提供商要支持授权,必须重写此方法并发送 API 请求以捕获支付。

注意:来自 _capture()self.ensure_one()

返回

_send_payment_request()[源代码]

请求处理交易的提供商发送令牌支付请求。

此方法专门用于通过令牌进行付款,对应于 online_tokenoffline 交易的 operation 字段。

提供商要支持令牌化,必须重写此方法并发送 API 请求以进行支付。

注意:来自 _charge_with_token()self.ensure_one()

返回

_send_refund_request()[源代码]

请求处理交易的提供商发送退款请求。

提供商要支持退款,必须重写此方法并发送 API 请求以进行退款。

注意:来自 _refund()self.ensure_one()

返回

_send_void_request()[源代码]

请求处理交易的提供商发送作废请求。

提供商要支持授权,必须重写此方法并发送 API 请求以使支付作废。

注意:来自 _void()self.ensure_one()

返回

_set_authorized(*, state_message=None, extra_allowed_states=())[源代码]

将交易状态更新为 已授权

参数
  • state_message (str) – 将交易设置为 已授权 状态的原因。

  • extra_allowed_states (tuple[str]) – 应被视为源状态 已授权 的允许目标状态的额外状态。

返回

已更新的交易。

返回类型

payment.transaction 的记录集

_set_canceled(state_message=None, extra_allowed_states=())[源代码]

将交易状态更新为 已取消

参数
  • state_message (str) – 将交易设置为 已取消 状态的原因。

  • extra_allowed_states (tuple[str]) – 应被视为源状态 已取消 的允许目标状态的额外状态。

返回

已更新的交易。

返回类型

payment.transaction 的记录集

_set_done(*, state_message=None, extra_allowed_states=())[源代码]

将交易状态更新为 已完成

参数
  • state_message (str) – 将交易设置为 已完成 状态的原因。

  • extra_allowed_states (tuple[str]) – 应被视为源状态 已完成 的允许目标状态的额外状态。

返回

已更新的交易。

返回类型

payment.transaction 的记录集

_set_error(state_message, extra_allowed_states=())[源代码]

将交易状态更新为 错误

参数
  • state_message (str) – 将交易设置为 错误 状态的原因。

  • extra_allowed_states (tuple[str]) – 应被视为源状态 ‘错误’ 的允许目标状态的额外状态。

返回

已更新的交易。

返回类型

payment.transaction 的记录集

_set_pending(*, state_message=None, extra_allowed_states=())[源代码]

将交易状态更新为 待处理

参数
  • state_message (str) – 将交易设置为 待处理 状态的原因。

  • extra_allowed_states (tuple[str]) – 应被视为源状态 ‘待处理’ 的允许目标状态的额外状态。

返回

已更新的交易。

返回类型

payment.transaction 的记录集