예제 #1
0
 public function saveResponse()
 {
     $dbTrans = PaycardLib::paycard_db();
     $finishQ = sprintf("UPDATE PaycardTransactions\n                            SET responseDatetime='%s',\n                                seconds=%f,\n                                commErr=%d,\n                                httpCode=%d,\n                                validResponse=%d,\n                                xResultCode=%d,\n                                xApprovalNumber='%s',\n                                xResponseCode=%d,\n                                xResultMessage='%s',\n                                xTransactionID='%s',\n                                xBalance='%s',\n                                xToken='%s',\n                                xProcessorRef='%s',\n                                xAcquirerRef='%s'\n                            WHERE paycardTransactionID=%d", $this->now, $this->curlTime, $this->curlErr, $this->curlHttp, $this->normalizedCode, $this->responseCode, $this->approvalNum, $this->resultCode, $this->resultMsg, $this->transactionID, $this->balance, $this->token['record'], $this->token['proc'], $this->token['acq'], $this->request->last_paycard_transaction_id);
     $throw = false;
     if (!$dbTrans->query($finishQ)) {
         $throw = new Exception('Error updating PaycardTransactions with response data');
     }
     if ($dbTrans->table_exists('efsnetRequest')) {
         try {
             if (!empty($this->token['record'])) {
                 $this->legacyToken($dbTrans);
             }
             if ($this->request instanceof PaycardVoidRequest) {
                 $this->legacyVoid($dbTrans);
             } elseif ($this->request instanceof PaycardGiftRequest) {
                 // pass; no legacy table
             } else {
                 $this->legacySave($dbTrans);
             }
         } catch (Exception $ex) {
             if ($throw === false) {
                 $throw = $ex;
             }
         }
     }
     // delay throwing until both saves have been attempted
     if ($throw !== false) {
         throw $throw;
     }
 }
예제 #2
0
 public function findOriginal()
 {
     $dbTrans = PaycardLib::paycard_db();
     $sql = 'SELECT refNum,
                 xTransactionID,
                 amount,
                 xToken as token,
                 xProcessorRef as processData,
                 xAcquirerRef AS acqRefData,
                 xApprovalNumber,
                 transType AS mode
             FROM PaycardTransactions
             WHERE dateID=' . $this->today . '
                 AND empNo=' . $this->cashierNo . '
                 AND registerNo=' . $this->original[1] . '
                 AND transNo=' . $this->original[2] . '
                 AND transID=' . $this->transID;
     $res = $dbTrans->query($sql);
     if ($res === false || $dbTrans->numRows($res) != 1) {
         throw new Exception('Could not locate original transaction');
     }
     return $dbTrans->fetchRow($res);
 }
예제 #3
0
 public function updateCardInfo($pan, $name, $issuer)
 {
     $this->setPAN($pan);
     $this->cardholder = $name;
     $this->issuer = $issuer;
     $dbTrans = PaycardLib::paycard_db();
     $upP = $dbTrans->prepare('
         UPDATE PaycardTransactions
         SET PAN=?,
             issuer=?,
             name=?
         WHERE paycardTransactionID=?
     ');
     $dbTrans->execute($upP, array($this->pan, $this->issuer, $this->cardholder, $this->last_paycard_transaction_id));
 }
예제 #4
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;
     }
 }
예제 #5
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);
 }
예제 #6
0
 function send_void()
 {
     // initialize
     $dbTrans = PaycardLib::paycard_db();
     if (!$dbTrans) {
         PaycardLib::paycard_reset();
         return $this->setErrorMsg(PaycardLib::PAYCARD_ERR_NOSEND);
     }
     $request = new PaycardVoidRequest($this->refnum(CoreLocal::get('paycard_id')));
     $request->setProcessor('AuthDotNot');
     $mode = 'void';
     $cardPAN = $this->trans_pan['pan'];
     $request->setPAN($cardPAN);
     $request->setIssuer(CoreLocal::get("paycard_issuer"));
     $cardExM = substr(CoreLocal::get("paycard_exp"), 0, 2);
     $cardExY = substr(CoreLocal::get("paycard_exp"), 2, 2);
     $cardTr1 = $this->trans_pan['tr1'];
     $cardTr2 = $this->trans_pan['tr2'];
     $request->setCardholder(CoreLocal::get("paycard_name"));
     // x_login and x_tran_key need to
     // be filled in to work
     $postValues = array("x_login" => AUTHDOTNET_LOGIN, "x_tran_key" => AUTHDOTNET_TRANS_KEY, "x_market_type" => "2", "x_device_type" => "5", "cp_version" => "1.0", "x_text_request" => "1", "x_amount" => $request->formattedAmount(), "x_user_ref" => $request->refNum, "x_type" => "VOID", "x_card_num" => $cardPAN, "x_exp_date" => $cardExM . $cardExY);
     try {
         $res = $request->findOriginal();
         $request->saveRequest();
     } catch (Exception $ex) {
         return $this->setErrorMsg(PaycardLib::PAYCARD_ERR_NOSEND);
     }
     $TransactionID = $res['xTransactionID'];
     $postValues["x_ref_trans_id"] = $TransactionID;
     $this->last_request = $request;
     $postData = $this->array2post($postValues);
     $this->GATEWAY = "https://test.authorize.net/gateway/transact.dll";
     return $this->curlSend($postData, 'POST', False);
 }
