paypal - Omnipay 和 Payum 的区别

标签 paypal omnipay payum

我正在为我的网络应用程序寻找支付解决方案。我看到有像 stripe(用于信用卡)或 PayPal 插件这样的 API 可以处理某些支付方式。

然后我看到有可以处理各种支付方式的库,比如 Payum ( https://github.com/Payum/Payum ) 或 Omnipay ( https://github.com/thephpleague/omnipay )。

如果我理解正确的话,它们都是同一种类型的库:它们都以标准化的方式处理各种方法的支付。但是我没有找到两者之间的任何比较,而是找到 Payum 如何包含 OmniPay 的解决方案。所以我很困惑。因此我的问题:

Omnipay 是否涵盖与 Payum 相同的目的。如果有,哪一个有什么优势。如果不是,他们正在实现支付流程的哪些部分。

最佳答案

Payum对比 Omnipay

简短的回答是 Payum 提供与 Omnipay 相同的功能以及一些额外的功能。

当您将付款模式与转换操作结合使用时,Payum 效果最佳。模型不能只是 Payum’s one ,我鼓励您使用自己的或来自 ecommerce platform 的一个.想法很简单:您向 Payum 发送请求以捕获您的模型。您在行动中convert the payment model to a gateway specific format ,很可能是一个数组。这种方法的美妙之处在于您的代码永远不会改变,看起来像这样:

$gateway->execute(new Capture($payment));

所有网关的差异都隐藏在一个网关内。当然 Payum 也支持网关特定的格式,或者 Payum 的支付模型。在 Omnipay 的情况下,您不能简单地将 strip 网关替换为 paypal,因为它们的行为不同,更重要的是它们需要不同的数据。 Stripe 要求提供信用卡,而 Paypal 并不关心它,而是希望设置返回和取消 url。您必须在代码中反射(reflect)这些差异,这是抽象吗?顺便说一下,Payum 会为您生成取消和返回 URL,它们是安全的(我们稍后讨论)。

有时,您必须获得有关付款交易或付款人的更多详细信息,或有关错误的更多信息。 Payum 让您可以访问参与您的代码和支付网关之间通信的所有数据。数据格式是支付特定的,所以如果你熟悉 Paypal protocol (for example)你很容易理解那里发生了什么。另一个很好的例子是 Klarna Checkout。它返回送货\帐单地址、性别和出生日期。使用 Payum,您可以轻松地从付款中取出这些并用于您的需求。

Payum 为您提供更好的状态处理。 Omnipay 只提供了成功和失败两种状态,但这还不够。例如,由于 multi currency issue,Paypal 有时会返回待处理状态。 .在这种情况下,omnipay 说付款失败,但实际上并没有。或者用户可以在 Paypal 端取消付款,Omnipay 会告诉你它失败了,但事实并非如此。如果您需要 Payum 默认未提供的状态,您可以轻松添加。您是否已经有付款状态,也许您的 ecommerce platform provide它们并且您想重复使用,没问题 Payum 可以调整以使用它们。

有时用户想欺骗你或为这些东西支付更少的钱。作为开发人员,您必须考虑并照顾好您的数据。你向用户展示了什么?会不会用错了方法?在您验证之前,您不能依赖 url 中给出的金额。例如,Paypal 向您发送推送通知到您之前发送给他们的通知 url。 Payum 会为您生成这样的 url,当通知返回时,它会对其进行验证。您可以获得开箱即用的独特、安全的 url。付款在内部与该网址关联,一旦您删除\使网址无效,用户将无法访问其背后的付款。 Omnipay 不提供任何帮助您解决安全问题的服务。这些安全的 url 有一个很好的副作用。一旦不需要,安全的 url 就会失效\删除。这很好,例如用户在浏览器中单击“返回”按钮。他将无法进行第二次付款,因为购买网址不再存在,而是会看到 404 错误。

将信用卡存放在您身边不是一个好习惯,不是吗?没有任何理由可以将其意外存储或仅存储几秒钟。 Payum 有一个 sensitive value确保不会意外保存任何内容的对象。您仍然可以存储它,但这样做时您是自己的。

Omnipay 仅支持网关,即重定向到网关端或需要信用卡。但是还有许多其他网关,它们的作用各不相同。例如克拉纳结帐require a snippet (iframe) to be rendered , Stripe.Js requires their javascript to be executed在购买页面上。条纹结帐 renders its own popup .支付supports them all ,正如我们在开头所说的,您可以在不更改代码的情况下从一个网关切换到另一个网关。 Payum 本身不支持您需要的网关?我认为在内部重新实现每个网关并不是一个好主意。这就是为什么 bridge for Omnipay gateways exists .它允许您以 Payum 方式使用 Omnipay 网关。

Payum 尝试 standardise the payment flow .有准备、捕获\授权和完成三个步骤。第一个称为“准备”,在此步骤中您必须准备付款、计算总价、税金、获取用户或运输信息等。完成后,您可以将用户重定向到捕获\授权步骤,从这里用户可以重定向到网关端或要求提供信用卡或其他东西。这取决于您选择的网关。在“完成”步骤,您必须获得付款状态并根据它采取行动。 Omnipay 只是部分解决了这个任务。

使用网关工厂,您可以轻松地在功能上覆盖\替换网关的任何部分,或添加自定义操作、扩展或 api。

Payum 为大多数现代框架提供官方扩展,例如 Symfony . Laravel , Silex , Yii , Zend .

最后让我们比较一下 Payum 和 Omnipay 的基石接口(interface)。
  • 支付GatewayInterface对比Omnipay GatewayInterface
  • 支付GatewayFactoryInterface对比Omnipay GatewayFactory ups没有界面。

  • 免责声明:我是 Payum 的作者

    关于paypal - Omnipay 和 Payum 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33018841/

    相关文章:

    PayPal REST API - 购买后状态不会改变

    paypal - 减少 Paypal 结帐期间的重定向次数

    php - Payum自定义网关

    php - Omnipay 不为 Paypal 加税

    payment - Sylius V0.17 如何添加付款方式

    symfony - Payum Bundle 的配置如何工作?

    php - Silex Payum 错误 : Request Capture{model: Identity} is not supported

    .NET API : Stream was not readable 的 PayPal 异常

    paypal - 如何实现向多个供应商付款

    php - 如何使用omnipay 通过 Paypal 快速结帐在没有信用卡详细信息的情况下发送付款?