Cheetah
ChPmt2Checkout.php
Go to the documentation of this file.
1 <?php
2 
8 require_once("ChPmtProvider.php");
9 
10 define('TUCO_MODE_LIVE', 1);
11 define('TUCO_MODE_TEST', 2);
12 
13 define('TUCO_PAYMENT_METHOD_CC', 'CC');
14 define('TUCO_PAYMENT_METHOD_CK', 'CK');
15 define('TUCO_PAYMENT_METHOD_AL', 'AL');
16 define('TUCO_PAYMENT_METHOD_PPI', 'PPI');
17 
19 {
21 
25  function __construct($oDb, $oConfig, $aConfig)
26  {
27  parent::__construct($oDb, $oConfig, $aConfig);
28  $this->_bRedirectOnResult = true;
29 
30  $this->_sDataReturnUrl = $this->_oConfig->getDataReturnUrl() . $this->_sName . '/';
31  }
32  function initializeCheckout($iPendingId, $aCartInfo, $bRecurring = false, $iRecurringDays = 0)
33  {
34  $bTest = (int)$this->getOption('mode') == TUCO_MODE_TEST;
35 
36  $aFormData = array(
37  'sid' => $this->getOption('account_id'),
38  'mode' => '2CO',
39  'demo' => $bTest ? 'Y' : '',
40  'merchant_order_id' => $iPendingId,
41  'total' => sprintf("%.2f", (float)$aCartInfo['items_price']),
42  'currency_code' => $aCartInfo['vendor_currency_code'],
43  'pay_method' => $this->getOption('payment_method'),
44  'x_receipt_link_url' => $this->_sDataReturnUrl . $aCartInfo['vendor_id']
45  );
46 
47  $iIndex = 0;
48  foreach($aCartInfo['items'] as $aItem) {
49  $aFormData['li_' . $iIndex . '_type'] = 'product';
50  $aFormData['li_' . $iIndex . '_name'] = $aItem['title'];
51  $aFormData['li_' . $iIndex . '_price'] = $aItem['price'];
52  $aFormData['li_' . $iIndex . '_quantity'] = $aItem['quantity'];
53  $aFormData['li_' . $iIndex . '_tangible'] = 'N';
54 
55  $iIndex++;
56  }
57 
58  $sActionURL = 'https://' . ($bTest ? 'sandbox' : 'www') . '.2checkout.com/checkout/purchase';
59  Redirect($sActionURL, $aFormData, 'post', $this->_sCaption);
60  exit();
61  }
62  function finalizeCheckout(&$aData)
63  {
64  return $this->_registerCheckout($aData);
65  }
66 
74  function _registerCheckout(&$aData, $bSubscription = false, $iPendingId = 0)
75  {
76  if(empty($this->_aOptions) && isset($aData['merchant_order_id']))
77  $this->_aOptions = $this->getOptionsByPending($aData['merchant_order_id']);
78 
79  if(empty($this->_aOptions))
80  return array('code' => 2, 'message' => _t('_payment_2co_err_no_vendor_given'));
81 
82  $aResult = $this->_validateCheckout($aData);
83 
84  if(empty($aResult['pending_id']))
85  return $aResult;
86 
87  $aPending = $this->_oDb->getPending(array('type' => 'id', 'id' => (int)$aResult['pending_id']));
88  if(!empty($aPending['order']) || !empty($aPending['error_code']) || !empty($aPending['error_msg']) || (int)$aPending['processed'] != 0)
89  return array('code' => 6, 'message' => _t('_payment_2co_err_already_processed'));
90 
91  $this->_oDb->updatePending((int)$aResult['pending_id'], array(
92  'order' => $aData['order_number'],
93  'error_code' => $aResult['code'],
94  'error_msg' => $aResult['message']
95  ));
96  return $aResult;
97  }
98  function _validateCheckout(&$aData)
99  {
100  if(empty($aData['order_number']) || empty($aData['total']) || empty($aData['key']) || empty($aData['merchant_order_id']))
101  return array('code' => 3, 'message' => _t('_payment_2co_err_no_data_given'));
102 
103  $sOrder = process_db_input($aData['order_number'], CH_TAGS_STRIP);
104  $sAmount = process_db_input($aData['total'], CH_TAGS_STRIP);
105  $iPendingId = (int)$aData['merchant_order_id'];
106 
107  if($aData['key'] != $this->_generateKey($sOrder, $sAmount))
108  return array('code' => 4, 'message' => _t('_payment_2co_err_wrong_key'), 'pending_id' => $iPendingId);
109 
110  $aPending = $this->_oDb->getPending(array('type' => 'id', 'id' => $iPendingId));
111  if((float)$sAmount != (float)$aPending['amount'])
112  return array('code' => 5, 'message' => _t('_payment_2co_err_wrong_payment'), 'pending_id' => $iPendingId);
113 
114  $sBuyerFirstName = process_db_input($aData['first_name'], CH_TAGS_STRIP);
115  $sBuyerLastName = process_db_input($aData['last_name'], CH_TAGS_STRIP);
116  $sBuyerEmail = process_db_input($aData['email'], CH_TAGS_STRIP);
117 
118  return array(
119  'code' => 1,
120  'message' => _t('_payment_2co_msg_verified'),
121  'pending_id' => $iPendingId,
122  'payer_name' => _t('_payment_txt_buyer_name_mask', $sBuyerFirstName, $sBuyerLastName),
123  'payer_email' => $sBuyerEmail
124  );
125  }
126  function _generateKey($sOrder, $sAmount)
127  {
128  if((int)$this->getOption('mode') == TUCO_MODE_TEST)
129  $sOrder = '1';
130 
131  $sKey = $this->getOption('secret_word') . $this->getOption('account_id') . $sOrder . $sAmount;
132  return strtoupper(md5($sKey));
133  }
134 }
process_db_input
process_db_input($sText, $iStripTags=0)
Definition: utils.inc.php:256
ChPmtProvider
Definition: ChPmtProvider.php:9
TUCO_MODE_TEST
const TUCO_MODE_TEST
Definition: ChPmt2Checkout.php:11
$aResult
$aResult
Definition: index.php:19
ChPmt2Checkout\$_sDataReturnUrl
$_sDataReturnUrl
Definition: ChPmt2Checkout.php:20
php
Redirect
Redirect($ActionURL, $Params=null, $Method="get", $Title='Redirect')
Definition: utils.inc.php:432
exit
exit
Definition: cart.php:21
$iIndex
$iIndex
Definition: bottom_menu_compose.php:142
ChPmtProvider\getOptionsByPending
getOptionsByPending($iPendingId)
Definition: ChPmtProvider.php:47
ChPmt2Checkout\_generateKey
_generateKey($sOrder, $sAmount)
Definition: ChPmt2Checkout.php:126
ChPmt2Checkout
Definition: ChPmt2Checkout.php:19
$oDb
global $oDb
Definition: db.inc.php:39
_t
_t($key, $arg0="", $arg1="", $arg2="")
Definition: languages.inc.php:509
$aConfig
$aConfig
Definition: config.php:8
CH_TAGS_STRIP
const CH_TAGS_STRIP
Definition: utils.inc.php:22
ChPmt2Checkout\initializeCheckout
initializeCheckout($iPendingId, $aCartInfo, $bRecurring=false, $iRecurringDays=0)
Definition: ChPmt2Checkout.php:32
ChPmt2Checkout\_validateCheckout
_validateCheckout(&$aData)
Definition: ChPmt2Checkout.php:98
empty
Attr AllowedRel this is empty
Definition: Attr.AllowedRel.txt:7
as
as
Definition: Filter.ExtractStyleBlocks.Escaping.txt:10
ChPmt2Checkout\__construct
__construct($oDb, $oConfig, $aConfig)
Definition: ChPmt2Checkout.php:25
ChPmt2Checkout\_registerCheckout
_registerCheckout(&$aData, $bSubscription=false, $iPendingId=0)
Definition: ChPmt2Checkout.php:74
ChPmtProvider\getOption
getOption($sName)
Definition: ChPmtProvider.php:55
ChPmt2Checkout\finalizeCheckout
finalizeCheckout(&$aData)
Definition: ChPmt2Checkout.php:62