Ошибки маршрутизации и смешанного содержимого Symfony

Здравствуйте, я получаю смешанные ошибки содержимого при попытке отобразить форму сведений о карте на странице оформления заказа моего приложения Symfony/Sylius. Я использую Payum W / OmniPay Bridge, чтобы сделать проверку мудрой оплаты.

Причина, по которой я получаю ошибку смешанного содержимого, заключается в том, что я отправляю форму на родительской странице, которая отправляет токен по следующему маршруту:

payum_capture_do:
    path: /payment/capture/{payum_token}
    defaults: { _controller: sylius.controller.payum.capture:doAction }
    # schemes:  [https]

route, который, в свою очередь, выполняет некоторый код для получения iFrame src. Ответ затем подается в iFrame src. На самом деле все это делается через JS, отправляя форму непосредственно в iFrame:

 let form = jQuery("form[name='sylius_checkout_complete']");

 if (form.length) {
     form.attr('target', 'card-details');
     form.submit();
 }

В этом случае возникает проблема, поскольку маршрут payum не является https-маршрутом, и поэтому iFrame заблокирован для показа контента из-за ошибки смешанного контента. Причина, по которой эта ошибка настолько странная, заключается в том, что, если я принудительно установлю маршрут к https (как вы можете видеть, я пытался из комментария), он вернется с "Too Many Redirects" и вылетит на страницу (хотя он отображается в iFrame.). Я думаю, что это потому, что сначала он пытается http, а затем https, и поскольку платеж может быть получен только один раз, он становится недействительным.

Любая помощь будет принята с благодарностью.

0 ответов

ОБНОВИТЬ

Правильное решение должно состоять в том, чтобы переопределить определения маршрута с помощью принудительного https, я сделал:

payum_all:
    resource: "@PayumBundle/Resources/config/routing/all.xml"

payum_capture_do:
    path: /payment/capture/{payum_token}
    controller: PayumBundle:Capture:do
    schemes: [https]

Проблема, с которой Symfony совершал бесконечные перенаправления, заключалась в том, что у меня был Ingress-Nginx перед приложением, которое обрабатывало и завершало https. Таким образом, приложение Symfony на самом деле никогда не думало, что оно было достигнуто через https, следовательно, перенаправления

Для этого мне пришлось обновить nginx, который вызывает php_fpm, используя следующий параметр:

fastcgi_param HTTPS on;

Если вы используете Kubernetes Ingress и хотите передать https на ваш сервис, вы можете проверить:

nginx.ingress.kubernetes.io/ssl-passthrough: "true"

Теперь Payum и шлюз работают, генерируя правильные маршруты https.

СТАРЫЙ ОТВЕТ:

Это мой старый ответ, который в итоге не сработал, я оставляю его для расследования.

Возможно, проблема связана с используемым вами шлюзом payum, у меня была такая же проблема с https://github.com/nfq-eta/payum-braintree.

Проблема заключалась в том, что файл https://github.com/nfq-eta/payum-braintree/blob/037fb302d63e1bfd733ecc86afc3ec869adb8f2b/src/Resources/views/Action/obtain_payment_method_nonce.html.twig включен в форму оплаты с URL-адресом для оплаты.

Я решил это, переопределив шаблон с помощью конфигурации payum.yaml

gateways:
    offline:
        factory: offline
    braintree:
        factory: braintree
        payum.template.obtain_payment_method_nonce: 'Payment/payum_obtain_payment_method_nonce.html.twig'

Затем я создал свой шаблон в templates/payum_obtain_payment_method_nonce.html.twig:

{% extends "@PayumBraintree/Action/obtain_payment_method_nonce.html.twig" %}

{% block braintree_payment_form %}
    <form method="POST" id="form">
        <div id="dropin-container"></div>
        <input type="hidden" name="payment_method_nonce" id="payment_method_nonce" value="" />
        <input type="submit" value="Submit payment" id="submit_btn" />
    </form>
{% endblock %}

Я полностью удалил аргумент действия из формы, чтобы он просто использовал текущий. Который в моем случае это https: //...

Это работает, но кто-то знает лучшее решение?

Другие вопросы по тегам