Exemplo n.º 1
0
 /**
  * Convert order to array for SetExpressCheckout
  *
  * @param \XLite\Model\Order $order Order
  *
  * @return array
  * @see    https://developer.paypal.com/docs/classic/api/merchant/SetExpressCheckout_API_Operation_NVP/
  */
 public function convertSetExpressCheckoutParams($order)
 {
     /** @var \XLite\Model\Currency $currency */
     $currency = $order->getCurrency();
     $orderTotal = $currency->roundValue($order->getTotal());
     $shippingCost = $this->getShippingCost($order);
     /** @var \XLite\Module\CDev\Paypal\Model\Payment\Processor\ExpressCheckoutMerchantAPI $processor */
     $processor = $this->getProcessor();
     $params = array('RETURNURL' => $processor->getPaymentReturnUrl(), 'CANCELURL' => $processor->getPaymentCancelUrl(), 'NOSHIPPING' => null === $shippingCost ? '1' : '0', 'ALLOWNOTE' => 1, 'PAYMENTREQUEST_0_AMT' => $orderTotal, 'PAYMENTREQUEST_0_PAYMENTACTION' => $this->getPaymentAction(), 'PAYMENTREQUEST_0_CURRENCYCODE' => $currency->getCode(), 'PAYMENTREQUEST_0_HANDLINGAMT' => 0, 'PAYMENTREQUEST_0_INSURANCEAMT' => 0, 'PAYMENTREQUEST_0_SHIPPINGAMT' => (double) $shippingCost);
     if (\XLite\Core\Config::getInstance()->Security->customer_security) {
         $postData['HDRIMG'] = urlencode(\XLite\Module\CDev\Paypal\Main::getLogo());
     }
     $items = $this->getItems($order);
     // To avoid total mismatch clear tax and shipping cost
     $taxAmt = isset($items['PAYMENTREQUEST_0_TAXAMT']) ? $items['PAYMENTREQUEST_0_TAXAMT'] : 0;
     if (abs($orderTotal - $items['PAYMENTREQUEST_0_ITEMAMT'] - $taxAmt - $shippingCost) <= 1.0E-10) {
         $params += $items;
     } else {
         $itemsAmt = $orderTotal - (double) $shippingCost;
         $params['PAYMENTREQUEST_0_ITEMAMT'] = $itemsAmt;
     }
     $type = \XLite\Core\Session::getInstance()->ec_type;
     /** @var \XLite\Model\Profile $profile */
     $profile = $order->getProfile();
     if (\XLite\Module\CDev\Paypal\Model\Payment\Processor\ExpressCheckout::EC_TYPE_SHORTCUT == $type) {
         $params['REQCONFIRMSHIPPING'] = 0;
     }
     if ($profile && $profile->getLogin()) {
         $params += array('EMAIL' => $profile->getLogin());
     }
     if ($profile && $profile->getBillingAddress()) {
         $params += array('PHONENUM' => $profile->getBillingAddress()->getPhone());
     }
     if (null !== $shippingCost && $profile && $profile->getShippingAddress()) {
         /** @var \XLite\Model\Address $address */
         $address = $profile->getShippingAddress();
         $params += array('ADDROVERRIDE' => 1, 'PAYMENTREQUEST_0_SHIPTONAME' => trim($address->getFirstname() . ' ' . $address->getLastname()), 'PAYMENTREQUEST_0_SHIPTOSTREET' => $address->getStreet(), 'PAYMENTREQUEST_0_SHIPTOSTREET2' => '', 'PAYMENTREQUEST_0_SHIPTOCITY' => $address->getCity(), 'PAYMENTREQUEST_0_SHIPTOSTATE' => $address->getState()->getCode() ?: $address->getState()->getState(), 'PAYMENTREQUEST_0_SHIPTOZIP' => $address->getZipcode(), 'PAYMENTREQUEST_0_SHIPTOCOUNTRY' => $address->getCountry()->getCode());
     }
     if (\XLite\Core\Auth::getInstance()->isLogged()) {
         $profile = \XLite\Core\Auth::getInstance()->getProfile();
         if ($profile->isSocialProfile() && 'PayPal' == $profile->getSocialLoginProvider() && \XLite\Core\Session::getInstance()->paypalAccessToken) {
             $accessToken = \XLite\Core\Session::getInstance()->paypalAccessToken;
             if (LC_START_TIME < $accessToken['expirationTime']) {
                 $params['IDENTITYACCESSTOKEN'] = $accessToken['access_token'];
             }
         }
     }
     return $params;
 }
