Example #1
0
 public function __construct($refnum)
 {
     parent::__construct($refnum);
     $this->type = 'PrePaid';
 }
Example #2
0
 function send_auth()
 {
     // initialize
     $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('AuthDotNot');
     $mode = $request->amount < 0 ? 'refund' : 'tender';
     $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 & 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_test_request" => "0", "x_amount" => $request->formattedAmount(), "x_user_ref" => $request->refNum);
     if (CoreLocal::get("training") == 1) {
         $postValues["x_test_request"] = "1";
     }
     if ($mode == "refund") {
         $postValues["x_type"] = "CREDIT";
     } else {
         $postValues["x_type"] = "AUTH_CAPTURE";
     }
     if (!$cardTr1 && !$cardTr2 || $mode == "refund") {
         $postValues["x_card_num"] = $cardPAN;
         $postValues["x_exp_date"] = $cardExM . $cardExY;
         $request->setSent(1, 1, 0, 0);
     } elseif ($cardTr1) {
         $postValues["x_track1"] = $cardTr1;
         $request->setSent(0, 0, 1, 0);
     } elseif ($cardTr2) {
         $postValues["x_track2"] = $cardTr2;
         $request->setSent(0, 0, 0, 1);
     }
     try {
         $request->saveRequest();
     } catch (Exception $ex) {
         return $this->setErrorMsg(PaycardLib::PAYCARD_ERR_NOSEND);
         // internal error, nothing sent (ok to retry)
     }
     $this->last_request = $request;
     $postData = $this->array2post($postValues);
     $this->GATEWAY = "https://test.authorize.net/gateway/transact.dll";
     return $this->curlSend($postData, 'POST', False);
 }
