PageRenderTime 42ms CodeModel.GetById 17ms RepoModel.GetById 0ms app.codeStats 0ms

/home/administrator/components/com_hikashop/extensions/plg_hikashoppayment_epay/epay.php

https://bitbucket.org/rubbystar/carimod
PHP | 196 lines | 162 code | 27 blank | 7 comment | 15 complexity | 2c6d644ebc7cad0c794359db191b6c90 MD5 | raw file
Possible License(s): LGPL-2.1, GPL-2.0, GPL-3.0
  1. <?php
  2. /**
  3. * @package HikaShop for Joomla!
  4. * @version 3.0.0
  5. * @author hikashop.com
  6. * @copyright (C) 2010-2017 HIKARI SOFTWARE. All rights reserved.
  7. * @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
  8. */
  9. defined('_JEXEC') or die('Restricted access');
  10. ?><?php
  11. class plgHikashoppaymentEpay extends hikashopPaymentPlugin
  12. {
  13. var $accepted_currencies = array(
  14. 'AUD','CAD','EUR','GBP','JPY','USD','NZD','CHF','HKD','SGD',
  15. 'SEK','DKK','PLN','NOK','HUF','CZK','MXN','BRL','MYR','PHP',
  16. 'TWD','THB','ILS','TRY'
  17. );
  18. var $debugData = array();
  19. var $multiple = true;
  20. var $name = 'epay';
  21. var $pluginConfig = array(
  22. 'merchantnumber' => array('MERCHANT_NUMBER', 'input'),
  23. 'windowstate' => array('WINDOW_STATE', 'list', array('1' => 'Overlay', '3' => 'Fullscreen')),
  24. 'windowid' => array('WINDOW_ID', 'input'),
  25. 'md5key' => array('MD5KEY', 'input'),
  26. 'group' => array('GROUP', 'input'),
  27. 'authsms' => array('AUTHSMS', 'input'),
  28. 'authmail' => array('AUTHEMAIL', 'input'),
  29. 'instantcapture' => array('INSTANTCAPTURE', 'list', array('0' => 'HIKASHOP_NO', '1' => 'HIKASHOP_YES')),
  30. 'ownreceipt' => array('OWN_RECEIPT', 'list', array('0' => 'HIKASHOP_NO', '1' => 'HIKASHOP_YES')),
  31. 'debug' => array('DEBUG', 'boolean','0'),
  32. 'return_url' => array('RETURN_URL', 'input'),
  33. 'invalid_status' => array('INVALID_STATUS', 'orderstatus'),
  34. 'pending_status' => array('PENDING_STATUS', 'orderstatus'),
  35. 'verified_status' => array('VERIFIED_STATUS', 'orderstatus')
  36. );
  37. function getVars($order) {
  38. $callback_url = HIKASHOP_LIVE.'index.php?option=com_hikashop&ctrl=checkout&task=notify&notif_payment=epay&tmpl=component&lang='.$this->locale.$this->url_itemid;
  39. $accept_url = HIKASHOP_LIVE.'index.php?option=com_hikashop&ctrl=checkout&task=after_end&order_id='.$order->order_id.$this->url_itemid;
  40. $decline_url = HIKASHOP_LIVE.'index.php?option=com_hikashop&ctrl=order&task=cancel_order&order_id='.$order->order_id.$this->url_itemid;
  41. $vars = array(
  42. "merchantnumber" => $this->payment_params->merchantnumber,
  43. "orderid" => $order->order_id,
  44. "amount" => intval($order->order_full_price*100), //minor units
  45. "currency" => $this->get_iso_code($this->currency->currency_code),
  46. "windowstate" => $this->payment_params->windowstate,
  47. "windowid" => $this->payment_params->windowid,
  48. "accepturl" => $accept_url,
  49. "cancelurl" => $decline_url,
  50. "callbackurl" => $callback_url,
  51. "smsreceipt" => $this->payment_params->authsms,
  52. "mailreceipt" => $this->payment_params->authmail,
  53. "instantcapture" => $this->payment_params->instantcapture,
  54. "group" => $this->payment_params->group,
  55. "ownreceipt" => $this->payment_params->ownreceipt,
  56. "instantcallback" => 1,
  57. "language" => 0,
  58. "cms" => "hikashop"
  59. );
  60. $vars["hash"] = md5(implode("", array_values($vars)) . $this->payment_params->md5key);
  61. return $vars;
  62. }
  63. function onAfterOrderConfirm(&$order,&$methods,$method_id){
  64. parent::onAfterOrderConfirm($order, $methods, $method_id);
  65. if(empty($this->payment_params))
  66. return false;
  67. $this->vars = $this->getVars($order);
  68. return $this->showPage('end');
  69. }
  70. function onPaymentNotification(&$statuses){
  71. $order_id = (int)@$_GET['orderid'];
  72. $dbOrder = $this->getOrder($order_id);
  73. if(empty($dbOrder)){
  74. echo "Could not load any order for your notification ".@$_GET['orderid'];
  75. return false;
  76. }
  77. $this->loadPaymentParams($dbOrder);
  78. if(empty($this->payment_params))
  79. return false;
  80. $this->loadOrderData($dbOrder);
  81. if($this->payment_params->debug){
  82. echo print_r($dbOrder,true)."\n\n\n";
  83. }
  84. $order_status = $dbOrder->order_status;
  85. $url = HIKASHOP_LIVE.'administrator/index.php?option=com_hikashop&ctrl=order&task=edit&order_id='.$order_id;
  86. $order_text = "\r\n".JText::sprintf('NOTIFICATION_OF_ORDER_ON_WEBSITE',$dbOrder->order_number,HIKASHOP_LIVE);
  87. $order_text .= "\r\n".str_replace('<br/>',"\r\n",JText::sprintf('ACCESS_ORDER_WITH_LINK',$url));
  88. if($this->payment_params->debug){
  89. echo print_r($dbOrder,true)."\n\n\n";
  90. }
  91. if($this->payment_params->debug){
  92. echo print_r($_GET,true)."\n\n\n";
  93. }
  94. if(strlen($this->payment_params->md5key) > 0)
  95. {
  96. $var = "";
  97. $params = $_GET;
  98. foreach($params as $key => $value)
  99. {
  100. if($key != "hash")
  101. {
  102. $var .= $value;
  103. }
  104. else
  105. break;
  106. }
  107. $genstamp = md5($var . $this->payment_params->md5key);
  108. if($genstamp != $_GET["hash"])
  109. {
  110. $history = new stdClass();
  111. $email = new stdClass();
  112. $history->notified = 0;
  113. $history->reason = JText::_('PAYMENT_MD5_ERROR');
  114. $history->data = "Payment by ePay - Invalid MD5 - ePay transaction ID: " . $_GET["tid"];
  115. $email->subject = JText::sprintf('NOTIFICATION_REFUSED_FOR_THE_ORDER','ePay').'invalid response';
  116. $email->body = JText::sprintf("Hello,\r\n An ePay notification was refused because the notification from the ePay server was invalid")."\r\n\r\n".$order_text;
  117. $this->modifyOrder($order_id, $this->payment_params->invalid_status, $history, $email);
  118. return false;
  119. }
  120. }
  121. $order_status = $this->payment_params->verified_status;
  122. if($dbOrder->order_status == $order_status) return true;
  123. $history->reason = JText::_('PAYMENT_ORDER_CONFIRMED');
  124. $history->notified=1;
  125. $history->data = "Payment by ePay - ePay transaction ID: ".$_GET["tid"];
  126. $mail_status = $statuses[$order_status];
  127. $email->subject = JText::sprintf('PAYMENT_NOTIFICATION_FOR_ORDER','ePay',$order_status,$dbOrder->order_number); //order_id ?
  128. $email->body = str_replace('<br/>',"\r\n",JText::sprintf('PAYMENT_NOTIFICATION_STATUS','ePay',$order_status)).' '.JText::sprintf('ORDER_STATUS_CHANGED',$mail_status)."\r\n\r\n".$order_text; //order->mail_status == order_status ?
  129. $this->modifyOrder($order_id,$order_status,$history,$email);
  130. return true;
  131. }
  132. function getPaymentDefaultValues(&$element) {
  133. $element->payment_name = 'ePay';
  134. $element->payment_description = 'You can pay by credit card or epay using this payment method';
  135. $element->payment_images = 'MasterCard,VISA,Credit_card,American_Express';
  136. $element->payment_params->notification = 1;
  137. $element->payment_params->windowstate = 1;
  138. $element->payment_params->windowid = 1;
  139. $element->payment_params->instantcapture = 0;
  140. $element->payment_params->ownreceipt = 0;
  141. $element->payment_params->invalid_status = 'cancelled';
  142. $element->payment_params->pending_status = 'created';
  143. $element->payment_params->verified_status = 'confirmed';
  144. }
  145. function get_iso_code($code) {
  146. $codes = array(
  147. 'ADP' => '020', 'AED' => '784', 'AFA' => '004', 'ALL' => '008', 'AMD' => '051', 'ANG' => '532', 'AOA' => '973', 'ARS' => '032', 'AUD' => '036', 'AWG' => '533', 'AZM' => '031',
  148. 'BAM' => '977', 'BBD' => '052', 'BDT' => '050', 'BGL' => '100', 'BGN' => '975', 'BHD' => '048', 'BIF' => '108', 'BMD' => '060', 'BND' => '096', 'BOB' => '068', 'BOV' => '984',
  149. 'BRL' => '986', 'BSD' => '044', 'BTN' => '064', 'BWP' => '072', 'BYR' => '974', 'BZD' => '084', 'CAD' => '124', 'CDF' => '976', 'CHF' => '756', 'CLF' => '990', 'CLP' => '152',
  150. 'CNY' => '156', 'COP' => '170', 'CRC' => '188', 'CUP' => '192', 'CVE' => '132', 'CYP' => '196', 'CZK' => '203', 'DJF' => '262', 'DKK' => '208', 'DOP' => '214', 'DZD' => '012',
  151. 'ECS' => '218', 'ECV' => '983', 'EEK' => '233', 'EGP' => '818', 'ERN' => '232', 'ETB' => '230', 'EUR' => '978', 'FJD' => '242', 'FKP' => '238', 'GBP' => '826', 'GEL' => '981',
  152. 'GHC' => '288', 'GIP' => '292', 'GMD' => '270', 'GNF' => '324', 'GTQ' => '320', 'GWP' => '624', 'GYD' => '328', 'HKD' => '344', 'HNL' => '340', 'HRK' => '191', 'HTG' => '332',
  153. 'HUF' => '348', 'IDR' => '360', 'ILS' => '376', 'INR' => '356', 'IQD' => '368', 'IRR' => '364', 'ISK' => '352', 'JMD' => '388', 'JOD' => '400', 'JPY' => '392', 'KES' => '404',
  154. 'KGS' => '417', 'KHR' => '116', 'KMF' => '174', 'KPW' => '408', 'KRW' => '410', 'KWD' => '414', 'KYD' => '136', 'KZT' => '398', 'LAK' => '418', 'LBP' => '422', 'LKR' => '144',
  155. 'LRD' => '430', 'LSL' => '426', 'LTL' => '440', 'LVL' => '428', 'LYD' => '434', 'MAD' => '504', 'MDL' => '498', 'MGF' => '450', 'MKD' => '807', 'MMK' => '104', 'MNT' => '496',
  156. 'MOP' => '446', 'MRO' => '478', 'MTL' => '470', 'MUR' => '480', 'MVR' => '462', 'MWK' => '454', 'MXN' => '484', 'MXV' => '979', 'MYR' => '458', 'MZM' => '508', 'NAD' => '516',
  157. 'NGN' => '566', 'NIO' => '558', 'NOK' => '578', 'NPR' => '524', 'NZD' => '554', 'OMR' => '512', 'PAB' => '590', 'PEN' => '604', 'PGK' => '598', 'PHP' => '608', 'PKR' => '586',
  158. 'PLN' => '985', 'PYG' => '600', 'QAR' => '634', 'ROL' => '642', 'RUB' => '643', 'RUR' => '810', 'RWF' => '646', 'SAR' => '682', 'SBD' => '090', 'SCR' => '690', 'SDD' => '736',
  159. 'SEK' => '752', 'SGD' => '702', 'SHP' => '654', 'SIT' => '705', 'SKK' => '703', 'SLL' => '694', 'SOS' => '706', 'SRG' => '740', 'STD' => '678', 'SVC' => '222', 'SYP' => '760',
  160. 'SZL' => '748', 'THB' => '764', 'TJS' => '972', 'TMM' => '795', 'TND' => '788', 'TOP' => '776', 'TPE' => '626', 'TRL' => '792', 'TRY' => '949', 'TTD' => '780', 'TWD' => '901',
  161. 'TZS' => '834', 'UAH' => '980', 'UGX' => '800', 'USD' => '840', 'UYU' => '858', 'UZS' => '860', 'VEB' => '862', 'VND' => '704', 'VUV' => '548', 'XAF' => '950', 'XCD' => '951',
  162. 'XOF' => '952', 'XPF' => '953', 'YER' => '886', 'YUM' => '891', 'ZAR' => '710', 'ZMK' => '894', 'ZWD' => '716'
  163. );
  164. $code = strtoupper(trim($code));
  165. if(isset( $codes[$code] ))
  166. return $codes[$code];
  167. return '208';
  168. }
  169. }