示例#1
1
 /**
  * {@inheritdoc}
  *
  * @param $request Capture
  */
 public function execute($request)
 {
     RequestNotSupportedException::assertSupports($this, $request);
     /** @var $payment SyliusPaymentInterface */
     $payment = $request->getModel();
     /** @var OrderInterface $order */
     $order = $payment->getOrder();
     $this->gateway->execute($status = new GetStatus($payment));
     if ($status->isNew()) {
         try {
             $this->gateway->execute($convert = new Convert($payment, 'array', $request->getToken()));
             $payment->setDetails($convert->getResult());
         } catch (RequestNotSupportedException $e) {
             $totalAmount = $order->getTotal();
             $payumPayment = new PayumPayment();
             $payumPayment->setNumber($order->getNumber());
             $payumPayment->setTotalAmount($totalAmount);
             $payumPayment->setCurrencyCode($order->getCurrencyCode());
             $payumPayment->setClientEmail($order->getCustomer()->getEmail());
             $payumPayment->setClientId($order->getCustomer()->getId());
             $payumPayment->setDescription(sprintf('Payment contains %d items for a total of %01.2f', $order->getItems()->count(), round($totalAmount / 100, 2)));
             $payumPayment->setDetails($payment->getDetails());
             $this->gateway->execute($convert = new Convert($payumPayment, 'array', $request->getToken()));
             $payment->setDetails($convert->getResult());
         }
     }
     $details = ArrayObject::ensureArrayObject($payment->getDetails());
     try {
         $request->setModel($details);
         $this->gateway->execute($request);
     } finally {
         $payment->setDetails((array) $details);
     }
 }
 /**
  * {@inheritDoc}
  */
 public function createConfig(array $config = array())
 {
     $config = ArrayObject::ensureArrayObject($config);
     $config->defaults($this->defaultConfig);
     $config->defaults($this->coreGatewayFactory->createConfig((array) $config));
     return (array) $config;
 }
 /**
  * {@inheritDoc}
  */
 public function execute($request)
 {
     if (!$this->supports($request)) {
         throw RequestNotSupportedException::createActionNotSupported($this, $request);
     }
     $model = ArrayObject::ensureArrayObject($request->getModel());
     if ($model['_status']) {
         return;
     }
     if (false == $model->validateNotEmpty(array('card'), false)) {
         try {
             $creditCardRequest = new ObtainCreditCardRequest();
             $this->payment->execute($creditCardRequest);
             $card = $creditCardRequest->obtain();
             $firstName = $lastName = '';
             list($firstName, $lastName) = explode(' ', $card->getHolder(), 1);
             $model['card'] = new SensitiveValue(array('number' => $card->getNumber(), 'cvv' => $card->getSecurityCode(), 'expiryMonth' => $card->getExpireAt()->format('m'), 'expiryYear' => $card->getExpireAt()->format('y'), 'firstName' => $firstName, 'lastName' => $lastName));
         } catch (RequestNotSupportedException $e) {
             throw new LogicException('Credit card details has to be set explicitly or there has to be an action that supports ObtainCreditCardRequest request.');
         }
     }
     $response = $this->gateway->purchase($model->toUnsafeArray())->send();
     $model['_reference'] = $response->getTransactionReference();
     $model['_status'] = $response->isSuccessful() ? 'success' : 'failed';
     $model['_status_code'] = $response->getCode();
     $model['_status_message'] = $response->isSuccessful() ? '' : $response->getMessage();
 }
示例#4
0
 /**
  * {@inheritdoc}
  */
 public function execute($request)
 {
     RequestNotSupportedException::assertSupports($this, $request);
     /** @var GetStatusInterface $request */
     $model = ArrayObject::ensureArrayObject($request->getModel());
     if (false == $model['transaction_id']) {
         $request->markNew();
         return;
     }
     if (false != ($responseCode = $model['response_code'])) {
         // Success
         if ('00' === $responseCode) {
             $request->markCaptured();
             return;
         }
         // Cancelled by user
         if ('17' === $responseCode) {
             $request->markCanceled();
             return;
         }
         // Failure
         $request->markFailed();
         return;
     }
     $request->markPending();
 }
