/** * * @param Varien_Object $payment * @param type $amount * @return of type Velocity_CreditCard_Model_Payment class $this object. */ public function refund(Varien_Object $payment, $amount) { Mage::log($amount, 1); try { $this->_callVelocityGateway(); $response = $this->velocityProcessor->returnById(array('amount' => $amount, 'TransactionId' => $payment->_data['last_trans_id'])); $xml = VelocityXmlCreator::returnByIdXML(number_format($amount, 2, '.', ''), $payment->_data['last_trans_id']); // got ReturnById xml object. $req = $xml->saveXML(); $obj_req = serialize($req); Mage::log(print_r($response, 1)); if (is_array($response) && !empty($response) && isset($response['Status']) && $response['Status'] == 'Successful') { $payment->setTransactionId($response['TransactionId']); $payment->setIsTransactionClosed(1); $insertData = array('transaction_id' => $response['TransactionId'], 'transaction_status' => $response['Status'], 'order_id' => $response['OrderId'], 'request_obj' => $obj_req, 'response_obj' => json_encode($response)); $collectionSet = Mage::getModel('creditcard/card'); $collectionSet->setData($insertData)->save(); } else { if (is_array($response) && !empty($response)) { $errorMsg = $this->_getHelper()->__($response['StatusMessage']); } else { $errorMsg = $this->_getHelper()->__($response); } } } catch (Exception $e) { Mage::throwException($e->getMessage()); } if (isset($errorMsg) && !empty($errorMsg)) { Mage::throwException($errorMsg); } return $this; }
include_once 'sdk' . DS . 'Velocity.php'; if ($payment_mode) { $isTestAccount = TRUE; } else { $isTestAccount = FALSE; } try { $velocityProcessor = new VelocityProcessor($applicationprofileid, $merchantprofileid, $workflowid, $isTestAccount, $identitytoken); } catch (Exception $e) { echo $e->getMessage(); exit; } try { // request for refund $response = $velocityProcessor->returnById(array('amount' => $total_refund, 'TransactionId' => $txtid)); $xml = VelocityXmlCreator::returnByIdXML(number_format($total_refund, 2, '.', ''), $txtid); // got ReturnById xml object. $req = $xml->saveXML(); if (is_array($response) && !empty($response) && isset($response['Status']) && $response['Status'] == 'Successful') { $date = JFactory::getDate(); // for current datetime /* save the returnbyid response into 'velocity transactions' custom table.*/ $queryR = $db->getQuery(true); $columns = array('transaction_id', 'transaction_status', 'virtuemart_order_id', 'request_obj', 'response_obj', 'created_on', 'created_by', 'modified_on', 'modified_by'); $values = array($db->quote($response['TransactionId']), $db->quote($response['TransactionState']), (int) $_POST['orderid'], $db->quote(serialize($req)), $db->quote(serialize($response)), $db->quote($date->format(JDate::$format)), (int) $_POST['userid'], $db->quote($date->format(JDate::$format)), (int) $_POST['userid']); $queryR->insert($db->quoteName('#__virtuemart_payment_plg_velocity'))->columns($db->quoteName($columns))->values(implode(',', $values)); $db->setQuery($queryR); $flagR = $db->execute(); /* Update the refund detail into comment table at admin order detail..*/ $comment = 'ApprovalCode: ' . $response['ApprovalCode'] . '<br>Refund Transaction_Id: ' . $response['TransactionId'] . '<br> Order Total: ' . round($order_total, 2) . ' ' . $_POST['currency'] . '<br>Refunded Amount:' . $response['Amount'] . ' ' . $_POST['currency']; $queryH = $db->getQuery(true);
/** * Refund * * @param \XLite\Model\Payment\BackendTransaction $transaction Backend transaction * * @return boolean */ protected function doRefund(\XLite\Model\Payment\BackendTransaction $transaction) { $this->includeVelocityLibrary(); $backendTransactionStatus = $transaction::STATUS_FAILED; $errorData = ''; if ($this->getSetting('mode') == 'test') { $isTestAccount = true; } else { $isTestAccount = false; } try { $velocityProcessor = new \VelocityProcessor(self::$applicationprofileid, self::$merchantprofileid, self::$workflowid, $isTestAccount, self::$identitytoken); } catch (Exception $e) { $transaction->setDataCell('error_message', $e->getMessage(), 'Velocity error message'); $errorData .= $e->getMessage(); } $refund_amount = $transaction->getValue(); $txnid = $transaction->getPaymentTransaction()->getDataCell('velocity_payment_id')->getValue(); try { // request for refund $response = $velocityProcessor->returnById(array('amount' => $refund_amount, 'TransactionId' => $txnid)); $xml = \VelocityXmlCreator::returnByIdXML($refund_amount, $txnid); // got ReturnById xml object. $req = $xml->saveXML(); $obj_req = serialize($req); if (is_array($response) && !empty($response) && isset($response['Status']) && $response['Status'] == 'Successful') { $backendTransactionStatus = $transaction::STATUS_SUCCESS; $transaction->setDataCell('velocity_refund_id', $response['TransactionId'], 'Velocity Refund ID'); $transaction->setDataCell('approval_code', $response['ApprovalCode'], 'Velocity Approval Code'); $transaction->setDataCell('request_refund_object', $obj_req, 'Velocity Request Refund Object'); $transaction->setDataCell('response_refund_object', serialize($response), 'Velocity Response Refund Object'); $transaction->setDataCell('refund_status', $response['TransactionState'], 'Refund Transaction Status'); $transaction->setStatus($backendTransactionStatus); \XLite\Core\Database::getEM()->flush(); } else { if (is_array($response) && !empty($response)) { $transaction->setDataCell('error_message', $response['StatusMessage'], 'Velocity error message'); $errorData .= $response['StatusMessage']; } else { if (is_string($response)) { $transaction->setDataCell('error_message', $response, 'Velocity error message'); $errorData .= $response; } else { $transaction->setDataCell('error_message', 'Unknown Error please contact the site admin', 'Velocity error message'); $errorData .= 'Unknown Error please contact the site admin'; } } } } catch (Exception $e) { $transaction->setDataCell('error_message', $e->getMessage(), 'Velocity error message'); $errorData .= $e->getMessage(); } if (\XLite\Model\Payment\BackendTransaction::STATUS_SUCCESS == $backendTransactionStatus) { $order = $transaction->getPaymentTransaction()->getOrder(); $paymentTransactionSums = $order->getRawPaymentTransactionSums(); $refunded = $paymentTransactionSums['refunded']; $status = $refunded < $transaction->getPaymentTransaction()->getValue() ? \XLite\Model\Order\Status\Payment::STATUS_PART_PAID : \XLite\Model\Order\Status\Payment::STATUS_REFUNDED; $order->setPaymentStatus($status); \XLite\Core\TopMessage::getInstance()->addInfo('Payment has been refunded successfully'); } else { $msg = 'Transaction failure'; if (!empty($errorData)) { $msg .= '-' . $errorData; } \XLite\Core\TopMessage::getInstance()->addError($msg); } return \XLite\Model\Payment\BackendTransaction::STATUS_SUCCESS == $backendTransactionStatus; }
if (MODULE_PAYMENT_VELOCITY_TESTMODE == 'Test') { $isTestAccount = TRUE; } else { $isTestAccount = FALSE; } try { $velocityProcessor = new VelocityProcessor($applicationprofileid, $merchantprofileid, $workflowid, $isTestAccount, $identitytoken); } catch (Exception $e) { $messageStack->add_session($e->getMessage(), 'error'); zen_redirect(zen_href_link('velocityRefund')); } if ($refund_amount <= $order->info['total']) { try { // request for refund $response = $velocityProcessor->returnById(array('amount' => $refund_amount, 'TransactionId' => $txnid->fields['transaction_id'])); $xml = VelocityXmlCreator::returnByIdXML(number_format($refund_amount, 2, '.', ''), $txnid->fields['transaction_id']); // got ReturnById xml object. $req = $xml->saveXML(); $myfile = fopen("newfile.txt", "w") or die("Unable to open file!"); $txt = print_r($response, 1); fwrite($myfile, $txt); fclose($myfile); if (is_array($response) && !empty($response) && isset($response['Status']) && $response['Status'] == 'Successful') { /* save the returnbyid response into 'zen_velocity_transactions' custom table.*/ $sql = "insert into " . TABLE_PAYMENT_VELOCITY_TRANSACTIONS . " (transaction_id, transaction_status, order_id, request_obj, response_obj) values (:transactionId, :transactionStatus, :orderID, :requestOBJ, :responseOBJ)"; $sql = $db->bindVars($sql, ':transactionId', $response['TransactionId'], 'string'); $sql = $db->bindVars($sql, ':transactionStatus', $response['Status'], 'string'); $sql = $db->bindVars($sql, ':orderID', $refundD['oID'], 'string'); $sql = $db->bindVars($sql, ':requestOBJ', serialize($req), 'string'); $sql = $db->bindVars($sql, ':responseOBJ', serialize($response), 'string'); $db->Execute($sql);
public function returnById($options = array()) { if (isset($options['amount']) && isset($options['TransactionId'])) { $amount = number_format($options['amount'], 2, '.', ''); try { $xml = VelocityXmlCreator::returnByIdXML($amount, $options['TransactionId']); // got ReturnById xml object. $xml->formatOutput = TRUE; $body = $xml->saveXML(); //echo '<xmp>'.$body.'</xmp>'; die; list($error, $response) = $this->connection->post($this->path(self::$workflowid, null, self::$Txn_method[6]), array('sessiontoken' => $this->sessionToken, 'xml' => $body, 'method' => self::$Txn_method[6])); return $this->handleResponse($error, $response); //return $response; } catch (Exception $e) { throw new Exception($e->getMessage()); } } else { throw new Exception(VelocityMessage::$descriptions['errreturntranidwid']); } }
public function refund() { $this->load->model('payment/velocitycreditcard'); require_once '././../sdk/Velocity.php'; $json['error'] = ''; $json['success'] = ''; $identitytoken = $this->config->get('velocitycreditcard_identitytoken'); $workflowid = $this->config->get('velocitycreditcard_workflowid'); $applicationprofileid = $this->config->get('velocitycreditcard_applicationprofileid'); $merchantprofileid = $this->config->get('velocitycreditcard_merchantprofileid'); if ($this->config->get('velocitycreditcard_test')) { $isTestAccount = TRUE; } else { $isTestAccount = FALSE; } try { $velocityProcessor = new VelocityProcessor($applicationprofileid, $merchantprofileid, $workflowid, $isTestAccount, $identitytoken); } catch (Exception $e) { echo $e->getMessage(); $json['error'] .= $e->getMessage(); } $this->load->model('sale/order'); $order_info = $this->model_sale_order->getOrder($this->request->post['order_id']); $order_shipping = $this->model_payment_velocitycreditcard->getShipping($this->request->post['order_id']); $sub_total = $this->currency->format($order_info['total'], $order_info['currency_code'], $order_info['currency_value'], false) - $this->currency->format($order_shipping, $order_info['currency_code'], $order_info['currency_value'], false); if ((double) $sub_total >= (double) $this->request->post['amount']) { try { $query = $this->db->query("select transaction_id from " . DB_PREFIX . "velocity_transactions where order_id =" . $this->request->post['order_id']); if (!isset($query->row['transaction_id'])) { throw new Exception('Transaction id not found for the Order', '500'); } $transaction_id = $query->row['transaction_id']; $refund_amount = $this->request->post['shipping'] === 'true' ? $this->request->post['amount'] + $order_shipping : $this->request->post['amount']; // request for refund $response = $velocityProcessor->returnById(array('amount' => $refund_amount, 'TransactionId' => $transaction_id)); if (is_array($response) && !empty($response) && isset($response['Status']) && $response['Status'] == 'Successful') { $xml = VelocityXmlCreator::returnByIdXML(number_format($refund_amount, 2, '.', ''), $transaction_id); // got ReturnById xml object. $req = $xml->saveXML(); /* save the returnbyid response into 'zen_velocity_transactions' custom table.*/ $this->db->query("insert into " . DB_PREFIX . "velocity_transactions (transaction_id, transaction_status, order_id, request_obj, response_obj) values('" . $response['TransactionId'] . "', '" . $response['TransactionState'] . "', '" . $this->request->post['order_id'] . "', '" . serialize($req) . "', '" . serialize($response) . "')"); $json['success'] .= 'Refund has been done successfully, txnid : ' . $response['TransactionId']; //order status pending code is 1 $this->model_payment_velocitycreditcard->addOrderHistory($this->request->post['order_id'], 11, "Velocity Txn id" . $response['TransactionId'] . "<br>Txn status is " . $response['TransactionState'] . " <br> Amount is " . $refund_amount); } else { if (is_array($response) && !empty($response)) { $json['error'] .= $response['StatusMessage']; } else { if (is_string($response)) { $json['error'] .= $response; } else { $json['error'] .= 'Unknown Error please contact the site admin'; } } } } catch (Exception $e) { $json['error'] .= $e->getMessage(); } } else { $json['error'] .= 'Refund amount can not be greater than ' . $sub_total . ' + shipping.'; } $this->response->setOutput(json_encode($json)); }