Разница между Omnipay и Payum

Я искал платежное решение для своего веб-приложения. Я видел, что существуют API-интерфейсы, такие как Stripe (для кредитных карт) или плагины PayPal, которые могут работать с определенными способами оплаты.

Затем я увидел, что есть библиотеки, которые могут обрабатывать все виды способов оплаты, такие как Payum (https://github.com/Payum/Payum) или Omnipay (https://github.com/thephpleague/omnipay).

Если я правильно понял, это библиотеки одного типа: они обе обрабатывают платежи различными способами стандартизированным способом. Однако я не нашел никакого сравнения между ними, но нашел решения о том, как Payum может включать OmniPay. Так что я запутался. Таким образом, мой вопрос:

Покрывает ли Omnipay те же цели, что и Payum? Если да, то какой из них имеет какие преимущества. Если нет, то какие части процесса оплаты они точно реализуют.


person damianh    schedule 08.10.2015    source источник


Ответы (1)


Payum против Омнипэй

Короткий ответ: Payum предоставляет ту же функциональность, что и Omnipay, плюс некоторые дополнительные функции.

Payum работает лучше всего, когда вы сочетаете модель оплаты с действием конвертации. Модель должна быть не только Payum, я рекомендую вам использовать свой собственный или один из платформа электронной коммерции. Идея проста: вы отправляете запрос в Payum на захват вашей модели. В действии вы конвертируете платеж model в формат, специфичный для шлюза, скорее всего, в массив. Прелесть этого подхода в том, что ваш код никогда не меняется и выглядит так:

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

Все отличия шлюза скрыты внутри шлюза. Конечно, Payum поддерживает определенный формат шлюза или модель оплаты Payum. В случае Omnipay вы не можете просто заменить страйп-шлюз на paypal, потому что они ведут себя по-разному и, что более важно, требуют других данных. Stripe требует предоставления кредитной карты, если Paypal не заботится об этом, а вместо этого хочет установить URL-адреса возврата и отмены. Вы должны отразить эти различия в своем коде, это абстракция? Кстати, Payum генерирует для вас URL-адреса отмены и возврата, и они являются безопасными (мы поговорим об этом позже).

Иногда вам нужно получить более подробную информацию о платежной операции или плательщике, или дополнительную информацию об ошибке. Payum предоставляет вам доступ ко всем данным, которые участвуют в обмене данными между вашим кодом и платежным шлюзом. Формат данных зависит от платежа, поэтому, если вы знакомы с протоколом Paypal (например, ) вам было бы легко понять, что там происходит. Еще один хороший пример — Klarna Checkout. Возвращает адрес доставки\платежа, пол и дату рождения. С Payum вы можете легко получить их без оплаты и использовать для своих нужд.

Payum дает вам лучшую обработку статуса. Omnipay предоставляет только два статуса удачи и неудачи, но этого недостаточно. Например, Paypal иногда возвращает статус ожидания из-за мультивалютной проблемы. В этом случае omnipay говорит, что платеж не прошел, но на самом деле это не так. Или пользователь может отменить платеж на стороне Paypal, Omnipay сообщит вам, что это не удалось, но на самом деле это не так. Если вам нужен статус, которого нет в Payum по умолчанию, вы можете легко его добавить. У вас уже есть статусы платежей, возможно, ваш платформа электронной коммерции предоставляет их, и вы хотите использовать их повторно, без проблем Payum может быть настроен для их использования.

Иногда пользователи хотят обмануть вас или заплатить меньше за вещи. Как разработчик, вы должны думать об этом и заботиться о своих данных. Что вы показываете пользователю? Может ли он быть использован неправильно? Вы не можете полагаться на сумму, указанную в URL-адресе, пока не подтвердите ее. Например, Paypal отправляет вам push-уведомление на URL-адрес уведомления, который вы ранее отправили им. Payum генерирует для вас такой URL-адрес и, когда приходит уведомление, проверяет его. Вы получаете уникальные защищенные URL-адреса из коробки. Платеж внутренне связан с этим URL-адресом, и после удаления\аннулирования URL-адреса пользователь не сможет получить доступ к платежу за ним. Omnipay не предоставляет ничего, что помогло бы вам решить проблемы с безопасностью. У этих защищенных URL есть один хороший побочный эффект. Защищенные URL-адреса становятся недействительными\удаляются, когда они не нужны. Это хорошо, например, пользователь нажимает кнопку «Назад» в браузере. Он не сможет сделать второй платеж, потому что URL-адрес покупки больше не существует, вместо этого он увидит ошибку 404.

Не рекомендуется хранить кредитные карты рядом с собой, не так ли? Нет никакого оправдания тому, чтобы сохранить его случайно или всего на несколько секунд. В Payum есть объект чувствительного значения, который убедиться, что ничего не сохранено случайно. Вы по-прежнему можете хранить его, но при этом вы предоставлены сами себе.

Omnipay поддерживает только шлюзы, которые выполняют перенаправление на сторону шлюза или требуют кредитной карты. Но есть куча других шлюзов, и они действуют по-другому. Например, Klarna Checkout требует фрагмент (iframe ) для обработки, Stripe.Js требует, чтобы их javascript выполнялся на странице покупки. Stripe Checkout отображает собственное всплывающее окно. Payum поддерживает их все, и, как мы говорили, в начале вы можете переключаться с одного шлюза на другой без изменений в вашем коде. Payum изначально не поддерживает нужный вам шлюз? Я не думаю, что повторная реализация каждого шлюза в доме — хорошая идея. Вот почему существует мост для шлюзов Omnipay< /а>. Это позволяет вам использовать шлюзы Omnipay способом Payum.

Payum пытается стандартизировать поток платежей. Есть три шага: подготовка, захват\авторизация и готово. Первый называется «подготовка», и на этом этапе вы должны подготовить платеж, рассчитать общую стоимость, налоги, получить информацию о пользователе или доставке и так далее. Как только вы закончите, вы можете перенаправить пользователя на шаг захвата\авторизации. Отсюда пользователь может быть перенаправлен на сторону шлюза или запросить кредитную карту или что-то еще. Это зависит от того, какой шлюз вы выбрали. На шаге «Готово» вы должны получить статус платежа и действовать в соответствии с ним. Omnipay лишь частично решает эту задачу.

С фабриками шлюзов вы можете легко перезаписать\заменить любые части шлюза функционально или добавить пользовательские действия, расширения или API.

У Payum есть официальные расширения для большинства современных фреймворков, таких как Symfony. Laravel, Silex, Yii, Zend.

В конце давайте сравним краеугольные камни интерфейсов от Payum и Omnipay.

Отказ от ответственности: я являюсь автором Payum

person Maksim Kotlyar    schedule 19.10.2015
comment
Как я могу отличить шлюз кредитных карт от внешнего? - github.com/thephpleague/omnipay/issues/309 - person Maksim Kotlyar; 23.10.2015
comment
@MaksimKotlyar Ваш ответ все еще актуален спустя два года, или Omnipay реализовал лучший поток платежей? - person riotera; 14.09.2017
comment
Я бы сказал, более-менее верный. Не было большого развития или больших изменений. - person Maksim Kotlyar; 14.09.2017