示例#5
0
 /**
  * {@inheritDoc}
  *
  * @param GetStatusInterface $request
  */
 public function execute($request)
 {
     RequestNotSupportedException::assertSupports($this, $request);
     $model = ArrayObject::ensureArrayObject($request->getModel());
     if ($model['error_code']) {
         $request->markFailed();
         return;
     }
     if ($model['invoice_number']) {
         $request->markCaptured();
         return;
     }
     if ($model['reservation']) {
         $request->markAuthorized();
         return;
     }
     if (false == $model['status'] || Constants::STATUS_CHECKOUT_INCOMPLETE == $model['status']) {
         $request->markNew();
         return;
     }
     if (Constants::STATUS_CHECKOUT_COMPLETE == $model['status']) {
         $request->markPending();
         return;
     }
     $request->markUnknown();
 }
 /**
  * {@inheritDoc}
  */
 public function execute($request)
 {
     /** @var $request Capture */
     RequestNotSupportedException::assertSupports($this, $request);
     $model = ArrayObject::ensureArrayObject($request->getModel());
     if (false == $model['token']) {
         $this->payment->execute(new Log('No token. First....', $this));
         if (false == $model['return_url'] && $request->getToken()) {
             $model['return_url'] = $request->getToken()->getTargetUrl();
         }
         if (false == $model['cancel_url'] && $request->getToken()) {
             $model['cancel_url'] = $request->getToken()->getTargetUrl();
         }
         $model['state'] = StateInterface::STATE_WAITING;
         $this->payment->execute(new Log('Waiting for reply when calling SetExpressCheckout', $this));
         $this->payment->execute(new SetExpressCheckout($model));
         if (isset($model['error_code']) && $model['error_code'] === Errors::ERRCODE_NO_ERROR) {
             if (isset($model['checkout_url'])) {
                 $model['state'] = StateInterface::STATE_REPLIED;
                 $this->payment->execute(new Log('checkout_url=' . $model['checkout_url'], $this));
                 throw new HttpRedirect($model['checkout_url']);
             } else {
                 $model['state'] = StateInterface::STATE_ERROR;
                 $this->payment->execute(new Log('No checkout_url returned.', $this));
             }
         }
     } else {
         $this->payment->execute(new Log('Before calling GetTransactionDetails', $this));
         $this->logAllModel($model);
         $copiedModel = new ArrayObject(array('token' => $model['token']));
         $this->payment->execute(new GetTransactionDetails($copiedModel));
         $this->payment->execute(new Log('After calling GetTransactionDetails', $this));
         $this->logAllModel($copiedModel);
         if ($copiedModel['error_code'] === Errors::ERRCODE_NO_ERROR) {
             $model['bank_code'] = $copiedModel['bank_code'];
             $model['transaction_id'] = $copiedModel['transaction_id'];
             $model['transaction_status'] = $copiedModel['transaction_status'];
             if ($copiedModel['transaction_status'] == TransactionStatus::PAID) {
                 $model['state'] = StateInterface::STATE_CONFIRMED;
                 $this->payment->execute(new Log('Order paid. OK. OK. OK.', $this));
             } else {
                 if ($copiedModel['transaction_status'] == TransactionStatus::NOT_PAID) {
                     $model['state'] = StateInterface::STATE_ERROR;
                     $this->payment->execute(new Log('Payer decided to avoid payment', $this));
                 } else {
                     if ($copiedModel['transaction_status'] == TransactionStatus::PAID_WAITING_FOR_PROCESS) {
                         $model['state'] = StateInterface::STATE_NOTIFIED;
                         $this->payment->execute(new Log('Payment process notified but not captured.', $this));
                     } else {
                         $model['state'] = StateInterface::STATE_ERROR;
                         $this->payment->execute(new Log('Payment process return OK but transaction status is not invalid. Unknown error !!!', $this));
                     }
                 }
             }
         } else {
             $model['state'] = StateInterface::STATE_ERROR;
             $this->payment->execute(new Log('Error after calling GetTransactionDetails', $this));
         }
     }
 }
