/**
  * {@inheritdoc}
  */
 protected function composeDetails(PaymentInterface $payment, TokenInterface $token)
 {
     if ($payment->getDetails()) {
         return;
     }
     $order = $payment->getOrder();
     $details = array();
     $details['payment_method'] = $this->apiMethod($payment->getMethod()->getName());
     $details['payment_type'] = 1;
     $details['checkout_url'] = $this->tokenFactory->createNotifyToken($token->getPaymentName(), $payment)->getTargetUrl();
     $details['order_code'] = $order->getNumber() . '-' . $payment->getId();
     $details['cur_code'] = $order->getCurrency();
     $details['total_amount'] = round($order->getTotal() / 100, 2);
     $details['total_item'] = count($order->getItems());
     $m = 0;
     foreach ($order->getItems() as $item) {
         $details['item_name' . $m] = $item->getId();
         $details['item_amount' . $m] = round($item->getTotal() / $item->getQuantity() / 100, 2);
         $details['item_quantity' . $m] = $item->getQuantity();
         $m++;
     }
     if (0 !== ($taxTotal = $this->calculateNonNeutralTaxTotal($order))) {
         $details['tax_amount'] = $taxTotal;
     }
     if (0 !== ($promotionTotal = $order->getAdjustmentsTotal(AdjustmentInterface::PROMOTION_ADJUSTMENT))) {
         $details['discount_amount'] = $promotionTotal;
     }
     if (0 !== ($shippingTotal = $order->getAdjustmentsTotal(AdjustmentInterface::SHIPPING_ADJUSTMENT))) {
         $details['fee_shipping'] = $shippingTotal;
     }
     $payment->setDetails($details);
 }
Пример #2
0
 /**
  * {@inheritDoc}
  */
 public function execute($request)
 {
     /** @var $request Capture */
     RequestNotSupportedException::assertSupports($this, $request);
     $postData = ArrayObject::ensureArrayObject($request->getModel());
     if (empty($postData['Ds_Merchant_MerchantURL']) && $request->getToken() && $this->tokenFactory) {
         $notifyToken = $this->tokenFactory->createNotifyToken($request->getToken()->getGatewayName(), $request->getToken()->getDetails());
         $postData['Ds_Merchant_MerchantURL'] = $notifyToken->getTargetUrl();
     }
     $postData->validatedKeysSet(array('Ds_Merchant_Amount', 'Ds_Merchant_Order', 'Ds_Merchant_Currency', 'Ds_Merchant_TransactionType', 'Ds_Merchant_MerchantURL'));
     $postData['Ds_Merchant_MerchantCode'] = $this->api->getMerchantCode();
     $postData['Ds_Merchant_Terminal'] = $this->api->getMerchantTerminalCode();
     if (false == $postData['Ds_Merchant_UrlOK'] && $request->getToken()) {
         $postData['Ds_Merchant_UrlOK'] = $request->getToken()->getTargetUrl();
     }
     if (false == $postData['Ds_Merchant_UrlKO'] && $request->getToken()) {
         $postData['Ds_Merchant_UrlKO'] = $request->getToken()->getTargetUrl();
     }
     $postData['Ds_SignatureVersion'] = Api::SIGNATURE_VERSION;
     if (false == $postData['Ds_MerchantParameters'] && $request->getToken()) {
         $postData['Ds_MerchantParameters'] = $this->api->createMerchantParameters($postData->toUnsafeArray());
     }
     if (false == $postData['Ds_Signature']) {
         $postData['Ds_Signature'] = $this->api->sign($postData->toUnsafeArray());
         throw new HttpPostRedirect($this->api->getRedsysUrl(), $postData->toUnsafeArray());
     }
 }
