Django商店和付款人的付款后端。

django-shop-payer-backend的Python项目详细描述


Build StatusCoverage StatusLatest Version

Django商店付款后端为Payer。使用 python-payer-api 用于与api交互。

安装

pip install django-shop-payer-backend

添加到已安装的应用程序

INSTALLED_APPS=[...'polymorphic','shop''shop.addressmodel','django_shop_payer_backend',...]

配置一个或多个付款后端

SHOP_PAYMENT_BACKENDS=['django_shop_payer_backend.backends.PayerCreditCardPaymentBackend','django_shop_payer_backend.backends.PayerBankPaymentBackend','django_shop_payer_backend.backends.PayerInvoicePaymentBackend','django_shop_payer_backend.backends.PayerPhonePaymentBackend',]

您还可以使用GenericPayerBackend来让用户 在被重定向到付款人后选择付款方式,或定义 您自己的子类,在 payment_methods属性。如果你是 将付款人后端与PayPal等其他后端一起使用。

配置

将您的键添加到settings.py

SHOP_PAYER_BACKEND_AGENT_ID="AGENT_ID"SHOP_PAYER_BACKEND_ID1="6866ef97a972ba3a2c6ff8bb2812981054770162"SHOP_PAYER_BACKEND_ID2="1388ac756f07b0dda2961436ba8596c7b7995e94"

以下设置是可选的

# Used for white/blacklisting callback IPsSHOP_PAYER_BACKEND_IP_WHITELIST=["192.168.0.1"]SHOP_PAYER_BACKEND_IP_BLACKLIST=["10.0.1.1"]# Used for suppliying an address modelSHOP_PAYER_BACKEND_ADDRESS_HANDLER='project.app.path.to.address_model_callback'SHOP_PAYER_BACKEND_HIDE_DETAILS=False# Hide order details during paymentSHOP_PAYER_BACKEND_DEBUG_MODE='verbose'# 'silent', 'brief'SHOP_PAYER_BACKEND_TEST_MODE=True

注意事项

因为Django Shop默认不存储任何关系 在order模型和addressmodel模型之间没有好的方法 用于支付延期以确定 下达命令。对于某些后端,这可能不是问题,但是 案例付款人希望处理订单详细信息中的数据。

django shop payer backend试图通过确定订单来处理 (计费)使用以下策略的地址:

  1. 尝试从当前用户获取addressmodel(如果 user.is_authenticated())。
  2. 尝试使用 SHOP_PAYER_BACKEND_ADDRESS_HANDLER设置。
  3. 尝试通过从order.billing_address_text中提取地址详细信息 反向解析django shop使用的地址模板。
  4. 允许重写/完成使用上述方法返回的数据 使用populate_buyer_details_dict信号。

这有两个含义:

  1. 对于未经身份验证的用户,很难获得 使用默认设置的addressmodel对象。在这种情况下 Django Shop用于存储 Order对象上的文本地址表示。由于 这种解析方法有点脆弱,您应该采取 修改^{tt7}时的极端预防措施$ 设置。为了让解析器正常工作,建议您使用 一些表单标识“key”来标识每个关键字(如 “name:”“等在默认模式中)。模式,如 %(name)s, %(address)s,[...]可能会失败,因为没有 区分字符串中的nameaddress关键字 格式化,唉,regexp将无法识别关键字 正确地。
  2. 付款人API支持的字段没有明显的 地址模型上的对应项(例如电子邮件、电话、 组织等)不会被包括在 payerbuyerdetails使用默认设置的数据。以确保他们 包括,使用extensibility中描述的方法 下面一节。

解决上述两个问题的方法可能是 addressmodel on order的外键,用于存储 正在设置order.billing_address_text。这样你就可以添加一个地址 模型回调处理程序(如下所述),它允许您返回 (或任何其他)后端对象。

扩展性

假设您有一个基于 shop.addressmodel.models.Address添加字段company。 当然,您也希望将此数据发送给付款人,以便 如果发票上有这样的内容,请在 populate_buyer_details_dict信号并更新买家详细信息 像这样的听写:

fromdjango_shop_payer_backend.helperimportpopulate_buyer_details_dictfromdjango.dispatchimportreceiver@receiver(populate_buyer_details_dict)defadd_additional_buyer_details(sender,**kwargs):buyer_details_dict=kwargs.get('buyer_details_dict',None)user=kwargs.get('user',None)address=kwargs.get('address',None)order=kwargs.get('order',None)buyer_details_dict.update({'organisation':address.company,})

对于order,有一个类似的信号populate_order_item_dict。 项,允许您修改在payerorderitem之前 对象已初始化。例如,如果您的产品 模型中有一个包含增值税百分比的字段,在这种情况下,您可以 使用此方法注入该值。

向后端提供地址的另一个选项是 和地址回调处理程序,并返回一个addressmodel对象。这是 如果您使用的是具有外部 A的钥匙地址模式。在这种情况下,可以实现回调 大致如下:

defaddress_model_callback(*args,**kwargs):address=kwargs.get('address',None)order=kwargs.get('order',None)ifaddressisNoneandorderisnotNone:try:address=order.billing_addressexceptException:passreturnaddress

并将以下内容添加到settings.py

SHOP_PAYER_BACKEND_ADDRESS_HANDLER='project.app.path.to.address_model_callback'

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java日期格式的月和日的固定长度?   无法将java ArrayList<String>转换为字符串。   java当我使用log4j 1.2.15时,编译时出现错误;当更改为1.2.16时,一切正常   java如何使用ArgumentMatchers将任何队列告知Mockito?   如何解决“java”。Java电子邮件API中的lang.ExceptionInInitializerError   java是实例化对象名并设置其值的通用方法   java在多线程环境中,如果一个线程崩溃,如何关闭JVM?   java WebDriverManager在selenium中获取不正确版本的驱动程序   如果JAVA中后减量的优先级高于前增量,那么为什么下面的代码输出为22.0而不是20.0。?   在hibernate中找不到java属性   当我用java运行调度程序时,什么都没有发生   jackson如何在java中从数据库中检索json对象   java安卓:如何在自定义适配器中设置侦听器并获取imagebutton单击的位置   java MySQLIntegrityConstraintViolationException:列“问题id”不能为空错误   JavaSpring自定义注销过滤器在注销前执行一些操作?   java如何返回常量集合   java使用subselect进行一对多分页   java二进制搜索基础。陷入无限循环