/** * {@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); }
/** * {@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()); } }
/** * {@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()); } }
/** * {@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(); }
/** * @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)); }
/** * {@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())); } }
/** * {@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())); }
/** * {@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); }
/** * @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))); }