Пример #3
0
 /**
  * {@inheritDoc}
  *
  * @param Authorize $request
  */
 public function execute($request)
 {
     RequestNotSupportedException::assertSupports($this, $request);
     $model = ArrayObject::ensureArrayObject($request->getModel());
     $merchant = ArrayObject::ensureArrayObject($model['merchant'] ?: []);
     if (false == $merchant['checkout_uri'] && $this->config->checkoutUri) {
         $merchant['checkout_uri'] = $this->config->checkoutUri;
     }
     if (false == $merchant['terms_uri'] && $this->config->termsUri) {
         $merchant['terms_uri'] = $this->config->termsUri;
     }
     if (false == $merchant['confirmation_uri'] && $request->getToken()) {
         $merchant['confirmation_uri'] = $request->getToken()->getTargetUrl();
     }
     if (empty($merchant['push_uri']) && $request->getToken() && $this->tokenFactory) {
         $notifyToken = $this->tokenFactory->createNotifyToken($request->getToken()->getGatewayName(), $request->getToken()->getDetails());
         $merchant['push_uri'] = $notifyToken->getTargetUrl();
     }
     $merchant->validateNotEmpty(['checkout_uri', 'terms_uri', 'confirmation_uri', 'push_uri']);
     $model['merchant'] = (array) $merchant;
     if (false == $model['location']) {
         $createOrderRequest = new CreateOrder($model);
         $this->gateway->execute($createOrderRequest);
         $model->replace($createOrderRequest->getOrder()->marshal());
         $model['location'] = $createOrderRequest->getOrder()->getLocation();
     }
     $this->gateway->execute(new Sync($model));
     if (Constants::STATUS_CHECKOUT_INCOMPLETE == $model['status']) {
         $renderTemplate = new RenderTemplate($this->templateName, array('snippet' => $model['gui']['snippet']));
         $this->gateway->execute($renderTemplate);
         throw new HttpResponse($renderTemplate->getResult());
     }
 }
Пример #4
0
 /**
  * {@inheritDoc}
  */
 public function execute($request)
 {
     /** @var $request Capture */
     RequestNotSupportedException::assertSupports($this, $request);
     $details = ArrayObject::ensureArrayObject($request->getModel());
     $details->defaults(array('PAYMENTREQUEST_0_PAYMENTACTION' => Api::PAYMENTACTION_SALE));
     if (false == $details['TOKEN']) {
         if (false == $details['RETURNURL'] && $request->getToken()) {
             $details['RETURNURL'] = $request->getToken()->getTargetUrl();
         }
         if (false == $details['CANCELURL'] && $request->getToken()) {
             $details['CANCELURL'] = $request->getToken()->getTargetUrl();
         }
         if (empty($details['PAYMENTREQUEST_0_NOTIFYURL']) && $request->getToken() && $this->tokenFactory) {
             $notifyToken = $this->tokenFactory->createNotifyToken($request->getToken()->getGatewayName(), $request->getToken()->getDetails());
             $details['PAYMENTREQUEST_0_NOTIFYURL'] = $notifyToken->getTargetUrl();
         }
         $this->gateway->execute(new SetExpressCheckout($details));
         if ($details['L_ERRORCODE0']) {
             return;
         }
         $this->gateway->execute(new AuthorizeToken($details));
     }
     $this->gateway->execute(new Sync($details));
     if ($details['PAYERID'] && Api::CHECKOUTSTATUS_PAYMENT_ACTION_NOT_INITIATED == $details['CHECKOUTSTATUS'] && $details['PAYMENTREQUEST_0_AMT'] > 0) {
         $this->gateway->execute(new DoExpressCheckoutPayment($details));
     }
     $this->gateway->execute(new Sync($details));
 }
 /**
  * {@inheritDoc}
  */
 public function execute($request)
 {
     RequestNotSupportedException::assertSupports($this, $request);
     $details = ArrayObject::ensureArrayObject($request->getModel());
     if ($details['_status'] || $details['_captureCompleted']) {
         return;
     }
     if (false == $details['returnUrl'] && $request->getToken()) {
         $details['returnUrl'] = $request->getToken()->getTargetUrl();
     }
     if (false == $details['cancelUrl'] && $request->getToken()) {
         $details['cancelUrl'] = $request->getToken()->getTargetUrl();
     }
     if (empty($details['notifyUrl']) && $request->getToken() && $this->tokenFactory) {
         $notifyToken = $this->tokenFactory->createNotifyToken($request->getToken()->getGatewayName(), $request->getToken()->getDetails());
         $details['notifyUrl'] = $notifyToken->getTargetUrl();
     }
     if (false == $details['clientIp']) {
         $this->gateway->execute($httpRequest = new GetHttpRequest());
         $details['clientIp'] = $httpRequest->clientIp;
     }
     if ($details['_completeCaptureRequired'] && method_exists($this->omnipayGateway, 'completePurchase')) {
         if (false == $details['_captureCompleted']) {
             $response = $this->omnipayGateway->completePurchase($details->toUnsafeArray())->send();
             $details['_captureCompleted'] = true;
         }
     } else {
         $response = $this->omnipayGateway->purchase($details->toUnsafeArray())->send();
         $details['transactionReference'] = $response->getTransactionReference();
     }
     /** @var \Omnipay\Common\Message\AbstractResponse $response */
     if (false == $response instanceof \Omnipay\Common\Message\AbstractResponse) {
         throw new \LogicException('The bridge supports only responses which extends AbstractResponse. Their ResponseInterface is useless.');
     }
     if ($response->isRedirect()) {
         /** @var \Omnipay\Common\Message\AbstractResponse|\Omnipay\Common\Message\RedirectResponseInterface $response */
         if (false == $response instanceof \Omnipay\Common\Message\RedirectResponseInterface) {
             throw new \LogicException('The omnipay\'s tells its response is redirect but the response instance is not RedirectResponseInterface.');
         }
         $details['_completeCaptureRequired'] = 1;
         if ($response->getRedirectMethod() == 'POST') {
             throw new HttpPostRedirect($response->getRedirectUrl(), $response->getRedirectData());
         } else {
             throw new HttpRedirect($response->getRedirectUrl());
         }
     }
     $data = $response->getData();
     if (is_array($data)) {
         $details->replace($data);
     } else {
         $details['_data'] = $data;
     }
     $details['_reference'] = $response->getTransactionReference();
     $details['_status'] = $response->isSuccessful() ? 'captured' : 'failed';
     $details['_status_code'] = $response->getCode();
     $details['_status_message'] = $response->isSuccessful() ? '' : $response->getMessage();
 }
