django-payments的PayU支付提供商
项目描述
注意:该项目仍在开发中,因此请谨慎使用。
django-payments的PayU支付提供商。使用新的PayU REST API。支持普通、快速和周期性支付。
文档
快速入门
安装 django-payments 并根据 django-payments 文档 设置PayU支付提供商后端。
设置支付提供商
示例
# 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) 时,会使用两个关键字参数 payment 和 amount 来获取特定退款字符串描述。由于向后兼容性,该可调用对象是可选的。然而,如果没有设置,尝试退款将引发异常。已弃用的 get_refund_description 默认值。
- get_refund_ext_id:
一个可选的可调用对象,当调用 provider.refund(payment, amount) 时,会使用两个关键字参数 payment 和 amount 来获取特定退款的外部字符串退款 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_token 的 automatic_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_user 或 get_user_email、get_user_first_name 和 get_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-py2.py3-none-any.whl
算法 | 散列摘要 | |
---|---|---|
SHA256 | 3c68dbed319ca7b1946031acb7b03ff572e9ce19023b559fd4f7f3ee1d52fedc |
|
MD5 | 55a15d56b9677db2fda50ef05d306c4a |
|
BLAKE2b-256 | 5e3071f4d584ab3c30de3af0b99376de8fbae4eaab3fdf73990d4df9ea529985 |