/** * @param FinancialTransactionInterface $transaction * @throws \JMS\Payment\CoreBundle\Plugin\Exception\ActionRequiredException * * @return string */ protected function obtainInvoiceId(FinancialTransactionInterface $transaction) { $data = $transaction->getExtendedData(); if ($data->has('invoice_id')) { return $data->get('invoice_id'); } $options = $data->get('options'); $invoice = $this->bitpay->createInvoice($data->get('orderId'), $transaction->getRequestedAmount(), $data->get('posData'), $data->get('options')); $this->throwUnlessSuccessResponse($invoice, $transaction); $data->set('invoice_id', $invoice->id); $data->set('invoice_time', $invoice->invoiceTime); $data->set('url', $invoice->url); $data->set('btc_price', $invoice->btcPrice); $transaction->setReferenceNumber($invoice->id); $actionRequest = new ActionRequiredException('User must confirm transaction'); $actionRequest->setFinancialTransaction($transaction); $actionRequest->setAction(new VisitUrl($invoice->url)); throw $actionRequest; }
public function createRedirectActionException(FinancialTransactionInterface $transaction) { $actionRequest = new ActionRequiredException('Redirect to pay'); $actionRequest->setFinancialTransaction($transaction); $actionRequest->setAction(new VisitUrl($this->client->getRedirectUrl($transaction))); return $actionRequest; }
/** * @param FinancialTransactionInterface $transaction * @param \Vifeed\PaymentBundle\Entity\Order $order * * @return ActionRequiredException */ protected function createRedirectActionException(FinancialTransactionInterface $transaction, Order $order) { $actionRequest = new ActionRequiredException('Redirect to pay'); $actionRequest->setFinancialTransaction($transaction); $url = $this->router->generate('order_bill', ['id' => $order->getId()], false); $actionRequest->setAction(new DownloadFile($url)); return $actionRequest; }
function approveAndDeposit(FinancialTransactionInterface $transaction, $retry) { try { $this->responseClient->isValid(); $transaction->setReferenceNumber($this->responseClient->getOrderNumber()); $transaction->setProcessedAmount($transaction->getPayment()->getApprovingAmount()); $transaction->setResponseCode(PluginInterface::RESPONSE_CODE_SUCCESS); $transaction->setReasonCode(PluginInterface::REASON_CODE_SUCCESS); } catch (ActionRequiredException $e) { $actionRequest = new ActionRequiredException('User has not yet authorized the transaction.'); $actionRequest->setFinancialTransaction($transaction); $actionRequest->setAction(new VisitUrl($this->getRedirectUrl($transaction))); throw $actionRequest; } }
/** * @param FinancialTransactionInterface $transaction * @return ActionRequiredException * @throws FinancialException */ public function createPaymentRedirect(FinancialTransactionInterface $transaction) { $actionRequest = new ActionRequiredException('Redirecting to payment.'); $actionRequest->setFinancialTransaction($transaction); $instruction = $transaction->getPayment()->getPaymentInstruction(); if ($instruction->getCurrency() != "BTC") { $e = new FinancialException("Transaction currency is not BTC"); $e->setFinancialTransaction($transaction); throw $e; } $data = $transaction->getExtendedData(); $response = $this->client->generatePayment($this->router->generate('vsymfo_payment_blockchain_callback', array("id" => $instruction->getId()), true)); $data->set("generated_input_address", $response->getInputAddress()); $actionRequest->setAction(new VisitUrl($this->router->generate('vsymfo_payment_blockchain_redirect', array("id" => $instruction->getId())))); return $actionRequest; }
/** * approve Authorized & Sale transactions * * @param FinancialTransactionInterface $transaction * * @return ActionRequiredException */ public function createRedirectActionException(FinancialTransactionInterface $transaction) { $actionRequestException = new ActionRequiredException('User must authorize the transaction'); $actionRequestException->setFinancialTransaction($transaction); $extendedData = $transaction->getExtendedData(); if (!$extendedData->has('ORDERID')) { $extendedData->set('ORDERID', uniqid()); } $additionalData = array(); foreach (self::getAdditionalDataKeys() as $key) { if ($extendedData->has($key)) { $additionalData[$key] = $extendedData->get($key); } } $parameters = array_merge(self::normalize($additionalData), $this->redirectionConfig->getRequestParameters($extendedData), $this->designConfig->getRequestParameters($extendedData), array("ORDERID" => $extendedData->get('ORDERID'), "PSPID" => $this->token->getPspid(), "AMOUNT" => $transaction->getRequestedAmount() * 100, "CURRENCY" => $transaction->getPayment()->getPaymentInstruction()->getCurrency(), "LANGUAGE" => $extendedData->get('lang'))); $parameters['SHASIGN'] = $this->hashGenerator->generate($parameters); ksort($parameters); $actionRequestException->setAction(new VisitUrl($this->getStandardOrderUrl() . '?' . http_build_query($parameters))); return $actionRequestException; }
/** * @param FinancialTransactionInterface $transaction * @return ActionRequiredException */ public function createEgopayRedirect(FinancialTransactionInterface $transaction) { $actionRequest = new ActionRequiredException('Redirecting to Egopay.'); $actionRequest->setFinancialTransaction($transaction); $instruction = $transaction->getPayment()->getPaymentInstruction(); $extendedData = $transaction->getExtendedData(); if (!$extendedData->has('success_url')) { throw new \RuntimeException('You must configure a success_url.'); } if (!$extendedData->has('fail_url')) { throw new \RuntimeException('You must configure a fail_url.'); } $data = array('amount' => $transaction->getRequestedAmount(), 'currency' => $instruction->getCurrency(), 'description' => $extendedData->has('description') ? $extendedData->get('description') : '', 'success_url' => $extendedData->get('success_url'), 'fail_url' => $extendedData->get('fail_url'), 'callback_url' => $this->router->generate('vsymfo_payment_egopay_callback', array('id' => $instruction->getId()), true)); for ($i = 1; $i < 9; $i++) { if ($extendedData->has('cf_' . $i)) { $data['cf_' . $i] = (string) $extendedData->get('cf_' . $i); } } $paymentHash = $this->sci->createSci()->createHash($data); $actionRequest->setAction(new VisitUrl(http_build_url(EgoPaySci::EGOPAY_PAYMENT_URL, array('query' => 'hash=' . $paymentHash), HTTP_URL_STRIP_AUTH | HTTP_URL_JOIN_PATH | HTTP_URL_JOIN_QUERY | HTTP_URL_STRIP_FRAGMENT))); return $actionRequest; }
/** * @param \JMS\Payment\CoreBundle\Model\FinancialTransactionInterface $transaction * @param string $paymentAction * * @throws \JMS\Payment\CoreBundle\Plugin\Exception\ActionRequiredException if user has to authenticate the token * * @return string */ protected function obtainExpressCheckoutToken(FinancialTransactionInterface $transaction, $paymentAction) { $data = $transaction->getExtendedData(); if ($data->has('express_checkout_token')) { return $data->get('express_checkout_token'); } $opts = $data->has('checkout_params') ? $data->get('checkout_params') : array(); $opts['PAYMENTREQUEST_0_PAYMENTACTION'] = $paymentAction; $opts['PAYMENTREQUEST_0_CURRENCYCODE'] = $transaction->getPayment()->getPaymentInstruction()->getCurrency(); $response = $this->client->requestSetExpressCheckout($transaction->getRequestedAmount(), $this->getReturnUrl($data), $this->getCancelUrl($data), $opts); $this->throwUnlessSuccessResponse($response, $transaction); $data->set('express_checkout_token', $response->body->get('TOKEN')); $authenticateTokenUrl = $this->client->getAuthenticateExpressCheckoutTokenUrl($response->body->get('TOKEN')); $actionRequest = new ActionRequiredException('User must authorize the transaction.'); $actionRequest->setFinancialTransaction($transaction); $actionRequest->setAction(new VisitUrl($authenticateTokenUrl)); throw $actionRequest; }
/** * @param FinancialTransactionInterface $transaction * @return ActionRequiredException */ public function createPerfectMoneyRedirect(FinancialTransactionInterface $transaction) { $actionRequest = new ActionRequiredException('Redirecting to PerfectMoney.'); $actionRequest->setFinancialTransaction($transaction); $instruction = $transaction->getPayment()->getPaymentInstruction(); $actionRequest->setAction(new VisitUrl($this->router->generate('vsymfo_payment_perfectmoney_redirect', array("id" => $instruction->getId())))); return $actionRequest; }
/** * @param FinancialTransactionInterface $transaction * @return ActionRequiredException */ public function createOkPayRedirect(FinancialTransactionInterface $transaction) { $actionRequest = new ActionRequiredException('Redirecting to OKPAY.'); $actionRequest->setFinancialTransaction($transaction); $instruction = $transaction->getPayment()->getPaymentInstruction(); $extendedData = $transaction->getExtendedData(); if (!$extendedData->has('success_url')) { throw new \RuntimeException('You must configure a success_url.'); } if (!$extendedData->has('fail_url')) { throw new \RuntimeException('You must configure a fail_url.'); } $query = 'ok_receiver=' . $this->client->getWalletId() . '&ok_item_1_price=' . $transaction->getRequestedAmount() . '&ok_currency=' . $instruction->getCurrency() . '&ok_item_1_name=' . ($extendedData->has('description') ? $extendedData->get('description') : '') . '&ok_ipn=' . $this->router->generate('vsymfo_payment_okpay_callback', array('id' => $instruction->getId()), true) . '&ok_return_fail=' . $extendedData->get('fail_url') . '&ok_return_success=' . $extendedData->get('success_url'); $actionRequest->setAction(new VisitUrl("https://www.okpay.com/process.html?" . $query)); return $actionRequest; }
/** * @param FinancialTransactionInterface $transaction * @return ActionRequiredException */ public function createPayeerRedirect(FinancialTransactionInterface $transaction) { $actionRequest = new ActionRequiredException('Redirecting to Payeer.'); $actionRequest->setFinancialTransaction($transaction); $instruction = $transaction->getPayment()->getPaymentInstruction(); $extendedData = $transaction->getExtendedData(); $m_shop = $this->client->getShopId(); $m_orderid = $instruction->getId(); $m_amount = number_format($transaction->getRequestedAmount(), 2, '.', ''); $m_curr = $instruction->getCurrency(); $m_desc = base64_encode($extendedData->has('description') ? $extendedData->get('description') : ''); $m_key = $this->client->getSecretKey(); $data = array('m_shop' => $m_shop, 'm_orderid' => $m_orderid, 'm_amount' => $m_amount, 'm_curr' => $m_curr, 'm_desc' => $m_desc, 'm_process' => 'send', 'm_sign' => $this->client->createFormHash(array($m_shop, $m_orderid, $m_amount, $m_curr, $m_desc, $m_key))); $actionRequest->setAction(new VisitUrl(http_build_url(Client::FORM_URL, array('query' => http_build_query($data)), HTTP_URL_STRIP_AUTH | HTTP_URL_JOIN_PATH | HTTP_URL_JOIN_QUERY | HTTP_URL_STRIP_FRAGMENT))); return $actionRequest; }
public function createRedirectActionException(FinancialTransactionInterface $transaction) { $parameters = $this->getPurchaseParameters($transaction); /** * @var \Omnipay\MultiSafepay\Message\PurchaseRequest $purchaseRequest */ $purchaseRequest = $this->gateway->purchase($parameters); /** * @var \Omnipay\MultiSafepay\Message\PurchaseResponse $purchaseResponse */ $purchaseResponse = $purchaseRequest->send(); if ($this->logger) { $this->logger->info($purchaseRequest->getData()->asXML()); $this->logger->info($purchaseResponse->getData()->asXML()); } $url = $purchaseResponse->getRedirectUrl(); if (empty($url)) { $ex = new FinancialException('Payment failed.'); $ex->setFinancialTransaction($transaction); $transaction->setResponseCode('FAILED'); $transaction->setReasonCode('FAILED'); $transaction->setState(FinancialTransactionInterface::STATE_FAILED); if ($this->logger) { $this->logger->info(sprintf('Payment failed for transaction "%s" with reason: ', $transaction->getTrackingId(), $purchaseResponse->getMessage())); } throw $ex; } $actionRequest = new ActionRequiredException('Redirect the user to MultiSafepay.'); $actionRequest->setFinancialTransaction($transaction); $actionRequest->setAction(new VisitUrl($purchaseResponse->getRedirectUrl())); if ($this->logger) { $this->logger->info(sprintf('Create a new redirect exception for transaction "%s".', $purchaseResponse->getTransactionReference())); } return $actionRequest; }
/** * @param FinancialTransactionInterface $transaction * @return CommunicationException|IdealIssuerTemporarilyUnavailableException|MollieTemporarilyUnavailableException */ public function createMollieRedirectActionException(FinancialTransactionInterface $transaction) { $parameters = $this->getPurchaseParameters($transaction); $response = $this->gateway->purchase($parameters)->send(); if ($this->logger) { $this->logger->info(json_encode($response->getRequest()->getData())); $this->logger->info(json_encode($response->getData())); } if ($response->isRedirect()) { $transaction->setTrackingId($response->getTransactionReference()); $actionRequest = new ActionRequiredException('Redirect the user to Molie.'); $actionRequest->setFinancialTransaction($transaction); $actionRequest->setAction(new VisitUrl($response->getRedirectUrl())); if ($this->logger) { $this->logger->info(sprintf('Create a new redirect exception for transaction "%s".', $response->getTransactionReference())); } return $actionRequest; } if (!$response->isSuccessful()) { $data = $response->getData(); if (isset($data['error']) && isset($data['error']['type']) && $data['error']['type'] == 'system') { if (isset($data['error']['field']) && $data['error']['field'] == 'issuer') { return new IdealIssuerTemporarilyUnavailableException("Can't start payment because of an issue with the issuer. Other issuers may work."); } return new MollieTemporarilyUnavailableException($response->getMessage()); } } return new CommunicationException("Can't create Mollie payment"); }
/** * @param FinancialTransactionInterface $transaction * * @return ActionRequiredException */ public function createDotpayRedirectActionException(FinancialTransactionInterface $transaction) { $actionRequest = new ActionRequiredException('Redirecting to DotPay.'); $actionRequest->setFinancialTransaction($transaction); $instruction = $transaction->getPayment()->getPaymentInstruction(); $extendedData = $transaction->getExtendedData(); $urlc = $this->router->generate('ets_payment_dotpay_callback_urlc', array('id' => $instruction->getId()), true); $datas = array('id' => $this->token->getId(), 'url' => $this->getReturnUrl($extendedData), 'URLC' => $urlc, 'type' => $this->type, 'amount' => $transaction->getRequestedAmount(), 'currency' => $instruction->getCurrency(), 'description' => sprintf('Payment Instruction #%d', $instruction->getId())); $additionalDatas = array('street', 'phone', 'postcode', 'lastname', 'firstname', 'email', 'country', 'city', 'grupykanalow'); foreach ($additionalDatas as $value) { if ($extendedData->has($value)) { $datas[$value] = $this->stringTools->normalize($extendedData->get($value)); } } if ($extendedData->has('lang')) { $datas['lang'] = substr($extendedData->get('lang'), 0, 2); } $actionRequest->setAction(new VisitUrl($this->url . '?' . http_build_query($datas))); return $actionRequest; }