Example #3
0
 /**
   Examine XML response from Datacap transaction,
   log results, determine next step
   @return [int] PaycardLib error code
 */
 public function handleResponseDataCap($xml)
 {
     $rawXml = $xml;
     $ref = $this->refnum(CoreLocal::get('paycard_id'));
     if (CoreLocal::get('LastEmvReqType') == 'void') {
         $request = new PaycardVoidRequest($ref);
     } elseif (CoreLocal::get('LastEmvReqType') == 'gift') {
         $request = new PaycardGiftRequest($ref);
     } else {
         $request = new PaycardRequest($ref);
     }
     $id_set = CoreLocal::get('LastEmvPcId');
     $request->last_paycard_transaction_id = $id_set[0];
     $request->last_req_id = $id_set[1];
     $this->last_paycard_transaction_id = $request->last_paycard_transaction_id;
     $response = new PaycardResponse($request, array('curlTime' => 0, 'curlErr' => 0, 'curlHTTP' => 200));
     $xml = new BetterXmlData($xml);
     $validResponse = 1;
     $responseCode = $xml->query('/RStream/CmdResponse/CmdStatus');
     $resultMsg = $responseCode;
     if ($responseCode) {
         $responseCode = $this->responseToNumber($responseCode);
     } else {
         $validResponse = -3;
     }
     $response->setResponseCode($responseCode);
     $resultCode = $xml->query('/RStream/CmdResponse/DSIXReturnCode');
     $response->setResultCode($resultCode);
     $apprNumber = $xml->query('/RStream/TranResponse/AuthCode');
     $response->setApprovalNum($apprNumber);
     $rMsg = $resultMsg;
     if ($resultMsg) {
         $rMsg = $resultMsg;
         if ($responseCode == 1) {
             // approved
             if ($apprNumber) {
                 $rMsg .= ' ' . $apprNumber;
             }
         } else {
             $processor_text = $xml->query('/RStream/CmdResponse/TextResponse');
             if ($processor_text) {
                 $rMsg = $processor_text;
             }
         }
     }
     $response->setResultMsg($rMsg);
     $xTransID = $xml->query('/RStream/TranResponse/RefNo');
     $response->setTransactionID($xTransID);
     if ($xTransID === false) {
         $validResponse = -3;
     }
     $issuer = $xml->query('/RStream/TranResponse/CardType');
     $resp_balance = $xml->query('/RStream/TranResponse/Balance');
     $ebtbalance = 0;
     if ($issuer == 'Foodstamp' && $resp_balance !== false) {
         $issuer = 'EBT';
         CoreLocal::set('EbtFsBalance', $resp_balance);
         $ebtbalance = $resp_balance;
     } elseif ($issuer == 'Cash' && $resp_balance !== false) {
         $issuer = 'EBT';
         CoreLocal::set('EbtCaBalance', $resp_balance);
         $ebtbalance = $resp_balance;
     } elseif ($xml->query('/RStream/TranResponse/TranType') == 'PrePaid' && $resp_balance !== false) {
         $issuer = 'NCG';
         $ebtbalance = $resp_balance;
         CoreLocal::set('GiftBalance', $resp_balance);
     }
     $response->setBalance($ebtbalance);
     $dbc = Database::tDataConnect();
     $tran_code = $xml->query('/RStream/TranResponse/TranCode');
     if (substr($tran_code, 0, 3) == 'EMV' && strpos($rawXml, 'x____') !== false) {
         CoreLocal::set('EmvSignature', true);
     } else {
         CoreLocal::set('EmvSignature', false);
     }
     if (substr($tran_code, 0, 3) == 'EMV') {
         $printData = $xml->query('/RStream/PrintData/*', false);
         if (strlen($printData) > 0) {
             $receiptID = $transID;
             if (CoreLocal::get('paycard_mode') == PaycardLib::PAYCARD_MODE_VOID) {
                 $receiptID++;
             }
             $printP = $dbc->prepare('
                 INSERT INTO EmvReceipt
                     (dateID, tdate, empNo, registerNo, transNo, transID, content)
                 VALUES 
                     (?, ?, ?, ?, ?, ?, ?)');
             $dbc->execute($printP, array(date('Ymd'), date('Y-m-d H:i:s'), $cashierNo, $laneNo, $transNo, $receiptID, $printData));
         }
     }
     // put normalized value in validResponse column
     $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->query('/RStream/TranResponse/RecordNo'), $xml->query('/RStream/TranResponse/ProcessData'), $xml->query('/RStream/TranResponse/AcqRefData'));
     try {
         $response->saveResponse();
     } catch (Exception $ex) {
         echo $ex->getMessage() . "\n";
     }
     /** handle partial auth **/
     if ($responseCode == 1) {
         $amt = $xml->query('/RStream/TranResponse/Amount/Authorize');
         if ($amt != abs(CoreLocal::get("paycard_amount"))) {
             $request->changeAmount($amt);
             CoreLocal::set("paycard_amount", $amt);
             CoreLocal::set("paycard_partial", True);
             UdpComm::udpSend('goodBeep');
         }
     }
     $pan = $xml->query('/RStream/TranResponse/AcctNo');
     $resp_name = $xml->query('/RStream/TranResponse/CardholderName');
     $name = $resp_name ? $resp_name : 'Cardholder';
     $issuer = $xml->query('/RStream/TranResponse/CardType');
     $request->updateCardInfo($pan, $name, $issuer);
     switch (strtoupper($xml->query('/RStream/CmdResponse/CmdStatus'))) {
         case 'APPROVED':
             return PaycardLib::PAYCARD_ERR_OK;
         case 'DECLINED':
             if ($issuer == 'EBT') {
                 // if EBT is declined but lists a balance less than the
                 // requested authorization, it may be possible to
                 // charge the card for a less amount.
                 TransRecord::addcomment("");
                 CoreLocal::set('boxMsg', sprintf('Card Balance: $%.2f', $ebtbalance));
             } elseif (substr($tran_code, 0, 3) == 'EMV') {
                 CoreLocal::set('paycard_amount', 0);
                 return PaycardLib::PAYCARD_ERR_OK;
             }
             UdpComm::udpSend('termReset');
             CoreLocal::set('ccTermState', 'swipe');
             // intentional fallthrough
         // intentional fallthrough
         case 'ERROR':
             CoreLocal::set("boxMsg", "");
             $texts = $xml->query('/RStream/CmdResponse/TextResponse');
             CoreLocal::set("boxMsg", "Error: {$texts}");
             $dsix = $xml->query('/RStream/CmdResponse/DSIXReturnCode');
             if ($dsix == '001007' || $dsix == '003007' || $dsix == '003010') {
                 /* These error codes indicate a potential connectivity
                  * error mid-transaction. Do not add a comment record to
                  * the transaction to avoid incrementing InvoiceNo
                  */
             } else {
                 TransRecord::addcomment("");
             }
             break;
         default:
             CoreLocal::set("boxMsg", "An unknown error occurred<br />at the gateway");
             TransRecord::addcomment("");
     }
     return PaycardLib::PAYCARD_ERR_PROC;
 }
Example #4
0
 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);
 }
Example #5
0
 public function __construct($refnum)
 {
     parent::__construct($refnum);
     $original = CoreLocal::get('paycard_trans');
     $this->original = explode('-', $original);
 }