<?php error_reporting(E_ALL);
ini_set('display_errors', 1);
/* SigmaSMS REST API 
 * https://online.sigmasms.ru/docs/#/api/HTTP-REST
 */

// Универсальная функция отправки
function apiRequest($first = false, $data = false, $url_path = false, $token = false, $file = false) {
    global $token_filename;
    $api_url = 'https://online.sigmasms.ru/api/';
    $login = 'kfv.advokat@gmail.com';
    $pass = 's7NRIb';
    // Get Token
    if ($first) {
        $fields = array(
            'username' => $login,
            'password' => $pass,
            'type'     => 'local'
        );
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $api_url.'login');
        curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/json; charset=UTF-8"));
        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode( $fields ));
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  
        curl_setopt($ch, CURLOPT_HEADER, 0);
        $response = curl_exec($ch);
        curl_close($ch);
        if (!$response) {
            $response = json_encode(array('error' => 'true'));
        } else {
            file_put_contents($token_filename, $response);
        }
    } elseif ($url_path && $token) {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $api_url.$url_path);
        if ($file) {
            curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: ".mime_content_type($data['file']), "Content-length: ".filesize($data['file']), "Authorization: ".$token));
            curl_setopt($ch, CURLOPT_POSTFIELDS, file_get_contents($data['file']));
        } else {
            curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/json;charset=UTF-8", "Accept: application/json", "Authorization: ".$token));
            if ($data && is_array($data)) {
                curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode( $data ));
            }
        }
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  
        curl_setopt($ch, CURLOPT_HEADER, 0);
        $response = curl_exec($ch);
        curl_close($ch);
        if (!$response) {
            $response = json_encode(array('error' => 'true'));
        }
    }
    header("Content-Type: application/json;charset=UTF-8");
    return $response;
}
// Авторизация и получение токена
function apiAuth() {
    // Название файла для сохранения токена
    $token_filename = 'sigmatoken.txt';
    // проверяем токен
    if (file_exists($token_filename) && (date('Y-m-d H:i:s', filemtime($token_filename)) > date('Y-m-d H:i:s', strtotime('-23 hours')))) {
        $result = file_get_contents($token_filename, true);
    } else {
        $result = apiRequest(true);
    }
    //
    $unjes = json_decode($result);
    if (isset($unjes->token) && !empty($unjes->token)) {
        $token = (string) $unjes->token;
    } else {
        $token = null;
    }
    return $token;
}
//
function clear_phone($phone) {
    $phone_number = preg_replace('/[() -]+/', '', $phone);
    return $phone_number;
}
// Загрузка файла
function uploadFile($file_path) {
    $token = apiAuth();
    if ($token) {
        $dataFile = array('file' => dirname(__FILE__).'/'.$file_path);
        return apiRequest(false, $dataFile, 'storage', $token, true);
    }
}
// Отправка одиночного сообщения
function sendOneMess($type, $recipient, $sender, $text, $button = null, $image = null) {
    $token = apiAuth();
    $token = '27f89492e00973263ff746a655663678fae7203bac8b62919700e489e33b3902';
    if ($token) {
        $params = array(
            "type"       => $type,
            "recipient"  => clear_phone($recipient),
            "payload"    => array(
                "sender" => $sender,
                "text"   => $text,
                "button" => $button, 
                "image"  => $image
            )
        );
        return apiRequest(false, $params, 'sendings', $token);
    }
}
// Отправка каскада
function sendCascade($data) {
    $token = apiAuth();
    if ($token) {
        return apiRequest(false, $data, 'sendings', $token);
    }
}
// Проверка статуса
function checkStatus($id) {
    if ($id) {
        $token = apiAuth();
        if ($token) {
            return apiRequest(false, false, 'sendings/'.$id, $token);
        }
    }
}

/* Тесты */
$myphone = $_POST['phonenumber'];
echo 'Тест СМС: '.PHP_EOL;
$sendSms = sendOneMess('sms', $myphone, 'Clientright', 'Код подтверждения: '.$_POST['smscode']);
var_dump($sendSms);

// echo PHP_EOL.'Проверка статуса сообщения: '.PHP_EOL;
// var_dump(checkStatus('6035fe28-2f60-4973-8681-jhjh887990087'));

// echo PHP_EOL.'Загрузка картинки: '.PHP_EOL;
// $upload_image = uploadFile('test.png');
// var_dump($upload_image);
// echo 'Проверить корректность загрузки можно по ссылке: https://online.sigmasms.ru/api/storage/{user_id}/{image_key}'.PHP_EOL;

// echo PHP_EOL.'Тест Viber: '.PHP_EOL;
// $msg_image = json_decode($upload_image);
// if (isset($msg_image->key)) {
//     var_dump(sendOneMess('viber', $myphone, 'X-City', 'Тест сообщения Viber', array('text' => 'Текст кнопки', 'url' => 'https://google.ru'), $msg_image->key));
// }

// echo PHP_EOL.'Каскадная переотправка VK->Viber->SMS: '.PHP_EOL;
// $cascadeData = array(
//     "type"       => 'vk',
//     "recipient"  => clear_phone($myphone),
//     "payload"    => array(
//         "sender" => 'sigmasmsru',
//         "text"   => 'Тест сообщения ВК',
//     ),
//     "fallbacks"  => [
//         array(
//             "type"       => 'viber',
//             "payload"    => array(
//                 "sender" => 'X-City',
//                 "text"   => 'Тест сообщения Viber',
//                 "image"  => $msg_image->key,
//                 "button" => array(
//                     "text" => "Текст кнопки",
//                     "url"  => 'https://google.ru',
//                 ),
//             ),
//             '$options' => array(
//                 "onStatus" => ["failed"],
//                 "onTimeout" => array(
//                     "timeout" => 120,
//                     "except"  => ["delivered", "seen"]
//                 )
//             )
//         ),
//         array(
//             "type"    => "sms",
//             "payload" => array(
//                 "sender" => "SigmaSMS",
//                 "text"   => 'Тест сообщения СМС'
//             ),
//             '$options' => array(
//                 "onStatus" => ["failed"],
//                 "onTimeout" => array(
//                     "timeout" => 120,
//                     "except"  => ["delivered", "seen"]
//                 )
//             )
//         )
//     ]
// );
// var_dump(sendCascade($cascadeData));