Symfony - редирект с почтовыми данными в контроллере - PullRequest
0 голосов
/ 08 февраля 2019

Цель состоит в том, чтобы зарегистрировать неактивного пользователя на моем веб-сайте и перенаправить его на платежную платформу, отправив данные пользователя, введенные в форму с помощью метода POST.

У меня есть форма в POST, которую я используюсоздать неактивного пользователя, если эта форма действительна.Затем я хотел бы перенаправить моего пользователя на внешний URL-адрес при отправке данных из этой формы в POST на этот URL-адрес.Этот URL принимает только определенные имена переменных (эти переменные находятся в ассоциативном массиве моего RedirectResponse) и только в POST.

Пользователь выполнит свой платеж по внешней ссылке, и если платеж будет успешным, я активируюПользователь позже.Я идентифицирую себя с платформой оплаты, отправив ее 'ID', и она авторизовала мое доменное имя.

Я попытался использовать RedirectResponse со статусом 307, но я думаю, что невозможно отправить ему данные POST.

     * @Route("/{id<\d+>?1}/{slug}", methods={"GET", "POST"}, name="show")
     * @Security("is_granted('IS_AUTHENTICATED_ANONYMOUSLY')")
     */
    public function show(Offre $offre, $slug, Request $request): Response
    {
        if ($offre->getSlug() !== $slug) {
            return $this->redirectToRoute('site_devenir_vip_show', [
                'id'   => $offre->getId(),
                'slug' => $offre->getSlug(),
            ], Response::HTTP_MOVED_PERMANENTLY);
        }

        $utilisateur = new User();

        $form = $this->createForm(UserType::class, $utilisateur);
        $form->handleRequest($request);

        if ($form->isSubmitted() === true) {
            if ($form->isValid() === true) {
                // TODO: create the inactive User here

                // TODO: redirect the user on the payment platform
                return new RedirectResponse('https://mywebsite.com', 307, [
                    'NOM'        => $utilisateur->getNom(),
                    'PRENOM'     => $utilisateur->getPrenom(),
                    'TEL'        => $utilisateur->getTel(),
                    'EMAIL'      => $utilisateur->getEmail(),
                    'PAYS'       => $utilisateur->getPays(),
                    'ID'         => 'XXXX',
                    'ABONNEMENT' => 'XXXX',
                ]);
            }

            $this->addFlash('error', 'Le formulaire comporte des erreurs.');
        }

        return $this->render('site/pages/devenir_vip/show.html.twig', [
            'offre' => $offre,
            'form'  => $form->createView(),
        ]);
    }

В настоящее время я перенаправлен на внешнюю ссылку, которая находится в RedirectResponse, но он не получает параметры.У вас есть идея?

1 Ответ

0 голосов
/ 08 февраля 2019

POST - это метод запроса , а не ответ"метод".У запросов есть методы (GET, POST, PUT, PATCH, HEAD и т. Д.), А ответы имеют коды состояния (200, 404, 500 и т. Д.).

Возможно, вам необходимо создать платеж, отправив данные в gate с помощью HTTP-клиента из php, а затем перенаправив пользователя, если платеж был создан.Платежные системы часто отвечают URL-адресом, на который следует перенаправить пользователя.Обратитесь к документации API для вашего шлюза.

Symfony по умолчанию не включает в себя HTTP-клиента (в любом случае, неправильного).Я рекомендую Жрать .

Код модели:

if ($form->isSubmitted() === true) {
    if ($form->isValid() === true) {
        $httpClient = new Client();

        $response = $httpClient->post('https://paymentgate.com', [
            'key' => 'value',
        ]);

        // Validate response somehow
        if ($response->statusCode() !== 200) {
            $this->addFlash('error', 'Payment gate failed to respond');
        } else {
            // Let's assume that the gate returns a json with key 'redirect' containing the url
            $json = json_decode($response->getContent());
            return new RedirectResponse($json->redirect);
        }
    }

    $this->addFlash('error', 'Le formulaire comporte des erreurs.');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...