示例#7
0
 /**
  * {@inheritDoc}
  *
  * @param Notify $request
  */
 public function execute($request)
 {
     RequestNotSupportedException::assertSupports($this, $request);
     $details = ArrayObject::ensureArrayObject($request->getModel());
     $this->gateway->execute($httpRequest = new GetHttpRequest());
     if (!isset($httpRequest->request['merchantReference']) || empty($httpRequest->request['merchantReference'])) {
         $details['response_status'] = 401;
         return;
     }
     if (!isset($details['merchantReference']) || $details['merchantReference'] != $httpRequest->request['merchantReference']) {
         $details['response_status'] = 402;
         return;
     }
     if (false === $this->api->verifyNotification($httpRequest->request)) {
         $details['response_status'] = 403;
         return;
     }
     // Check notification code
     if (isset($httpRequest->request['eventCode'])) {
         $httpRequest->request['authResult'] = $httpRequest->request['eventCode'];
         if ('AUTHORISATION' == $httpRequest->request['eventCode']) {
             if ('true' == $httpRequest->request['success']) {
                 $httpRequest->request['authResult'] = 'AUTHORISED';
             } elseif (!empty($httpRequest->request['reason'])) {
                 $httpRequest->request['authResult'] = 'REFUSED';
             }
         }
     }
     $details['authResult'] = $httpRequest->request['authResult'];
     $details['response_status'] = 200;
 }
 /**
  * {@inheritDoc}
  */
 public function execute($request)
 {
     /** @var $request \Payum\Core\Request\GetStatusInterface */
     if (false == $this->supports($request)) {
         throw RequestNotSupportedException::createActionNotSupported($this, $request);
     }
     $model = ArrayObject::ensureArrayObject($request->getModel());
     //TODO: It may be not correct for all cases. This does NOT indicate wether the transaction requested was successful, only wether the request was carried out successfully.
     if ($model['errorCode'] && OrderApi::ERRORCODE_OK != $model['errorCode']) {
         $request->markFailed();
         return;
     }
     if (is_numeric($model['agreementStatus']) && AgreementApi::AGREEMENTSTATUS_NOTVERIFIED == $model['agreementStatus']) {
         $request->markNew();
         return;
     }
     if (is_numeric($model['agreementStatus']) && AgreementApi::AGREEMENTSTATUS_VERIFIED == $model['agreementStatus']) {
         $request->markSuccess();
         return;
     }
     if (is_numeric($model['agreementStatus']) && AgreementApi::AGREEMENTSTATUS_DELETED == $model['agreementStatus']) {
         $request->markCanceled();
         return;
     }
     $request->markUnknown();
 }
 /**
  * {@inheritDoc}
  *
  * @param Capture $request
  */
 public function execute($request)
 {
     /** @var $request Capture */
     RequestNotSupportedException::assertSupports($this, $request);
     $model = ArrayObject::ensureArrayObject($request->getModel());
     if (null !== $model['token']) {
         return;
     }
     if (false == $model['return_url'] && $request->getToken()) {
         $model['return_url'] = $request->getToken()->getTargetUrl();
     }
     if (false == $model['cancel_url'] && $request->getToken()) {
         $model['cancel_url'] = $request->getToken()->getTargetUrl();
     }
     $this->payment->execute(new SetExpressCheckout($model));
     if ($model['error_code'] == '00') {
         if (!isset($model['checkout_url'])) {
             throw new \LogicException('Payment gateway Nganluong is not returned "checkout_url"');
         }
         throw new HttpRedirect($model['checkout_url']);
     } else {
         return;
         // failed
     }
 }
 /**
  * {@inheritDoc}
  */
 public function execute($request)
 {
     /** @var $request SetExpressCheckout */
     RequestNotSupportedException::assertSupports($this, $request);
     $model = ArrayObject::ensureArrayObject($request->getModel());
     /*
     		if ( false == $model->validateNotEmpty( array('payment_method', 'payment_type'), false ) )
     		{
     			try
     			{
     				$this->execute( $paymentInfoRequest = new GetPaymentMethod($model) );
     				$paymentInfo = $paymentInfoRequest->getInfo();
     				$model['payment_method'] = $paymentInfo['payment_method'];
     				$model['payment_type'] = $paymentInfo['payment_type'];
                 } 
     			catch (RequestNotSupportedException $e) {
                     throw new LogicException('Payment info (method, type, ...)) has to be set explicitly or there has to be an action that supports PaymentMethod request.');
                 }
     		}
     */
     $model['payment_method'] = 'VISA';
     $model['payment_type'] = 1;
     $model->validateNotEmpty(array('total_amount', 'cur_code', 'order_code', 'payment_method', 'payment_type'));
     $model->replace($this->api->setExpressCheckout((array) $model));
 }
