示例#1
0
 public function purchase()
 {
     // Note, we used to add extensions/ to include_path here, that should either
     // be standardized in Loader or we need to load more files here to make
     // up for whatever the PayPal code would otherwise try to load
     require_once 'extensions/PayPal.php';
     require_once 'extensions/PayPal/Profile/Handler/Array.php';
     require_once 'extensions/PayPal/Profile/API.php';
     require_once 'extensions/PayPal/Type/DoDirectPaymentRequestType.php';
     require_once 'extensions/PayPal/Type/DoDirectPaymentRequestDetailsType.php';
     require_once 'extensions/PayPal/Type/DoDirectPaymentResponseType.php';
     //  Add all of the types
     require_once 'extensions/PayPal/Type/BasicAmountType.php';
     require_once 'extensions/PayPal/Type/PaymentDetailsType.php';
     require_once 'extensions/PayPal/Type/AddressType.php';
     require_once 'extensions/PayPal/Type/CreditCardDetailsType.php';
     require_once 'extensions/PayPal/Type/PayerInfoType.php';
     require_once 'extensions/PayPal/Type/PersonNameType.php';
     require_once 'extensions/PayPal/CallerServices.php';
     $environment = $this->live ? 'live' : 'sandbox';
     $dp_request = new DoDirectPaymentRequestType();
     $OrderTotal = new BasicAmountType();
     $OrderTotal->setattr('currencyID', 'USD');
     $OrderTotal->setval($this->amount, 'iso-8859-1');
     $PaymentDetails = new PaymentDetailsType();
     $PaymentDetails->setOrderTotal($OrderTotal);
     $shipTo = new AddressType();
     $shipTo->setName($this->firstName . ' ' . $this->lastName);
     $shipTo->setStreet1($this->address1);
     $shipTo->setStreet2($this->address2);
     $shipTo->setCityName($this->city);
     $shipTo->setStateOrProvince($this->state);
     $shipTo->setCountry('US');
     $shipTo->setPostalCode($this->zip);
     $PaymentDetails->setShipToAddress($shipTo);
     $dp_details = new DoDirectPaymentRequestDetailsType();
     $dp_details->setPaymentDetails($PaymentDetails);
     // Credit Card info
     $card_details = new CreditCardDetailsType();
     $card_details->setCreditCardType($this->creditCardType);
     $card_details->setCreditCardNumber($this->creditCardNumber);
     $card_details->setExpMonth($this->expirationMonth);
     $card_details->setExpYear($this->expirationYear);
     $card_details->setCVV2($this->cvv2Number);
     $payer = new PayerInfoType();
     $person_name = new PersonNameType();
     $person_name->setFirstName($this->firstName);
     $person_name->setLastName($this->lastName);
     $payer->setPayerName($person_name);
     $payer->setPayerCountry('US');
     $payer->setAddress($shipTo);
     $card_details->setCardOwner($payer);
     $dp_details->setCreditCard($card_details);
     $dp_details->setIPAddress($_SERVER['SERVER_ADDR']);
     $dp_details->setPaymentAction('Sale');
     $dp_request->setDoDirectPaymentRequestDetails($dp_details);
     $handler = ProfileHandler_Array::getInstance(array('username' => $this->apiUsername, 'certificateFile' => null, 'subject' => null, 'environment' => $environment));
     $pid = ProfileHandler::generateID();
     $profile = new APIProfile($pid, $handler);
     $profile->setAPIUsername($this->apiUsername);
     $profile->setAPIPassword($this->apiPassword);
     $profile->setSignature($this->apiSignature);
     $profile->setEnvironment($environment);
     $caller = new CallerServices($profile);
     $response = $caller->DoDirectPayment($dp_request);
     if (PayPal::isError($response)) {
         Site::getPage()->addWarning($response->message);
         return false;
     }
     if ($response->Ack == 'Success') {
         return true;
     }
     if (is_array($response->Errors)) {
         foreach ($response->Errors as $error) {
             Site::getPage()->addWarning($error->LongMessage);
         }
     } else {
         Site::getPage()->addWarning($response->Errors->LongMessage);
     }
     return false;
 }
