跳转到主要内容

在GetPaid网站上支持多个支付处理器

项目描述

目的

此包提供通用的支付处理器注册方法。尽管代码本身不依赖Plone,但此文档也涵盖了Plone。

前言

GetPaid为两种不同类型的支付处理器提供支持

  • 同步:您的Web服务器通过远程过程调用支付处理器服务器进行支付授权。您需要覆盖支付处理器结账-审查-支付向导步骤,以添加支付提交所需的自定义表单字段。默认的Products.PloneGetPaid.browser.checkout.CheckoutReviewAndPay提供了简单信用卡支付的字段。

  • 异步:买家将离开您的网站进行支付,并在支付完成后返回您的网站。

安装

从源代码安装GetPaid。

使用以下开发分支。请注意,PayPal更改在源代码中

cd src
rm -rf Products.PloneGetPaid
rm -rf getpaid.nullpayment
rm -rf getpaid.paypal
svn co https://getpaid.googlecode.com/svn/Products.PloneGetPaid/branches/multiplepaymentprocessors Products.PloneGetPaid
svn co https://getpaid.googlecode.com/svn/getpaid.nullpayment/branches/multiplepaymentprocessors getpaid.nullpayment
svn co https://getpaid.googlecode.com/svn/getpaid.paypal/trunk getpaid.paypal

getpaid.paymentprocessers添加到您的316.cfg eggs和develop-eggs部分。

管理

必须在站点设置 -> GetPaid -> 支付处理器设置中启用活动支付处理器。

您可以从同一屏幕管理单个支付处理器设置。

结账向导步骤

结账向导包含一个名为“结账-支付方式”的步骤,允许用户选择所需的支付方式。此步骤仅在网站有多个活动支付处理器时才可用。

创建自己的支付处理器

支付处理器指令

支付处理器使用ZCML指令进行注册

<!-- Register logic class dealing with the actual payment -->

    <adapter
 for="getpaid.core.interfaces.IStore"
 provides="getpaid.core.interfaces.IPaymentProcessor"
 factory=".null.NullPaymentAdapter"
 name="Testing Processor"
 />

<!-- Register payment processor specific user interface parts -->

<paymentprocessors:registerProcessor
   name="Testing Processor"
       i18n_name="Test Payment"
   selection_view="null_payment_button"
   review_pay_view="null_payment_pay_page"
   thank_you_view="null_payment_thank_you_page"
   settings_view="null_payment_settings_page"
   />

建议将支付处理器指令放入一个单独的ZCML文件中,以保持向后兼容性。您可以使用zcml条件来实现

<include zcml:condition="installed getpaid.paymentprocessors" file="paymentprocessors.zcml" />

您还可以使用未安装指令来维护向后兼容性覆盖

<include zcml:condition="not-installed getpaid.paymentprocessors" package=".browser" file="overrides.zcml" />

paymentprocessors:registerProcessor属性

以下是关于registerProcessor属性的说明。

name:这必须匹配getpaid.core.interfaces.IPaymentProcessor适配器名称

i18_name:这是支付处理器的用户可见名称。它可能出现在摘要和列表中。

建议在这里使用“支付方式”这个术语,以便更易于用户理解。

selection_view:这是一个

selection_view 模板应渲染一个

  • <td> 包含 <input type=”radio”> 单选按钮,具有可访问性 <label>

  • <td> 包含支付方式名称/标志图像

  • <td> 包含描述。您可以覆盖此模板以包含类似“使用 PayPal 将额外收取 2 美元”的条款

例如,请参阅 getpaid.nullpayment/templates/button.pt

review_pay_view:此视图在 checkout 向导中渲染支付处理器特定的“查看和支付”视图。该属性持有已注册的 <browser:page> 名称。此视图应该是 Products.PloneGetPaid.browser.checkout.CheckoutReviewAndPay 的子类。要更改查看和支付页面的模板,请覆盖类的模板属性。

