*/ class LiqPay { protected $_supportedCurrencies = array('EUR','UAH','USD','RUB','RUR'); protected $_supportedParams = array('public_key','amount','currency','description', 'order_id','result_url','server_url','type', 'signature','language','sandbox'); private $_public_key; private $_private_key; /** * Constructor. * * @param string $public_key * @param string $private_key */ public function __construct() { $public_key = 'i97687297403'; $private_key = 'cyldb7BRxvcfZkP5OKmsLFflkRtq1rAjC9dhMzuL'; if (empty($public_key)) { throw new Exception('public_key is empty'); } if (empty($private_key)) { throw new Exception('private_key is empty'); } $this->_public_key = $public_key; $this->_private_key = $private_key; } /** * Call API * * @param string $url * @param array $params * * @return string */ public function api($url, $params = array()) { $url = 'https://www.liqpay.com/api/'.$url; $public_key = $this->_public_key; $private_key = $this->_private_key; $data = json_encode(array_merge(compact('public_key'), $params)); $signature = base64_encode(sha1($private_key.$data.$private_key, 1)); $postfields = "data={$data}&signature={$signature}"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS,$postfields); curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); $server_output = curl_exec($ch); curl_close($ch); return json_decode($server_output); } /** * cnb_form * * @param array $params * * @return string */ public function cnb_form($params) { $public_key = $params['public_key'] = $this->_public_key; $private_key = $this->_private_key; if (!isset($params['amount'])) { throw new Exception('Amount is null'); } if (!isset($params['currency'])) { throw new Exception('Currency is null'); } if (!in_array($params['currency'], $this->_supportedCurrencies)) { throw new Exception('Currency is not supported'); } if ($params['currency'] == 'RUR') { $params['currency'] = 'RUB'; } if (!isset($params['description'])) { throw new Exception('Description is null'); } $params['signature'] = $this->cnb_signature($params); $language = 'ru'; if (isset($params['language']) && $params['language'] == 'en') { $language = 'en'; } $inputs = array(); foreach ($params as $key => $value) { if (!in_array($key, $this->_supportedParams)) { continue; } $inputs[] = sprintf('', $key, $value); } return sprintf('
', join("\r\n", $inputs), $language ); } /** * cnb_signature * * @param array $params * * @return string */ public function cnb_signature($params) { $public_key = $params['public_key'] = $this->_public_key; $private_key = $this->_private_key; if ($params['currency'] == 'RUR') { $params['currency'] = 'RUB'; } $amount = $params['amount']; $currency = $params['currency']; $description = $params['description']; $order_id = ''; if (isset($params['order_id'])) { $order_id = $params['order_id']; } $type = ''; if (isset($params['type'])) { $type = $params['type']; } $result_url = ''; if (isset($params['result_url'])) { $result_url = $params['result_url']; } $server_url = ''; if (isset($params['server_url'])) { $server_url = $params['server_url']; } $signature = $this->str_to_sign( $private_key. $amount. $currency. $public_key. $order_id. $type. $description. $result_url. $server_url ); return $signature; } /** * str_to_sign * * @param array $params * * @return string */ public function str_to_sign($str) { $signature = base64_encode(sha1($str,1)); return $signature; } }