示例#11
0
 /**
  * {@inheritdoc}
  */
 public function execute($request)
 {
     /** @var $request Capture */
     if (false == $this->supports($request)) {
         throw RequestNotSupportedException::createActionNotSupported($this, $request);
     }
     $model = ArrayObject::ensureArrayObject($request->getModel());
     if (null != $model['response_code']) {
         return;
     }
     if (false == $model->validateNotEmpty(array('card_num', 'exp_date'), false)) {
         try {
             $this->payment->execute($obtainCreditCard = new ObtainCreditCard());
             $card = $obtainCreditCard->obtain();
             $model['exp_date'] = new SensitiveValue($card->getExpireAt()->format('m/y'));
             $model['card_num'] = new SensitiveValue($card->getNumber());
         } catch (RequestNotSupportedException $e) {
             throw new LogicException('Credit card details has to be set explicitly or there has to be an action that supports ObtainCreditCard request.');
         }
     }
     $api = clone $this->api;
     $api->ignore_not_x_fields = true;
     $api->setFields(array_filter($model->toUnsafeArray()));
     $response = $api->authorizeAndCapture();
     $model->replace(get_object_vars($response));
 }
示例#12
0
 /**
  * {@inheritdoc}
  */
 public function execute($request)
 {
     if (!$this->supports($request)) {
         throw RequestNotSupportedException::createActionNotSupported($this, $request);
     }
     $options = ArrayObject::ensureArrayObject($request->getModel());
     if ($options['_status']) {
         return;
     }
     if (isset($options['_completeCaptureRequired'])) {
         unset($options['_completeCaptureRequired']);
         $response = $this->gateway->completePurchase($options->toUnsafeArray())->send();
     } else {
         $response = $this->gateway->purchase($options->toUnsafeArray())->send();
     }
     if ($response->isRedirect()) {
         $options['_completeCaptureRequired'] = 1;
         if ($response->getRedirectMethod() == 'POST') {
             throw new HttpPostRedirect($response->getRedirectUrl(), $response->getRedirectData());
         } else {
             throw new HttpRedirect($response->getRedirectUrl());
         }
     }
     $options['_reference'] = $response->getTransactionReference();
     $options['_status'] = $response->isSuccessful() ? 'success' : 'failed';
     $options['_status_code'] = $response->getCode();
     $options['_status_message'] = $response->isSuccessful() ? '' : $response->getMessage();
 }
示例#13
0
 /**
  * {@inheritDoc}
  *
  * @param GetStatusInterface $request
  */
 public function execute($request)
 {
     RequestNotSupportedException::assertSupports($this, $request);
     $details = ArrayObject::ensureArrayObject($request->getModel());
     if ($details['error_code']) {
         $request->markFailed();
         return;
     }
     if ($details['canceled']) {
         $request->markCanceled();
         return;
     }
     if ($details['invoice_number']) {
         $request->markSuccess();
         return;
     }
     if (false == $details['status']) {
         $request->markNew();
         return;
     }
     if (\KlarnaFlags::ACCEPTED == $details['status'] || \KlarnaFlags::PENDING == $details['status']) {
         //authorized but not capture, there must be a separate status for it, pending for now.
         $request->markPending();
         return;
     }
     if (\KlarnaFlags::DENIED == $details['status']) {
         $request->markFailed();
         return;
     }
     $request->markUnknown();
 }
 /**
  * {@inheritDoc}
  *
  * @param PopulateKlarnaFromDetails $request
  */
 public function execute($request)
 {
     RequestNotSupportedException::assertSupports($this, $request);
     $details = ArrayObject::ensureArrayObject($request->getModel());
     $klarna = $request->getKlarna();
     if ($details['articles']) {
         foreach ($details['articles'] as $article) {
             $article = ArrayObject::ensureArrayObject($article);
             $klarna->addArticle(utf8_decode($article['qty']), utf8_decode($article['artNo']), utf8_decode($article['title']), utf8_decode($article['price']), utf8_decode($article['vat']), utf8_decode($article['discount']), $article['flags'] ?: \KlarnaFlags::NO_FLAG);
         }
     }
     if ($details['partial_articles']) {
         foreach ($details['partial_articles'] as $article) {
             $klarna->addArtNo(utf8_decode($article['qty']), utf8_decode($article['artNo']));
         }
     }
     if ($details['shipping_address']) {
         $address = ArrayObject::ensureArrayObject($details['shipping_address']);
         $klarna->setAddress(\KlarnaFlags::IS_SHIPPING, new \KlarnaAddr(utf8_decode($address['email']), utf8_decode($address['telno']), utf8_decode($address['cellno']), utf8_decode($address['fname']), utf8_decode($address['lname']), utf8_decode($address['careof']), utf8_decode($address['street']), utf8_decode($address['zip']), utf8_decode($address['city']), utf8_decode($address['country']), utf8_decode($address['house_number']), utf8_decode($address['house_extension'])));
     }
     if ($details['billing_address']) {
         $address = ArrayObject::ensureArrayObject($details['billing_address']);
         $klarna->setAddress(\KlarnaFlags::IS_BILLING, new \KlarnaAddr(utf8_decode($address['email']), utf8_decode($address['telno']), utf8_decode($address['cellno']), utf8_decode($address['fname']), utf8_decode($address['lname']), utf8_decode($address['careof']), utf8_decode($address['street']), utf8_decode($address['zip']), utf8_decode($address['city']), utf8_decode($address['country']), utf8_decode($address['house_number']), utf8_decode($address['house_extension'])));
     }
     if ($details['estore_info']) {
         $estoreInfo = ArrayObject::ensureArrayObject($details['estore_info']);
         $klarna->setEstoreInfo(utf8_decode($estoreInfo['order_id1']), utf8_decode($estoreInfo['order_id2']), utf8_decode($estoreInfo['username']));
     }
     $klarna->setComment(utf8_decode($details['comment']));
 }
    /**
     * {@inheritDoc}
     *
     * @param ActivateReservation $request
     */
    public function execute($request)
    {
        RequestNotSupportedException::assertSupports($this, $request);

        $details = ArrayObject::ensureArrayObject($request->getModel());

        $klarna = $this->getKlarna();

        try {
            $this->payment->execute(new PopulateKlarnaFromDetails($details, $klarna));

            $result = $klarna->activateReservation(
                $details['pno'],
                $details['rno'],
                $details['gender'],
                $details['ocr'],
                $details['activate_reservation_flags'] ?: \KlarnaFlags::NO_FLAG
            );

            $details['risk_status'] = $result[0];
            $details['invoice_number'] = $result[1];
        } catch (\KlarnaException $e) {
            $this->populateDetailsWithError($details, $e, $request);
        }
    }