通常,查看和支付页面有两个目的

- Render a <form> which is submitted to the payment authorization server with a callback back to the shop server

- Do a HTTP redirect or Javascript redirect and take the user to the payment authorization server for an external review payment page

因为 review_pay_view 基于 BaseCheckoutForm 类,您需要显式地子类化它并覆盖 template 类属性以使用您自己的模板。使用 <browser:page template=”…”> 不起作用。

settings_view:此视图渲染支付处理器的设置。它应该是 Products.PloneGetPaid.admin.PaymentProcessor 的子类。

thank_you_view:此应指向在支付处理器完成后的 <browser:page>。目前未使用。支付处理器 review_pay_view 本身负责在支付已授权后将用户引导回商店网站。

有关更多信息,请参阅 https://getpaid.googlecode.com/svn/getpaid.nullpayment/branches/multiplepaymentprocessors/src/getpaid/nullpayment/paymentprocessors.zcml

测试

单元测试可以在 Products.PloneGetPaid.tests.test_payment_processors 中找到。

建议查看这些说明,了解如何编程式地与 checkout 向导交互并自动测试自定义支付方式。

与 plone 无关的功能在 getpaid.paymentprocessors.tests 中进行测试。这主要涉及测试 ZCML 有效性。

支付处理器插件作者指南

  • 有关如何包含所有相关的浏览器/模块扩展,包括必要的媒体文件,请参阅 getpaid.paypal

  • 在您的支付处理器 README 中包含简短但详细的说明

    • 有关在沙盒模式下测试支付处理器

    • 有关在生产模式下设置支付处理器

  • 在您的支付处理器 README 中包含支付处理器标志使用条款的链接

开发者片段

支付处理器由 Entry 对象描述,该对象简单地保存由 IRegisterPaymentProcessorDirective 提供的信息。

要获取全局活动支付处理器,请调用

from Products.PloneGetPaid import payment

processors = payment.getActivePaymentProcessors(context) # context = any Plone site object

在 checkout 向导中,您可以使用以下片段获取用户选择的支付方式。您可以在用户通过支付方式选择步骤之后这样做

payment_processor_name = wizard.getActivePaymentProcessor()

要获取实际的支付处理器实例,请按名称调用

    from zope.component import getUtility, getAdapter
    from Products.CMFCore.utils import getToolByName
    import getpaid.core.interfaces

site_root = getToolByName(self.context, "portal_url").getPortalObject()
    processor = component.getAdapter(site_root, getpaid.core.interfaces.IPaymentProcessor, payment_processor_name)

支付处理器注册表在 getpaid.paymentprocessors.registry.paymentProcessorRegistry 中可用。此注册表包含已注册支付处理器代码对象的数据。

激活的支付处理器名称存储在 portal_properties 作为 LinesField

# sequence of unicode strings, payment processor names
portal_properties.payment_processor_properties.enabled_processors

在存储的订单中访问支付信息

info = order.payment_method # IPaymentMethodInformation instance
info.payment_processor == u"Your Processor Name"

TODO

  • 从所有地方移除 IGetPaidManagementOptions(self.context).processor_name 接口

  • 移除“设置活动处理器”设置和站点设置中的支付选项页面

  • 讨论是否使用 portal_properties 存储设置是否合理(据我所知,这是最佳实践,因为它们可以是纯文本,如果站点设置出现问题,则可以编辑)

  • 处理用户选择没有支付处理器时的验证

  • 记住在 checkout 向导中检查过的支付处理器

  • 存在一个bug, wizard.data_manager.payment_method.payment_processor出于某种原因拉取了i18n_name。除非修复,否则支付处理器名称必须为i18n_name。

  • 异步处理器应该如何/何时创建订单、切换工作流程状态和删除购物车?

变更日志

0.1

  • 初始发布

项目详情


下载文件

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

源分发

getpaid.paymentprocessors-0.1.tar.gz (11.3 kB 查看哈希值)

上传时间

支持者