Пример #6
0
 /**
  * @param Order $order
  * @return TokenInterface
  */
 protected function createPaypalToken(Order $order)
 {
     $payment = $this->createPayment($order);
     $payment['INVNUM'] = $payment->getNumber();
     $payment['PAYMENTREQUEST_0_CURRENCYCODE'] = $payment->getCurrencyCode();
     $payment['PAYMENTREQUEST_0_AMT'] = $payment->getTotalAmount();
     $this->registry->getStorage(Payment::class)->update($payment);
     return $this->tokenFactory->createCaptureToken('paypal', $payment, 'payment_done');
 }
 /**
  * {@inheritDoc}
  */
 public function execute($request)
 {
     /** @var $request Capture */
     RequestNotSupportedException::assertSupports($this, $request);
     $details = ArrayObject::ensureArrayObject($request->getModel());
     $details->validateNotEmpty('PAYMENTREQUEST_0_PAYMENTACTION');
     $details->defaults(array('AUTHORIZE_TOKEN_USERACTION' => Api::USERACTION_COMMIT));
     $this->gateway->execute($httpRequest = new GetHttpRequest());
     if (isset($httpRequest->query['cancelled'])) {
         $details['CANCELLED'] = true;
         return;
     }
     if (false == $details['TOKEN']) {
         if (false == $details['RETURNURL'] && $request->getToken()) {
             $details['RETURNURL'] = $request->getToken()->getTargetUrl();
         }
         if (false == $details['CANCELURL'] && $request->getToken()) {
             $details['CANCELURL'] = $request->getToken()->getTargetUrl();
         }
         if (empty($details['PAYMENTREQUEST_0_NOTIFYURL']) && $request->getToken() && $this->tokenFactory) {
             $notifyToken = $this->tokenFactory->createNotifyToken($request->getToken()->getGatewayName(), $request->getToken()->getDetails());
             $details['PAYMENTREQUEST_0_NOTIFYURL'] = $notifyToken->getTargetUrl();
         }
         if ($details['CANCELURL']) {
             $cancelUrl = Url::createFromUrl($details['CANCELURL']);
             $query = $cancelUrl->getQuery();
             $query->modify(['cancelled' => 1]);
             $cancelUrl->setQuery($query);
             $details['CANCELURL'] = (string) $cancelUrl;
         }
         $this->gateway->execute(new SetExpressCheckout($details));
         if ($details['L_ERRORCODE0']) {
             return;
         }
     }
     $this->gateway->execute(new Sync($details));
     if ($details['PAYERID'] && Api::CHECKOUTSTATUS_PAYMENT_ACTION_NOT_INITIATED == $details['CHECKOUTSTATUS'] && $details['PAYMENTREQUEST_0_AMT'] > 0) {
         if (Api::USERACTION_COMMIT !== $details['AUTHORIZE_TOKEN_USERACTION']) {
             $confirmOrder = new ConfirmOrder($request->getFirstModel());
             $confirmOrder->setModel($request->getModel());
             $this->gateway->execute($confirmOrder);
         }
         $this->gateway->execute(new DoExpressCheckoutPayment($details));
     }
     if (false == $details['PAYERID']) {
         $this->gateway->execute(new AuthorizeToken($details));
     }
     $this->gateway->execute(new Sync($details));
 }
 /**
  * {@inheritdoc}
  */
 public function execute($request)
 {
     /* @var $request Capture */
     RequestNotSupportedException::assertSupports($this, $request);
     $details = ArrayObject::ensureArrayObject($request->getModel());
     if (empty($details['transaction_id'])) {
         if (false == $details['success_url'] && $request->getToken()) {
             $details['success_url'] = $request->getToken()->getAfterUrl();
         }
         if (empty($details['notification_url']) && $request->getToken() && $this->tokenFactory) {
             $notifyToken = $this->tokenFactory->createNotifyToken($request->getToken()->getGatewayName(), $request->getToken()->getDetails());
             $details['notification_url'] = $notifyToken->getTargetUrl();
         }
         if ($details['amount'] > 0) {
             $this->gateway->execute(new CreateTransaction($details));
         }
     }
     $this->gateway->execute(new Sync($details));
 }