示例#16
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);
     if (isset($httpRequest->request[Api::FIELD_V2_HASH])) {
         $model->replace($httpRequest->request);
         //validate hash
         if (false === $this->api->verifyHash($httpRequest->request[Api::FIELD_V2_HASH], $httpRequest->request)) {
             throw new HttpRedirect((string) $request->getToken()->getAfterUrl());
         }
     } else {
         //payment canceled
         if (isset($httpRequest->request[Api::FIELD_PAYMENT_BATCH_NUM]) && (int) $httpRequest->request[Api::FIELD_PAYMENT_BATCH_NUM] === 0) {
             $model->replace($httpRequest->request);
             throw new HttpRedirect((string) $request->getToken()->getAfterUrl());
         }
         if (false === isset($model[Api::FIELD_PAYMENT_URL]) && $request->getToken()) {
             $model[Api::FIELD_PAYMENT_URL] = $request->getToken()->getTargetUrl();
         }
         if (false === isset($model[Api::FIELD_NOPAYMENT_URL]) && $request->getToken()) {
             $model[Api::FIELD_NOPAYMENT_URL] = $request->getToken()->getTargetUrl();
         }
         throw new HttpPostRedirect($this->api->getApiEndpoint(), $this->api->preparePayment($model->toUnsafeArray()));
     }
 }
示例#17
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}
     *
     * @param ModelAggregateInterface|ModelAwareInterface $request
     */
    public function execute($request)
    {
        RequestNotSupportedException::assertSupports($this, $request);

        /** @var DetailsAggregateInterface $model */
        $model = $request->getModel();
        $details = $model->getDetails();

        if (is_array($details)) {
            $details = ArrayObject::ensureArrayObject($details);
        }

        $request->setModel($details);
        try {
            $this->payment->execute($request);

            if ($model instanceof DetailsAwareInterface) {
                $model->setDetails($details);
            }
        } catch (\Exception $e) {
            if ($model instanceof DetailsAwareInterface) {
                $model->setDetails($details);
            }

            throw $e;
        }
    }
示例#19
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());
     }
 }