Exemplo n.º 2
0
 /**
  * Get redirect form fields list
  *
  * @return array
  * @see    https://developer.paypal.com/docs/classic/paypal-payments-standard/integration-guide/Appx_websitestandard_htmlvariables
  */
 protected function getFormFields()
 {
     /** @var \XLite\Model\Order $order */
     $order = $this->getOrder();
     /** @var \XLite\Model\Currency $currency */
     $currency = $order->getCurrency();
     $orderTotal = $currency->roundValue($order->getTotal());
     $orderNumber = $this->getTransactionId($this->getSetting('prefix'));
     $shippingCost = $this->getShippingCost($order);
     $params = array('return' => $this->getReturnURL(null, true), 'cancel_return' => $this->getReturnURL(null, true, true), 'shopping_url' => $this->getReturnURL(null, true, true), 'notify_url' => $this->getCallbackURL(null, true), 'rm' => '2', 'bn' => 'XCART5_Cart', 'upload' => 1, 'charset' => 'UTF-8', 'cmd' => '_cart', 'redirect_cmd' => '_xclick', 'business' => $this->getSetting('account'), 'custom' => $order->getOrderId(), 'invoice' => $orderNumber, 'currency_code' => $currency->getCode(), 'handling' => 0, 'shipping_1' => (double) $shippingCost, 'weight_cart' => 0);
     if (\XLite\Core\Config::getInstance()->Security->customer_security) {
         $fields['cpp_header_image'] = Paypal\Main::getLogo();
     }
     $items = $this->getItems($order);
     // To avoid total mismatch clear tax and shipping cost
     $taxAmt = isset($items['tax_cart']) ? $items['tax_cart'] : 0;
     if (abs($orderTotal - $items['items_amount'] - $taxAmt - $shippingCost) <= 1.0E-10) {
         unset($items['items_amount']);
         $params = array_merge($params, $items);
     } else {
         $params['cmd'] = '_ext-enter';
         $params['amount'] = $orderTotal;
         $params['item_name'] = $this->getItemName();
         unset($params['shipping_1']);
     }
     $profile = $this->getProfile();
     $params = array_merge($params, array('address_override' => 1, 'email' => $profile->getLogin()));
     if (null !== $shippingCost) {
         /** @var \XLite\Model\Address $address */
         $address = $profile->getShippingAddress();
         $params = array_merge($params, array('first_name' => $address->getFirstname(), 'last_name' => $address->getLastname(), 'country' => $this->getCountryFieldValue(), 'state' => $this->getStateFieldValue(), 'address1' => $address->getStreet(), 'address2' => 'n/a', 'city' => $address->getCity(), 'zip' => $address->getZipcode()));
     }
     $params = array_merge($params, $this->getPhone());
     return $params;
 }
Exemplo n.º 3
0
 /**
  * Returns common request params required for all requests
  *
  * @return array
  */
 protected function getCommonParams()
 {
     $result = array('VENDOR' => $this->getSetting('vendor'), 'USER' => $this->getSetting('user') ?: $this->getSetting('vendor'), 'PWD' => $this->getSetting('pwd'), 'PARTNER' => $this->getSetting('partner') ?: 'Paypal', 'BUTTONSOURCE' => $this->partnerCode, 'VERBOSITY' => 'HIGH');
     // todo: remove?!
     if (\XLite\Core\Config::getInstance()->Security->customer_security) {
         $result['HDRIMG'] = \XLite\Module\CDev\Paypal\Main::getLogo();
     }
     return $result;
 }