Пример #9
0
 /**
  * {@inheritDoc}
  *
  * @param Capture $request
  */
 public function execute($request)
 {
     RequestNotSupportedException::assertSupports($this, $request);
     $model = ArrayObject::ensureArrayObject($request->getModel());
     $httpRequest = new GetHttpRequest();
     $this->gateway->execute($httpRequest);
     //we are back from be2bill site so we have to just update model.
     if (isset($httpRequest->query['EXECCODE'])) {
         $model->replace($httpRequest->query);
     } else {
         $extradata = $model['EXTRADATA'] ? json_decode($model['EXTRADATA'], true) : [];
         if (false == isset($extradata['capture_token']) && $request->getToken()) {
             $extradata['capture_token'] = $request->getToken()->getHash();
         }
         if (false == isset($extradata['notify_token']) && $request->getToken() && $this->tokenFactory) {
             $notifyToken = $this->tokenFactory->createNotifyToken($request->getToken()->getGatewayName(), $request->getToken()->getDetails());
             $extradata['notify_token'] = $notifyToken->getHash();
         }
         $model['EXTRADATA'] = json_encode($extradata);
         throw new HttpPostRedirect($this->api->getOffsiteUrl(), $this->api->prepareOffsitePayment($model->toUnsafeArray()));
     }
 }
Пример #10
0
 /**
  * {@inheritDoc}
  *
  * @param Capture $request
  */
 public function execute($request)
 {
     RequestNotSupportedException::assertSupports($this, $request);
     /**
      * @var TokenInterface
      */
     $token = $request->getToken();
     $model = ArrayObject::ensureArrayObject($request->getModel());
     $this->gateway->execute($httpRequest = new GetHttpRequest());
     // Check httpRequest
     $extraData = $model['extraData'] ? json_decode($model['extraData'], true) : [];
     if (false == isset($extraData['capture_token']) && $token) {
         $extraData['capture_token'] = $token->getHash();
     }
     if (false == isset($extraData['notify_token']) && $token && $this->tokenFactory) {
         $notifyToken = $this->tokenFactory->createNotifyToken($token->getGatewayName(), $token->getDetails());
         $extraData['notify_token'] = $notifyToken->getHash();
         $model['resURL'] = $notifyToken->getTargetUrl();
     }
     $model['extraData'] = json_encode($extraData);
     throw new HttpPostRedirect($this->api->getApiEndpoint(), $this->api->prepareFields($model->toUnsafeArray()));
 }