示例#20
0
 /**
  * {@inheritDoc}
  */
 public function execute($request)
 {
     /** @var $request GetStatusInterface */
     RequestNotSupportedException::assertSupports($this, $request);
     $model = ArrayObject::ensureArrayObject($request->getModel());
     if (isset($model['status'])) {
         switch ($model['status']) {
             case 'NEW':
                 $request->markNew();
                 break;
             case 'PAID':
                 $request->markCaptured();
                 break;
             case 'CANCELLED_BY_MERCHANT':
             case 'CANCELLED_BY_ADMIN':
                 $request->markCanceled();
                 break;
             case 'EXPIRED':
                 $request->markExpired();
                 break;
             case 'INVALID':
                 $request->markFailed();
                 break;
         }
     }
 }
 /**
  * {@inheritDoc}
  *
  * @param $request Authorize
  */
 public function execute($request)
 {
     RequestNotSupportedException::assertSupports($this, $request);
     /** @var $payment Payment */
     $payment = $request->getModel();
     $this->gateway->execute($status = new GetHumanStatus($payment));
     if ($status->isNew()) {
         $this->gateway->execute(new ObtainMissingDetailsRequest($payment, $request->getToken()));
         try {
             $this->gateway->execute($convert = new Convert($payment, 'array', $request->getToken()));
             $payment->setDetails($convert->getResult());
         } catch (RequestNotSupportedException $e) {
             $payumPayment = new PayumPayment();
             $payumPayment->setNumber($payment->getNumber());
             $payumPayment->setTotalAmount($payment->getTotalAmount());
             $payumPayment->setCurrencyCode($payment->getCurrencyCode());
             $payumPayment->setClientEmail($payment->getPayer()->getEmail());
             $payumPayment->setClientId($payment->getPayer()->getId() ?: $payment->getPayer()->getEmail());
             $payumPayment->setDescription($payment->getDescription() ?: sprintf('Payment %s', $payment->getNumber()));
             $payumPayment->setCreditCard($payment->getCreditCard());
             $payumPayment->setDetails($payment->getDetails());
             $this->gateway->execute($convert = new Convert($payumPayment, 'array', $request->getToken()));
             $payment->setDetails($convert->getResult());
         }
     }
     $details = ArrayObject::ensureArrayObject($payment->getDetails());
     try {
         $request->setModel($details);
         $this->gateway->execute($request);
     } finally {
         $payment->setDetails((array) $details);
     }
 }
示例#22
0
 /**
  * {@inheritDoc}
  */
 public function execute($request)
 {
     RequestNotSupportedException::assertSupports($this, $request);
     $model = ArrayObject::ensureArrayObject($request->getModel());
     if (null === $model['Signature']) {
         $request->markNew();
         return;
     }
     if ($model['Signature'] && null === $model['Status']) {
         $request->markPending();
         return;
     }
     switch ($model['Status']) {
         case Api::PAYMENT_STATUS_AUTHORIZED:
             $request->markAuthorized();
             break;
         case Api::PAYMENT_STATUS_NOT_AUTHORIZED:
             $request->markFailed();
             break;
         case Api::PAYMENT_STATUS_PAID:
             $request->markCaptured();
             break;
         case Api::PAYMENT_STATUS_CANCELED:
             $request->markCanceled();
             break;
         case Api::PAYMENT_STATUS_WAITING:
             $request->markPending();
             break;
         default:
             $request->markUnknown();
             break;
     }
 }
