跳转到主要内容

django-payments的PayU支付提供商

项目描述

https://badge.fury.io/py/django-payments-payu.svg https://travis-ci.org/PetrDlouhy/django-payments-payu.svg?branch=master https://codecov.io/gh/PetrDlouhy/django-payments-payu/branch/master/graph/badge.svg

注意:该项目仍在开发中,因此请谨慎使用。

django-payments的PayU支付提供商。使用新的PayU REST API。支持普通、快速和周期性支付。

文档

完整文档位于 https://django-payments-payu.readthedocs.io

快速入门

安装 django-payments 并根据 django-payments 文档 设置PayU支付提供商后端。

此后端实现使用 PayU.com 进行支付。

设置支付提供商

示例

# use sandbox
PAYMENT_VARIANTS = {
    'payu': ('payments_payu.provider.PayuProvider', {
        'pos_id': '123456',
        'second_key': 'iseedeadpeople',
        'client_secret': 'peopleiseedead',
        'sandbox': True,
        'capture': False,
        'get_refund_description': lambda payment, amount: 'My refund',
        'get_refund_ext_id': lambda payment, amount: str(uuid.uuid4()),
    }),
}
以下是提供者的有效参数
client_secret:

PayU OAuth协议客户端密钥

pos_id:

PayU POS ID

second_key:

PayU第二个密钥(MD5)

shop_name:

发送到API的商店名称

sandbox:

如果 True,则将端点设置为沙盒

endpoint:

端点URL,如果未设置,将根据 sandbox 设置自动设置

recurring_payments:

启用周期性支付,仅当 express_payments=True 时有效,以下为其他所需的设置

express_payments:

使用 PayU 快速表单

widget_branding:

指示快速表单显示 PayU 品牌信息

store_card:

(默认:False) PayU 是否应存储卡片

get_refund_description:

一个可选的可调用对象,当调用 provider.refund(payment, amount) 时,会使用两个关键字参数 paymentamount 来获取特定退款字符串描述。由于向后兼容性,该可调用对象是可选的。然而,如果没有设置,尝试退款将引发异常。已弃用的 get_refund_description 默认值。

get_refund_ext_id:

一个可选的可调用对象,当调用 provider.refund(payment, amount) 时,会使用两个关键字参数 paymentamount 来获取特定退款的外部字符串退款 ID。如果返回 None,则不设置外部退款 ID。如果不会执行超过每秒一次的部分退款,则不需要外部退款 ID。否则,建议使用唯一 ID,因为 PayuProvider.refund 是幂等的,如果提供了完全相同的数据,它将返回之前已执行退款的 结果而不是执行新的退款。默认为标准形式下的随机 UUID 版本 4。

注意:请将来自 PayU 的支付状态通知请求发送到 django-payments process_payment url。PayU 的请求可能因多种原因失败(例如,可能被代理阻止)。请使用 PayU 管理中的“显示报告”页面以获取有关请求的更多信息。

周期性支付:

如果启用了周期性支付,PayU 卡令牌需要存储在您的应用程序中以供下一次支付使用。下一次支付可以由用户通过(用户将被快速表单提示进行支付确认)或服务器发起。要启用周期性支付,您需要设置其他一些内容

注意:即使在沙盒中,周期性支付默认也是未启用的,您应该咨询他们的帮助台以启用此功能。

  • 为了使支付周期性,需要为 Payment 的用户(而不仅仅是支付本身)存储卡令牌。实现 Payment.set_renew_token()Payment.get_renew_token()

  • 实现 Payment.get_payment_url()

  • 对于由服务器发起的周期性支付,您需要创建新的支付并调用 payment.auto_complete_recurring()
    • 该方法返回字符串 'success' 或用户可以提供其 CVV2 或 3D 安全信息的 URL。

    • 字符串 'success' 表示,支付正在等待来自 PayU 的通知,但不需要进一步的用户操作。

触发周期性支付示例

payment = Payment.objects.create(...)
redirect_url = payment.auto_complete_recurring()
if redirect_url != 'success':
    send_mail(
        'Recurring payment - action required',
        'Please renew your CVV2/3DS at %s' % redirect_url,
        'noreply@test.com',
        [user.email],
        fail_silently=False,
    )