Пример #11
0
 /**
  * {@inheritdoc}
  */
 public function execute($request)
 {
     RequestNotSupportedException::assertSupports($this, $request);
     $model = ArrayObject::ensureArrayObject($request->getModel());
     if (false == $model['customer_ip_address']) {
         $this->gateway->execute($httpRequest = new GetHttpRequest());
         $model['customer_ip_address'] = $httpRequest->clientIp;
     }
     if (false == $model['normal_return_url'] && $request->getToken()) {
         $model['normal_return_url'] = $request->getToken()->getTargetUrl();
     }
     if (false == $model['cancel_return_url'] && $request->getToken()) {
         $model['cancel_return_url'] = $request->getToken()->getTargetUrl();
     }
     if (empty($model['automatic_response_url']) && $request->getToken() && $this->tokenFactory) {
         $notifyToken = $this->tokenFactory->createNotifyToken($request->getToken()->getGatewayName(), $request->getToken()->getDetails());
         $model['automatic_response_url'] = $notifyToken->getTargetUrl();
     }
     if (false == $model['transaction_id']) {
         $this->gateway->execute(new CallRequest($model));
     }
     $this->gateway->execute(new Sync($model));
 }
 /**
  * {@inheritdoc}
  */
 protected function composeDetails(PaymentInterface $payment, TokenInterface $token)
 {
     if ($payment->getDetails()) {
         return;
     }
     $order = $payment->getOrder();
     $details = array();
     $details['PAYMENTREQUEST_0_NOTIFYURL'] = $this->tokenFactory->createNotifyToken($token->getPaymentName(), $payment)->getTargetUrl();
     $details['PAYMENTREQUEST_0_INVNUM'] = $order->getNumber() . '-' . $payment->getId();
     $details['PAYMENTREQUEST_0_CURRENCYCODE'] = $order->getCurrency();
     $details['PAYMENTREQUEST_0_AMT'] = round($order->getTotal() / 100, 2);
     $details['PAYMENTREQUEST_0_ITEMAMT'] = round($order->getTotal() / 100, 2);
     $m = 0;
     foreach ($order->getItems() as $item) {
         $details['L_PAYMENTREQUEST_0_AMT' . $m] = round($item->getTotal() / $item->getQuantity() / 100, 2);
         $details['L_PAYMENTREQUEST_0_QTY' . $m] = $item->getQuantity();
         $m++;
     }
     if (0 !== ($taxTotal = $this->calculateNonNeutralTaxTotal($order))) {
         $details['L_PAYMENTREQUEST_0_NAME' . $m] = 'Tax Total';
         $details['L_PAYMENTREQUEST_0_AMT' . $m] = round($taxTotal / 100, 2);
         $details['L_PAYMENTREQUEST_0_QTY' . $m] = 1;
         $m++;
     }
     if (0 !== ($promotionTotal = $order->getAdjustmentsTotal(AdjustmentInterface::PROMOTION_ADJUSTMENT))) {
         $details['L_PAYMENTREQUEST_0_NAME' . $m] = 'Discount';
         $details['L_PAYMENTREQUEST_0_AMT' . $m] = round($promotionTotal / 100, 2);
         $details['L_PAYMENTREQUEST_0_QTY' . $m] = 1;
         $m++;
     }
     if (0 !== ($shippingTotal = $order->getAdjustmentsTotal(AdjustmentInterface::SHIPPING_ADJUSTMENT))) {
         $details['L_PAYMENTREQUEST_0_NAME' . $m] = 'Shipping Total';
         $details['L_PAYMENTREQUEST_0_AMT' . $m] = round($shippingTotal / 100, 2);
         $details['L_PAYMENTREQUEST_0_QTY' . $m] = 1;
     }
     $payment->setDetails($details);
 }
Пример #13
0
 /**
  * @param Request $request
  *
  * @return JsonResponse
  */
 public function updateAction($content, Request $request)
 {
     $payment = $this->findRequestedPayment($request);
     $rawPayment = ArrayObject::ensureArrayObject($content);
     $form = $this->formFactory->create('update_payment', $payment);
     $form->submit((array) $rawPayment);
     if (false == $form->isValid()) {
         return new JsonResponse($this->formToJsonConverter->convertInvalid($form), 400);
     }
     /** @var Payment $payment */
     $payment = $form->getData();
     $payment->setAfterUrl($payment->getAfterUrl() ?: $request->getSchemeAndHttpHost());
     $payment->setDetails([]);
     $storage = $this->registry->getStorage($payment);
     $storage->update($payment);
     $token = $this->tokenFactory->createAuthorizeToken($payment->getGatewayName(), $payment, $payment->getAfterUrl());
     $payment->addLink('authorize', $token->getTargetUrl());
     $token = $this->tokenFactory->createCaptureToken($payment->getGatewayName(), $payment, $payment->getAfterUrl());
     $payment->addLink('capture', $token->getTargetUrl());
     $token = $this->tokenFactory->createNotifyToken($payment->getGatewayName(), $payment);
     $payment->addLink('notify', $token->getTargetUrl());
     $storage->update($payment);
     return new JsonResponse(array('payment' => $this->paymentToJsonConverter->convert($payment)));
 }