示例#23
0
 /**
  * {@inheritDoc}
  */
 public function createConfig(array $config = array())
 {
     $config = ArrayObject::ensureArrayObject($config);
     $config->defaults($this->defaultConfig);
     $config->defaults(array('payum.template.layout' => '@PayumCore/layout.html.twig', 'payum.http_client' => HttpClientFactory::create(), 'guzzle.client' => HttpClientFactory::createGuzzle(), 'twig.env' => function (ArrayObject $config) {
         $loader = new \Twig_Loader_Filesystem();
         foreach ($config['payum.paths'] as $namespace => $path) {
             $loader->addPath($path, $namespace);
         }
         return new \Twig_Environment($loader);
     }, 'payum.action.get_http_request' => new GetHttpRequestAction(), 'payum.action.capture_payment' => new CapturePaymentAction(), 'payum.action.execute_same_request_with_model_details' => new ExecuteSameRequestWithModelDetailsAction(), 'payum.action.render_template' => function (ArrayObject $config) {
         return new RenderTemplateAction($config['twig.env'], $config['payum.template.layout']);
     }, 'payum.extension.endless_cycle_detector' => new EndlessCycleDetectorExtension(), 'payum.action.get_currency' => function (ArrayObject $config) {
         return new GetCurrencyAction($config['payum.iso4217']);
     }, 'payum.prepend_actions' => array(), 'payum.prepend_extensions' => array(), 'payum.prepend_apis' => array(), 'payum.default_options' => array(), 'payum.required_options' => array(), 'payum.api.http_client' => function (ArrayObject $config) {
         return $config['payum.http_client'];
     }, 'payum.security.token_storage' => null));
     if ($config['payum.security.token_storage']) {
         $config['payum.action.get_token'] = function (ArrayObject $config) {
             return new GetTokenAction($config['payum.security.token_storage']);
         };
     }
     $config['payum.paths'] = array_replace(['PayumCore' => __DIR__ . '/Resources/views'], $config['payum.paths'] ?: []);
     return (array) $config;
 }
 /**
  * {@inheritDoc}
  */
 public function execute($request)
 {
     /** @var $request Sync */
     RequestNotSupportedException::assertSupports($this, $request);
     $model = ArrayObject::ensureArrayObject($request->getModel());
     if (false == $model['token']) {
         return;
     }
     $this->payment->execute(new GetTransactionDetails($model));
     if (isset($model['error_code']) && $model['error_code'] === Errors::ERRCODE_NO_ERROR) {
         if (isset($model['transaction_status'])) {
             if ($model['transaction_status'] === TransactionStatus::PAID) {
                 $model['state'] = StateInterface::STATE_CONFIRMED;
             } else {
                 if ($model['transaction_status'] === TransactionStatus::NOT_PAID) {
                     $model['state'] = StateInterface::STATE_ERROR;
                 } else {
                     if ($model['transaction_status'] === TransactionStatus::PAID_WAITING_FOR_PROCESS) {
                         $model['state'] = StateInterface::STATE_NOTIFIED;
                     }
                 }
             }
         }
     }
 }
示例#25
0
 /**
  * {@inheritdoc}
  */
 public function execute($request)
 {
     /** @var $request CaptureRequest */
     if (false == $this->supports($request)) {
         throw RequestNotSupportedException::createActionNotSupported($this, $request);
     }
     $model = ArrayObject::ensureArrayObject($request->getModel());
     if (false == $model['PAYMENTREQUEST_0_PAYMENTACTION']) {
         $model['PAYMENTREQUEST_0_PAYMENTACTION'] = Api::PAYMENTACTION_SALE;
     }
     if (false == $model['TOKEN']) {
         if (false == $model['RETURNURL'] && $request instanceof SecuredCaptureRequest) {
             $model['RETURNURL'] = $request->getToken()->getTargetUrl();
         }
         if (false == $model['CANCELURL'] && $request instanceof SecuredCaptureRequest) {
             $model['CANCELURL'] = $request->getToken()->getTargetUrl();
         }
         $this->payment->execute(new SetExpressCheckoutRequest($model));
         $this->payment->execute(new AuthorizeTokenRequest($model));
     }
     $this->payment->execute(new SyncRequest($model));
     if ($model['PAYERID'] && Api::CHECKOUTSTATUS_PAYMENT_ACTION_NOT_INITIATED == $model['CHECKOUTSTATUS'] && $model['PAYMENTREQUEST_0_AMT'] > 0) {
         $this->payment->execute(new DoExpressCheckoutPaymentRequest($model));
     }
     $this->payment->execute(new SyncRequest($model));
 }
示例#26
0
 /**
  * {@inheritdoc}
  */
 public function execute($request)
 {
     /** @var $request GetStatusInterface */
     if (false == $this->supports($request)) {
         throw RequestNotSupportedException::createActionNotSupported($this, $request);
     }
     $model = ArrayObject::ensureArrayObject($request->getModel());
     if (null === $model['response_code']) {
         $request->markNew();
         return;
     }
     if (\AuthorizeNetAIM_Response::APPROVED == $model['response_code']) {
         $request->markSuccess();
         return;
     }
     if (\AuthorizeNetAIM_Response::DECLINED == $model['response_code']) {
         $request->markCanceled();
         return;
     }
     if (\AuthorizeNetAIM_Response::ERROR == $model['response_code']) {
         $request->markFailed();
         return;
     }
     if (\AuthorizeNetAIM_Response::HELD == $model['response_code']) {
         $request->markPending();
         return;
     }
     $request->markUnknown();
 }
