OpenCart 🇺🇦

Класс ModelPaymentPPExpress extends Model { ... }

Тип Возвр. Описание
public mixed install ( )
Исходный код метода:
$this->db->query("
	CREATE TABLE IF NOT EXISTS `" . DB_PREFIX . "paypal_order` (
	  `paypal_order_id` int(11) NOT NULL AUTO_INCREMENT,
	  `order_id` int(11) NOT NULL,
	  `created` DATETIME NOT NULL,
	  `modified` DATETIME NOT NULL,
	  `capture_status` ENUM('Complete','NotComplete') DEFAULT NULL,
	  `currency_code` CHAR(3) NOT NULL,
	  `authorization_id` VARCHAR(30) NOT NULL,
	  `total` DECIMAL( 10, 2 ) NOT NULL,
	  PRIMARY KEY (`paypal_order_id`)
	) ENGINE=MyISAM DEFAULT COLLATE=utf8_general_ci;");

$this->db->query("
	CREATE TABLE IF NOT EXISTS `" . DB_PREFIX . "paypal_order_transaction` (
	  `paypal_order_transaction_id` int(11) NOT NULL AUTO_INCREMENT,
	  `paypal_order_id` int(11) NOT NULL,
	  `transaction_id` CHAR(20) NOT NULL,
	  `parent_transaction_id` CHAR(20) NOT NULL,
	  `created` DATETIME NOT NULL,
	  `note` VARCHAR(255) NOT NULL,
	  `msgsubid` CHAR(38) NOT NULL,
	  `receipt_id` CHAR(20) NOT NULL,
	  `payment_type` ENUM('none','echeck','instant', 'refund', 'void') DEFAULT NULL,
	  `payment_status` CHAR(20) NOT NULL,
	  `pending_reason` CHAR(50) NOT NULL,
	  `transaction_entity` CHAR(50) NOT NULL,
	  `amount` DECIMAL( 10, 2 ) NOT NULL,
	  `debug_data` TEXT NOT NULL,
	  `call_data` TEXT NOT NULL,
	  PRIMARY KEY (`paypal_order_transaction_id`)
	) ENGINE=MyISAM DEFAULT COLLATE=utf8_general_ci;");
public mixed uninstall ( )
Исходный код метода:
$this->db->query("DROP TABLE IF EXISTS `" . DB_PREFIX . "paypal_order_transaction`;");
$this->db->query("DROP TABLE IF EXISTS `" . DB_PREFIX . "paypal_order`;");
public mixed totalCaptured ( $paypal_order_id )
Исходный код метода:
$qry = $this->db->query("SELECT SUM(`amount`) AS `amount` FROM `" . DB_PREFIX . "paypal_order_transaction` WHERE `paypal_order_id` = '" . (int)$paypal_order_id . "' AND `pending_reason` != 'authorization' AND (`payment_status` = 'Partially-Refunded' OR `payment_status` = 'Completed' OR `payment_status` = 'Pending') AND `transaction_entity` = 'payment'");

return $qry->row['amount'];
public mixed totalRefundedOrder ( $paypal_order_id )
Исходный код метода:
$qry = $this->db->query("SELECT SUM(`amount`) AS `amount` FROM `" . DB_PREFIX . "paypal_order_transaction` WHERE `paypal_order_id` = '" . (int)$paypal_order_id . "' AND `payment_status` = 'Refunded'");

return $qry->row['amount'];
public mixed totalRefundedTransaction ( $transaction_id )
Исходный код метода:
$qry = $this->db->query("SELECT SUM(`amount`) AS `amount` FROM `" . DB_PREFIX . "paypal_order_transaction` WHERE `parent_transaction_id` = '" . $this->db->escape($transaction_id) . "' AND `payment_type` = 'refund'");

return $qry->row['amount'];
public mixed log ( $data, $title = null )
Исходный код метода:
if ($this->config->get('pp_express_debug')) {
	$this->log->write('PayPal Express debug (' . $title . '): ' . json_encode($data));
}
public mixed getOrder ( $order_id )
Исходный код метода:
$qry = $this->db->query("SELECT * FROM `" . DB_PREFIX . "paypal_order` WHERE `order_id` = '" . (int)$order_id . "' LIMIT 1");

if ($qry->num_rows) {
	$order = $qry->row;
	$order['transactions'] = $this->getTransactions($order['paypal_order_id']);
	$order['captured'] = $this->totalCaptured($order['paypal_order_id']);
	return $order;
} else {
	return false;
}
public mixed updateOrder ( $capture_status, $order_id )
Исходный код метода:
$this->db->query("UPDATE `" . DB_PREFIX . "paypal_order` SET `modified` = now(), `capture_status` = '" . $this->db->escape($capture_status) . "' WHERE `order_id` = '" . (int)$order_id . "'");
public mixed addTransaction ( $transaction_data, $request_data = array() )
Исходный код метода:
$this->db->query("INSERT INTO `" . DB_PREFIX . "paypal_order_transaction` SET `paypal_order_id` = '" . (int)$transaction_data['paypal_order_id'] . "', `transaction_id` = '" . $this->db->escape($transaction_data['transaction_id']) . "', `parent_transaction_id` = '" . $this->db->escape($transaction_data['parent_transaction_id']) . "', `created` = NOW(), `note` = '" . $this->db->escape($transaction_data['note']) . "', `msgsubid` = '" . $this->db->escape($transaction_data['msgsubid']) . "', `receipt_id` = '" . $this->db->escape($transaction_data['receipt_id']) . "', `payment_type` = '" . $this->db->escape($transaction_data['payment_type']) . "', `payment_status` = '" . $this->db->escape($transaction_data['payment_status']) . "', `pending_reason` = '" . $this->db->escape($transaction_data['pending_reason']) . "', `transaction_entity` = '" . $this->db->escape($transaction_data['transaction_entity']) . "', `amount` = '" . (double)$transaction_data['amount'] . "', `debug_data` = '" . $this->db->escape($transaction_data['debug_data']) . "'");

$paypal_order_transaction_id = $this->db->getLastId();

if ($request_data) {
	$serialized_data = serialize($request_data);

	$this->db->query("
		UPDATE " . DB_PREFIX . "paypal_order_transaction
		SET call_data = '" . $this->db->escape($serialized_data) . "'
		WHERE paypal_order_transaction_id = " . (int)$paypal_order_transaction_id . "
		LIMIT 1
	");
}

return $paypal_order_transaction_id;
public mixed getFailedTransaction ( $paypl_order_transaction_id )
Исходный код метода:
$result = $this->db->query("
	SELECT *
	FROM " . DB_PREFIX . "paypal_order_transaction
	WHERE paypal_order_transaction_id = " . (int)$paypl_order_transaction_id . "
")->row;

if ($result) {
	return $result;
} else {
	return false;
}
public mixed updateTransaction ( $transaction )
Исходный код метода:
$this->db->query("
	UPDATE " . DB_PREFIX . "paypal_order_transaction
	SET paypal_order_id = " . (int)$transaction['paypal_order_id'] . ",
		transaction_id = '" . $this->db->escape($transaction['transaction_id']) . "',
		parent_transaction_id = '" . $this->db->escape($transaction['parent_transaction_id']) . "',
		created = '" . $this->db->escape($transaction['created']) . "',
		note = '" . $this->db->escape($transaction['note']) . "',
		msgsubid = '" . $this->db->escape($transaction['msgsubid']) . "',
		receipt_id = '" . $this->db->escape($transaction['receipt_id']) . "',
		payment_type = '" . $this->db->escape($transaction['payment_type']) . "',
		payment_status = '" . $this->db->escape($transaction['payment_status']) . "',
		pending_reason = '" . $this->db->escape($transaction['pending_reason']) . "',
		transaction_entity = '" . $this->db->escape($transaction['transaction_entity']) . "',
		amount = '" . $this->db->escape($transaction['amount']) . "',
		debug_data = '" . $this->db->escape($transaction['debug_data']) . "',
		call_data = '" . $this->db->escape($transaction['call_data']) . "'
	WHERE paypal_order_transaction_id = " . (int)$transaction['paypal_order_transaction_id'] . "
");
private mixed getTransactions ( $paypal_order_id )
Исходный код метода:
$qry = $this->db->query("SELECT `ot`.*, (SELECT count(`ot2`.`paypal_order_id`) FROM `" . DB_PREFIX . "paypal_order_transaction` `ot2` WHERE `ot2`.`parent_transaction_id` = `ot`.`transaction_id` ) AS `children` FROM `" . DB_PREFIX . "paypal_order_transaction` `ot` WHERE `paypal_order_id` = '" . (int)$paypal_order_id . "'");

if ($qry->num_rows) {
	return $qry->rows;
} else {
	return false;
}
public mixed getLocalTransaction ( $transaction_id )
Исходный код метода:
$result = $this->db->query("
	SELECT *
	FROM " . DB_PREFIX . "paypal_order_transaction
	WHERE transaction_id = '" . $this->db->escape($transaction_id) . "'
")->row;

if ($result) {
	return $result;
} else {
	return false;
}
public mixed getTransaction ( $transaction_id )
Исходный код метода:
$call_data = array(
	'METHOD' => 'GetTransactionDetails',
	'TRANSACTIONID' => $transaction_id,
);

return $this->call($call_data);
public mixed cleanReturn ( $data )
Исходный код метода:
$data = explode('&', $data);

$arr = array();

foreach ($data as $k => $v) {
	$tmp = explode('=', $v);
	$arr[$tmp[0]] = urldecode($tmp[1]);
}

return $arr;
public mixed call ( $data )
Исходный код метода:
if ($this->config->get('pp_express_test') == 1) {
	$api_endpoint = 'https://api-3t.sandbox.paypal.com/nvp';
} else {
	$api_endpoint = 'https://api-3t.paypal.com/nvp';
}

$settings = array(
	'USER' => $this->config->get('pp_express_username'),
	'PWD' => $this->config->get('pp_express_password'),
	'SIGNATURE' => $this->config->get('pp_express_signature'),
	'VERSION' => '84',
	'BUTTONSOURCE' => 'OpenCart_Cart_EC',
);

$this->log($data, 'Call data');

$defaults = array(
	CURLOPT_POST => 1,
	CURLOPT_HEADER => 0,
	CURLOPT_URL => $api_endpoint,
	CURLOPT_USERAGENT => "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1",
	CURLOPT_FRESH_CONNECT => 1,
	CURLOPT_RETURNTRANSFER => 1,
	CURLOPT_FORBID_REUSE => 1,
	CURLOPT_TIMEOUT => 0,
	CURLOPT_SSL_VERIFYPEER => 0,
	CURLOPT_SSL_VERIFYHOST => 0,
	CURLOPT_POSTFIELDS => http_build_query(array_merge($data, $settings), '', "&")
);

$ch = curl_init();

curl_setopt_array($ch, $defaults);

if (!$result = curl_exec($ch)) {

	$log_data = array(
		'curl_error' => curl_error($ch),
		'curl_errno' => curl_errno($ch)
	);

	$this->log($log_data, 'CURL failed');
	return false;
}

$this->log($result, 'Result');

curl_close($ch);

return $this->cleanReturn($result);
public mixed getOrderId ( $transaction_id )
Исходный код метода:
$qry = $this->db->query("SELECT `o`.`order_id` FROM `" . DB_PREFIX . "paypal_order_transaction` `ot` LEFT JOIN `" . DB_PREFIX . "paypal_order` `o`  ON `o`.`paypal_order_id` = `ot`.`paypal_order_id`  WHERE `ot`.`transaction_id` = '" . $this->db->escape($transaction_id) . "' LIMIT 1");

if ($qry->num_rows) {
	return $qry->row['order_id'];
} else {
	return false;
}
public mixed currencyCodes ( )
Исходный код метода:
return array(
	'AUD',
	'BRL',
	'CAD',
	'CZK',
	'DKK',
	'EUR',
	'HKD',
	'HUF',
	'ILS',
	'JPY',
	'MYR',
	'MXN',
	'NOK',
	'NZD',
	'PHP',
	'PLN',
	'GBP',
	'SGD',
	'SEK',
	'CHF',
	'TWD',
	'THB',
	'TRY',
	'USD',
);
public mixed recurringCancel ( $ref )
Исходный код метода:
$data = array(
	'METHOD' => 'ManageRecurringPaymentsProfileStatus',
	'PROFILEID' => $ref,
	'ACTION' => 'Cancel'
);

return $this->call($data);

Связанные классы:

Название класса Роль
class Config { ... } Компонент Config используется в данном классе
class DB { ... } Компонент Db используется в данном классе

Комментарии