示例#2
0
 function ipn(&$BL)
 {
     if ($_POST['pp'] == "paypalwpp") {
         $this->item_number = $_POST['item_number'];
         $this->transaction_id = 0;
         $this->payment_status = '';
         $pp_vals = $BL->pp_vals->getByKey("paypalwpp");
         $temp = $BL->orphan_orders->hasAnyOne(array("WHERE `item_number`=" . intval($this->item_number)));
         $O_order = array();
         foreach ($BL->orphan_order_datas->find(array("WHERE `orphan_order_id`=" . intval($temp['orphanorder_id']))) as $data) {
             $O_order[$data['orphan_order_field']] = $data['orphan_order_value'];
         }
         if (count($O_order)) {
             $amount = number_format($O_order['gross_amount'], 2);
         } else {
             $invoice = $BL->invoices->get("WHERE `invoice_no`=" . intval($this->item_number));
             $amount = number_format($invoice[0]['gross_amount'], 2);
         }
         require_once 'PayPal.php';
         require_once 'PayPal/Profile/API.php';
         require_once 'PayPal/Profile/Handler.php';
         require_once 'PayPal/Profile/Handler/Array.php';
         require_once 'PayPal/Type/DoDirectPaymentRequestType.php';
         require_once 'PayPal/Type/DoDirectPaymentRequestDetailsType.php';
         require_once 'PayPal/Type/DoDirectPaymentResponseType.php';
         // Add all of the types
         require_once 'PayPal/Type/BasicAmountType.php';
         require_once 'PayPal/Type/PaymentDetailsType.php';
         require_once 'PayPal/Type/AddressType.php';
         require_once 'PayPal/Type/CreditCardDetailsType.php';
         require_once 'PayPal/Type/PayerInfoType.php';
         require_once 'PayPal/Type/PersonNameType.php';
         // Ack related constants
         define('ACK_SUCCESS', 'Success');
         define('ACK_SUCCESS_WITH_WARNING', 'SuccessWithWarning');
         // Refund related constants
         define('REFUND_PARTIAL', 'Partial');
         define('REFUND_FULL', 'Full');
         // Profile
         if ($this->demo_mode) {
             define('ENVIRONMENT', 'sandbox');
         } else {
             define('ENVIRONMENT', 'live');
         }
         define('UNITED_STATES', 'US');
         $dummy = @new APIProfile();
         $environments = $dummy->getValidEnvironments();
         $handler =& ProfileHandler_Array::getInstance(array('username' => $pp_vals['paypalwpp_apiUsername'], 'certificateFile' => null, 'subject' => null, 'environment' => ENVIRONMENT));
         $pid = ProfileHandler::generateID();
         $profile = new APIProfile($pid, $handler);
         $profile->setAPIUsername($pp_vals['paypalwpp_apiUsername']);
         $profile->setAPIPassword($pp_vals['paypalwpp_apiPassword']);
         if (is_file($pp_vals['paypalwpp_certFile'])) {
             $profile->setCertificateFile($pp_vals['paypalwpp_certFile']);
         }
         $profile->setSignature($pp_vals['paypalwpp_signature']);
         $profile->setEnvironment(ENVIRONMENT);
         $caller =& PayPal::getCallerServices($profile);
         $_SESSION['APIProfile'] = $profile;
         $_SESSION['caller'] = $caller;
         $dp_request =& PayPal::getType('DoDirectPaymentRequestType');
         /**
          * Get posted request values
          */
         $paymentType = 'Sale';
         $firstName = $_POST['paypalwpp_firstName'];
         $lastName = $_POST['paypalwpp_lastName'];
         $creditCardType = $_POST['paypalwpp_creditCardType'];
         $creditCardNumber = $_POST['paypalwpp_creditCardNumber'];
         $expDateMonth = $_POST['paypalwpp_expDateMonth'];
         $padDateMonth = str_pad($expDateMonth, 2, '0', STR_PAD_LEFT);
         $expDateYear = $_POST['paypalwpp_expDateYear'];
         $cvv2Number = $_POST['paypalwpp_cvv2Number'];
         $address1 = $_POST['paypalwpp_address1'];
         $address2 = $_POST['paypalwpp_address2'];
         $city = $_POST['paypalwpp_city'];
         $state = $_POST['paypalwpp_state'];
         $zip = $_POST['paypalwpp_zip'];
         $amount = $amount;
         // Populate SOAP request information
         // Payment details
         $OrderTotal =& PayPal::getType('BasicAmountType');
         $OrderTotal->setattr('currencyID', 'USD');
         $OrderTotal->setval($amount, '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(UNITED_STATES);
         $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(UNITED_STATES);
         $payer->setAddress($shipTo);
         $card_details->setCardOwner($payer);
         $dp_details->setCreditCard($card_details);
         $dp_details->setIPAddress($_SERVER['SERVER_ADDR']);
         $dp_details->setPaymentAction($paymentType);
         $dp_request->setDoDirectPaymentRequestDetails($dp_details);
         $caller =& PayPal::getCallerServices($profile);
         $response = $caller->DoDirectPayment($dp_request);
         $ack = $response->getAck();
         $this->payment_status = $ack;
         $this->transaction_id = $response->TransactionID;
         if (!empty($this->item_number) && !empty($this->transaction_id) && ($this->payment_status == ACK_SUCCESS || $this->payment_status == ACK_SUCCESS_WITH_WARNING)) {
             $BL->invoices->processTransaction($this->item_number, $this->transaction_id);
             return true;
         }
     }
     return false;
 }
示例#3
0
 function refundPayment($transaction_id, $type = 'Full', $amount = '', $note = '')
 {
     if (!$this->setEnvironment()) {
         return false;
     }
     if (!$transaction_id) {
         return false;
     }
     if (!$note) {
         $note = sprintf('Refund %s', $transaction_id);
     }
     $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);
     $ref_details =& PayPal::getType('RefundTransactionRequestType');
     $ref_details->setVersion("51.0");
     $transactionID = filter_var($transaction_id, FILTER_SANITIZE_STRING);
     $refundType = filter_var($type, FILTER_SANITIZE_STRING);
     $refundAmount = filter_var($amount, FILTER_SANITIZE_STRING);
     $refundNote = filter_var($note, FILTER_SANITIZE_STRING);
     $ref_details->setTransactionID($transactionID, 'iso-8859-1');
     $ref_details->setRefundType($refundType, 'iso-8859-1');
     $ref_details->setAmount($refundAmount, 'iso-8859-1');
     $ref_details->setMemo($refundNote, 'iso-8859-1');
     $caller =& PayPal::getCallerServices($profile);
     $this->logger->_log("Refund Profile: " . print_r($profile, true) . "");
     $this->logger->_log("Refund Request Details: " . print_r($ref_details, true) . "");
     $response = $caller->RefundTransaction($ref_details);
     $this->logger->_log("Refund Response Details: " . print_r($response, true) . "");
     $ack = $response->getAck();
     $ref_return = array();
     if ($ack == 'Success') {
         $ref_return = array('success' => array('field' => 'Refund Processing', 'desc' => $response));
     } else {
         $ref_return = array('error' => array('field' => 'Refund Processing', 'desc' => $response->Errors->LongMessage, 'short_message' => $response->Errors->ShortMessage, 'error_code' => $response->Errors->ErrorCode, 'correlation_id' => $response->CorrelationID));
     }
     return $ref_return;
 }