/** * Function to process the form * * @access public * @return None */ function postProcess() { // get the submitted form values. $params = $this->controller->exportValues($this->_name); $params['currencyID'] = 'USD'; $params['payment_action'] = 'Sale'; $this->set('amount', $params['amount']); require_once 'CRM/Utils/Payment/PayPal.php'; $paypal =& CRM_Utils_Payment_PayPal::singleton(); //get the button name $buttonName = $this->controller->getButtonName(); if ($buttonName == $this->_expressButtonName) { $this->set('donationMode', 'express'); $donateURL = CRM_Utils_System::url('civicrm/contribute', '_qf_Contribute_display=1'); $params['cancelURL'] = CRM_Utils_System::url('civicrm/contribute/donate', '_qf_Contribute_display=1', true, null, false); $params['returnURL'] = CRM_Utils_System::url('civicrm/contribute/donate', '_qf_Confirm_display=1&rfp=1', true, null, false); $token = $paypal->setExpressCheckout($params); $this->set('token', $token); $paypalURL = "https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token={$token}"; CRM_Utils_System::redirect($paypalURL); } else { $this->set('contributeMode', 'direct'); $params['country'] = 'US'; $params['year'] = $params['credit_card_exp_date']['Y']; $params['month'] = $params['credit_card_exp_date']['M']; $params['ip_address'] = $_SERVER['REMOTE_ADDR']; $paypal->doDirectPayment($params); exit; } }
/** * This function collects all the information from a web/api form and invokes * the relevant payment processor specific functions to perform the transaction * * @param array $params assoc array of input parameters for this transaction * * @return array the result in an nice formatted array (or an error object) * @public */ function doDirectPayment(&$params) { if (!$this->_caller) { return CRM_Utils_Payment_PayPal::error(); } $orderTotal =& Services_PayPal::getType('BasicAmountType'); if (Services_PayPal::isError($orderTotal)) { return CRM_Utils_Payment_PayPal::error($orderTotal); } $orderTotal->setattr('currencyID', $params['currencyID']); $orderTotal->setval($params['amount'], CRM_UTILS_PAYMENT_PAYPAL_CHARSET); $payerName =& Services_PayPal::getType('PersonNameType'); if (Services_PayPal::isError($payerName)) { return CRM_Utils_Payment_PayPal::error($payerName); } $payerName->setLastName($params['last_name'], CRM_UTILS_PAYMENT_PAYPAL_CHARSET); $payerName->setMiddleName($params['middle_name'], CRM_UTILS_PAYMENT_PAYPAL_CHARSET); $payerName->setFirstName($params['first_name'], CRM_UTILS_PAYMENT_PAYPAL_CHARSET); $address =& Services_PayPal::getType('AddressType'); if (Services_PayPal::isError($address)) { return CRM_Utils_Payment_PayPal::error($address); } $address->setStreet1($params['street_address'], CRM_UTILS_PAYMENT_PAYPAL_CHARSET); $address->setCityName($params['city'], CRM_UTILS_PAYMENT_PAYPAL_CHARSET); $address->setStateOrProvince($params['state_province'], CRM_UTILS_PAYMENT_PAYPAL_CHARSET); $address->setPostalCode($params['postal_code'], CRM_UTILS_PAYMENT_PAYPAL_CHARSET); $address->setCountry($params['country'], CRM_UTILS_PAYMENT_PAYPAL_CHARSET); $cardOwner =& Services_PayPal::getType('PayerInfoType'); if (Services_PayPal::isError($cardOwner)) { return CRM_Utils_Payment_PayPal::error($cardOwner); } $cardOwner->setPayer($params['email']); $cardOwner->setAddress($address); $cardOwner->setPayerCountry($params['country'], CRM_UTILS_PAYMENT_PAYPAL_CHARSET); $cardOwner->setPayerName($payerName); $creditCard =& Services_PayPal::getType('CreditCardDetailsType'); if (Services_PayPal::isError($creditCard)) { return CRM_Utils_Payment_PayPal::error($creditCard); } $creditCard->setCardOwner($cardOwner); $creditCard->setCVV2($params['cvv2'], CRM_UTILS_PAYMENT_PAYPAL_CHARSET); $creditCard->setExpYear($params['year'], CRM_UTILS_PAYMENT_PAYPAL_CHARSET); $creditCard->setExpMonth($params['month'], CRM_UTILS_PAYMENT_PAYPAL_CHARSET); $creditCard->setCreditCardNumber($params['credit_card_number'], CRM_UTILS_PAYMENT_PAYPAL_CHARSET); $creditCard->setCreditCardType($params['credit_card_type'], CRM_UTILS_PAYMENT_PAYPAL_CHARSET); $doDirectPaymentRequestDetails =& Services_PayPal::getType('DoDirectPaymentRequestDetailsType'); $paymentDetails =& Services_PayPal::getType('PaymentDetailsType'); if (Services_PayPal::isError($paymentDetails)) { return CRM_Utils_Payment_PayPal::error($paymentDetails); } $paymentDetails->setOrderTotal($orderTotal); $paymentDetails->setInvoiceID($params['invoiceID'], CRM_UTILS_PAYMENT_PAYPAL_CHARSET); $shipToAddress = $address; $shipToAddress->setName($params['first_name'] . ' ' . $params['last_name']); $paymentDetails->setShipToAddress($shipToAddress); if (Services_PayPal::isError($doDirectPaymentRequestDetails)) { return CRM_Utils_Payment_PayPal::error($doDirectPaymentRequestDetails); } $doDirectPaymentRequestDetails->setCreditCard($creditCard); $doDirectPaymentRequestDetails->setPaymentDetails($paymentDetails); $doDirectPaymentRequestDetails->setIPAddress($params['ip_address'], CRM_UTILS_PAYMENT_PAYPAL_CHARSET); $doDirectPaymentRequestDetails->setPaymentAction($params['payment_action'], CRM_UTILS_PAYMENT_PAYPAL_CHARSET); $doDirectPayment =& Services_PayPal::getType('DoDirectPaymentRequestType'); if (Services_PayPal::isError($doDirectPayment)) { return CRM_Utils_Payment_PayPal::error($doDirectPayment); } $doDirectPayment->setDoDirectPaymentRequestDetails($doDirectPaymentRequestDetails); $result = $this->_caller->DoDirectPayment($doDirectPayment); if (Services_PayPal::isError($result)) { return CRM_Utils_Payment_PayPal::error($result); } /* Check for application errors */ $result =& CRM_Utils_Payment_PayPal::checkResult($result); if (is_a($result, 'CRM_Core_Error')) { return $result; } /* Success */ $params['trxn_id'] = $result->TransactionID; $params['gross_amount'] = CRM_Utils_Payment_PayPal::getAmount($result->Amount); return $params; }