/** * @param Request $request * * @return JsonResponse */ public function createAction($content, Request $request) { $this->forward400Unless('json' == $request->getContentType() || 'form' == $request->getContentType()); $rawPayment = ArrayObject::ensureArrayObject($content); $form = $this->formFactory->create('create_payment'); $form->submit((array) $rawPayment); if (false == $form->isValid()) { return new JsonResponse($this->formToJsonConverter->convertInvalid($form), 400); } /** @var Payment $payment */ $payment = $form->getData(); $payment->setId(Random::generateToken()); $storage = $this->payum->getStorage($payment); $storage->update($payment); $payment->setNumber($payment->getNumber() ?: date('Ymd-' . mt_rand(10000, 99999))); $storage->update($payment); // TODO $payment->setValue('links', 'done', 'http://dev.payum-server.com/client/index.html'); $payment->setValue('links', 'self', $this->urlGenerator->generate('payment_get', ['id' => $payment->getId()], true)); $token = $this->payum->getTokenFactory()->createAuthorizeToken($payment->getGatewayName(), $payment, $payment->getValue('links', 'done'), ['payum_token' => null, 'payment' => $payment->getId()]); $payment->setValue('links', 'authorize', $token->getTargetUrl()); $token = $this->payum->getTokenFactory()->createCaptureToken($payment->getGatewayName(), $payment, $payment->getValue('links', 'done'), ['payum_token' => null, 'payment' => $payment->getId()]); $payment->setValue('links', 'capture', $token->getTargetUrl()); $token = $this->payum->getTokenFactory()->createNotifyToken($payment->getGatewayName(), $payment); $payment->setValue('links', 'notify', $token->getTargetUrl()); $storage->update($payment); return new JsonResponse(array('payment' => $this->paymentToJsonConverter->convert($payment)), 201, array('Location' => $payment->getValue('links', 'self'))); }
/** * @param Request $request * * @return JsonResponse */ public function createAction($content, Request $request) { $this->forward400Unless('json' == $request->getContentType() || 'form' == $request->getContentType()); $rawToken = ArrayObject::ensureArrayObject($content); $form = $this->formFactory->create(CreateTokenType::class); $form->submit((array) $rawToken); if (false == $form->isValid()) { return new JsonResponse($this->formToJsonConverter->convertInvalid($form), 400); } $data = $form->getData(); /** @var Payment $payment */ $this->forward400Unless($payment = $this->payum->getStorage(Payment::class)->find($data['paymentId'])); if ($data['type'] == 'capture') { $token = $this->payum->getTokenFactory()->createCaptureToken('', $payment, $data['afterUrl'], ['payum_token' => null, 'paymentId' => $payment->getId()]); } else { if ($data['type'] == 'authorize') { $token = $this->payum->getTokenFactory()->createAuthorizeToken('', $payment, $data['afterUrl'], ['payum_token' => null, 'paymentId' => $payment->getId()]); } else { $this->forward400(sprintf('The token type %s is not supported', $data['type'])); } } return new JsonResponse(['token' => $this->tokenToJsonConverter->convert($token)], 201); }