예제 #7
0
파일: FirstData.php 프로젝트: phpsmith/IS4C
 function send_auth()
 {
     $dbTrans = PaycardLib::paycard_db();
     if (!$dbTrans) {
         PaycardLib::paycard_reset();
         return $this->setErrorMsg(PaycardLib::PAYCARD_ERR_NOSEND);
         // database error, nothing sent (ok to retry)
     }
     $request = new PaycardRequest($this->refnum(CoreLocal::get('paycard_id')));
     $request->setProcessor('FirstData');
     $mode = 'sale';
     $this->trans_pan['pan'] = CoreLocal::get("paycard_PAN");
     $cardPAN = $this->trans_pan['pan'];
     $cardExM = substr(CoreLocal::get("paycard_exp"), 0, 2);
     $cardExY = substr(CoreLocal::get("paycard_exp"), 2, 2);
     $cardTr1 = CoreLocal::get("paycard_tr1");
     $cardTr2 = CoreLocal::get("paycard_tr2");
     $cardTr3 = CoreLocal::get("paycard_tr3");
     $request->setCardholder(CoreLocal::get("paycard_name"));
     $cvv2 = CoreLocal::get("paycard_cvv2");
     if (CoreLocal::get("training") == 1) {
         $cardPAN = "4111111111111111";
         $cardPANmasked = "xxxxxxxxxxxxTEST";
         $cardIssuer = "Visa";
         $cardTr1 = False;
         $cardTr2 = False;
         $request->setCardholder("Just Testing");
         $nextyear = mktime(0, 0, 0, date("m"), date("d"), date("Y") + 1);
         $cardExM = date("m", $nextyear);
         $cardExY = date("y", $nextyear);
     }
     $request->setPAN($cardPAN);
     $request->setIssuer(CoreLocal::get("paycard_issuer"));
     $sendPAN = 0;
     $sendExp = 0;
     $sendTr1 = 0;
     $sendTr2 = 0;
     $magstripe = "";
     if (!$cardTr1 && !$cardTr2) {
         $sendPAN = 1;
         $sendExp = 1;
     }
     if ($cardTr1) {
         $sendTr1 = 1;
         $magstripe .= "%" . $cardTr1 . "?";
     }
     if ($cardTr2) {
         $sendTr2 = 1;
         $magstripe .= ";" . $cardTr2 . "?";
     }
     if ($cardTr2 && $cardTr3) {
         $sendPAN = 1;
         $magstripe .= ";" . $cardTr3 . "?";
     }
     $request->setSent($sendPAN, $sendExp, $sendTr1, $sendTr2);
     try {
         $request->saveRequest();
     } catch (Exception $ex) {
         PaycardLib::paycard_reset();
         return $this->setErrorMsg(PaycardLib::PAYCARD_ERR_NOSEND);
         // internal error, nothing sent (ok to retry)
     }
     $this->last_request = $request;
     $xml = '<fdggwsapi:FDGGWSApiOrderRequest  
          xmlns:v1="http://secure.linkpt.net/fdggwsapi/schemas_us/v1" 
           xmlns:fdggwsapi="http://secure.linkpt.net/fdggwsapi/schemas_us/fdggwsapi"> 
          <v1:Transaction>';
     $xml .= "<v1:CreditCardTxType> \n               <v1:Type>{$mode}</v1:Type> \n              </v1:CreditCardTxType>";
     $xml .= "<v1:CreditCardData> \n               <v1:CardNumber>{$pan}</v1:CardNumber> \n               <v1:ExpMonth>{$cardExM}</v1:ExpMonth> \n               <v1:ExpYear>{$cardExY}</v1:ExpYear> \n               <v1:CardCodeValue>{$cvv2}</v1:CardCodeValue>\n              </v1:CreditCardData>";
     $xml .= "<v1:Payment>\n            <v1:ChargeTotal>" . $request->formattedAmount() . "</v1:ChargeTotal> \n            </v1:Payment>";
     $xml .= "<v1:TransactionDetails>\n            <v1:OrderId>" . $request->refNum . "</v1:OrderId>\n            <v1:Ip>" . filter_input(INPUT_SERVER, 'REMOTE_ADDR') . "</v1:Ip>\n            </v1:TransactionDetails>";
     $xml .= '</v1:Transaction> 
         </fdggwsapi:FDGGWSApiOrderRequest>';
     $this->GATEWAY = "https://ws.firstdataglobalgateway.com/fdggwsapi/services/order.wsdl";
     if ($live == 0) {
         $this->GATEWAY = "https://ws.merchanttest.firstdataglobalgateway.com/fdggwsapi/services/order.wsdl";
     }
     $extraCurlSetup = array(CURLOPT_HTTPAUTH => CURLAUTH_BASIC, CURLOPT_USERPWD => "WS" . FD_STORE_ID . "._.1:" . FD_PASSWD, CURLOPT_SSLCERT => FD_CERT_PATH . "/WS" . FD_STORE_ID . "._.1.pem", CURLOPT_SSLKEY => FD_CERT_PATH . "/WS" . FD_STORE_ID . "._.1.key", CURLOPT_SSLKEYPASSWD => FD_KEY_PASSWD);
     $soaptext = $this->soapify('', array('xml' => $xml), '', False);
     return $this->curlSend($soaptext, 'SOAP', True, $extraCurlSetup);
 }
