/** * Create a Web-Payment Form Instance * @param array $data * @return \stdClass * @throws \Magento\Framework\Webapi\Exception */ protected function checkout($data) { $genesis = new \Genesis\Genesis('WPF\\Create'); $genesis->request()->setTransactionId($data['transaction_id'])->setCurrency($data['order']['currency'])->setAmount($data['order']['amount'])->setUsage($data['order']['usage'])->setDescription($data['order']['description'])->setCustomerPhone(strval($data['order']['billing']->getTelephone()))->setCustomerEmail(strval($data['order']['customer']['email']))->setNotificationUrl($data['urls']['notify'])->setReturnSuccessUrl($data['urls']['return_success'])->setReturnFailureUrl($data['urls']['return_failure'])->setReturnCancelUrl($data['urls']['return_cancel'])->setBillingFirstName(strval($data['order']['billing']->getFirstname()))->setBillingLastName(strval($data['order']['billing']->getLastname()))->setBillingAddress1(strval($data['order']['billing']->getStreetLine(1)))->setBillingAddress2(strval($data['order']['billing']->getStreetLine(2)))->setBillingZipCode(strval($data['order']['billing']->getPostcode()))->setBillingCity(strval($data['order']['billing']->getCity()))->setBillingState(strval($data['order']['billing']->getRegionCode()))->setBillingCountry(strval($data['order']['billing']->getCountryId()))->setLanguage($data['order']['language']); if (!empty($data['order']['shipping'])) { $genesis->request()->setShippingFirstName(strval($data['order']['shipping']->getFirstname()))->setShippingLastName(strval($data['order']['shipping']->getLastname()))->setShippingAddress1(strval($data['order']['shipping']->getStreetLine(1)))->setShippingAddress2(strval($data['order']['shipping']->getStreetLine(2)))->setShippingZipCode(strval($data['order']['shipping']->getPostcode()))->setShippingCity(strval($data['order']['shipping']->getCity()))->setShippingState(strval($data['order']['shipping']->getRegionCode()))->setShippingCountry(strval($data['order']['shipping']->getCountryId())); } foreach ($this->getCheckoutTransactionTypes() as $type) { if (is_array($type)) { $genesis->request()->addTransactionType($type['name'], $type['parameters']); } else { if (\Genesis\API\Constants\Transaction\Types::isPayByVoucher($type)) { $parameters = ['card_type' => \Genesis\API\Constants\Transaction\Parameters\PayByVouchers\CardTypes::VIRTUAL, 'redeem_type' => \Genesis\API\Constants\Transaction\Parameters\PayByVouchers\RedeemTypes::INSTANT]; if ($type == \Genesis\API\Constants\Transaction\Types::PAYBYVOUCHER_YEEPAY) { $parameters['product_name'] = $data['order']['description']; $parameters['product_category'] = $data['order']['description']; } $genesis->request()->addTransactionType($type, $parameters); } else { $genesis->request()->addTransactionType($type); } } } $genesis->execute(); return $genesis->response()->getResponseObject(); }
/** * Processes initial transactions * - Authorize * - Authorize3D * - Sale * - Sale3D * * @param \Magento\Payment\Model\InfoInterface $payment * @param $amount * @return $this * @throws \Exception * @throws \Genesis\Exceptions\ErrorAPI */ protected function processInitialTransaction(\Magento\Payment\Model\InfoInterface $payment, $amount) { $transactionType = $this->getTransactionType(); $order = $payment->getOrder(); $helper = $this->getModuleHelper(); $config = $helper->getTransactionConfig($transactionType); $this->getConfigHelper()->initGatewayClient(); $billing = $order->getBillingAddress(); if (empty($billing)) { throw new \Exception(__('Billing address is empty.')); } $shipping = $order->getShippingAddress(); $genesis = new \Genesis\Genesis($config->request); $genesis->request()->setTransactionId($helper->genTransactionId($order->getIncrementId()))->setRemoteIp($order->getRemoteIp())->setUsage($helper->buildOrderDescriptionText($order))->setLanguage($helper->getLocale())->setCurrency($order->getBaseCurrencyCode())->setAmount($amount); if (!empty($payment->getCcOwner())) { $genesis->request()->setCardHolder($payment->getCcOwner()); } else { $genesis->request()->setCardHolder($billing->getFirstname() . ' ' . $billing->getLastname()); } $genesis->request()->setCardNumber($payment->getCcNumber())->setExpirationYear($payment->getCcExpYear())->setExpirationMonth($payment->getCcExpMonth())->setCvv($payment->getCcCid())->setCustomerEmail($order->getCustomerEmail())->setCustomerPhone($billing->getTelephone())->setBillingFirstName($billing->getFirstname())->setBillingLastName($billing->getLastname())->setBillingAddress1($billing->getStreetLine(1))->setBillingAddress2($billing->getStreetLine(2))->setBillingZipCode($billing->getPostcode())->setBillingCity($billing->getCity())->setBillingState($billing->getRegionCode())->setBillingCountry($billing->getCountryId()); if (!empty($shipping)) { $genesis->request()->setShippingFirstName($shipping->getFirstname())->setShippingLastName($shipping->getLastname())->setShippingAddress1($shipping->getStreetLine(1))->setShippingAddress2($shipping->getStreetLine(2))->setShippingZipCode($shipping->getPostcode())->setShippingCity($shipping->getCity())->setShippingState($shipping->getRegionCode())->setShippinCountry($shipping->getCountryId()); } if ($config->is3D) { $genesis->request()->setNotificationUrl($helper->getNotificationUrl($this->getCode()))->setReturnSuccessUrl($helper->getReturnUrl($this->getCode(), "success"))->setReturnCancelUrl($helper->getReturnUrl($this->getCode(), "cancel"))->setReturnFailureUrl($helper->getReturnUrl($this->getCode(), "failure")); } $genesis->execute(); $this->setGenesisResponse($genesis->response()->getResponseObject()); $genesis_response = $this->getModuleHelper()->getArrayFromGatewayResponse($this->getGenesisResponse()); $payment->setTransactionId($this->getGenesisResponse()->unique_id)->setIsTransactionClosed($config->should_close)->setIsTransactionPending($config->is3D)->setTransactionAdditionalInfo(\Magento\Sales\Model\Order\Payment\Transaction::RAW_DETAILS, $genesis_response); $status = $this->getGenesisResponse()->status; $statusList = array(\Genesis\API\Constants\Transaction\States::DECLINED, \Genesis\API\Constants\Transaction\States::ERROR, \Genesis\API\Constants\Transaction\States::UNSUCCESSFUL); if (in_array($status, $statusList)) { throw new \Genesis\Exceptions\ErrorAPI($this->getGenesisResponse()->message); } if ($config->is3D) { $this->setRedirectUrl($this->getGenesisResponse()->redirect_url); $payment->setPreparedMessage('3D-Secure: Redirecting customer to a verification page.'); } else { $this->unsetRedirectUrl(); } }
/** * Execute a WPF Reconcile * * @param $unique_id * * @return EMerchantPay_Genesis_Model_Checkout * * @throws Mage_Core_Exception */ public function reconcile($unique_id) { try { $this->getHelper()->initClient($this->getCode()); $genesis = new \Genesis\Genesis('WPF\\Reconcile'); $genesis->request()->setUniqueId($unique_id); $genesis->execute(); return $genesis->response()->getResponseObject(); } catch (Exception $exception) { Mage::logException($exception); Mage::throwException($exception->getMessage()); } return false; }
/** * Reconcile with the Payment Gateway to get the latest * status on the transaction * * @throws \Genesis\Exceptions\InvalidResponse */ public function initReconciliation() { if ($this->isAPINotification()) { $type = 'NonFinancial\\Reconcile\\Transaction'; } elseif ($this->isWPFNotification()) { $type = 'WPF\\Reconcile'; } else { $type = ''; } $request = new \Genesis\Genesis($type); try { $request->request()->setUniqueId($this->unique_id); $request->execute(); } catch (\Genesis\Exceptions\ErrorAPI $api) { // This is reconciliation, don't throw on ErrorAPI } $this->reconciliationObj = $request->response()->getResponseObject(); }
/** * Initiate a Payment Gateway Reference Transaction * - Capture * - Refund * - Void * * @param string $transactionType * @param \Magento\Payment\Model\InfoInterface $payment * @param array $data * @return \stdClass */ protected function processReferenceTransaction($transactionType, \Magento\Payment\Model\InfoInterface $payment, $data) { $transactionType = ucfirst(strtolower($transactionType)); $this->getConfigHelper()->initGatewayClient(); $genesis = new \Genesis\Genesis("Financial\\{$transactionType}"); foreach ($data as $key => $value) { $methodName = sprintf("set%s", \Genesis\Utils\Common::snakeCaseToCamelCase($key)); $genesis->request()->{$methodName}($value); } $genesis->execute(); $responseObject = $genesis->response()->getResponseObject(); $payment->setTransactionId($responseObject->unique_id)->setParentTransactionId($data['reference_id'])->setShouldCloseParentTransaction(true)->setIsTransactionPending(false)->setIsTransactionClosed(true)->resetTransactionAdditionalInfo(); $this->getModuleHelper()->setPaymentTransactionAdditionalInfo($payment, $responseObject); $payment->save(); return $responseObject; }