Exemple #1
0
 public function changeAmount($amt)
 {
     $this->amount = $amt;
     $dbTrans = PaycardLib::paycard_db();
     $upQ = sprintf('UPDATE PaycardTransactions
                     SET amount=%.2f
                     WHERE paycardTransactionID=%d', $amt, $this->last_paycard_transaction_id);
     $dbTrans->query($upQ);
     $sql = sprintf("UPDATE efsnetRequest SET amount=%f WHERE " . $dbTrans->identifier_escape('date') . "=%d \n            AND cashierNo=%d AND laneNo=%d AND transNo=%d\n            AND transID=%d", $amt, $this->today, $this->cashierNo, $this->laneNo, $this->transNo, $this->transID);
     if ($dbTrans->table_exists('efsnetRequest')) {
         PaycardLib::paycard_db_query($sql, $dbTrans);
     }
 }
Exemple #2
0
 private function send_void()
 {
     // initialize
     $dbTrans = PaycardLib::paycard_db();
     if (!$dbTrans) {
         PaycardLib::paycard_reset();
         return $this->setErrorMsg(PaycardLib::PAYCARD_ERR_NOSEND);
     }
     // prepare data for the void request
     $today = date('Ymd');
     // numeric date only, it goes in an 'int' field as part of the primary key
     $now = date('Y-m-d H:i:s');
     // new timestamp
     $cashierNo = CoreLocal::get("CashierNo");
     $laneNo = CoreLocal::get("laneno");
     $transNo = CoreLocal::get("transno");
     $transID = CoreLocal::get("paycard_id");
     $amount = CoreLocal::get("paycard_amount");
     $amountText = number_format(abs($amount), 2, '.', '');
     $mode = 'void';
     $manual = CoreLocal::get("paycard_manual") ? 1 : 0;
     $this->trans_pan['pan'] = CoreLocal::get("paycard_PAN");
     $cardPAN = $this->trans_pan['pan'];
     $cardPANmasked = PaycardLib::paycard_maskPAN($cardPAN, 0, 4);
     $cardIssuer = CoreLocal::get("paycard_issuer");
     $cardExM = substr(CoreLocal::get("paycard_exp"), 0, 2);
     $cardExY = substr(CoreLocal::get("paycard_exp"), 2, 2);
     $cardName = CoreLocal::get("paycard_name");
     $refNum = $this->refnum($transID);
     $live = 1;
     $this->voidTrans = $transID;
     $this->voidRef = CoreLocal::get("paycard_trans");
     $temp = explode("-", $this->voidRef);
     $laneNo = $temp[1];
     $transNo = $temp[2];
     $merchantID = GOEMERCH_ID;
     $password = GOEMERCH_PASSWD;
     $gatewayID = GOEMERCH_GATEWAY_ID;
     if (CoreLocal::get("training") == 1) {
         $merchantID = "1264";
         $password = "******";
         $cardPAN = "4111111111111111";
         $gatewayID = "a91c38c3-7d7f-4d29-acc7-927b4dca0dbe";
         $cardPANmasked = "xxxxxxxxxxxxTEST";
         $cardIssuer = "Visa";
         $cardName = "Just Testing";
         $nextyear = mktime(0, 0, 0, date("m"), date("d"), date("Y") + 1);
         $cardExM = date("m", $nextyear);
         $cardExY = date("y", $nextyear);
         $live = 0;
     }
     // look up the TransactionID from the original response (card number and amount should already be in session vars)
     $sql = 'SELECT refNum,
                 xTransactionID
             FROM PaycardTransactions
             WHERE dateID=' . $today . '
                 AND empNo=' . $cashierNo . '
                 AND registerNo=' . $laneNo . '
                 AND transNo=' . $transNo . '
                 AND transID=' . $transID;
     if (!$dbTrans->table_exists('PaycardTransactions')) {
         $sql = "SELECT refNum,xTransactionID FROM efsnetResponse WHERE " . $dbTrans->identifier_escape('date') . "='" . $today . "'" . " AND cashierNo=" . $cashierNo . " AND laneNo=" . $laneNo . " AND transNo=" . $transNo . " AND transID=" . $transID;
     }
     $result = PaycardLib::paycard_db_query($sql, $dbTrans);
     if (!$result || PaycardLib::paycard_db_num_rows($result) != 1) {
         PaycardLib::paycard_reset();
         return $this->setErrorMsg(PaycardLib::PAYCARD_ERR_NOSEND);
     }
     $res = PaycardLib::paycard_db_fetch_row($result);
     $TransactionID = $res['xTransactionID'];
     /**
       populate a void record in PaycardTransactions
     */
     $initQ = "INSERT INTO PaycardTransactions (\n                    dateID, empNo, registerNo, transNo, transID,\n                    previousPaycardTransactionID, processor, refNum,\n                    live, cardType, transType, amount, PAN, issuer,\n                    name, manual, requestDateTime)\n                  SELECT dateID, empNo, registerNo, transNo, transID,\n                    paycardTransactionID, processor, refNum,\n                    live, cardType, 'VOID', amount, PAN, issuer,\n                    name, manual, " . $dbTrans->now() . "\n                  FROM PaycardTransactions\n                  WHERE\n                    dateID=" . $today . "\n                    AND empNo=" . $cashierNo . "\n                    AND registerNo=" . $laneNo . "\n                    AND transNo=" . $transNo . "\n                    AND transID=" . $transID;
     $initR = $dbTrans->query($initQ);
     if ($initR) {
         $this->last_paycard_transaction_id = $dbTrans->insert_id();
     } else {
         return $this->setErrorMsg(PaycardLib::PAYCARD_ERR_NOSEND);
     }
     $xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
     $xml .= "<TRANSACTION>";
     $xml .= "<FIELDS>";
     $xml .= "<FIELD KEY=\"merchant\">{$merchantID}</FIELD>";
     if ($password != "") {
         $xml .= "<FIELD KEY=\"password\">{$password}</FIELD>";
     }
     $xml .= "<FIELD KEY=\"gateway_id\">{$gatewayID}</FIELD>";
     $xml .= "<FIELD KEY=\"operation_type\">{$mode}</FIELD>";
     $xml .= "<FIELD KEY=\"total_number_transactions\">1</FIELD>";
     $xml .= "<FIELD KEY=\"reference_number1\">{$TransactionID}</FIELD>";
     $xml .= "<FIELD KEY=\"credit_amount1\">{$amountText}</FIELD>";
     $xml .= "</FIELDS>";
     $xml .= "</TRANSACTION>";
     $this->GATEWAY = "https://secure.goemerchant.com/secure/gateway/xmlgateway.aspx";
     return $this->curlSend($xml, 'POST', True);
 }
Exemple #3
0
 public static function notVoided($trans, $id)
 {
     $dbTrans = PaycardLib::paycard_db();
     $today = date('Ymd');
     $sql = "SELECT transID \n                FROM PaycardTransactions \n                WHERE dateID=" . $today . "\n                    AND empNo=" . $trans[0] . "\n                    AND registerNo=" . $trans[1] . "\n                    AND transNo=" . $trans[2] . "\n                    AND transID=" . $id . "\n                    AND transType='VOID'\n                    AND xResultCode=1";
     // @deprecated table 5May14
     if (!$dbTrans->table_exists('PaycardTransactions')) {
         $sql = "SELECT transID FROM efsnetRequestMod WHERE " . $dbTrans->identifier_escape('date') . "=" . $today . " AND cashierNo=" . $trans[0] . " AND laneNo=" . $trans[1] . " AND transNo=" . $trans[2] . " AND transID=" . $id . " AND mode='void' AND xResponseCode=0";
     }
     $search = PaycardLib::paycard_db_query($sql, $dbTrans);
     $voided = PaycardLib::paycard_db_num_rows($search);
     if ($voided > 0) {
         PaycardLib::paycard_reset();
         return PaycardLib::paycard_errBox(PaycardLib::PAYCARD_TYPE_CREDIT, "Unable to Void", "Card transaction already voided", "[clear] to cancel");
     } else {
         return true;
     }
 }
Exemple #4
0
 /**
   Updated for E2E
 */
 private function handleResponseVoid($authResult)
 {
     $resp = $this->desoapify("CreditTransactionResult", $authResult["response"]);
     $xml = new xmlData($resp);
     $dbTrans = PaycardLib::paycard_db();
     $request = $this->last_request;
     $this->last_paycard_transaction_id = $request->last_paycard_transaction_id;
     $response = new PaycardResponse($request, $authResult);
     $validResponse = $xml->isValid() ? 1 : 0;
     $responseCode = $xml->get("CMDSTATUS");
     if ($responseCode) {
         $responseCode = $this->responseToNumber($responseCode);
     } else {
         $validResponse = -3;
     }
     $response->setResponseCode($responseCode);
     $resultCode = $xml->get_first("DSIXRETURNCODE");
     $response->setResultCode($resultCode);
     $resultMsg = $xml->get_first("CMDSTATUS");
     if ($resultMsg) {
         $rMsg = $resultMsg;
     }
     $response->setResultMsg($resultMsg);
     $response->setValid($validResponse);
     $normalized = $validResponse == 0 ? 4 : 0;
     if ($responseCode == 1) {
         $normalized = 1;
     } else {
         if ($responseCode == 2) {
             $normalized = 2;
         } else {
             if ($responseCode == 0) {
                 $normalized = 3;
             }
         }
     }
     $response->setNormalizedCode($normalized);
     $response->setToken($xml->get_first('RECORDNO'), $xml->get_first('PROCESSDATA'), $xml->get_first('ACQREFDATA'));
     try {
         $response->saveResponse();
     } catch (Exception $ex) {
     }
     // void still happened even if logging the result failed
     $tokenRef = $xml->get_first("INVOICENO");
     $sql = sprintF("DELETE FROM efsnetTokens WHERE refNum='%s'", $tokenRef);
     if ($dbTrans->table_exists('efsnetTokens')) {
         PaycardLib::paycard_db_query($sql, $dbTrans);
     }
     if ($authResult['curlErr'] != CURLE_OK || $authResult['curlHTTP'] != 200) {
         if ($authResult['curlHTTP'] == '0') {
             CoreLocal::set("boxMsg", "No response from processor<br />\n                            The transaction did not go through");
             return PaycardLib::PAYCARD_ERR_PROC;
         }
         return $this->setErrorMsg(PaycardLib::PAYCARD_ERR_COMM);
     }
     switch (strtoupper($xml->get("CMDSTATUS"))) {
         case 'APPROVED':
             return PaycardLib::PAYCARD_ERR_OK;
         case 'DECLINED':
             // if declined, try again with a regular Void op
             // and no reversal information
             $skipReversal = CoreLocal::get("MercuryE2ESkipReversal");
             if ($skipReversal == true) {
                 CoreLocal::set("MercuryE2ESkipReversal", false);
             } else {
                 return $this->send_void(true);
             }
         case 'ERROR':
             CoreLocal::set("boxMsg", "");
             $texts = $xml->get_first("TEXTRESPONSE");
             CoreLocal::set("boxMsg", "Error: {$texts}");
             break;
         default:
             CoreLocal::set("boxMsg", "An unknown error occurred<br />at the gateway");
     }
     return PaycardLib::PAYCARD_ERR_PROC;
 }