Django商店和付款人的付款后端。
django-shop-payer-backend的Python项目详细描述
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试图通过确定订单来处理 (计费)使用以下策略的地址:
- 尝试从当前用户获取addressmodel(如果 user.is_authenticated())。
- 尝试使用 SHOP_PAYER_BACKEND_ADDRESS_HANDLER设置。
- 尝试通过从order.billing_address_text中提取地址详细信息 反向解析django shop使用的地址模板。
- 允许重写/完成使用上述方法返回的数据 使用populate_buyer_details_dict信号。
这有两个含义:
- 对于未经身份验证的用户,很难获得 使用默认设置的addressmodel对象。在这种情况下 Django Shop用于存储 Order对象上的文本地址表示。由于 这种解析方法有点脆弱,您应该采取 修改^{tt7}时的极端预防措施$ 设置。为了让解析器正常工作,建议您使用 一些表单标识“key”来标识每个关键字(如 “name:”“等在默认模式中)。模式,如 %(name)s, %(address)s,[...]可能会失败,因为没有 区分字符串中的name和address关键字 格式化,唉,regexp将无法识别关键字 正确地。
- 付款人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'