Ejemplo n.º 1
0
 function processPayment()
 {
     dprint("processPayment()");
     if (!$this->setEnvironment()) {
         print "Fail to set environment!";
         return false;
     }
     // return sucess and set relevant data from the transaction to variables belonging to the class
     $errors = array();
     $pp_return = array();
     $_TransactionKey = filter_var($_POST['transactionKey'], FILTER_SANITIZE_STRING);
     if ($_TransactionKey == '') {
         $pp_return = array('error' => array('field' => 'key', 'desc' => _('Missing transaction key')));
     } else {
         if (CreditCardProcessor::transaction_exists($_TransactionKey) == true) {
             $pp_return = array('error' => array('field' => 'reload', 'desc' => _('Transaction already exists. Do not press the browser reload button.')));
         } else {
             $pid = ProfileHandler::generateID();
             $handler =& ProfileHandler_Array::getInstance(array('username' => $this->pp_username, 'certificateFile' => null, 'subject' => null, 'environment' => $this->environment));
             $profile = new APIProfile($pid, $handler);
             $profile->setAPIUsername($this->pp_username);
             $profile->setAPIPassword($this->pricepp_pass);
             $profile->setSignature($this->pp_signature);
             $profile->setCertificateFile(null);
             $profile->setEnvironment($this->environment);
             $dp_request =& PayPal::getType('DoDirectPaymentRequestType');
             $paymentType = $this->transaction_type;
             $firstName = filter_var($_POST['firstName'], FILTER_SANITIZE_STRING);
             $lastName = filter_var($_POST['lastName'], FILTER_SANITIZE_STRING);
             $emailAddress = filter_var($_POST['emailAddress'], FILTER_SANITIZE_EMAIL);
             $creditCardType = filter_var($_POST['creditCardType'], FILTER_SANITIZE_STRING);
             $creditCardNumber = filter_var($_POST['creditCardNumber'], FILTER_SANITIZE_NUMBER_INT);
             $expDateMonth = filter_var($_POST['expDateMonth'], FILTER_SANITIZE_NUMBER_INT);
             // Month must be padded with leading zero
             $padDateMonth = str_pad($expDateMonth, 2, '0', STR_PAD_LEFT);
             $expDateYear = filter_var($_POST['expDateYear'], FILTER_SANITIZE_NUMBER_INT);
             $cvv2Number = filter_var($_POST['cvv2Number'], FILTER_SANITIZE_STRING);
             $address1 = filter_var($_POST['address1'], FILTER_SANITIZE_STRING);
             $address2 = filter_var($_POST['address2'], FILTER_SANITIZE_STRING);
             $city = filter_var($_POST['city'], FILTER_SANITIZE_STRING);
             $state = filter_var($_POST['state'], FILTER_SANITIZE_STRING);
             $zip = filter_var($_POST['zip'], FILTER_SANITIZE_STRING);
             $country = filter_var($_POST['country'], FILTER_SANITIZE_STRING);
             $this->total = $_POST['amount'];
             // Populate SOAP request information
             // Payment details
             $OrderTotal =& PayPal::getType('BasicAmountType');
             $OrderTotal->setattr('currencyID', 'USD');
             $OrderTotal->setval($this->total, 'iso-8859-1');
             $PaymentDetails =& PayPal::getType('PaymentDetailsType');
             $PaymentDetails->setOrderTotal($OrderTotal);
             $shipTo =& PayPal::getType('AddressType');
             $shipTo->setName($firstName . ' ' . $lastName);
             $shipTo->setStreet1($address1);
             $shipTo->setStreet2($address2);
             $shipTo->setCityName($city);
             $shipTo->setStateOrProvince($state);
             $shipTo->setCountry($country);
             $shipTo->setPostalCode($zip);
             $PaymentDetails->setShipToAddress($shipTo);
             $dp_details =& PayPal::getType('DoDirectPaymentRequestDetailsType');
             $dp_details->setPaymentDetails($PaymentDetails);
             // Credit Card info
             $card_details =& PayPal::getType('CreditCardDetailsType');
             $card_details->setCreditCardType($creditCardType);
             $card_details->setCreditCardNumber($creditCardNumber);
             $card_details->setExpMonth($padDateMonth);
             $card_details->setExpYear($expDateYear);
             $card_details->setCVV2($cvv2Number);
             $payer =& PayPal::getType('PayerInfoType');
             $person_name =& PayPal::getType('PersonNameType');
             $person_name->setFirstName($firstName);
             $person_name->setLastName($lastName);
             $payer->setPayerName($person_name);
             $payer->setPayerCountry($country);
             $payer->setAddress($shipTo);
             $card_details->setCardOwner($payer);
             $dp_details->setCreditCard($card_details);
             $dp_details->setIPAddress($_SERVER['SERVER_ADDR']);
             // set our session ID to be sent with PayPal Request
             if ($this->note) {
                 $_id = $this->note . ' ' . $_TransactionKey;
             } else {
                 $_id = $_TransactionKey;
             }
             $dp_details->setMerchantSessionId($_id);
             //$dp_details->setMerchantSessionId($_TransactionKey);
             $dp_details->setPaymentAction($paymentType);
             $dp_request->setDoDirectPaymentRequestDetails($dp_details);
             $caller =& PayPal::getCallerServices($profile);
             $this->logger->_log("CC Profile: " . print_r($profile, true) . "");
             $this->logger->_log("Request Details: " . print_r($dp_details, true) . "");
             // Execute SOAP request
             $response = $caller->DoDirectPayment($dp_request);
             $this->logger->_log("Response Details: " . print_r($response, true) . "");
             if (!method_exists($response, 'getAck')) {
                 $error = 'Response is a ' . get_class($response) . ' object:';
                 if (method_exists($response, 'getMessage')) {
                     $_log .= "\n  getMessage() => " . strval($response->getMessage());
                 }
                 /*
                                 foreach(get_object_vars($response) as $k=>$v){
                     $_log.="\n\xA0\xA0$k => ".strval($v);
                 }
                 */
                 // Finish handling the error, etc. For example,
                 $pp_return = array('error' => array('field' => 'Card Processing', 'desc' => 'Unknown Processing Error'));
                 $log = sprintf("Error: SIP Account %s - CC transaction failed to process: %s", $this->account, $_log);
                 syslog(LOG_NOTICE, $log);
             } else {
                 $ack = $response->getAck();
                 if ($ack == "Success") {
                     $pp_return = array('success' => array('field' => 'Card Processing', 'desc' => $response));
                 } else {
                     $pp_return = array('error' => array('field' => 'Card Processing', 'desc' => $response->Errors->LongMessage, 'short_message' => $response->Errors->ShortMessage, 'error_code' => $response->Errors->ErrorCode, 'correlation_id' => $response->CorrelationID, 'card_type' => $creditCardType, 'first_name' => $firstName, 'last_name' => $lastName));
                     $log = sprintf("%s card of %s %s - Transaction %s Error: %s/%s (%s)", $creditCardType, $firstName, $lastName, $response->CorrelationID, $response->Errors->ErrorCode, $response->Errors->ShortMessage, $response->Errors->LongMessage);
                     $this->logger->_log($log);
                 }
             }
         }
     }
     return $pp_return;
 }