Spade
Mini Shell
| Directory:~$ /home/lmsyaran/public_html/joomla4/ |
| [Home] [System Details] [Kill Me] |
index.html000064400000000054151162551020006536 0ustar00<html><body
bgcolor="#FFFFFF"></body></html>paypalexpress.php000064400000114076151162551050010167
0ustar00<?php
/**
* @package HikaShop for Joomla!
* @version 4.4.1
* @author hikashop.com
* @copyright (C) 2010-2021 HIKARI SOFTWARE. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class plgHikashoppaymentPaypalExpress extends hikashopPaymentPlugin
{
var $accepted_currencies = array(
'AUD','BRL','CAD','EUR','GBP','JPY','USD','NZD','CHF','HKD','SGD','SEK',
'DKK','PLN','NOK','HUF','CZK','MXN','MYR','PHP','TWD','THB','ILS','TRY'
);
var $pluginConfig = array(
'apiuser' =>
array("API_USERNAME",'input'),
'apipassword' =>
array("API_PASSWORD",'input'),
'apisignature' =>
array("API_SIGNATURE",'input'),
'apiversion' =>
array("API_VERSION",'input'),
'notification' =>
array('ALLOW_NOTIFICATIONS_FROM_X',
'boolean','1'),
'landingpage' => array('Express Checkout as guest by
default', 'boolean','0'),
'cartdetail' => array('SEND_CART_DETAIL',
'boolean','0'),
'displaycheckout' =>
array('DISPLAY_BUTTON_CHECKOUT',
'boolean','0'),
'displaycart' => array('DISPLAY_BUTTON_CART',
'boolean','0'),
'address_override' => array('ADDRESS_OVERRIDE',
'boolean','0'),
'debug' => array('DEBUG',
'boolean','0'),
'sandbox' => array('SANDBOX',
'boolean','0'),
'return_url' => array('RETURN_URL',
'input'),
'invalid_status' => array('INVALID_STATUS',
'orderstatus'),
'verified_status' => array('VERIFIED_STATUS',
'orderstatus')
);
var $multiple = true;
var $name = 'paypalexpress';
var $doc_form = 'paypalexpress';
var $button = '';
public function __construct(&$subject, $config) {
$this->pluginConfig['notification'][0] =
JText::sprintf('ALLOW_NOTIFICATIONS_FROM_X',
'Paypal');
$lang = JFactory::getLanguage();
$notif =
HIKASHOP_LIVE.'index.php?option=com_hikashop&ctrl=checkout&task=notify&notif_payment='.$this->name.'&tmpl=component&hash='.time();
$this->button = ''
. '<div id="paypal_express_button"
style="width:144px; height:46px; margin-top:15px;"><a
href="'.$notif
. '&setExpressCheckout=1"><img
src="https://fpdbs.paypal.com/dynamicimageweb?cmd=_dynamic-image&buttontype'
.
'=ecshortcut&locale='.str_replace('-','_',$lang->get('tag')).'"></a></div>';
return parent::__construct($subject, $config);
}
public function onPaymentDisplay(&$order, &$methods,
&$usable_methods) {
}
public function onAfterOrderConfirm(&$order, &$methods,
$method_id) {
parent::onAfterOrderConfirm($order, $methods, $method_id);
}
public function getPaymentDefaultValues(&$element) {
$element->payment_name = 'PaypalExpress';
$element->payment_description = 'You can pay by credit card using
this payment method';
$element->payment_images =
'MasterCard,VISA,Credit_card,American_Express,Discover';
$element->payment_params->address_type = 'billing';
$element->payment_params->apiversion = '109.0';
$element->payment_params->landingpage = 1;
$element->payment_params->notification = 1;
$element->payment_params->invalid_status = 'cancelled';
$element->payment_params->verified_status = 'confirmed';
}
public function onPaymentNotification(&$statuses) {
$cartClass = hikashop_get('class.cart');
$cart = $cartClass->loadFullCart(true);
$currencyClass = hikashop_get('class.currency');
$currency =
$currencyClass->get($cart->full_total->prices[0]->price_currency_id);
$config = hikashop_config();
$this->app = JFactory::getApplication();
if(!empty($_SESSION['paypal_express_checkout_payment_method'] )
)
$this->pluginParams($_SESSION['paypal_express_checkout_payment_method']->payment_id);
else
$this->pluginParams();
if(empty($this->plugin_params) ||
empty($this->plugin_data->payment_published))
return false;
$menuClass = hikashop_get('class.menus');
$url_menu_id = $menuClass->getCheckoutMenuIdForURL();
$cancel_url =
HIKASHOP_LIVE.'index.php?option=com_hikashop&ctrl=order&task=cancel_order'.$url_menu_id;
$notify_url =
HIKASHOP_LIVE.'index.php?option=com_hikashop&ctrl=checkout&task=notify¬if_payment='.$this->name.'&tmpl=component'.$url_menu_id;
$return_url =
HIKASHOP_LIVE.'index.php?option=com_hikashop&ctrl=checkout&task=after_end'.$url_menu_id;
$amountTheorical =
(isset($cart->full_total->prices[0]->price_value_without_payment_with_tax)
) ?
round($cart->full_total->prices[0]->price_value_without_payment_with_tax,
2) : round($cart->full_total->prices[0]->price_value_with_tax,
2);
$vars = $this->getRequestDatas();
if($this->plugin_params->debug) {
$this->writeToLog('View on data recieved from Paypal (step 1)
:\n\n ');
$this->writeToLog(print_r($vars,true) );
}
if (isset($vars['setExpressCheckout'] ) ) {
if ($this->plugin_params->cartdetail) {
$i = 0;
$tax = 0;
$amountCalculated = 0;
$items = array();
$group = $config->get('group_options', 0);
foreach ($cart->products as $p) {
$productprice = 0;
$optionalProdDesc = '';
if($p->cart_product_quantity <= 0)
continue;
if($group) {
if($p->cart_product_option_parent_id)
continue;
foreach ($cart->products as $p2) {
if ($p2->cart_product_option_parent_id !=
$p->cart_product_id)
continue;
if(isset($p2->prices[0]->unit_price) )
$unit2 =& $p2->prices[0]->unit_price;
else
$unit2 =& $p2->prices[0];
$productprice += round($unit2->price_value, 2);
$tax += (round($unit2->price_value_with_tax, 2) -
round($unit2->price_value, 2))*$p->cart_product_quantity;
$amountCalculated +=
$p->cart_product_quantity*round($unit2->price_value, 2);
$optionalProdDesc .= $p2->product_name.',';
unset($unit2);
}
}
if(isset($p->prices[0]->unit_price) )
$unit =& $p->prices[0]->unit_price;
else
$unit =& $p->prices[0];
$tax += (round($unit->price_value_with_tax, 2) -
round($unit->price_value, 2)) * $p->cart_product_quantity;
$amountCalculated += $p->cart_product_quantity *
round($unit->price_value, 2);
$productprice += round($unit->price_value, 2);
unset($unit);
$item = array(
'L_PAYMENTREQUEST_0_NAME'.$i =>
substr(strip_tags($p->product_name), 0, 126),
'L_PAYMENTREQUEST_0_NUMBER'.$i => $p->product_id,
'L_PAYMENTREQUEST_0_AMT'.$i =>$productprice,
'L_PAYMENTREQUEST_0_QTY'.$i =>
$p->cart_product_quantity,
);
if( !empty($optionalProdDesc) ) {
$optionalProdDesc = rtrim($optionalProdDesc,',');
if(strlen($optionalProdDesc) >= 127) {
$optionalProdDesc = substr($optionalProdDesc, 0, 123) .
'...';
}
$item['L_PAYMENTREQUEST_0_DESC'.$i] = $optionalProdDesc;
}
$i++;
$items = array_merge($items,$item);
}
$shipping = 0;
if( !empty($cart->shipping) )
$shipping = round($cart->shipping[0]->shipping_price_with_tax,
2);
$discount = 0;
if( !empty($cart->coupon) )
$discount = round($cart->coupon->discount_value, 2);
if ($this->plugin_data->payment_price > 0 ||
$this->plugin_params->payment_percentage > 0) {
$feesValue = round($this->plugin_data->payment_price +
$amountTheorical * $this->plugin_params->payment_percentage / 100,
2);
$item = array(
'L_PAYMENTREQUEST_0_NAME'.$i =>
JText::_('HIKASHOP_PAYMENT'),
'L_PAYMENTREQUEST_0_NUMBER'.$i => 99999, //?
'L_PAYMENTREQUEST_0_AMT'.$i => $feesValue,
'L_PAYMENTREQUEST_0_QTY'.$i => 1,
);
$amountCalculated += $feesValue;
$items = array_merge($items,$item);
}
$amountTheorical += round($amountTheorical *
$this->plugin_params->payment_percentage / 100, 2);
$amountTheorical += round($this->plugin_data->payment_price,2);
$endItem = array(
'PAYMENTREQUEST_0_ITEMAMT' => $amountCalculated,
'PAYMENTREQUEST_0_TAXAMT' => $tax,
'PAYMENTREQUEST_0_SHIPPINGAMT' => $shipping,
'PAYMENTREQUEST_0_SHIPDISCAMT' => -$discount,
'PAYMENTREQUEST_0_HANDLINGAMT' => 0,
'PAYMENTREQUEST_0_AMT' => $amountTheorical,
'PAYMENTREQUEST_0_CURRENCYCODE' =>
$currency->currency_code,
'PAYMENTREQUEST_0_PAYMENTACTION' => 'Sale',
'ALLOWNOTE' => 1
);
$varform = array_merge($items, $endItem);
}
if($amountTheorical <= 0) {
$orderClass = hikashop_get('class.order');
$order = $orderClass->createFromCart($cart->cart_id,
array('skipPayment' => true));
$updateOrder = new stdClass();
$updateOrder->order_id = $order->order_id;
$updateOrder->order_payment_id =
$this->plugin_data->payment_id;
$updateOrder->order_payment_method = $this->name;
$orderClass->save($updateOrder);
$this->app->setUserState('com_hikashop.order_id',
$order->order_id);
$this->app->setUserState('com_hikashop.order_token',
@$order->order_token);
hikaInput::get()->set('order_token',
$order->order_token );
$this->app->redirect($return_url);
}
$this->plugin_params->landingpage =
(empty($this->plugin_params->landingpage) ) ? 'Login' :
'Billing';
$arrayparams = array(
'USER' => $this->plugin_params->apiuser,
'PWD' => $this->plugin_params->apipassword,
'SIGNATURE' => $this->plugin_params->apisignature,
'VERSION' => $this->plugin_params->apiversion,
'PAYMENTREQUEST_0_PAYMENTACTION' => 'Sale',
'SOLUTIONTYPE' => 'Sole',
'LANDINGPAGE' => $this->plugin_params->landingpage,
'PAYMENTREQUEST_0_AMT' => $amountTheorical,
'PAYMENTREQUEST_0_CURRENCYCODE' =>
$currency->currency_code,
'RETURNURL' => $notify_url,
'CANCELURL' => $cancel_url,
'METHOD' => 'SetExpressCheckout'
);
$varform = ($this->plugin_params->cartdetail) ?
array_merge($arrayparams, $varform) : $arrayparams;
$request =
$this->initCurlToPaypal($varform,$this->plugin_params->sandbox);
$post_response = curl_exec($request);
$curl_error = curl_error($request);
curl_close ($request);
if (empty($post_response) ) {
$this->app->enqueueMessage('The connection to the payment
plateform did not succeed. '
. 'It is often caused by the hosting company blocking external
connections '
. 'so you should contact him for further guidance. The cURL error
message was: '.$curl_error,'error');
return false;
}
$vars = $this->getPostDatas($post_response);
$urlstring = $_SERVER['HTTP_REFERER'];
$post = $this->getPostDatas($urlstring);
if ($vars['ACK'] == 'Success') {
$datehash = time();
$url = ($this->plugin_params->sandbox) ?
'https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token='.$vars['TOKEN'].'&hash='.$datehash
:
'https://www.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token='.$vars['TOKEN'].'&hash='.$datehash;
$orderClass = hikashop_get('class.order');
$order = $orderClass->createFromCart($cart->cart_id,
array('skipPayment' => true, 'historyData' =>
$vars['TOKEN']));
$updateOrder = new stdClass();
$updateOrder->order_id = $order->order_id;
$updateOrder->order_payment_id =
$this->plugin_data->payment_id;
$updateOrder->order_payment_method = $this->name;
$orderClass->save($updateOrder);
$this->app->setUserState('com_hikashop.order_id',
$order->order_id);
$this->app->setUserState('com_hikashop.order_token',
@$order->order_token);
hikaInput::get()->set('order_token',
$order->order_token );
$this->app->redirect($url);
return false;
}
$error = 'Connection failure - error code :
'.$vars['L_ERRORCODE0'].' , error message :
'.$vars['L_LONGMESSAGE0'];
if($this->plugin_params->debug){
$this->writeToLog('Fail at step 0 :'.$error);
$this->writeToLog(print_r($varform,true));
}
$this->app->enqueueMessage($error);
$add = (isset($post['step'])) ?
'&step='.$post['step'] : '&step=0';
$this->app->redirect($cancel_url.$add);
return false;
}
$datas = $this->loadOrderId($vars['token']);
$orderid = (int)$datas[0]->history_order_id;
$dbOrder = $this->getOrder($orderid);
$this->loadOrderData($dbOrder);
if(!empty($dbOrder->order_payment_id))
$this->pluginParams($dbOrder->order_payment_id);
$cancel_url .= '&order_id='.$orderid.$this->url_itemid;
$return_url .= '&order_id='.$orderid.$this->url_itemid;
$varform = array(
'USER' => $this->plugin_params->apiuser,
'PWD' => $this->plugin_params->apipassword,
'SIGNATURE' => $this->plugin_params->apisignature,
'VERSION' => $this->plugin_params->apiversion,
'TOKEN' => $vars['token'],
'METHOD' => 'GetExpressCheckoutDetails'
);
$request =
$this->initCurlToPaypal($varform,$this->plugin_params->sandbox);
$post_response = curl_exec($request);
$curl_error = curl_error($request);
curl_close($request);
if(empty($post_response) ) {
if($this->plugin_params->debug) {
$this->writeToLog('Order N°: ' . $orderid .
"\r\n" . 'Fail at step 1: '.$curl_error);
}
$this->app->enqueueMessage('The connection to the payment
plateform did not succeed. ' .
'It is often caused by the hosting company blocking external
connections so ' .
'you should contact him for further guidance. The cURL error
message was: '.$curl_error,'error');
$this->modifyOrder($orderid,
$this->plugin_params->invalid_status, true, true);
$this->app->redirect($cancel_url);
return false;
}
$vars = $this->getPostDatas($post_response);
if ($vars['ACK'] != 'Success' &&
$vars['ACK'] != 'SuccessWithWarning') {
if($this->plugin_params->debug) {
$this->writeToLog('Order N°:' . $orderid .
"\r\n" . 'Fail at step 2: '.$curl_error);
}
$this->app->enqueueMessage('An error has been encountered -
error code : '.$vars['L_ERRORCODE0'].' , error message
: '.$vars['L_LONGMESSAGE0']);
$this->modifyOrder($orderid,
$this->plugin_params->invalid_status, true, true);
$this->app->redirect($cancel_url);
return false;
}
if (empty($dbOrder->order_user_id) ) {
$user = $this->createUser($vars);
$userClass = hikashop_get('class.user');
$getuser =
$userClass->get($vars['EMAIL'],'email');
$userid = (empty($getuser) ) ? $userClass->save($user) :
$getuser->user_id;
if($this->plugin_params->debug) {
$this->writeToLog('Order N°: ' .
$orderid."\r\n".'User: '.$userid);
}
}
else
$userid = $dbOrder->order_user_id;
if( @$this->plugin_params->address_override ||
!isset($dbOrder->order_shipping_address_id) ||
$dbOrder->order_shipping_address_id == 0) {
$address = $this->createAddress($vars,$userid);
$addressClass = hikashop_get('class.address');
$addressid = $addressClass->save($address);
$dbOrder->order_shipping_address_id = $addressid;
$dbOrder->order_billing_address_id = $addressid;
}
$orderClass = hikashop_get('class.order');
$dbOrder->order_user_id = $userid;
$orderClass->save($dbOrder);
if ($this->plugin_params->cartdetail) {
$i = 0;
$tax = 0;
$amountCalculated = 0;
$items = array();
$group = $config->get('group_options',0);
foreach ($cart->products as $p) {
$productprice = 0;
$optionalProdDesc = '';
if($p->cart_product_quantity<=0)
continue;
if($group) {
if($p->cart_product_option_parent_id)
continue;
foreach ($cart->products as $p2) {
if ($p2->cart_product_option_parent_id != $p->cart_product_id)
continue;
if(isset($p2->prices[0]->unit_price) )
$unit2 =& $p2->prices[0]->unit_price;
else
$unit2 =& $p2->prices[0];
$productprice += round($unit2->price_value, 2);
$tax += (round($unit2->price_value_with_tax, 2) -
round($unit2->price_value, 2)) * $p->cart_product_quantity;
$amountCalculated += $p->cart_product_quantity *
round($unit2->price_value, 2);
$optionalProdDesc .= $p2->product_name.',';
unset($unit2);
}
}
if(isset($p->prices[0]->unit_price) )
$unit =& $p->prices[0]->unit_price;
else
$unit =& $p->prices[0];
$tax += (round($unit->price_value_with_tax, 2) -
round($unit->price_value, 2)) *$p->cart_product_quantity;
$amountCalculated += $p->cart_product_quantity *
round($unit->price_value, 2);
$productprice += round($unit->price_value, 2);
unset($unit);
$item = array(
'L_PAYMENTREQUEST_0_NAME'.$i =>
substr(strip_tags($p->product_name), 0, 126),
'L_PAYMENTREQUEST_0_NUMBER'.$i => $p->product_id,
'L_PAYMENTREQUEST_0_AMT'.$i =>$productprice,
'L_PAYMENTREQUEST_0_QTY'.$i =>
$p->cart_product_quantity,
);
if (!empty($optionalProdDesc) ) {
$optionalProdDesc = rtrim($optionalProdDesc, ',');
if(strlen($optionalProdDesc) >= 127) {
$optionalProdDesc = substr($optionalProdDesc, 0, 123) .
'...';
}
$item['L_PAYMENTREQUEST_0_DESC'.$i] = $optionalProdDesc;
}
$i++;
$items = array_merge($items,$item);
}
$shipping = 0;
if (!empty($cart->shipping) )
$shipping = round($cart->shipping[0]->shipping_price_with_tax,
2);
$discount = 0;
if (!empty($cart->coupon) )
$discount = round($cart->coupon->discount_value, 2);
if ($this->plugin_data->payment_price > 0 ||
$this->plugin_params->payment_percentage > 0) {
$feesValue = round($this->plugin_data->payment_price +
$amountTheorical * $this->plugin_params->payment_percentage / 100,
2);
$item = array(
'L_PAYMENTREQUEST_0_NAME'.$i =>
JText::_('HIKASHOP_PAYMENT'),
'L_PAYMENTREQUEST_0_NUMBER'.$i => 99999, //?
'L_PAYMENTREQUEST_0_AMT'.$i => $feesValue,
'L_PAYMENTREQUEST_0_QTY'.$i => 1,
);
$amountCalculated += $feesValue;
$items = array_merge($items,$item);
}
$amountTheorical += round($amountTheorical *
$this->plugin_params->payment_percentage / 100, 2);
$amountTheorical += round($this->plugin_data->payment_price, 2);
$endItem = array(
'PAYMENTREQUEST_0_ITEMAMT' => $amountCalculated,
'PAYMENTREQUEST_0_TAXAMT' => $tax,
'PAYMENTREQUEST_0_SHIPPINGAMT' => $shipping,
'PAYMENTREQUEST_0_SHIPDISCAMT' => -$discount,
'PAYMENTREQUEST_0_HANDLINGAMT' => 0,
'PAYMENTREQUEST_0_AMT' => $amountTheorical,
'PAYMENTREQUEST_0_CURRENCYCODE' =>
$currency->currency_code,
'PAYMENTREQUEST_0_PAYMENTACTION' => 'Sale',
'ALLOWNOTE' => 1
);
$varform = array_merge($items,$endItem);
}
$arrayparams = array(
'USER' => $this->plugin_params->apiuser,
'PWD' => $this->plugin_params->apipassword,
'SIGNATURE' => $this->plugin_params->apisignature,
'VERSION' => $this->plugin_params->apiversion,
'PAYMENTREQUEST_0_PAYMENTACTION' => 'Sale',
'PAYERID' => $vars['PAYERID'],
'TOKEN' => $vars['TOKEN'],
'PAYMENTREQUEST_0_AMT' => $amountTheorical,
'PAYMENTREQUEST_0_CURRENCYCODE' =>
$currency->currency_code,
'METHOD' => 'DoExpressCheckoutPayment'
);
$varform = ($this->plugin_params->cartdetail) ?
array_merge($arrayparams, $varform) : $arrayparams;
$request =
$this->initCurlToPaypal($varform,$this->plugin_params->sandbox);
$post_response = curl_exec($request);
$curl_error = curl_error($request);
curl_close($request);
if(empty($post_response) ) {
if($this->plugin_params->debug) {
$this->writeToLog('No response was recieved for Order N°:
' . $orderid . "\r\n" . 'Fail at step 3: ' .
$curl_error);
}
$this->app->enqueueMessage('The connection to the payment
plateform did not succeed. It is often caused by ' .
'the hosting company blocking external connections so you should
contact him for further guidance. ' .
'The cURL error message was: '.$curl_error,
'error');
$this->modifyOrder($orderid,
$this->plugin_params->invalid_status, true, true);
$this->app->redirect($cancel_url);
return false;
}
if(($this->plugin_params->debug)) {
$this->writeToLog('View on post_response (curl) from Paypal
(step 2):' . "\r\n" . $post_response);
}
$vars = $this->getPostDatas($post_response);
if ($vars['ACK'] != 'Success' &&
$vars['ACK'] != 'SuccessWithWarning') {
if($this->plugin_params->debug) {
$this->writeToLog('Order N°: ' . $orderid .
"\r\n" . 'Fail at step 4: ' . $curl_error);
}
$this->app->enqueueMessage('An error has been encountered -
error code: '.
$vars['L_ERRORCODE0'].', error message:
'.$vars['L_LONGMESSAGE0']);
$this->modifyOrder($orderid,
$this->plugin_params->invalid_status, true, true);
$this->app->redirect($cancel_url);
return false;
}
if($this->plugin_params->debug) {
$this->writeToLog('Success processing for order N°:
'.$orderid);
}
$history = new stdClass();
$history->notified = 1;
$history->data = 'PayPal transaction id:
'.$vars['PAYMENTINFO_0_TRANSACTIONID'];
$this->modifyOrder($orderid,
$this->plugin_params->verified_status, $history, true);
$this->app->redirect($return_url);
return true;
}
public function onHikashopBeforeDisplayView(&$element) {
$this->pluginParams();
$this->layout = $element->getLayout();
if(isset($element->ctrl) && $element->ctrl ==
'checkout' && $this->layout == 'step'
&& $this->canDisplayButton($element)) {
if(isset($element->extraData)) {
if(!isset($element->extraData->bottom))
$element->extraData->bottom = array();
$element->extraData->bottom[] = $this->button;
} else {
ob_start();
}
return;
}
if(isset($element->ctrl) && $element->ctrl ==
'checkout' && in_array($this->layout,
array('show','showblock')) &&
$this->canDisplayButton($element)) {
$checkoutHelper = hikashopCheckoutHelper::get();
$workflow_step = hikashop_getCID();
if($workflow_step > 0)
$workflow_step--;
if($workflow_step < 0)
$workflow_step = 0;
foreach($checkoutHelper->checkout_workflow['steps'][$workflow_step]['content']
as $k => &$content) {
if($content['task'] != 'cart')
continue;
if(!empty($content['params']['readonly'])) {
}
if(!isset($element->extraData))
$element->extraData = array();
if(empty($element->extraData[$k]))
$element->extraData[$k] = new stdClass();
if(!isset($element->extraData[$k]->bottom))
$element->extraData[$k]->bottom = array();
$element->extraData[$k]->bottom[] = $this->button;
}
}
if(isset($element->extraData) && isset($element->ctrl)
&& $element->ctrl == 'product' &&
$this->layout == 'cart' &&
!empty($element->element->cart_type) &&
$element->element->cart_type == 'cart' &&
$this->canDisplayButton($element,'cart') ) {
if(!isset($element->extraData->bottom))
$element->extraData->bottom = array();
$element->extraData->bottom[] = $this->button;
}
}
public function onHikashopAfterDisplayView(&$element) {
if(!isset($element->ctrl) )
return;
if(isset($element->extraData))
return;
if ($element->ctrl == 'product' && $this->layout
== 'cart' && !empty($element->element->cart_type)
&& $element->element->cart_type == 'cart'
&& $this->canDisplayButton($element,'cart') ) {
echo $this->button;
return;
}
if($element->ctrl == 'checkout' &&
$this->layout=='step' &&
$this->canDisplayButton($element) ) {
$contenttable = array();
$contentth = array();
$inserthtml = '<tr>';
$html = ob_get_clean();
if (preg_match_all('#<div
id="hikashop_checkout_cart"(.*?)</table>#iUs',$html,$contenttable)
) {
$old_cart = $contenttable[0][0];
preg_match_all('#</th>#i',$old_cart,$contentth);
for ($i=0 ; $i<count($contentth[0])-2 ; $i++) //2 dynamic
$inserthtml .= '<td></td>';
$inserthtml .= '<td
colspan="2">'.$this->button.'</td></tr></tbody>';
$new_cart =
str_replace('</tbody>',$inserthtml,$old_cart);
$html = str_replace($old_cart,$new_cart,$html);
}
echo $html;
return;
}
}
protected function canDisplayButton(&$view, $type =
'checkout') {
static $method = null;
if(!is_null($method))
return is_object($method) && empty($method->errors)
&& ((!empty($method->payment_params->displaycart) &&
$type == 'cart') ||
(!empty($method->payment_params->displaycheckout) && $type ==
'checkout'));
$cartClass = hikashop_get('class.cart');
$cart = $cartClass->getFullCart();
$methods = $this->loadPaymentMethod('', 'all',
$cart);
if(empty($methods))
return false;
$already = array();
$max = 0;
foreach($methods as $k => $method) {
if(!empty($method->payment_params) ) {
if(function_exists('hikashop_unserialize'))
$methods[$k]->payment_params =
hikashop_unserialize($method->payment_params);
else
$methods[$k]->payment_params =
@unserialize($method->payment_params);
}
$methods[$k]->enabled = true;
if(empty($method->ordering)) {
$max++;
$methods[$k]->ordering = $max;
}
while(isset($already[$methods[$k]->ordering]) ) {
$max++;
$methods[$k]->ordering = $max;
}
$already[$methods[$k]->ordering] = true;
}
$usable_methods = array();
parent::onPaymentDisplay($cart, $methods, $usable_methods);
if(count($usable_methods))
$method = reset($usable_methods);
return is_object($method) && empty($method->errors) &&
((!empty($method->payment_params->displaycart) && $type ==
'cart') ||
(!empty($method->payment_params->displaycheckout) && $type ==
'checkout'));
}
protected function getPostDatas($string) {
$datas = explode('&',$string);
$vars = array();
foreach ($datas as $d) {
$value = explode('=',$d);
$vars[$value[0]]=urldecode($value[1]);
}
return $vars;
}
protected function getRequestDatas() {
$vars = array();
$filter = JFilterInput::getInstance();
foreach($_REQUEST as $key => $value) {
$key = $filter->clean($key);
$value = hikaInput::get()->getString($key);
$vars[$key]=$value;
}
return $vars;
}
protected function initCurlToPaypal($varform, $sandbox) {
$url = ($sandbox) ? 'https://api-3t.sandbox.paypal.com/nvp' :
'https://api-3t.paypal.com/nvp';
$post_string = '';
foreach( $varform as $key => $value )
$post_string .= "$key=" . urlencode( $value ) .
"&";
$post_string = rtrim( $post_string, "& " );
$request = curl_init($url);
curl_setopt($request, CURLOPT_HEADER, 0);
curl_setopt($request, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($request, CURLOPT_POSTFIELDS, $post_string);
curl_setopt($request, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($request, CURLOPT_SSLVERSION, 6);
return $request;
}
protected function createOrder($cart) {
$app = JFactory::getApplication();
$config =& hikashop_config();
$shippings = array();
$shipping = $app->getUserState(
HIKASHOP_COMPONENT.'.shipping_method');
$shipping_id = $app->getUserState(
HIKASHOP_COMPONENT.'.shipping_id');
if(!empty($shipping) ) {
foreach($shipping as $ship) {
$ship = explode('@', $ship, 2);
$current_id = 0;
foreach($shipping_id as $sid) {
list($i, $k) = explode('@', $sid, 2);
if($k == $ship[1]) {
$current_id = $i;
break;
}
}
$shippings[$ship[1]] = array('id' => $current_id,
'name' => $ship[0]);
}
$shippingClass = hikashop_get('class.shipping');
$methods =& $shippingClass->getShippings($cart);
$shipping_groups = $shippingClass->getShippingGroups($cart,
$methods);
}
$shipping_address=$app->getUserState(
HIKASHOP_COMPONENT.'.shipping_address');
$billing_address=$app->getUserState(
HIKASHOP_COMPONENT.'.billing_address');
$order = new stdClass();
$order->order_user_id = @hikashop_loadUser();
$order->order_status =
$config->get('order_created_status');
$order->order_shipping_address_id = $shipping_address;
$order->order_billing_address_id = $billing_address;
$order->order_discount_code = @$cart->coupon->discount_code;
$order->order_currency_id =
$cart->full_total->prices[0]->price_currency_id;
$order->order_type = 'sale';
$order->order_full_price =
$cart->full_total->prices[0]->price_value_with_tax;
$order->order_tax_info =
@$cart->full_total->prices[0]->taxes;
$products = array();
foreach($cart->products as $product) {
if($product->cart_product_quantity > 0) {
$orderProduct = new stdClass();
$orderProduct->product_id = $product->product_id;
$orderProduct->order_product_quantity =
$product->cart_product_quantity;
$orderProduct->order_product_name = $product->product_name;
$orderProduct->cart_product_id = $product->cart_product_id;
$orderProduct->cart_product_option_parent_id =
$product->cart_product_option_parent_id;
$orderProduct->order_product_code = $product->product_code;
$orderProduct->order_product_price =
@$product->prices[0]->unit_price->price_value;
if(!empty($product->cart_product_wishlist_id))
$orderProduct->order_product_wishlist_id =
$product->cart_product_wishlist_id;
if(!empty($product->cart_product_wishlist_product_id))
$orderProduct->order_product_wishlist_product_id =
$product->cart_product_wishlist_product_id;
$orderProduct->product_subscription_id =
@$product->product_subscription_id;
$tax = 0;
if(!empty($product->prices[0]->unit_price->price_value_with_tax)
&&
bccomp($product->prices[0]->unit_price->price_value_with_tax,0,5)
)
$tax =
$product->prices[0]->unit_price->price_value_with_tax-$product->prices[0]->unit_price->price_value;
$orderProduct->order_product_tax = $tax;
$characteristics = '';
if(!empty($product->characteristics) )
$characteristics = serialize($product->characteristics);
$orderProduct->order_product_options = $characteristics;
if(!empty($product->discount))
$orderProduct->discount = $product->discount;
if(!empty($cart->item_fields)) {
foreach($cart->item_fields as $field) {
$namekey = $field->field_namekey;
if(isset($product->$namekey))
$orderProduct->$namekey = $product->$namekey;
}
}
if(isset($product->prices[0]->unit_price->taxes))
$orderProduct->order_product_tax_info =
$product->prices[0]->unit_price->taxes;
if(isset($product->files))
$orderProduct->files =& $product->files;
if(!empty($shipping)) {
$shipping_done = false;
foreach($shipping_groups as $group_key => $group_products) {
if(!isset($shippings[$group_key]))
continue;
foreach($group_products->products as $group_product) {
if((int)$group_product->cart_product_id ==
(int)$product->cart_product_id) {
$orderProduct->order_product_shipping_id =
$shippings[$group_key]['id'] . '@' . $group_key;
$orderProduct->order_product_shipping_method =
$shippings[$group_key]['name'];
$shipping_done = true;
break;
}
}
if($shipping_done)
break;
}
}
$products[] = $orderProduct;
}
}
$cart->products = &$products;
$order->order_shipping_price = 0.0;
$order->order_shipping_tax = 0.0;
$order->order_shipping_params = null;
if(!empty($cart->shipping) ) {
$order->order_shipping_params = new stdClass();
$order->order_shipping_params->prices = array();
foreach($cart->shipping as $cart_shipping) {
$price_key = $cart_shipping->shipping_id;
if(isset($cart_shipping->shipping_warehouse_id) )
$price_key .= '@' .
$cart_shipping->shipping_warehouse_id;
$order->order_shipping_params->prices[$price_key] = new
stdClass();
$order->order_shipping_params->prices[$price_key]->price_with_tax
= $cart_shipping->shipping_price_with_tax;
$order->order_shipping_price +=
$cart_shipping->shipping_price_with_tax;
if(!empty($cart_shipping->shipping_price_with_tax) &&
!empty($cart_shipping->shipping_price) ) {
$order->order_shipping_tax +=
$cart_shipping->shipping_price_with_tax -
$cart_shipping->shipping_price;
$order->order_shipping_params->prices[$price_key]->tax =
$cart_shipping->shipping_price_with_tax -
$cart_shipping->shipping_price;
if(!empty($cart_shipping->taxes) ) {
$order->order_shipping_params->prices[$price_key]->taxes =
array();
foreach($cart_shipping->taxes as $tax) {
$order->order_shipping_params->prices[$price_key]->taxes[$tax->tax_namekey]
= $tax->tax_amount;
if(isset($order->order_tax_info[$tax->tax_namekey])) {
if(empty($order->order_tax_info[$tax->tax_namekey]->tax_amount_for_shipping))
$order->order_tax_info[$tax->tax_namekey]->tax_amount_for_shipping
= 0;
$order->order_tax_info[$tax->tax_namekey]->tax_amount_for_shipping
+= $tax->tax_amount;
}
else {
$order->order_tax_info[$tax->tax_namekey] = $tax;
$order->order_tax_info[$tax->tax_namekey]->tax_amount_for_shipping
= $order->order_tax_info[$tax->tax_namekey]->tax_amount;
$order->order_tax_info[$tax->tax_namekey]->tax_amount =
0;
}
}
}
}
}
}
$discount_price = 0;
$discount_tax=0;
if(!empty($cart->coupon)&&
!empty($cart->coupon->total->prices[0]->price_value_without_discount_with_tax)){
$discount_price=@$cart->coupon->total->prices[0]->price_value_without_discount_with_tax-@$cart->coupon->total->prices[0]->price_value_with_tax;
if(!empty($cart->coupon->total->prices[0]->price_value_with_tax)&&!empty($cart->coupon->total->prices[0]->price_value)
) {
$discount_tax =
(@$cart->coupon->total->prices[0]->price_value_without_discount_with_tax-@$cart->coupon->total->prices[0]->price_value_without_discount)-(@$cart->coupon->total->prices[0]->price_value_with_tax-@$cart->coupon->total->prices[0]->price_value);
if(isset($cart->coupon->taxes) ) {
foreach($cart->coupon->taxes as $tax){
if(isset($order->order_tax_info[$tax->tax_namekey] ) ) {
$order->order_tax_info[$tax->tax_namekey]->tax_amount_for_coupon
= $tax->tax_amount;
}
else {
$order->order_tax_info[$tax->tax_namekey]=$tax;
$order->order_tax_info[$tax->tax_namekey]->tax_amount_for_coupon
= $order->order_tax_info[$tax->tax_namekey]->tax_amount;
$order->order_tax_info[$tax->tax_namekey]->tax_amount = 0;
}
}
}
}
}
$order->order_discount_tax = $discount_tax;
$order->order_discount_price = $discount_price;
$order->order_shipping_id = $shipping_id;
$order->order_shipping_method = $shipping;
$order->cart =& $cart;
$order->history = new stdClass();
$order->history->history_reason =
JText::_('ORDER_CREATED');
$order->history->history_notified = 0;
$order->history->history_type = 'creation';
if(!empty($shippings) ) {
if(count($shippings) == 1) {
$s = reset($shippings);
$order->order_shipping_id = $s['id'];
$order->order_shipping_method = $s['name'];
}
else {
$ids = array();
foreach($shippings as $key => $ship)
$ids[] = $ship['id'] . '@' . $key;
$order->order_shipping_id = implode(';', $ids);
$order->order_shipping_method = '';
}
}
return $order;
}
protected function loadOrderId($token) {
$db = JFactory::getDBO();
$query = 'SELECT history_order_id FROM `#__hikashop_history` hh
'.
' INNER JOIN `#__hikashop_order` ho ON hh.history_order_id =
ho.order_id '.
' WHERE history_data =
'.$db->Quote(htmlspecialchars($token)).';';
$db->setQuery($query);
$datas = $db->loadObjectList();
return $datas;
}
protected function loadPaymentMethod($name,$type,&$cart) {
static $datas = array();
if(empty($name)){
$name = $this->name;
}
if(!isset($datas[$name])) {
$db = JFactory::getDBO();
$where = array('payment_type =
'.$db->Quote($name),'payment_published=\'1\'');
$shipping = '';
if(!empty($cart->shipping))
$shipping =
$cart->shipping[0]->shipping_type.'_'.$cart->shipping[0]->shipping_id;
if(!empty($shipping) ) {
$where[] = '(payment_shipping_methods IN
(\'\',\'_\') OR payment_shipping_methods LIKE
\'%\n'.$shipping.
'\n%\' OR payment_shipping_methods LIKE
\''.$shipping.'\n%\' OR payment_shipping_methods LIKE
\'%\n'.
$shipping.'\' OR payment_shipping_methods LIKE
\''.$shipping.'\')';
}
$currency = hikashop_getCurrency();
if(!empty($currency) ) {
$where[] = "(payment_currency IN
('','_','all') OR payment_currency LIKE
'%,".intval($currency).",%')";
}
$app = JFactory::getApplication();
if(!hikashop_isClient('administrator') ) {
hikashop_addACLFilters($where,'payment_access');
}
$where = (!empty($where) ) ? ' WHERE '.implode(' AND
',$where) : $where = '';
$db->setQuery('SELECT * FROM
`#__hikashop_payment`'.$where.' ORDER BY
payment_ordering');
$datas[$name] = $db->loadObjectList();
}
if(empty($datas[$name]))
return false;
if($type == 'id')
return $datas[$name][0]->payment_id;
if($type == 'first')
return $datas[$name][0];
return $datas[$name];
}
protected function createUser($vars) {
$user = new stdClass();
$user->user_cms_id = 0;
$user->user_email = $vars['EMAIL'];
return $user;
}
protected function createAddress($vars, $userid) {
if (empty($userid) )
return false;
$db = JFactory::getDBO();
if(!empty($vars['PAYMENTREQUEST_0_SHIPTOCOUNTRYCODE'] ) ) {
$db->setQuery('SELECT zone_namekey FROM `#__hikashop_zone` WHERE
zone_code_2 = '.
$db->Quote($vars['PAYMENTREQUEST_0_SHIPTOCOUNTRYCODE']).'
AND zone_type = \'country\';');
$country = $db->loadResult();
}
if (empty($country) ) {
$query = 'SELECT zone_namekey FROM `#__hikashop_zone` '.
' WHERE zone_name_english =
'.$db->Quote($vars['PAYMENTREQUEST_0_SHIPTOCOUNTRYNAME']).'
AND zone_type = \'country\';';
$db->setQuery($query);
$country = $db->loadResult();
if (empty($country))
$country = $vars['PAYMENTREQUEST_0_SHIPTOCOUNTRYNAME'];
}
if (empty($vars['PAYMENTREQUEST_0_SHIPTOSTATE'] ) ) {
$state = "NULL";
} else {
$query = 'SELECT zone_namekey FROM `#__hikashop_zone` '.
' WHERE zone_code_2 =
'.$db->Quote($vars['PAYMENTREQUEST_0_SHIPTOSTATE']).'
AND zone_type = \'state\';';
$db->setQuery($query);
$state = $db->loadResult();
if (empty($state) )
$state = $vars['PAYMENTREQUEST_0_SHIPTOSTATE'];
}
$address = new stdClass();
$address->address_user_id = $userid;
$address->address_firstname = $vars['FIRSTNAME'];
$address->address_lastname = $vars['LASTNAME'];
$address->address_street =
$vars['PAYMENTREQUEST_0_SHIPTOSTREET'];
$address->address_post_code =
$vars['PAYMENTREQUEST_0_SHIPTOZIP'];
$address->address_city =
$vars['PAYMENTREQUEST_0_SHIPTOCITY'];
$address->address_state = $state;
$address->address_country = $country;
return $address;
}
}
paypalexpress.xml000064400000002321151162551050010165 0ustar00<?xml
version="1.0" encoding="utf-8"?>
<extension type="plugin" version="2.5"
method="upgrade" group="hikashoppayment">
<name>Hikashop Paypal Express Checkout Payment Plugin</name>
<creationDate>12 février 2021</creationDate>
<version>4.4.1</version>
<author>Hikashop</author>
<authorEmail>dev@hikashop.com</authorEmail>
<authorUrl>http://www.hikashop.com</authorUrl>
<copyright>(C) 2010-2021 HIKARI SOFTWARE. All rights
reserved.</copyright>
<license>http://www.gnu.org/licenses/gpl-2.0.html
GNU/GPL</license>
<description>This plugin enables you to setup your Paypal Express
Checkout payment system</description>
<files>
<filename
plugin="paypalexpress">paypalexpress.php</filename>
</files>
<params addpath="/components/com_hikashop/params">
<param name="pluginoptions" type="pluginoptions"
default="plugin" label="hikashop"
description="HikaShop options" />
</params>
<config>
<fields name="params"
addfieldpath="/components/com_hikashop/fields">
<fieldset name="basic">
<field
id="pluginoptions"
name="pluginoptions"
type="pluginoptions"
label="hikashop"
description="HikaShop options"
/>
</fieldset>
</fields>
</config>
</extension>