cert_id = $cert_id;
$this->merchant_name = $merchant_name;
$this->merchant_id = $merchant_id;
}
function createLink($order_id,$currency="398"){
$amount = 50;
// -----------------------------------------------------------------------------------------------------------------
// Переворачиваем ключ
$this->invert();
// -----------------------------------------------------------------------------------------------------------------
// Открываем публичный ключ. "ключ", "пароль"
$this->load_private_key(__DIR__."/test.pem", "WDfUveEf9i3");
// -----------------------------------------------------------------------------------------------------------------
// Шаблон заказа
$merchant = '';
// -----------------------------------------------------------------------------------------------------------------
// Подготовка данных заказа, обработка шаблона
$merchant = preg_replace('/\%certificate\%/', $this->cert_id , $merchant);
$merchant = preg_replace('/\%merchant_name\%/', $this->merchant_name , $merchant);
$merchant = preg_replace('/\%order_id\%/', $order_id, $merchant);
$merchant = preg_replace('/\%currency\%/', $currency, $merchant);
$merchant = preg_replace('/\%merchant_id\%/', $this->merchant_id, $merchant);
$merchant = preg_replace('/\%amount\%/', $amount, $merchant);
// -----------------------------------------------------------------------------------------------------------------
// Подготавливаем подпись
$merchant_sign = ''.$this->sign64($merchant).'';
// -----------------------------------------------------------------------------------------------------------------
// Составляем пакет
$xml = "".$merchant.$merchant_sign."";
// -----------------------------------------------------------------------------------------------------------------
// Выводим пакет
//echo $xml;
/*
$url = 'https://testpay.kkb.kz/jsp/process/logon.jsp';
//$url = 'https://epay.kkb.kz/jsp/process/logon.jsp';
if ($curl = curl_init()){
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER,true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER,0);
curl_setopt($curl, CURLOPT_POST,1);
curl_setopt($curl, CURLOPT_POSTFIELDS,[
'Signed_Order_B64'=>$xml,
'email'=>'starosta-91@ya.ru',
'BackLink'=>$url,
'PostLink'=>$url,
'FailureBackLink'=>$url,
]);
$out = curl_exec($curl);
echo '
';
echo var_dump($out);
echo '';
curl_close($curl);
$res = json_decode($out);
}
/**/
$items = ' ';
return [
'order'=>base64_encode($xml),
'items'=>base64_encode($items),
];
}
function load_private_key($filename, $password = NULL){
if(!is_file($filename))
{
echo "Key not found";
return false;
}
$c = file_get_contents($filename);
if($password)
$prvkey = openssl_get_privatekey($c, $password) or die(openssl_error_string());
else
$prvkey = openssl_get_privatekey($c) or die(openssl_error_string());
if(is_resource($prvkey)){
$this->private_key = $prvkey;
return $c;
}
return false;
}
// -----------------------------------------------------------------------------------------------
// Установка флага инверсии
function invert(){
$this->invert = 1;
}
// -----------------------------------------------------------------------------------------------
// Процесс инверсии строки
function reverse($str){
return strrev($str);
}
// -----------------------------------------------------------------------------------------------
function sign($str)
{
if($this->private_key)
{
openssl_sign($str, $out, $this->private_key);
if($this->invert == 1) $out = $this->reverse($out);
return $out;
}
}
// -----------------------------------------------------------------------------------------------
function sign64($str){
return base64_encode($this->sign($str));
}
// -----------------------------------------------------------------------------------------------
function check_sign($data, $str, $filename){
if($this->invert == 1) $str = $this->reverse($str);
if(!is_file($filename)) return false;
$pubkey = file_get_contents($filename);
return openssl_verify($data, $str, $pubkey);
}
// -----------------------------------------------------------------------------------------------
function check_sign64($data, $str, $filename){
return $this->check_sign($data, base64_decode($str), $filename);
}
}