예제 #8
0
 /**
   Updated for E2E
 */
 private function send_void($skipReversal = False, $domain = "w1.mercurypay.com")
 {
     // initialize
     $dbTrans = PaycardLib::paycard_db();
     if (!$dbTrans) {
         PaycardLib::paycard_reset();
         return $this->setErrorMsg(PaycardLib::PAYCARD_ERR_NOSEND);
     }
     if ($skipReversal) {
         CoreLocal::set("MercuryE2ESkipReversal", true);
     } else {
         CoreLocal::set("MercuryE2ESkipReversal", false);
     }
     $request = new PaycardVoidRequest($this->refnum(CoreLocal::get('paycard_id')));
     $request->setProcessor('MercuryE2E');
     $request->setMode('VoidSaleByRecordNo');
     $termID = $this->getTermID();
     $password = $this->getPw();
     $mcTerminalID = CoreLocal::get('PaycardsTerminalID');
     if ($mcTerminalID === '') {
         $mcTerminalID = CoreLocal::get('laneno');
     }
     $this->voidTrans = $transID;
     $this->voidRef = CoreLocal::get("paycard_trans");
     try {
         $res = $request->findOriginal();
     } catch (Exception $ex) {
         PaycardLib::paycard_reset();
         return $this->setErrorMsg(PaycardLib::PAYCARD_ERR_NOSEND);
     }
     try {
         $request->saveRequest();
     } catch (Exception $ex) {
         return $this->setErrorMsg(PaycardLib::PAYCARD_ERR_NOSEND);
     }
     $type = 'Credit';
     if (substr($res['mode'], 0, 6) == 'Debit_') {
         $type = 'Debit';
         if (substr($res['mode'], -5) == "_Sale") {
             $mode = 'ReturnByRecordNo';
         } else {
             if (substr($res['mode'], -7) == "_Return") {
                 $mode = 'SaleByRecordNo';
             }
         }
         CoreLocal::set("MercuryE2ESkipReversal", true);
     } else {
         if (substr($res['mode'], -7) == "_Return") {
             $mode = 'VoidReturnByRecordNo';
         }
     }
     $msgXml = "<?xml version=\"1.0\"" . "?" . ">\n            <TStream>\n            <Transaction>\n            <MerchantID>{$termID}</MerchantID>\n            <OperatorID>" . $request->cashierNo . "</OperatorID>\n            <LaneID>{$mcTerminalID}</LaneID>\n            <TranType>{$type}</TranType>\n            <TranCode>{$mode}</TranCode>\n            <InvoiceNo>" . $request->refNum . "</InvoiceNo>\n            <RefNo>" . $res['xTransactionID'] . "</RefNo>\n            <Memo>CORE POS 1.0.0</Memo>\n            <RecordNo>" . $res['token'] . "</RecordNo>\n            <Frequency>OneTime</Frequency>\n            <Amount>\n                <Purchase>" . $request->formattedAmount() . "</Purchase>\n            </Amount>\n            <TransInfo>";
     if (!$skipReversal) {
         $msgXml .= "<AcqRefData>" . $res['acqRefData'] . "</AcqRefData>\n                <ProcessData>" . $res['processData'] . "</ProcessData>";
     }
     $msgXml .= "<AuthCode>" . $res['xApprovalNumber'] . "</AuthCode>\n            </TransInfo>\n            </Transaction>\n            </TStream>";
     $soaptext = $this->soapify("CreditTransaction", array("tran" => $msgXml, "pw" => $password), "http://www.mercurypay.com");
     if (CoreLocal::get("training") == 1) {
         $this->GATEWAY = "https://w1.mercurydev.net/ws/ws.asmx";
     } else {
         $this->GATEWAY = "https://{$domain}/ws/ws.asmx";
     }
     return $this->curlSend($soaptext, 'SOAP');
 }