Я реализовал шлюз Omnipay, который теперь я хотел бы использовать в Sylius, который использует payum
1.3, payum-bundle
1.0 и omnipay-bridge
1.0.Использование шлюза Omnipay в Силиусе с Payum + OmnipayBridge
Я настроил шлюз (это перенаправлять тот, который показывает отдельную страницу оплаты и, как только оплата будет завершена, не будет вызывать returnUrl
, и нет кредитных карт, участвующих) в app/config/config.yml
:
payum:
gateways:
my_gateway:
omnipay_offsite:
type: MyOmnipayGateway
options:
gatewayOption: 1
anotherOption: 2
actions:
- sylius.payum.my_gateway.action.convert_payment
и I добавил шлюз sylius_payment
секции, а
sylius_payment:
gateways:
my_gateway: My Payment Service
я добавил действие для преобразования платежа в vendor/sylius/sylius/src/Sylius/Bundle/PayumBundle/Resources/config/services.xml
:
<service id="sylius.payum.my_gateway.action.convert_payment" class="Sylius\Bundle\PayumBundle\Action\ConvertPaymentToMyGatewayAction">
<tag name="payum.action" context="my_gateway" />
</service>
и внедрил класс ConvertPaymentToMyGatewayAction
, который теперь преобразует полезную нагрузку запроса в ожидаемый формат (в качестве ссылки используется ConvertPaymentToPaypalExpressAction
).
Я также добавил MyOmnipayGateway
в список шлюзов в vendor/omnipay/common/composer.json
, чтобы пройти мимо ошибки, которая говорит, что шлюз не поддерживается.
Теперь, когда я завершаю заказ, я успешно перенаправлен на мой фактический сайт оплаты, и как только платеж завершен, возвращается в предоставленный returnUrl
с ожидаемыми параметрами в строке запроса. Однако здесь выполнение возвращается к OffsiteCaptureAction
и вызывает purchase
с теми же параметрами, что и вызванный звонок, и я снова и снова перенаправляюсь на сайт оплаты.
Актуальные вопросы:
Как избежать добавления опций конфигурации в
vendor
папку - а именно упомянутойservices.xml
и OmniPay-хcomposer.json
?Где обращаться с ответом об оплате? Мне нужно проверить параметры строки запроса
returnUrl
(реализовано в моем шлюзеcompletePurchase
).
Спасибо!
Edit: я пропустил инициализацию $details
в моем новообращенном действии с $details = $payment->getDetails();
который вызвавшего _completeCaptureRequired
ложным каждый раз, и, таким образом, purchase
был выполнен в виде петли. Теперь я могу правильно обрабатывать платеж, т.е. Вопрос 2 в значительной степени решена с помощью данной конфигурации, и этот обработчик
<?php
namespace Sylius\Bundle\PayumBundle\Action;
use Payum\Core\Action\ActionInterface;
use Payum\Core\Exception\RequestNotSupportedException;
use Payum\Core\Request\Convert;
use Sylius\Component\Core\Model\PaymentInterface;
class ConvertPaymentToMyGatewayAction implements ActionInterface
{
public function execute($request)
{
RequestNotSupportedException::assertSupports($this, $request);
/** @var PaymentInterface $payment */
$payment = $request->getSource();
$order = $payment->getOrder();
$details = $payment->getDetails();
// Fill the correct parameters here
$request->setResult($details);
}
public function supports($request)
{
return
$request instanceof Convert &&
$request->getSource() instanceof PaymentInterface &&
$request->getTo() === 'array'
;
}
}
по этой ссылке, что говорить об интеграции Payum https://github.com/Sylius/Sylius/issues/5715 – sprik
Спасибо за удобный справочник, я теперь я хочу добавить дополнительный шлюз оплаты на мой сайт. Это поможет. Есть ли вероятность, что вы можете загрузить весь код в репозиторий git или в sylius? – Brett
@Brett Это почти весь код (очевидно, возврат не называется Payum), так как мы сначала написали Omnipay-шлюз. Но в любом случае код здесь https://github.com/vesse/SyliusPayumCheckoutFiBundle – vesse