/**
  * @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;
 }
示例#3
0
 /**
  * @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;
 }