public function testGetAliasWithAdditionalInformation() { $quote = new Varien_Object(); $payment = new Varien_Object(); $payment->setAdditionalInformation(array('alias' => 'testAlias')); $quote->setPayment($payment); $aliasHelperMock = $this->getHelperMock('ops/alias', array('isAdminSession')); $aliasHelperMock->expects($this->any())->method('isAdminSession')->will($this->returnValue(false)); $this->assertEquals('testAlias', $aliasHelperMock->getAlias($quote)); }
/** * Send payment request after order (backend / frontend). * * @param Varien_Object $payment * @param float $amount * @return $this|Mage_Payment_Model_Abstract * @throws Mage_Core_Exception */ public function order(Varien_Object $payment, $amount) { $order = $payment->getOrder(); $orderAddress = $order->getBillingAddress(); $bzPayment = Mage::getModel('barzahlen/api_request_payment', array('customerEmail' => $order->getCustomerEmail(), 'customerStreetNr' => $orderAddress->getData("street"), 'customerZipcode' => $orderAddress->getData("postcode"), 'customerCity' => $orderAddress->getData("city"), 'customerCountry' => $orderAddress->getData("country_id"), 'orderId' => $order->getRealOrderId(), 'amount' => $amount, 'currency' => $order->getOrderCurrencyCode())); try { $this->getBarzahlenApi()->handleRequest($bzPayment); $payment->setAdditionalInformation('transaction_id', $bzPayment->getTransactionId())->setTransactionId($bzPayment->getTransactionId())->setIsTransactionClosed(0); $session = Mage::getSingleton('checkout/session'); $session->setData('barzahlen_infotext', $bzPayment->getInfotext1()); } catch (Exception $e) { Mage::helper('barzahlen')->bzLog($e); Mage::throwException(Mage::helper('barzahlen')->__('bz_frnt_error')); } return $this; }
public function testGetParameterForCaptureWillReturnArray() { $fakePayment = new Varien_Object(); $fakePayment->setOrder(new Varien_Object()); $fakePayment->setAdditionalInformation(array('paymentId' => '4711')); $arrInfo = array('operation' => 'capture'); $amount = 10; $opsPaymentMethod = Mage::getModel('ops/payment_abstract'); $requestParams = Mage::getModel('ops/backend_operation_parameter')->getParameterFor(Netresearch_OPS_Model_Payment_Abstract::OPS_CAPTURE_TRANSACTION_TYPE, $opsPaymentMethod, $fakePayment, $amount, $arrInfo); $this->assertArrayHasKey('AMOUNT', $requestParams); $this->assertArrayHasKey('PAYID', $requestParams); $this->assertArrayHasKey('OPERATION', $requestParams); $this->assertArrayHasKey('CURRENCY', $requestParams); $this->assertEquals(1000, $requestParams['AMOUNT']); $this->assertEquals(4711, $requestParams['PAYID']); $this->assertEquals('capture', $requestParams['OPERATION']); $this->assertEquals(Mage::app()->getStore($fakePayment->getOrder()->getStoreId())->getBaseCurrencyCode(), $requestParams['CURRENCY']); }
public function testGetRequestParams() { $fakePayment = new Varien_Object(); $fakePayment->setOrder(new Varien_Object()); $fakePayment->setAdditionalInformation(array('paymentId' => '4711')); $arrInfo = array('operation' => 'refund', 'invoice_id' => 2); $amount = 10; $opsPaymentMethod = Mage::getModel('ops/payment_abstract'); $captureParameterModel = Mage::getModel('ops/backend_operation_refund_parameter'); $requestParams = $captureParameterModel->getRequestParams($opsPaymentMethod, $fakePayment, $amount, $arrInfo); $this->assertArrayHasKey('AMOUNT', $requestParams); $this->assertArrayHasKey('PAYID', $requestParams); $this->assertArrayHasKey('OPERATION', $requestParams); $this->assertArrayHasKey('CURRENCY', $requestParams); $this->assertEquals(1000, $requestParams['AMOUNT']); $this->assertEquals(4711, $requestParams['PAYID']); $this->assertEquals('refund', $requestParams['OPERATION']); $this->assertEquals(Mage::app()->getStore($fakePayment->getOrder()->getStoreId())->getBaseCurrencyCode(), $requestParams['CURRENCY']); }
protected function _beforeProcessResponse($request, $result, Varien_Object $payment) { try { $action = explode('.', $request['PAYMENT.CODE']); if (!isset($action[1])) { Mage::throwException(Mage::helper('moneybookerspsp')->__('MoneybookersPSP: Wrong response data, method is missing')); } $method = strtoupper($action[0]); $action = strtoupper($action[1]); if ((string) $result->Transaction->attributes()->{'response'} == 'ASYNC' && (string) $result->Transaction->Processing->Result == self::PROCESSING_RESULT_OK && (string) $result->Transaction->Processing->Status->attributes()->{'code'} == self::PROCESSING_STATUS_CODE_WAITING && !empty($result->Transaction->Processing->Redirect)) { $this->setOrderPlaceRedirectUrl(Mage::getUrl('moneybookerspsp/processing/threeds')); $params = array(); foreach ($result->Transaction->Processing->Redirect->Parameter as $parameter) { $params[(string) $parameter->attributes()->{'name'}] = (string) $parameter; } $params['redirect_url'] = (string) $result->Transaction->Processing->Redirect->attributes()->{'url'}; $payment->setAdditionalInformation($params); } else { return parent::_beforeProcessResponse($request, $result, $payment); } } catch (Exception $e) { Mage::logException($e); } }
/** * Authorize the transaction by calling PAYMENT_INIT, PAYMENT_REQUEST and PAYMENT_CONFIRM. * * @param Varien_Object $orderPayment * @param float $amount * @return RatePAY_Ratepaypayment_Model_Method_Rechnung */ public function authorize(Varien_Object $payment, $amount) { $client = Mage::getSingleton('ratepaypayment/request'); $order = $this->getQuoteOrOrder(); $helper = Mage::helper('ratepaypayment/mapping'); if (Mage::getSingleton('ratepaypayment/session')->getQueryActive() && Mage::getSingleton('ratepaypayment/session')->getTransactionId()) { $resultInit['transactionId'] = Mage::getSingleton('ratepaypayment/session')->getTransactionId(); $resultInit['transactionShortId'] = Mage::getSingleton('ratepaypayment/session')->getTransactionShortId(); } else { $resultInit = $client->callPaymentInit($helper->getRequestHead($order), $helper->getLoggingInfo($order)); } if (is_array($resultInit) || $resultInit == true) { $payment->setAdditionalInformation('transactionId', $resultInit['transactionId']); $payment->setAdditionalInformation('transactionShortId', $resultInit['transactionShortId']); $resultRequest = $client->callPaymentRequest($helper->getRequestHead($order), $helper->getRequestCustomer($order), $helper->getRequestBasket($order), $helper->getRequestPayment($order), $helper->getLoggingInfo($order)); if (is_array($resultRequest) || $resultRequest == true) { $payment->setAdditionalInformation('descriptor', $resultRequest['descriptor']); if ($this->getHelper()->getRpConfigData($order, $this->_code, 'address_normalization')) { $billingAddress = $order->getBillingAddress(); $shippingAddress = $order->getShippingAddress(); $billingAddress->setStreet(implode(' ', array($resultRequest['address']['street'], $resultRequest['address']['street-number']))); $billingAddress->setPostcode($resultRequest['address']['zip-code']); $billingAddress->setCity($resultRequest['address']['city']); if ($billingAddress->getCustomerAddressId() == $shippingAddress->getCustomerAddressId()) { $shippingAddress->setStreet(implode(' ', array($resultRequest['address']['street'], $resultRequest['address']['street-number']))); $shippingAddress->setPostcode($resultRequest['address']['zip-code']); $shippingAddress->setCity($resultRequest['address']['city']); } } $resultConfirm = $client->callPaymentConfirm($helper->getRequestHead($order), $helper->getLoggingInfo($order)); if (!is_array($resultConfirm) && !$resultConfirm == true) { $this->_abortBackToPayment('PAYMENT_REQUEST Declined'); } } else { $this->_abortBackToPayment('PAYMENT_REQUEST Declined'); } } else { $this->_abortBackToPayment('Gateway Offline'); } $this->_cleanSession(); return $this; }
/** * Processing the payment or preauth * @return booelan Indicator of success */ public function payment(Varien_Object $payment, $amount) { //Gathering data from session $token = Mage::getSingleton('core/session')->getToken(); //Create Payment Processor $paymentHelper = Mage::helper("paymill/paymentHelper"); $fcHelper = Mage::helper("paymill/fastCheckoutHelper"); $paymentProcessor = $paymentHelper->createPaymentProcessor($this->getCode(), $token); //Always load client if email doesn't change $clientId = $fcHelper->getClientId(); if (isset($clientId) && !is_null(Mage::helper("paymill/customerHelper")->getClientData())) { $paymentProcessor->setClientId($clientId); } //Loading Fast Checkout Data (if enabled and given) if ($fcHelper->hasData($this->_code) && $token === 'dummyToken') { $paymentId = $fcHelper->getPaymentId($this->_code); if (isset($paymentId) && !is_null($fcHelper->getPaymentData($this->_code))) { $paymentProcessor->setPaymentId($paymentId); } } $success = $paymentProcessor->processPayment(!$this->_preauthFlag); $this->_existingClientHandling($clientId); if ($success) { if ($this->_preauthFlag) { $payment->setAdditionalInformation('paymillPreauthId', $paymentProcessor->getPreauthId()); } else { $payment->setAdditionalInformation('paymillTransactionId', $paymentProcessor->getTransactionId()); } $payment->setAdditionalInformation('paymillPrenotificationDate', $this->_getPrenotificationDate($payment->getOrder())); //Allways update the client $clientId = $paymentProcessor->getClientId(); $fcHelper->saveData($this->_code, $clientId); //Save payment data for FastCheckout (if enabled) if ($fcHelper->isFastCheckoutEnabled()) { //Fast checkout enabled $paymentId = $paymentProcessor->getPaymentId(); $fcHelper->saveData($this->_code, $clientId, $paymentId); } return true; } $this->_errorCode = $paymentProcessor->getErrorCode(); return false; }
/** * Call DoAuthorize * * @param int $amount * @param Varien_Object $payment * @param string $parentTransactionId * @return Mage_Paypal_Model_Api_Abstract * @throws Mage_Paypal_Model_Api_ProcessableException */ protected function _callDoAuthorize($amount, $payment, $parentTransactionId) { $apiData = $this->_pro->getApi()->getData(); foreach ($apiData as $k => $v) { if (is_object($v)) { unset($apiData[$k]); } } Mage::getSingleton('checkout/session')->setPaypalTransactionData($apiData); $this->_pro->resetApi(); $api = $this->_setApiProcessableErrors()->setAmount($amount)->setCurrencyCode($payment->getOrder()->getBaseCurrencyCode())->setTransactionId($parentTransactionId)->callDoAuthorization(); $payment->setAdditionalInformation($this->_authorizationCountKey, $payment->getAdditionalInformation($this->_authorizationCountKey) + 1); return $api; }
public function createOrder(Varien_Object $payment, $amount, $authorize) { $store_id = Mage::app()->getStore()->getStoreId(); $logger = Mage::helper('worldpay/logger'); if ($payment->getOrder()) { $orderId = $payment->getOrder()->getIncrementId(); $order = $payment->getOrder(); } else { $quote = $payment->getQuote(); $orderId = $quote->getReservedOrderId(); $quote->save(); } $session = Mage::getSingleton('core/session'); $token = $session->getData('payment_token'); $savedCard = $session->getData('saved_card'); $logger->log('Begin create order'); $session->setData('wp_3dsSuccess', false); $session->setData('wp_orderCode', false); $worldpay = $this->setupWorldpay(); $checkout = Mage::getSingleton('checkout/session')->getQuote(); $billing = $checkout->getBillingAddress(); $order_description = Mage::getStoreConfig('payment/worldpay/description', $store_id); if (!$order_description) { $order_description = "Order"; } $currency_code = Mage::app()->getStore()->getCurrentCurrencyCode(); $name = $billing->getName(); $billing_address = array("address1" => $billing->getStreet(1), "address2" => $billing->getStreet(2), "address3" => $billing->getStreet(3), "postalCode" => $billing->getPostcode(), "city" => $billing->getCity(), "state" => "", "countryCode" => $billing->getCountry()); try { $mode = Mage::getStoreConfig('payment/worldpay_mode', Mage::app()->getStore()->getStoreId()); $settlementCurrency = Mage::getStoreConfig('payment/worldpay/settlementcurrency', Mage::app()->getStore()->getStoreId()); $createOrderRequest = array('token' => $token, 'orderDescription' => $order_description, 'amount' => $amount * 100, 'currencyCode' => $currency_code, 'name' => $name, 'billingAddress' => $billing_address, 'customerOrderCode' => $orderId, 'settlementCurrency' => $settlementCurrency, 'successUrl' => Mage::getUrl('worldpay/apm/success', array('_secure' => true)), 'pendingUrl' => Mage::getUrl('worldpay/apm/pending', array('_secure' => true)), 'failureUrl' => Mage::getUrl('worldpay/apm/failure', array('_secure' => true)), 'cancelUrl' => Mage::getUrl('worldpay/apm/cancel', array('_secure' => true))); $logger->log('Order Request: ' . print_r($createOrderRequest, true)); $response = $worldpay->createApmOrder($createOrderRequest); $logger->log('Order Response: ' . print_r($response, true)); if ($response['paymentStatus'] === 'SUCCESS') { $this->setStore($payment->getOrder()->getStoreId()); $logger->log('Order: ' . $response['orderCode'] . ' SUCCESS'); $payment->setStatus(self::STATUS_APPROVED); $payment->setAmount($amount); $payment->setLastTransId($orderId); $payment->setTransactionId($response['orderCode']); $payment->setAdditionalInformation("worldpayOrderCode", $response['orderCode']); $payment->setShouldCloseParentTransaction(1)->setIsTransactionClosed(1)->registerCaptureNotification($amount); } else { if ($response['paymentStatus'] == 'PRE_AUTHORIZED') { $logger->log('Order: ' . $response['orderCode'] . ' PRE_AUTHORIZED'); $payment->setAmount($amount); $payment->setAdditionalInformation("worldpayOrderCode", $response['orderCode']); $payment->setLastTransId($orderId); $payment->setTransactionId($response['orderCode']); $payment->setIsTransactionClosed(false); $session->setData('wp_redirectURL', $response['redirectURL']); $session->setData('wp_orderCode', $response['orderCode']); } else { if (isset($response['paymentStatusReason'])) { throw new Exception($response['paymentStatusReason']); } else { throw new Exception(print_r($response, true)); } } } } catch (Exception $e) { $payment->setStatus(self::STATUS_ERROR); $payment->setAmount($amount); $payment->setLastTransId($orderId); $logger->log($e->getMessage()); Mage::throwException('Payment failed, please try again later ' . $e->getMessage()); } return $this; }
/** * @desc authorise response * Process the response of the soap * * @param Varien_Object $payment * @param stdClass $response * @param null $request * * @return $this * @todo Add comment with checkout Authorised */ protected function _processResponse(Varien_Object $payment, $response, $request = null) { if (!$response instanceof stdClass) { return false; } switch ($request) { case "authorise": case "authorise3d": if ($response->paymentResult->fraudResult) { $fraudResult = $response->paymentResult->fraudResult->accountScore; $payment->setAdyenTotalFraudScore($fraudResult); } $responseCode = $response->paymentResult->resultCode; $pspReference = $response->paymentResult->pspReference; // save pspreference to match with notification $payment->setAdyenPspReference($pspReference); break; case "refund": $responseCode = $response->refundResult->response; $pspReference = $response->refundResult->pspReference; break; case "cancel_or_refund": $responseCode = $response->cancelOrRefundResult->response; $pspReference = $response->cancelOrRefundResult->pspReference; break; case "capture": $responseCode = $response->captureResult->response; $pspReference = $response->captureResult->pspReference; break; default: $responseCode = null; $this->writeLog("Unknown data type by Adyen"); break; } switch ($responseCode) { case "RedirectShopper": $payment->setAdditionalInformation('paRequest', $response->paymentResult->paRequest); $payment->setAdditionalInformation('md', $response->paymentResult->md); $payment->setAdditionalInformation('issuerUrl', $response->paymentResult->issuerUrl); Mage::getSingleton('customer/session')->setRedirectUrl("adyen/process/validate3d"); $this->_addStatusHistory($payment, $responseCode, $pspReference, $this->_getConfigData('order_status')); break; case "Refused": if ($response->paymentResult->refusalReason) { $refusalReason = $response->paymentResult->refusalReason; switch ($refusalReason) { case "Transaction Not Permitted": $errorMsg = Mage::helper('adyen')->__('The transaction is not permitted.'); break; case "CVC Declined": $errorMsg = Mage::helper('adyen')->__('Declined due to the Card Security Code(CVC) being incorrect. Please check your CVC code!'); break; case "Restricted Card": $errorMsg = Mage::helper('adyen')->__('The card is restricted.'); break; case "803 PaymentDetail not found": $errorMsg = Mage::helper('adyen')->__('The payment is REFUSED because the saved card is removed. Please try an other payment method.'); break; default: $errorMsg = Mage::helper('adyen')->__('The payment is REFUSED by Adyen.'); break; } } else { $errorMsg = Mage::helper('adyen')->__('The payment is REFUSED by Adyen.'); } Adyen_Payment_Exception::throwException($errorMsg); break; case "Authorised": $this->_addStatusHistory($payment, $responseCode, $pspReference, $this->_getConfigData('order_status')); break; case "Received": // boleto payment $pdfUrl = null; $additionalDataResults = $response->paymentResult->additionalData->entry; foreach ($additionalDataResults as $additionalDataResult) { if ($additionalDataResult->key == "boletobancario.url") { $pdfUrl = $additionalDataResult->value; } } $this->_addStatusHistory($payment, $responseCode, $pspReference, false, $pdfUrl); break; case '[capture-received]': case '[refund-received]': case '[cancelOrRefund-received]': $this->_addStatusHistory($payment, $responseCode, $pspReference); break; case "Error": $errorMsg = Mage::helper('adyen')->__('System error, please try again later'); Adyen_Payment_Exception::throwException($errorMsg); break; default: $this->writeLog("Unknown data type by Adyen"); break; } //save all response data for a pure duplicate detection Mage::getModel('adyen/event')->setPspReference($pspReference)->setAdyenEventCode($responseCode)->setAdyenEventResult($responseCode)->setIncrementId($payment->getOrder()->getIncrementId())->setPaymentMethod($this->getInfoInstance()->getCcType())->setCreatedAt(now())->saveData(); return $this; }
public function authorize(Varien_Object $payment, $amount) { $payment->setLastTransId($this->getTransactionId())->setIsTransactionPending(true); // create payment link and add it to comment history and send to shopper $order = $payment->getOrder(); /* * Do not send a email notification when order is created. * Only do this on the AUHTORISATION notification. * This is needed for old versions where there is no check if email is already send */ // $order->setCanSendNewEmailFlag(false); $fields = $this->getFormFields(); $url = $this->getFormUrl(); $count = 0; $size = count($fields); foreach ($fields as $field => $value) { if ($count == 0) { $url .= "?"; } $url .= urlencode($field) . "=" . urlencode($value); if ($count != $size) { $url .= "&"; } ++$count; } $comment = "<a target=\"_blank\" href=\"" . $url . "\">Generated payment url</a>"; $status = $this->_getConfigData('order_status'); $payment->getOrder()->addStatusHistoryComment($comment, $status); $payment->setAdditionalInformation('payment_url', $url); // send out email to shopper // $templateId = "Fav Email"; // // $emailTemplate = Mage::getModel('core/email_template')->loadByCode($templateId); // // $vars = array('user_name' => $userName, 'product_name' => $productName); // // $emailTemplate->getProcessedTemplate($vars); // // $emailTemplate->setSenderEmail(Mage::getStoreConfig('trans_email/ident_general/email', $storeId)); // // $emailTemplate->setSenderName(Mage::getStoreConfig('trans_email/ident_general/name', $storeId)); // // // $emailTemplate->send($receiveEmail,$receiveName, $vars); // $order-> // $order->sendNewOrderEmail(); // send order email return $this; }
private function callApi(Varien_Object $payment, $amount, $transcition_type) { //call your authorize api here, incase of error throw exception. //only example code written below to show flow of code $order = $payment->getOrder(); $types = Mage::getSingleton('payment/config')->getCcTypes(); //echo '<pre>';print_r($order->getData());die('>>>'); if (isset($types[$payment->getCcType()])) { $type = $types[$payment->getCcType()]; } if (strlen($payment->getCcExpMonth()) == 1) { $card_expiredate = '0' . $payment->getCcExpMonth(); } else { $card_expiredate = $payment->getCcExpMonth(); } if (strlen($payment->getCcSsStartMonth()) == 1) { $card_startdate = '0' . $payment->getCcSsStartMonth(); } else { $card_startdate = $payment->getCcSsStartMonth(); } $startyear = substr($payment->getCcSsStartYear(), -2); $expireyear = substr($payment->getCcExpYear(), -2); $paymentAction = $this->getConfigData('payment_action'); $billingaddress = $order->getBillingAddress(); $countrycode = $this->getcountrycode($billingaddress->getData('country_id')); //$totals = strval(($amount)*100); $orderId = $order->getIncrementId(); $currencyDesc = $order->getBaseCurrencyCode(); $baseCurrency_code = Mage::app()->getBaseCurrencyCode(); $storeId = Mage::app()->getStore()->getId(); $SelectedCurrency = Mage::app()->getStore($storeId)->getCurrentCurrencyCode(); $module_currency_code = $this->getConfigData('payment_currency'); $paymentSenseSelectedCurrency = explode(',', $module_currency_code); $curArray = array('USD', 'GBP', 'EUR'); if (in_array($SelectedCurrency, $paymentSenseSelectedCurrency)) { $currcode = $SelectedCurrency; } else { if (in_array($baseCurrency_code, $paymentSenseSelectedCurrency)) { $currcode = $baseCurrency_code; } else { if (in_array($baseCurrency_code, $curArray)) { $currcode = $paymentSenseSelectedCurrency[0]; } else { return array('status' => 0, 'transaction_id' => time(), 'fraud' => rand(0, 1), 'message' => 'Currency Error', 'data' => '', 'CrossReference' => ''); } } } $arAdditionalInformationArray["PaymentCurrency"] = $currcode; $payment->setAdditionalInformation($arAdditionalInformationArray); $allowedCurrencies = Mage::getModel('directory/currency')->getConfigAllowCurrencies(); $currencyRates = Mage::getModel('directory/currency')->getCurrencyRates($baseCurrency_code, array_values($allowedCurrencies)); //$baseCurrnecyrate = 1/$currencyRates[Mage::app()->getStore()->getCurrentCurrencyCode()]; $grandTotal = $order->getData('base_grand_total'); $baseCurrnecyrate = $currencyRates[$currcode]; if ($currcode == 'EUR') { if ($currcode = $baseCurrency_code && $baseCurrency_code != '') { //$newprice = number_format((float)($order->getGrandTotal()*$baseCurrnecyrate),'2', '.', ''); $newprice = number_format((double) ($grandTotal * $baseCurrnecyrate), '2', '.', ''); } else { //$newprice = Mage::helper('directory')->currencyConvert($order->getGrandTotal(),'EUR',Mage::app()->getStore()->getCurrentCurrencyCode()); $newprice = Mage::helper('directory')->currencyConvert($grandTotal, 'EUR', Mage::app()->getStore()->getCurrentCurrencyCode()); } $currdes = '978'; } elseif ($currcode == 'GBP') { if ($currcode = $baseCurrency_code && $baseCurrency_code != '') { //$newprice = number_format((float)($order->getGrandTotal()*$baseCurrnecyrate),'2', '.', ''); $newprice = number_format((double) ($grandTotal * $baseCurrnecyrate), '2', '.', ''); } else { //$newprice = Mage::helper('directory')->currencyConvert($order->getGrandTotal(),Mage::app()->getStore()->getCurrentCurrencyCode(),'GBP'); $newprice = Mage::helper('directory')->currencyConvert($order->getGrandTotal(), Mage::app()->getStore()->getCurrentCurrencyCode(), 'GBP'); } $currdes = '826'; } else { if ($currcode = $baseCurrency_code && $baseCurrency_code != '') { $newprice = number_format((double) ($grandTotal * $baseCurrnecyrate), '2', '.', ''); } else { $newprice = Mage::helper('directory')->currencyConvert($grandTotal, 'USD', Mage::app()->getStore()->getCurrentCurrencyCode()); } $currdes = '840'; } $surcharge = $this->getConfigData('payment_surcharge'); $credit_surcharge = $this->getConfigData('surcharge_debit'); $newprice = round($newprice, 2); $totals = strval($newprice * 100); $url = $this->getConfigData('gateway_url'); $fields = array('MerchantID' => $this->getConfigData('api_username'), 'MerchantPassword' => $this->getConfigData('api_password'), 'PhoneNumber' => $billingaddress->getData('telephone'), 'EmailAddress' => $billingaddress->getData('email'), 'customer_ipaddress' => $_SERVER['REMOTE_ADDR'], 'Address1' => $billingaddress->getStreet1(), 'Address2' => $billingaddress->getStreet2(), 'City' => $billingaddress->getData('city'), 'CountryCode' => $countrycode, 'State' => $billingaddress->getData('region'), 'PostCode' => $billingaddress->getData('postcode'), 'CardName' => $payment->getCcOwner(), 'ExpiryDateMonth' => $card_expiredate, 'ExpiryDateYear' => $expireyear, 'CardNumber' => $payment->getCcNumber(), 'StartDateMonth' => $card_startdate, 'StartDateYear' => $startyear, 'IssueNumber' => '', 'TransactionType' => $transcition_type, 'Description' => 'Order' . $order->getIncrementId(), 'CV2' => $payment->getCcCid(), 'OrderID' => $order->getIncrementId(), 'currencydesc' => $currdes, 'Amount' => $totals); // print_r($fields);die(); $json = array(); $headers = array('SOAPAction:https://www.thepaymentgateway.net/CardDetailsTransaction', 'Content-Type: text/xml; charset = utf-8', 'Connection: close'); $xml = '<?xml version="1.0" encoding="utf-8"?>'; $xml .= '<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">'; $xml .= '<soap:Body>'; $xml .= '<CardDetailsTransaction xmlns="https://www.thepaymentgateway.net/">'; $xml .= '<PaymentMessage>'; $xml .= '<MerchantAuthentication MerchantID="' . $fields['MerchantID'] . '" Password="******" />'; $xml .= '<TransactionDetails Amount="' . $fields['Amount'] . '" CurrencyCode="' . $fields['currencydesc'] . '">'; $xml .= '<MessageDetails TransactionType="' . $fields['TransactionType'] . '" />'; $xml .= '<OrderID>' . $fields['OrderID'] . '</OrderID>'; $xml .= '<OrderDescription>' . $fields['Description'] . '</OrderDescription>'; $xml .= '<TransactionControl>'; $xml .= '<EchoCardType>TRUE</EchoCardType>'; $xml .= '<EchoAVSCheckResult>TRUE</EchoAVSCheckResult>'; $xml .= '<EchoCV2CheckResult>TRUE</EchoCV2CheckResult>'; $xml .= '<EchoAmountReceived>TRUE</EchoAmountReceived>'; $xml .= '<DuplicateDelay>20</DuplicateDelay>'; //$xml .= '<AVSOverridePolicy>'. $fields['AVSPolicy'] .'</AVSOverridePolicy>'; //$xml .= '<CV2OverridePolicy>'. $fields['CV2Policy'] .'</CV2OverridePolicy>'; $xml .= '<CustomVariables>'; $xml .= '<GenericVariable Name="MyInputVariable" Value="Ping" />'; $xml .= '</CustomVariables>'; $xml .= '</TransactionControl>'; $xml .= '</TransactionDetails>'; $xml .= '<CardDetails>'; $xml .= '<CardName>' . $fields['CardName'] . '</CardName>'; $xml .= '<CardNumber>' . $fields['CardNumber'] . '</CardNumber>'; if ($fields['ExpiryDateMonth'] != "") { $xml .= '<ExpiryDate Month="' . $fields['ExpiryDateMonth'] . '" Year="' . $fields['ExpiryDateYear'] . '" />'; } if ($fields['StartDateMonth'] != "") { $xml .= '<StartDate Month="' . $fields['StartDateMonth'] . '" Year="' . $fields['StartDateYear'] . '" />'; } $xml .= '<CV2>' . $fields['CV2'] . '</CV2>'; if ($fields['IssueNumber'] != "") { $xml .= '<IssueNumber>' . $fields['IssueNumber'] . '</IssueNumber>'; } $xml .= '</CardDetails>'; $xml .= '<CustomerDetails>'; $xml .= '<BillingAddress>'; $xml .= '<Address1>' . $fields['Address1'] . '</Address1>'; if (isset($fields['Address2']) && $fields['Address2'] != "") { $xml .= '<Address2>' . $fields['Address2'] . '</Address2>'; } if (isset($fields['Address3']) && $fields['Address3'] != "") { $xml .= '<Address3>' . $fields['Address3'] . '</Address3>'; } if (isset($fields['Address4']) && $fields['Address4'] != "") { $xml .= '<Address4>' . $fields['Address4'] . '</Address4>'; } $xml .= '<City>' . $fields['City'] . '</City>'; if ($fields['State'] != "") { $xml .= '<State>' . $fields['State'] . '</State>'; } $xml .= '<PostCode>' . $fields['PostCode'] . '</PostCode>'; $xml .= '<CountryCode>' . $fields['CountryCode'] . '</CountryCode>'; $xml .= '</BillingAddress>'; $xml .= '<EmailAddress>' . $fields['EmailAddress'] . '</EmailAddress>'; $xml .= '<PhoneNumber>' . $fields['PhoneNumber'] . '</PhoneNumber>'; //$xml .= '<CustomerIPAddress>'.$fields['CustomerIPAddress'].'</CustomerIPAddress>'; $xml .= '</CustomerDetails>'; $xml .= '<PassOutData>Some data to be passed out</PassOutData>'; $xml .= '</PaymentMessage>'; $xml .= '</CardDetailsTransaction>'; $xml .= '</soap:Body>'; $xml .= '</soap:Envelope>'; $gwId = 1; $domain = "paymentsensegateway.com"; $port = "4430"; $transattempt = 1; $soapSuccess = false; while (!$soapSuccess && $gwId <= 3 && $transattempt <= 3) { $url = 'https://gw' . $gwId . '.' . $domain . ':' . $port . '/'; //================================================================================= $curl = curl_init(); curl_setopt($curl, CURLOPT_HEADER, false); curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_POSTFIELDS, $xml); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_ENCODING, 'UTF-8'); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); $caInfoSetting = ini_get("curl.cainfo"); if (empty($caInfoSetting)) { curl_setopt($curl, CURLOPT_CAINFO, Mage::getModuleDir('', 'Paymentsense') . DS . 'lib' . DS . "cacert.pem"); } $ret = curl_exec($curl); $err = curl_errno($curl); $retHead = curl_getinfo($curl); curl_close($curl); $curl = null; //echo "<pre>";print_r($ret);die; //$json['error'] .= "\r\rerr=". $err ."\r\r"."response=".$ret; if ($err == 0) { $StatusCode = null; $soapStatusCode = null; if (preg_match('#<StatusCode>([0-9]+)</StatusCode>#iU', $ret, $soapStatusCode)) { $StatusCode = (int) $soapStatusCode[1]; $AuthCode = null; $soapAuthCode = null; $CrossReference = null; $soapCrossReference = null; $Message = null; $soapMessage = null; if (preg_match('#<AuthCode>([a-zA-Z0-9]+)</AuthCode>#iU', $ret, $soapAuthCode)) { $AuthCode = $soapAuthCode[1]; } if (preg_match('#<TransactionOutputData.*CrossReference="([a-zA-Z0-9]+)".*>#iU', $ret, $soapCrossReference)) { $CrossReference = $soapCrossReference[1]; } if (preg_match('#<Message>(.+)</Message>#iU', $ret, $soapMessage)) { $Message = $soapMessage[1]; } if ($StatusCode != 3) { Mage::getSingleton('core/session')->setJsonValue(''); } if ($StatusCode != 50) { $soapSuccess = true; switch ($StatusCode) { case 0: $status = 1; $json['error'] = ''; /* *$this->model_checkout_order->confirm($this->session->data['order_id'], $this->config->get('config_order_status_id')); */ if (preg_match('#<AddressNumericCheckResult>(.+)</AddressNumericCheckResult>#iU', $ret, $soapAVSCheck)) { $AVSCheck = $soapAVSCheck[1]; } if (preg_match('#<PostCodeCheckResult>(.+)</PostCodeCheckResult>#iU', $ret, $soapPostCodeCheck)) { $PostCodeCheck = $soapPostCodeCheck[1]; } if (preg_match('#<CV2CheckResult>(.+)</CV2CheckResult>#iU', $ret, $soapCV2Check)) { $CV2Check = $soapCV2Check[1]; } $successmessage = 'AuthCode: ' . $AuthCode . " || " . 'CrossReference: ' . $CrossReference . " || " . 'AVS Check: ' . $AVSCheck . " || " . 'Postcode Check: ' . $PostCodeCheck . " || " . 'CV2 Check: ' . $CV2Check; $json['error'] = ''; //$this->model_checkout_order->update($this->session->data['order_id'], $this->config->get('paymentsense_direct_order_status_id'), $successmessage, false); //$json['success'] = $this->url->link('checkout/success', '', 'SSL'); break; case 3: $status = 1; if (preg_match('#<ThreeDSecureOutputData>.*<PaREQ>(.+)</PaREQ>.*<ACSURL>(.+)</ACSURL>.*</ThreeDSecureOutputData>#iU', $ret, $soap3DSec)) { $PaREQ = $soap3DSec[1]; $ACSurl = $soap3DSec[2]; $json['ACSURL'] = $ACSurl; $json['MD'] = $CrossReference; $json['PaReq'] = $PaREQ; $json['TermUrl'] = Mage::getUrl('pay/index/callback', array('_secure' => true)); $json['error'] = ''; Mage::getSingleton('core/session')->setJsonValue($json); //$this->secureAuthorisation($json); } else { $json['error'] = 'Incorrect 3DSecure data.'; $do = false; } break; case 4: // Referred $json['error'] = 'Your card has been referred - please try a different card'; $do = false; $status = 0; break; case 5: // Declined $json['error'] = 'Your card has been declined - '; $status = 0; if (preg_match('#<AddressNumericCheckResult>(.+)</AddressNumericCheckResult>#iU', $ret, $soapAVSCheck)) { $AVSCheck = $soapAVSCheck[1]; } $failedreasons = ""; if ($AVSCheck == "FAILED") { if ($failedreasons != "") { $failedreasons .= " + AVS"; } else { $failedreasons = "Billing address"; } } if (preg_match('#<PostCodeCheckResult>(.+)</PostCodeCheckResult>#iU', $ret, $soapPostCodeCheck)) { $PostCodeCheck = $soapPostCodeCheck[1]; } if ($PostCodeCheck == "FAILED") { if ($failedreasons != "") { $failedreasons .= " + Postcode"; } else { $failedreasons = "Postcode"; } } if (preg_match('#<CV2CheckResult>(.+)</CV2CheckResult>#iU', $ret, $soapCV2Check)) { $CV2Check = $soapCV2Check[1]; } if ($CV2Check == "FAILED") { if ($failedreasons != "") { $failedreasons .= " + CV2"; } else { $failedreasons = "CV2"; } } if ($failedreasons != "") { $json['error'] .= $failedreasons . " checks failed. "; } $json['error'] .= 'Please check your billing address and card details and try again'; $do = false; break; case 20: // Duplicate // check the previous status in order to know if the transaction was a success $status = 1; if (preg_match('#<PreviousTransactionResult>.*<StatusCode>([0-9]+)</StatusCode>#iU', $ret, $soapStatus2)) { if ($soapStatus2[1] == '0') { //$this->model_checkout_order->confirm($this->session->data['order_id'], $this->config->get('config_order_status_id')); if (preg_match('#<AddressNumericCheckResult>(.+)</AddressNumericCheckResult>#iU', $ret, $soapAVSCheck)) { $AVSCheck = $soapAVSCheck[1]; } if (preg_match('#<PostCodeCheckResult>(.+)</PostCodeCheckResult>#iU', $ret, $soapPostCodeCheck)) { $PostCodeCheck = $soapPostCodeCheck[1]; } if (preg_match('#<CV2CheckResult>(.+)</CV2CheckResult>#iU', $ret, $soapCV2Check)) { $CV2Check = $soapCV2Check[1]; } $successmessage = 'AuthCode: ' . $AuthCode . " || " . 'CrossReference: ' . $CrossReference . " || " . 'AVS Check: ' . $AVSCheck . " || " . 'Postcode Check: ' . $PostCodeCheck . " || " . 'CV2 Check: ' . $CV2Check . ' || ' . '3D Secure: PASSED'; //$this->model_checkout_order->update($this->session->data['order_id'], $this->config->get('paymentsense_direct_order_status_id'), $successmessage, false); //$json['success'] = $this->url->link('checkout/success', '', 'SSL'); $json['error'] = ''; break; } else { if ($soapStatus2[1] == '4') { $json['error'] = 'Your card has been referred - please try a different card'; $do = false; break; } else { if ($soapStatus2[1] == '5') { $json['error'] = 'Your card has been declined - ' . str_replace("Card declined: ", "", $Message) . ' checks failed.\\nPlease check your billing address and card details and try again'; $do = false; break; } else { $json['error'] = 'Duplicate transaction'; $do = false; } } } } else { $json['error'] = 'Duplicate transaction'; $do = false; } break; case 30: default: $status = 0; // generic error // read error message if (preg_match('#<Message>(.*)</Message>#iU', $ret, $msg)) { $msg = $msg[1]; } else { $msg = ''; } $json['error'] = 'PaymentSense Error (' . $StatusCode . ') :' . $msg; $do = false; break; } } } } if ($transattempt <= 3) { $transattempt++; } else { $transattempt = 1; $gwId++; } } return array('status' => $status, 'transaction_id' => time(), 'fraud' => rand(0, 1), 'message' => $json['error'], 'data' => $json, 'CrossReference' => $CrossReference, 'paymenstatus' => $message); }
public function capture(Varien_Object $payment, $amount) { if ($payment->getAdditionalInformation('hyperpay_transaction_code') == 'PA') { $refId = $payment->getAdditionalInformation('IDENTIFICATION_REFERENCEID'); $currency = $payment->getAdditionalInformation('CURRENCY'); $dataTransaction = $this->getCredentials(); $dataTransaction['tx_mode'] = $this->getTransactionMode(); $postData = getPostCapture($refId, $amount, $currency, $dataTransaction); $server = $this->getServerMode(); $url = getExecuteUrl($server); $response = executePayment($postData, $url); $result = buildResponseArray($response); $payment->setAdditionalInformation('CAPTURE', $result['PROCESSING.RESULT']); if ($result['PROCESSING.RESULT'] == 'ACK') { $payment->setStatus('APPROVED')->setTransactionId($payment->getAdditionalInformation('IDENTIFICATION_REFERENCEID'))->setIsTransactionClosed(1)->save(); } else { Mage::throwException(Mage::helper('hyperpay')->__('An error occurred while processing')); } } else { $payment->setStatus('APPROVED')->setTransactionId($payment->getAdditionalInformation('IDENTIFICATION_REFERENCEID'))->setIsTransactionClosed(1)->save(); } return $this; }
/** * Process a successful result from the sale request * * @param Varien_Object $payment * @param Braintree_Result_Successful $result * @param $amount * * @return Varien_Object */ protected function _processSuccessResult(Varien_Object $payment, $result, $amount) { // Pass an event if the payment was a success Mage::dispatchEvent('gene_braintree_paypal_success', array('payment' => $payment, 'result' => $result, 'amount' => $amount)); // Set some basic things $payment->setStatus(self::STATUS_APPROVED)->setCcTransId($result->transaction->id)->setLastTransId($result->transaction->id)->setTransactionId($result->transaction->id)->setIsTransactionClosed(0)->setAmount($amount)->setShouldCloseParentTransaction(false); // Set the additioanl information about the customers PayPal account $payment->setAdditionalInformation(array('paypal_email' => $result->transaction->paypal['payerEmail'], 'payment_id' => $result->transaction->paypal['paymentId'], 'authorization_id' => $result->transaction->paypal['authorizationId'])); // Handle any fraud response from Braintree $this->handleFraud($result, $payment); // Store the PayPal token if we have one if (isset($result->transaction->paypal['token']) && !empty($result->transaction->paypal['token'])) { $payment->setAdditionalInformation('token', $result->transaction->paypal['token']); } return $payment; }
/** * @desc authorise response * Process the response of the soap * @param Varien_Object $payment * @param unknown_type $response * @todo Add comment with checkout Authorised */ protected function _processResponse(Varien_Object $payment, $response, $request = null) { if (!$response instanceof stdClass) { return false; } switch ($request) { case "authorise": case "authorise3d": $fraudResult = $response->paymentResult->fraudResult->accountScore; $payment->setAdyenTotalFraudScore($fraudResult); $responseCode = $response->paymentResult->resultCode; $pspReference = $response->paymentResult->pspReference; break; case "refund": $responseCode = $response->refundResult->response; $pspReference = $response->refundResult->pspReference; break; case "cancel_or_refund": $responseCode = $response->cancelOrRefundResult->response; $pspReference = $response->cancelOrRefundResult->pspReference; break; case "capture": $responseCode = $response->captureResult->response; $pspReference = $response->captureResult->pspReference; break; default: $this->writeLog("Unknown data type by Adyen"); break; } switch ($responseCode) { case "RedirectShopper": $payment->setAdditionalInformation('paRequest', $response->paymentResult->paRequest); $payment->setAdditionalInformation('md', $response->paymentResult->md); $payment->setAdditionalInformation('issuerUrl', $response->paymentResult->issuerUrl); Mage::getSingleton('customer/session')->setRedirectUrl("adyen/process/validate3d"); $this->_addStatusHistory($payment, $responseCode, $pspReference, $this->_getConfigData('order_status')); break; case "Refused": $errorMsg = Mage::helper('adyen')->__('The payment is REFUSED by Adyen.'); Mage::throwException($errorMsg); break; case "Authorised": $this->_addStatusHistory($payment, $responseCode, $pspReference, $this->_getConfigData('order_status')); break; case "Received": // boleto payment $additionalDataResult = $response->paymentResult->additionalData->entry; $pdfUrl = $additionalDataResult[0]->value; $this->_addStatusHistory($payment, $responseCode, $pspReference, false, $pdfUrl); break; case '[capture-received]': case '[refund-received]': case '[cancelOrRefund-received]': $this->_addStatusHistory($payment, $responseCode, $pspReference); break; case "Error": $errorMsg = Mage::helper('adyen')->__('System error, please try again later'); Mage::throwException($errorMsg); break; default: $this->writeLog("Unknown data type by Adyen"); break; } //save all response data for a pure duplicate detection Mage::getModel('adyen/event')->setPspReference($pspReference)->setAdyenEventCode($responseCode)->setAdyenEventResult($responseCode)->setIncrementId($this->_order->getIncrementId())->setPaymentMethod($this->getInfoInstance()->getCcType())->setCreatedAt(now())->saveData(); return $this; }
/** * Order payment method * * @param Varien_Object $payment * @param float $amount * * @return Amazon_Payments_Model_PaymentMethod */ public function order(Varien_Object $payment, $amount) { if (!$amount) { return $this; } $orderReferenceId = $payment->getAdditionalInformation('order_reference'); if (!$orderReferenceId) { $orderReferenceId = Mage::getSingleton('checkout/session')->getAmazonOrderReferenceId(); if (!$orderReferenceId) { Mage::throwException('Please log in to your Amazon account by clicking the Amazon pay button.'); } $payment->setAdditionalInformation('order_reference', $orderReferenceId); } $payment->setTransactionId($orderReferenceId); $order = $payment->getOrder(); // If previous order submission failed (e.g. bad credit card), must validate order status to prevent multiple setOrderReferenceDetails() if ($this->_getErrorCheck()) { $orderReferenceDetails = $this->_getApi()->getOrderReferenceDetails($orderReferenceId); } if (!$this->_getErrorCheck() || $orderReferenceDetails->getOrderReferenceStatus()->getState() == 'Draft') { $apiResult = $this->_getApi()->setOrderReferenceDetails($orderReferenceId, $order->getBaseGrandTotal(), $order->getBaseCurrencyCode(), $order->getIncrementId(), $this->_getApi()->getConfig()->getStoreName()); } try { $apiResult = $this->_getApi()->confirmOrderReference($orderReferenceId); } catch (Exception $e) { Mage::throwException("Please try another Amazon payment method." . "\n\n" . substr($e->getMessage(), 0, strpos($e->getMessage(), 'Stack trace'))); $this->_setErrorCheck(); return; } $payment->setIsTransactionClosed(false); $payment->setSkipOrderProcessing(true); $message = Mage::helper('payment')->__(($this->getConfigData('is_async') ? 'Asynchronous ' : '') . 'Order of %s sent to Amazon Payments.', $order->getStore()->convertPrice($amount, true, false)); $payment->addTransaction(Mage_Sales_Model_Order_Payment_Transaction::TYPE_ORDER, null, false, $message); switch ($this->getConfigData('payment_action')) { case self::ACTION_AUTHORIZE: $this->_authorize($payment, $amount, false); break; case self::ACTION_AUTHORIZE_CAPTURE: $this->_authorize($payment, $amount, true); break; default: break; } return $this; }
public function createOrder(Varien_Object $payment, $amount, $authorize) { $store_id = Mage::app()->getStore()->getStoreId(); if ($payment->getOrder()) { $orderId = $payment->getOrder()->getIncrementId(); } else { $orderId = $payment->getQuote()->getIncrementId(); // $order = $payment->getOrder()) } $logger = Mage::helper('worldpay/logger'); $session = Mage::getSingleton('core/session'); $token = $session->getData('payment_token'); $savedCard = $session->getData('saved_card'); $logger->log('Begin create order'); $session->setData('wp_3dsSuccess', false); $session->setData('wp_orderCode', false); $worldpay = $this->setupWorldpay(); if (Mage::app()->getStore()->isAdmin()) { $checkout = Mage::getSingleton('adminhtml/session_quote')->getQuote(); } else { $checkout = Mage::getSingleton('checkout/session')->getQuote(); } $billing = $checkout->getBillingAddress(); $order_description = Mage::getStoreConfig('payment/' . $this->_code . '/description', $store_id); if (!$order_description) { $order_description = "Order"; } $currency_code = Mage::app()->getStore()->getCurrentCurrencyCode(); $name = $billing->getName(); $billing_address = array("address1" => $billing->getStreet(1), "address2" => $billing->getStreet(2), "address3" => $billing->getStreet(3), "postalCode" => $billing->getPostcode(), "city" => $billing->getCity(), "state" => "", "countryCode" => $billing->getCountry()); try { $mode = Mage::getStoreConfig('payment/worldpay_mode', Mage::app()->getStore()->getStoreId()); $orderType = 'ECOM'; $threeDS = Mage::getStoreConfig('payment/worldpay_cc/use3ds', Mage::app()->getStore()->getStoreId()); if (Mage::app()->getStore()->isAdmin()) { $orderType = 'MOTO'; $threeDS = false; } if ($threeDS && $mode == 'Test Mode') { $name = '3D'; } $settlementCurrency = Mage::getStoreConfig('payment/worldpay_cc/settlementcurrency', Mage::app()->getStore()->getStoreId()); $createOrderRequest = array('token' => $token, 'orderDescription' => $order_description, 'amount' => $amount * 100, 'currencyCode' => $currency_code, 'name' => $name, 'orderType' => $orderType, 'is3DSOrder' => $threeDS, 'authoriseOnly' => $authorize, 'billingAddress' => $billing_address, 'customerOrderCode' => $orderId, 'settlementCurrency' => $settlementCurrency); $logger->log('Order Request: ' . print_r($createOrderRequest, true)); $response = $worldpay->createOrder($createOrderRequest); $logger->log('Order Response: ' . print_r($response, true)); if ($response['paymentStatus'] === 'SUCCESS') { $this->setStore($payment->getOrder()->getStoreId()); $logger->log('Order: ' . $response['orderCode'] . ' SUCCESS'); $payment->setStatus(self::STATUS_APPROVED); $payment->setAmount($amount); $payment->setLastTransId($orderId); $payment->setTransactionId($response['orderCode']); $payment->setAdditionalInformation("worldpayOrderCode", $response['orderCode']); // $formatedPrice = $order->getBaseCurrency()->formatTxt($amount); $payment->setShouldCloseParentTransaction(1)->setIsTransactionClosed(1)->registerCaptureNotification($amount); } else { if ($response['paymentStatus'] == 'AUTHORIZED') { $this->setStore($payment->getOrder()->getStoreId()); $logger->log('Order: ' . $response['orderCode'] . ' AUTHORIZED'); $payment->setIsTransactionClosed(0); $payment->setSkipOrderProcessing(true); $payment->setStatus(self::STATUS_APPROVED); $payment->setAmount($amount); $payment->setAdditionalInformation("worldpayOrderCode", $response['orderCode']); $payment->setLastTransId($orderId); $payment->setTransactionId($response['orderCode']); } else { if ($response['is3DSOrder']) { $session = Mage::getSingleton('core/session'); $logger->log('Starting 3DS Order: ' . $response['orderCode']); $session->setData('wp_3dsSuccess', false); $session->setData('wp_redirectURL', $response['redirectURL']); $session->setData('wp_oneTime3DsToken', $response['oneTime3DsToken']); $session->setData('wp_orderCode', $response['orderCode']); // IF normal checkout $currentUrl = Mage::helper('core/url')->getCurrentUrl(); $url = Mage::getSingleton('core/url')->parseUrl($currentUrl); $path = $url->getPath(); if (strpos($path, 'onepage') === false) { Mage::app()->getFrontController()->getResponse()->setRedirect(Mage::getUrl('worldpay/threeDS')); Mage::app()->getResponse()->sendResponse(); } else { echo 'window.WorldpayMagento.loadThreeDS("' . Mage::getUrl('worldpay/threeDS') . '")'; } exit; } else { if (isset($response['paymentStatusReason'])) { throw new Exception($response['paymentStatusReason']); } else { throw new Exception(print_r($response, true)); } } } } } catch (Exception $e) { $payment->setStatus(self::STATUS_ERROR); $payment->setAmount($amount); $payment->setLastTransId($orderId); $logger->log($e->getMessage()); Mage::throwException('Payment failed, please try again later ' . $e->getMessage()); } return $this; }
/** * Call DoAuthorize * * @param int $amount * @param Varien_Object $payment * @param string $parentTransactionId * @return Mage_Paypal_Model_Api_Abstract */ protected function _callDoAuthorize($amount, $payment, $parentTransactionId) { $api = $this->_pro->resetApi()->getApi()->setAmount($amount)->setCurrencyCode($payment->getOrder()->getBaseCurrencyCode())->setTransactionId($parentTransactionId)->callDoAuthorization(); $payment->setAdditionalInformation($this->_authorizationCountKey, $payment->getAdditionalInformation($this->_authorizationCountKey) + 1); return $api; }
/** * Update the payment with details from the CC Auth Request and Reply * @param Varien_Object $payment * @param Payload\Payment\ICreditCardAuthRequest $request * @param Payload\Payment\ICreditCardAuthReply $response * @return self */ public function _updatePayment(Varien_Object $payment, Payload\Payment\ICreditCardAuthRequest $request, Payload\Payment\ICreditCardAuthReply $response) { $correctionRequired = $response->getIsAVSCorrectionRequired() || $response->getIsCVV2CorrectionRequired(); $payment->setAdditionalInformation(['request_id' => $request->getRequestId(), 'response_code' => $response->getResponseCode(), 'pan_is_token' => $response->getPanIsToken(), 'bank_authorization_code' => $response->getBankAuthorizationCode(), 'cvv2_response_code' => $response->getCVV2ResponseCode(), 'avs_response_code' => $response->getAVSResponseCode(), 'phone_response_code' => $response->getPhoneResponseCode(), 'name_response_code' => $response->getNameResponseCode(), 'email_response_code' => $response->getEmailResponseCode(), 'currency_code' => $response->getCurrencyCode(), 'tender_type' => $this->_helper->getTenderTypeForCcType($payment->getCcType()), 'is_correction_required' => $correctionRequired, 'last4_to_correct' => $correctionRequired ? $payment->getCcLast4() : null])->setAmountAuthorized($response->getAmountAuthorized())->setBaseAmountAuthorized($response->getAmountAuthorized())->setCcNumberEnc($payment->encrypt($response->getCardNumber())); return $this; }
/** * Authorize the transaction by calling PAYMENT_INIT, PAYMENT_REQUEST and PAYMENT_CONFIRM. * * @param Varien_Object $orderPayment * @param float $amount * @return RatePAY_Ratepaypayment_Model_Method_Rate */ public function authorize(Varien_Object $payment, $amount) { $client = Mage::getSingleton('ratepaypayment/request'); $order = $this->getQuoteOrOrder(); $helper = Mage::helper('ratepaypayment/mapping'); $head = $helper->getRequestHead($order); if (Mage::getSingleton('ratepaypayment/session')->getQueryActive() && Mage::getSingleton('ratepaypayment/session')->getTransactionId()) { $result['transactionId'] = Mage::getSingleton('ratepaypayment/session')->getTransactionId(); } else { $result = $client->callPaymentInit($helper->getRequestHead($order), $helper->getLoggingInfo($order)); } if (is_array($result) || $result == true) { $payment->setAdditionalInformation('transactionId', $result['transactionId']); $payment->setAdditionalInformation('profileId', $head['profileId']); $payment->setAdditionalInformation('securityCode', $head['securityCode']); $result = $client->callPaymentRequest($helper->getRequestHead($order), $helper->getRequestCustomer($order), $helper->getRequestBasket($order), $helper->getRequestPayment($order, (double) Mage::getSingleton('ratepaypayment/session')->getRatepayRate0TotalAmount(), 'PAYMENT_REQUEST'), $helper->getLoggingInfo($order)); if (is_array($result) || $result == true) { $payment->setAdditionalInformation('descriptor', $result['descriptor']); $resultConfirm = $client->callPaymentConfirm($helper->getRequestHead($order), $helper->getLoggingInfo($order)); if (!is_array($resultConfirm) && !$resultConfirm == true) { $this->_abortBackToPayment('PAYMENT_REQUEST Declined'); } } else { $this->_abortBackToPayment('PAYMENT_REQUEST Declined'); } } else { $this->_abortBackToPayment('Gateway Offline'); } return $this; }
public function capture(Varien_Object $payment, $amount) { $session = Mage::getSingleton('core/session'); $logger = Mage::helper('worldpay/logger'); if ($session->getData('wp_3dscompletionNeeded')) { $payment->setIsTransactionClosed(0); $payment->setSkipOrderProcessing(true); $payment->setStatus(self::STATUS_APPROVED); $payment->setAmount($amount); $payment->setShouldCloseParentTransaction(1); $payment->setAdditionalInformation("worldpayOrderCode", $session->getData('wp_orderCode')); $payment->setLastTransId($session->getData('wp_orderCode')); $payment->setTransactionId($session->getData('wp_orderCode')); $session->setData('wp_3dscompletionNeeded', false); return $this; } $worldpayOrderCode = $payment->getData('last_trans_id'); if ($worldpayOrderCode) { $worldpay = $this->setupWorldpay(); try { $authorizationTransaction = $payment->getAuthorizationTransaction(); if ($authorizationTransaction) { $payment->setAdditionalInformation("worldpayOrderCode", $authorizationTransaction->getTxnId()); $worldpayOrderCode = $authorizationTransaction->getTxnId(); } else { $worldpayOrderCode = $payment->getAdditionalInformation('worldpayOrderCode'); } $worldpay->captureAuthorisedOrder($worldpayOrderCode, $amount * 100); $payment->setShouldCloseParentTransaction(1)->setIsTransactionClosed(1); $logger->log('Capture Order: ' . $session->getData('wp_orderCode') . ' success'); } catch (Exception $e) { $logger->log('Capture Order: ' . $session->getData('wp_orderCode') . ' failed with ' . $e->getMessage()); Mage::throwException('Payment failed, please try again later ' . $e->getMessage()); } } else { $payment->setAdditionalInformation('payment_type', 'capture'); return $this->createOrder($payment, $amount, false); } }
/** * Send authorize request to gateway * * @param Varien_Object $payment * @param decimal $amount * @return Mage_Paygate_Model_Authorizenet * @throws Mage_Core_Exception */ public function authorize(Varien_Object $payment, $amount) { $payment->setAdditionalInformation('payment_type', $this->getConfigData('payment_action')); }
public function authorize(Varien_Object $payment, $amount) { $debug = Mage::getStoreConfig('payment/apelidocielo/debug'); if ($amount < 0) { Mage::throwException(Mage::helper('payment')->__('O valor para autorização deve ser maior que zero')); } else { $info = $this->getInfoInstance(); //verifica o id da sessão if (!Mage::getSingleton('checkout/session')->getQuoteId()) { $quoteId = Mage::getSingleton("adminhtml/session_quote")->getQuoteId(); } else { $quoteId = Mage::getSingleton('checkout/session')->getQuoteId(); } //define as variáveisCcType $idpedido = Mage::getModel("sales/order")->getCollection()->getLastItem()->getIncrementId(); $bandeira_cartao = $info->getCcType(); $portador = $info->getCcOwner(); $numcartao = $info->decrypt($info->getCcNumber()); $codseguranca = $info->decrypt($info->getCcCid()); $validade = $info->getCcExpYear() . str_pad($info->getCcExpMonth(), 2, "0", STR_PAD_LEFT); //yyyymm $valor = number_format($amount, 2, '', ''); $parcelas = $info->getAdditionalData(); $parcelamento = Mage::getStoreConfig('payment/apelidocielo/tipoparcelamento'); $softdescriptor = Mage::getStoreConfig('payment/apelidocielo/softdescriptor'); $campollivre = ''; $quoteId = $quoteId; $dadosCliente = Mage::getSingleton('checkout/session')->getQuote()->getBillingAddress(); $emaildigitado = $dadosCliente->getEmail(); $nomedigitado = $dadosCliente->getFirstname() . ' ' . $dadosCliente->getLastname(); $enderecodigitadoa = $dadosCliente->getStreet(); $cidadedigitado = $dadosCliente->getCity(); $estadodigitado = $dadosCliente->getRegion(); $telefonedigitado = $dadosCliente->getTelephone(); $cepdigitado = $dadosCliente->getPostcode(); if ($debug) { //Esse log só funciona se a opção Ativar log em Developer > Log no admin estiver marcada mage::log("\r\n=========== Dados do pagamento sendo enviados para autorizacao ==========\r\nId do pedido: {$idpedido}\r\nBandeira do cartao: {$bandeira_cartao}\r\nPortador do cartao: {$portador}\r\nNumero do cartao: {$numcartao}\r\nCod de seguranca do cartao: {$codseguranca}\r\nValidade do cartao: {$validade}\r\nValor do pagamento: {$valor}\r\nQuantidade de parcelas: {$parcelas}\r\nTipo de parcelamento: {$parcelamento}\r\nTexto do softdescriptor: {$softdescriptor}\r\nId da quote: {$quoteId}\r\n\r\n-------------------------------------------------------------------------------\r\nDADOS PREENCHIDOS PELO CLIENTE NO CHECKOUT\r\n\r\ne-mail: {$emaildigitado}\r\nNome: {$nomedigitado}\r\nEndereco: {$enderecodigitadoa['0']}\r\n {$enderecodigitadoa['1']}\r\n {$enderecodigitadoa['2']}\r\n {$enderecodigitadoa['3']}\r\nCidade: {$cidadedigitado}\r\nEstado: {$estadodigitado}\r\nTelefone: {$telefonedigitado}\r\nCEP: {$cepdigitado}\r\n\r\n ", null, 'oitoo_cielo.log'); } //if($debug) $fluxo = Mage::getStoreConfig('payment/apelidocielo/payment_action'); if ($fluxo == 'authorize_capture') { //se a captura for automática, ele coloca a tag na autorizacao $capturaautomatica = 'true'; } else { $capturaautomatica = 'false'; } $cielo = mage::getModel('apelidocielo/cielo'); $retornoCielo = $cielo->setAutorizacao($idpedido, $bandeira_cartao, $portador, $numcartao, $codseguranca, $validade, $valor, $parcelas, $parcelamento, $softdescriptor, $campollivre, $capturaautomatica); //guarda o TID da transação no campo PONUMBER $tid = (string) $retornoCielo->tid; if ($retornoCielo->autorizacao->codigo == 4 && $retornoCielo->autorizacao->lr == '00' || $retornoCielo->captura->codigo == 6) { Mage::dispatchEvent('oitoo_cielo_log', array('quote_id' => (string) $quoteId, 'codigo' => (string) $retornoCielo->autorizacao->codigo, 'texto' => (string) $retornoCielo->autorizacao->mensagem, 'tid' => $retornoCielo->tid)); //verifica se teve captura e salva os dados. Se houve captura é pq ela é automática if ($retornoCielo->captura->codigo == 6) { $codigocaptura = (string) $retornoCielo->captura->codigo; $mensagemcaptura = (string) $retornoCielo->captura->mensagem; } if (isset($tid) && $tid != '' && $tid != NULL) { $payment->setCcTransId($tid); $payment->setAdditionalInformation('autorizacao_codigo', (string) $retornoCielo->autorizacao->codigo); $payment->setAdditionalInformation('autorizacao_mensagem', (string) $retornoCielo->autorizacao->mensagem); $payment->setAdditionalInformation('autorizacao_lr', (string) $retornoCielo->autorizacao->lr); $payment->setAdditionalInformation('autorizacao_valor', (string) $retornoCielo->autorizacao->valor); if (isset($codigocaptura)) { $payment->setAdditionalInformation('captura_codigo', $codigocaptura); $payment->setAdditionalInformation('captura_mensagem', $mensagemcaptura); } $payment->save(); } return $this; //a compra foi autorizada. O cliente vai para a página de sucesso } else { if (isset($retornoCielo->codigo)) { //guarda o log no módulo de logs Mage::dispatchEvent('oitoo_cielo_log', array('quote_id' => (string) $quoteId, 'codigo' => (string) $retornoCielo->codigo, 'texto' => (string) $retornoCielo->mensagem, 'tid' => 'Não existente')); Mage::throwException(Mage::helper('payment')->__('Erro num: ' . $retornoCielo->codigo . ' - ' . $retornoCielo->mensagem)); } else { //guarda o log no módulo de logs Mage::dispatchEvent('oitoo_cielo_log', array('quote_id' => (string) $quoteId, 'codigo' => (string) $retornoCielo->autorizacao->codigo, 'texto' => (string) $retornoCielo->autorizacao->mensagem, 'tid' => (string) $retornoCielo->tid)); Mage::throwException(Mage::helper('payment')->__('A operadora não autorizou seu pagamento pelo seguinte motivo: ' . $retornoCielo->autorizacao->codigo . ' - ' . $retornoCielo->autorizacao->mensagem . ' LR: ' . $retornoCielo->autorizacao->lr . ' Você ainda pode tentar efetuar um novo pagamento. Basta alterar os dados na aba "Informações de pagamento". Qualquer dúvida entre em contato conosco.')); } } } return $this; }