运行测试

代码是否真的起作用?

source <YOURVIRTUALENV>/bin/activate
(myenv) $ pip install tox
(myenv) $ tox

致谢

用于渲染此包的工具

历史记录

1.5.0 (2024-08-16)

  • 当状态从确认更改时记录警告

  • 修复 Django 5.0 中的表单问题

  • 支持 Django 5.1

1.4.6 (2024-07-23)

  • 删除不小心提交的调试代码

1.4.5 (2024-07-23)

  • 修复 Django 5.0 中的 safestring 问题

1.4.4 (2024-06-27)

  • 修复 PayuApiError:退款响应无效

1.4.3 (2024-05-15)

  • 修复 1.4.1 中引入的“AttributeError:Manager 不可通过 Payment 实例访问”问题

1.4.2 (2024-05-14)

  • 修复从 payment.captured_amount 中多次扣除退款金额的问题

  • 将退款金额大于 payment.captured_amount 的支付状态改为 REFUNDED,而不仅仅是扣除 captured_amount

1.4.1 (2024-05-14)

  • 修复处理数据时未保存 captured_amount 的问题

1.4.0 (2024-04-12)

  • 通过使 PayuProvider 的 get_refund_description 参数可选来修复向后兼容性

  • payment.set_renew_token 添加 renewal_triggered_by 参数

  • 如果未提供 get_refund_description,则 PayuProvider.refund 失败

  • 如果收到意外的响应,PayuProvider.refund 将引发 PayuApiError

  • 弃用 get_refund_description 的默认值;将其设置为可调用对象

  • 弃用 payment.set_renew_tokenautomatic_renewal 参数;使用 renewal_triggered_by 参数代替

  • 弃用 payment.set_renew_token 参数的 None 值;使用 “user”/“task”/“other” 代替

1.3.1 (2024-03-19)

  • 修复 PyPI 上的描述

1.3.0 (2024-03-19)

  • 向 PayuProvider 添加 get_refund_description 和 get_refund_ext_id 参数

  • 添加 PayuProvider.refund

  • 仅在订单完成时更新 payment.captured_amount

  • 从 payment.captured_amount 中减去退款,而不是从 payment.total 中减去

  • 将 PayuProvider.payu_api_order_url 重命名为 payu_api_orders_url

  • 针对 Django 2.2-5.0 Python 3.7-3.12 进行测试

1.2.4 (2022-03-17)

  • 处理部分退款

  • 针对 Django 2.2-4.0 Python 3.7-3.10 进行测试

1.2.3 (2022-01-25)

  • 更好地区分 PayU API 错误

1.2.2 (2021-11-30)

  • 解决已确认付款但发生错误的重复订单情况

1.2.1 (2021-10-29)

  • 如果 PayU 反欺诈错误,则设置欺诈状态

  • 在付款上存储 PayU 错误

1.2.0 (2021-10-11)

  • 正确使用 Payment.billing_* - 例如 get_userget_user_emailget_user_first_nameget_user_last_name 的函数是多余的,现在不再调用。

  • 商店名称来自提供者的配置变量 shop_name

1.1.0 (2021-10-05)

  • 在 API 错误后重定向到 payment.get_failure_url(),记录错误

1.0.0 (2020-10-21)

  • 第一个主要版本

  • 许多修复

  • 周期性付款正常工作

  • 经过生产环境验证

0.3.0 (2020-05-30)

  • 修复金额量化问题

  • 添加 store_card 参数

  • 修复快速表单的 base url 参数

0.2.0 (2020-04-13)

  • 第二次发布

  • 修复测试矩阵

0.1.0 (2020-04-06)

  • PyPI 上的第一个版本。

  • 仍在开发中。

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分布

django_payments_payu-1.5.0.tar.gz (22.6 kB 查看散列)

上传时间

构建分布

django_payments_payu-1.5.0-py2.py3-none-any.whl (13.6 kB 查看散列)

上传时间 Python 2 Python 3

由以下提供支持