Files
erv-ticket-dev/old/sms-test.php
Fedor 2c516362df feat: Secure SMS verification with Redis (Predis)
- Added Predis library for Redis connection (no PHP extension required)
- Server-side SMS code generation and storage in Redis
- Rate limiting and brute-force protection
- Integration with n8n webhook for SMS sending
- Environment variables moved to .env file
- Fixed policy verification endpoint
- Added file-based fallback if Redis unavailable
2026-01-15 15:40:13 +03:00

187 lines
6.8 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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));