示例#27
0
 /**
  * {@inheritDoc}
  *
  * @param Convert $request
  */
 public function execute($request)
 {
     RequestNotSupportedException::assertSupports($this, $request);
     /** @var PaymentInterface $payment */
     $payment = $request->getSource();
     $model = ArrayObject::ensureArrayObject($payment->getDetails());
     //$model['DESCRIPTION'] = $payment->getDescription();
     if (false == $model['amount']) {
         $this->gateway->execute($currency = new GetCurrency($payment->getCurrencyCode()));
         if (2 < $currency->exp) {
             throw new RuntimeException('Unexpected currency exp.');
         }
         $divisor = pow(10, 2 - $currency->exp);
         $model['currency_code'] = $currency->numeric;
         $model['amount'] = abs($payment->getTotalAmount() / $divisor);
     }
     if (false == $model['order_id']) {
         $model['order_id'] = $payment->getNumber();
     }
     if (false == $model['customer_id']) {
         $model['customer_id'] = $payment->getClientId();
     }
     if (false == $model['customer_email']) {
         $model['customer_email'] = $payment->getClientEmail();
     }
     $request->setResult((array) $model);
 }
示例#28
0
 /**
  * {@inheritDoc}
  *
  * @param Capture $request
  */
 public function execute($request)
 {
     RequestNotSupportedException::assertSupports($this, $request);
     $details = ArrayObject::ensureArrayObject($request->getModel());
     if ($details['_status']) {
         return;
     }
     if (false == $details['_completeCaptureRequired']) {
         if (false == $details->validateNotEmpty(array('card'), false) && false == $details->validateNotEmpty(array('cardReference'), false)) {
             try {
                 $obtainCreditCard = new ObtainCreditCard($request->getFirstModel(), $request->getModel());
                 $this->gateway->execute($obtainCreditCard);
                 $card = $obtainCreditCard->obtain();
                 if ($card->getToken()) {
                     $details['cardReference'] = $card->getToken();
                 } else {
                     $details['card'] = SensitiveValue::ensureSensitive(array('number' => $card->getNumber(), 'cvv' => $card->getSecurityCode(), 'expiryMonth' => $card->getExpireAt()->format('m'), 'expiryYear' => $card->getExpireAt()->format('y'), 'firstName' => $card->getHolder(), 'lastName' => ''));
                 }
             } catch (RequestNotSupportedException $e) {
                 throw new LogicException('Credit card details has to be set explicitly or there has to be an action that supports ObtainCreditCard request.');
             }
         }
     }
     parent::execute($request);
 }
示例#29
0
 /**
  * {@inheritDoc}
  */
 public function execute($request)
 {
     /** @var $request GetStatusInterface */
     RequestNotSupportedException::assertSupports($this, $request);
     $model = ArrayObject::ensureArrayObject($request->getModel());
     if (false == $model[Constants::FIELD_STATUS] || $model[Constants::FIELD_STATUS] == Constants::STATUS_NEW) {
         $request->markNew();
         return;
     }
     if (Constants::STATUS_PENDING == $model[Constants::FIELD_STATUS]) {
         $request->markPending();
         return;
     }
     if (Constants::STATUS_CAPTURED == $model[Constants::FIELD_STATUS]) {
         $request->markCaptured();
         return;
     }
     if (Constants::STATUS_AUTHORIZED == $model[Constants::FIELD_STATUS]) {
         $request->markAuthorized();
         return;
     }
     if (Constants::STATUS_FAILED == $model[Constants::FIELD_STATUS]) {
         $request->markFailed();
         return;
     }
     if (Constants::STATUS_REFUNDED == $model[Constants::FIELD_STATUS]) {
         $request->markRefunded();
         return;
     }
     if (Constants::STATUS_COMPLAINT == $model[Constants::FIELD_STATUS] || Constants::STATUS_CANCELED == $model[Constants::FIELD_STATUS]) {
         $request->markCanceled();
         return;
     }
     $request->markUnknown();
 }
    /**
     * {@inheritDoc}
     *
     * @param Capture $request
     */
    public function execute($request)
    {
        RequestNotSupportedException::assertSupports($this, $request);

        /** @var $order OrderInterface */
        $order = $request->getModel();

        $this->payment->execute($status = new GetHumanStatus($order));
        if ($status->isNew()) {
            $this->payment->execute(new FillOrderDetails($order, $request->getToken()));
        }

        $details = ArrayObject::ensureArrayObject($order->getDetails());

        $request->setModel($details);
        try {
            $this->payment->execute($request);

            $order->setDetails($details);
        } catch (\Exception $e) {
            $order->setDetails($details);

            throw $e;
        }
    }