Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- /**
- * Created by PhpStorm.
- * User: viktor
- * Date: 30.04.2017
- * Time: 23:56
- */
- namespace common\components\liqpay;
- use Doctrine\Instantiator\Exception\InvalidArgumentException;
- use yii\base\Component;
- /**
- * Liqpay Payment Module
- *
- * NOTICE OF LICENSE
- *
- * This source file is subject to the Open Software License (OSL 3.0)
- * that is available through the world-wide-web at this URL:
- * http://opensource.org/licenses/osl-3.0.php
- *
- * @category LiqPay
- * @package liqpay/liqpay
- * @version 3.0
- * @author Liqpay
- * @copyright Copyright (c) 2014 Liqpay
- * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
- *
- * EXTENSION INFORMATION
- *
- * LIQPAY API https://www.liqpay.com/ru/doc
- *
- */
- /**
- * Payment method liqpay process
- *
- * @author Liqpay <support@liqpay.com>
- */
- class Liqpay extends Component
- {
- const CURRENCY_EUR = 'EUR';
- const CURRENCY_USD = 'USD';
- const CURRENCY_UAH = 'UAH';
- const CURRENCY_RUB = 'RUB';
- const CURRENCY_RUR = 'RUR';
- private $_api_url = 'https://www.liqpay.com/api/';
- private $_checkout_url = 'https://www.liqpay.com/api/3/checkout';
- protected $_supportedCurrencies = array(
- self::CURRENCY_EUR,
- self::CURRENCY_USD,
- self::CURRENCY_UAH,
- self::CURRENCY_RUB,
- self::CURRENCY_RUR,
- );
- private $_public_key;
- private $_private_key;
- private $_server_response_code = null;
- /**
- * Constructor.
- *
- * @param string $public_key
- * @param string $private_key
- *
- * @throws InvalidArgumentException
- */
- public function __construct()
- {
- parent::__construct();
- $this->_public_key = env('LIQPAY_PUBLIC_KEY');
- $this->_private_key = env('LIQPAY_PRIVATE_KEY');
- }
- /**
- * Call API
- *
- * @param string $path
- * @param array $params
- *
- * @return string
- */
- public function api($path, $params = array())
- {
- if (!isset($params['version'])) {
- throw new InvalidArgumentException('version is null');
- }
- $url = $this->_api_url . $path;
- $public_key = $this->_public_key;
- $private_key = $this->_private_key;
- $data = base64_encode(json_encode(array_merge(compact('public_key'), $params)));
- $signature = base64_encode(sha1($private_key.$data.$private_key, 1));
- $postfields = http_build_query(array(
- '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);
- $this->_server_response_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
- curl_close($ch);
- return json_decode($server_output);
- }
- /**
- * Return last api response http code
- * @return string|null
- */
- public function get_response_code()
- {
- return $this->_server_response_code;
- }
- /**
- * cnb_form
- *
- * @param array $params
- *
- * @return string
- *
- * @throws InvalidArgumentException
- */
- public function cnb_form($params)
- {
- $language = 'ru';
- if (isset($params['language']) && $params['language'] == 'en') {
- $language = 'en';
- }
- $params = $this->cnb_params($params);
- $data = base64_encode(json_encode($params));
- $signature = $this->cnb_signature($params);
- return sprintf('
- <form method="POST" action="%s" accept-charset="utf-8">
- %s
- %s
- <input type="image" class="pay-button" src="//static.liqpay.com/buttons/p1%s.radius.png" name="btn_text" />
- </form>
- ',
- $this->_checkout_url,
- sprintf('<input type="hidden" name="%s" value="%s" />', 'data', $data),
- sprintf('<input type="hidden" name="%s" value="%s" />', 'signature', $signature),
- $language
- );
- }
- /**
- * cnb_signature
- *
- * @param array $params
- *
- * @return string
- */
- public function cnb_signature($params)
- {
- $params = $this->cnb_params($params);
- $private_key = $this->_private_key;
- $json = base64_encode(json_encode($params));
- $signature = $this->str_to_sign($private_key . $json . $private_key);
- return $signature;
- }
- /**
- * cnb_params
- *
- * @param array $params
- *
- * @return array $params
- */
- private function cnb_params($params)
- {
- $params['public_key'] = $this->_public_key;
- if (!isset($params['version'])) {
- throw new InvalidArgumentException('version is null');
- }
- if (!isset($params['amount'])) {
- throw new InvalidArgumentException('amount is null');
- }
- if (!isset($params['currency'])) {
- throw new InvalidArgumentException('currency is null');
- }
- if (!in_array($params['currency'], $this->_supportedCurrencies)) {
- throw new InvalidArgumentException('currency is not supported');
- }
- if ($params['currency'] == self::CURRENCY_RUR) {
- $params['currency'] = self::CURRENCY_RUB;
- }
- if (!isset($params['description'])) {
- throw new InvalidArgumentException('description is null');
- }
- return $params;
- }
- /**
- * str_to_sign
- *
- * @param string $str
- *
- * @return string
- */
- public function str_to_sign($str)
- {
- $signature = base64_encode(sha1($str, 1));
- return $signature;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement