Ответы пользователя по тегу PHP
  • Загрузка фото на сервер ВК?

    Ошибка 129 означает что вы загрузили не допустимый формат изображения.
    Ошибка 100 означает что один из необходимых параметров был не передан или неверен.
    $token = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
    $img = "1.png";
    
    $otvet = curl( 'https://api.vk.com/method/photos.getOwnerPhotoUploadServer?owner_id=xxxxxxx&v=5.45&access_token=' . $token );
    
    $uploadJson = json_decode( $otvet, true )[ 'response' ];
    $info_server_photo = curl( $uploadJson[ 'upload_url' ] );
    
    
    
    $ch = curl_init(); 
    curl_setopt( $ch, CURLOPT_URL, $uploadJson[ 'upload_url' ] ); 
    curl_setopt( $ch, CURLOPT_POST, 1 ); 
    curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
    curl_setopt( $ch, CURLOPT_POSTFIELDS,  array( 'file' => dirname( __FILE__ ) . '\\' . $img ) ); 
    $otvet_photo = curl_exec( $ch ); 
    curl_close( $ch );
    
    $info_server_photo = json_decode( $otvet_photo, true );
    $savePhoto = curl( 'https://api.vk.com/method/photos.saveWallPhoto?access_token=' . $token . '&server=' . $info_server_photo[ 'server' ] . '&photo=' . $info_server_photo[ 'photo' ] . '&hash=' . $info_server_photo[ 'hash' ] );
    print_r( json_decode( $savePhoto, true ) );
    
    function curl( $url ){
        $ch = curl_init( $url );
        curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
        curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, false );
        curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false );
        $response = curl_exec( $ch );
        curl_close( $ch );
        return $response;    
    }
    Ответ написан
    Комментировать
  • Какие Вы знаете источники знаний о PHP?

    Ответ написан
    Комментировать
  • SMTP Пример, простой отправки письма!?

    Вот тебе функция отправки письма через SMTP:

    <?php
    /**
    * smtp_mail() - Отправка электронной почты с авторизацией через SMTP сервер
    * v1.0.0
    *
    * smtp_read(); smtp_write() - вторичные
    * Подключаемая пользовательская функция для отправки сообщений по электронной почте 
    * с использованием аутентификации пользователя на почтовом сервере SMTP.
    * Рекомендуется использовать в том случае, если стандартная функция mail()
    * на хостинге работает неправильно или с ошибками. Данная функция корректно 
    * работает на PHP 4 и выше с установленным модулем расширения php_sockets
    * 
    *
    * http://koks-host.ru
    * Оригинальная кодировка UTF-8
    */
    
    function smtp_mail ($smtp,			// SMTP-сервер
    					$port,			// порт SMTP-сервера
    					$login,			// имя пользователя для доступа к почтовому ящику
    					$password, 		// пароль для доступа к почтовому ящику
    					$from,			// адрес электронной почты отправителя
    					$from_name,		// имя отправителя
    					$to, 			// адрес электронной почты получателя
    					$subject, 		// тема сообщения
    					$message,		// текст сообщения
    					$res)			// сообщение, выводимое при успешной отправке
    {	
    
    //    header('Content-Type: text/plain;');	// необязательный параметр, особенно если включаем через include()
    //    error_reporting(E_ALL ^ E_WARNING);	// необязательный параметр, включает отображение всех ошибок и предупреждений
    //    ob_implicit_flush();					// необязательный параметр, включает неявную очистку
    
    //    блок для других кодировок, отличных от UTF-8
    //    $message = iconv("UTF-8","KOI8-R",$message); // конвертируем в koi8-r
    //    $message = "Content-Type: text/plain; charset=\"koi8-r\"\r\nContent-Transfer-Encoding: 8bit\r\n\r\n".$message; // конвертируем в koi8-r
    //    $subject=base64_encode(iconv("UTF-8","KOI8-R",$subject)); // конвертируем в koi8-r
    //    $subject=base64_encode($subject); // конвертируем в koi8-r
    
    	$from_name = base64_encode($from_name);
    	$subject = base64_encode($subject);
    	$message = base64_encode($message);
        $message = "Content-Type: text/plain; charset=\"utf-8\"\r\nContent-Transfer-Encoding: base64\r\nUser-Agent: Koks Host Mail Robot\r\nMIME-Version: 1.0\r\n\r\n".$message;
        $subject="=?utf-8?B?{$subject}?=";
        $from_name="=?utf-8?B?{$from_name}?=";
    
        try {
            
            $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
            if ($socket < 0) {
                throw new Exception('socket_create() failed: '.socket_strerror(socket_last_error())."\n");
            }
    
            $result = socket_connect($socket, $smtp, $port);
            if ($result === false) {
                throw new Exception('socket_connect() failed: '.socket_strerror(socket_last_error())."\n");
            } 
    
            smtp_read($socket);
            
            smtp_write($socket, 'EHLO '.$login);
            smtp_read($socket); 
            smtp_write($socket, 'AUTH LOGIN');
            smtp_read($socket);        
            smtp_write($socket, base64_encode($login));
            smtp_read($socket);
            smtp_write($socket, base64_encode($password));
            smtp_read($socket); 
            smtp_write($socket, 'MAIL FROM:<'.$from.'>');
            smtp_read($socket); 
            smtp_write($socket, 'RCPT TO:<'.$to.'>');
            smtp_read($socket); 
            smtp_write($socket, 'DATA');
            smtp_read($socket); 
            $message = "FROM:".$from_name."<".$from.">\r\n".$message; 
            $message = "To: $to\r\n".$message; 
            $message = "Subject: $subject\r\n".$message;
    
    	date_default_timezone_set('UTC');
    	$utc = date('r');
    
            $message = "Date: $utc\r\n".$message;
            smtp_write($socket, $message."\r\n.");
            smtp_read($socket); 
            smtp_write($socket, 'QUIT');
            smtp_read($socket); 
            return $res;
            
        } catch (Exception $e) {
            echo "\nError: ".$e->getMessage();
        }
    
       
        if (isset($socket)) {
            socket_close($socket);
        }
    }
    
    function smtp_read($socket) {
    	$read = socket_read($socket, 1024);
            if ($read{0} != '2' && $read{0} != '3') {
                if (!empty($read)) {
                    throw new Exception('SMTP failed: '.$read."\n");
                } else {
                    throw new Exception('Unknown error'."\n");
                }
            }
    }
        
    function smtp_write($socket, $msg) {
    	$msg = $msg."\r\n";
    	socket_write($socket, $msg, strlen($msg));
    }
    
    ?>


    Думаю поймешь как использовать.
    Ответ написан
  • Как исправить ошибку "Соединение было сброшено"?

    djalexsey
    @djalexsey Автор вопроса
    При запуске скрипта, он отправляет XML запрос файлу agent.php, а файл agent.php перезапускает apache т.к создаётся новая подписка.
    Ответ написан
    Комментировать
  • Как настроить оплату через WalletOne?

    djalexsey
    @djalexsey Автор вопроса
    result.php
    <?php
    
    // Секретный ключ интернет-магазина (настраивается в кабинете)
    
    $skey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
    
    // Функция, которая возвращает результат в Единую кассу
    
    function print_answer($result, $description)
    {
    print "WMI_RESULT=" . strtoupper($result) . "&";
    print "WMI_DESCRIPTION=" .urlencode($description);
    exit();
    }
    
    // Проверка наличия необходимых параметров в POST-запросе
    
    if (!isset($_POST["WMI_SIGNATURE"]))
    print_answer("Retry", "Отсутствует параметр WMI_SIGNATURE");
    
    if (!isset($_POST["WMI_PAYMENT_NO"]))
    print_answer("Retry", "Отсутствует параметр WMI_PAYMENT_NO");
    
    if (!isset($_POST["WMI_ORDER_STATE"]))
    print_answer("Retry", "Отсутствует параметр WMI_ORDER_STATE");
    
    // Извлечение всех параметров POST-запроса, кроме WMI_SIGNATURE
    
    foreach($_POST as $name => $value)
    {
    if ($name !== "WMI_SIGNATURE") $params[$name] = $value;
    }
    
    // Сортировка массива по именам ключей в порядке возрастания
    // и формирование сообщения, путем объединения значений формы
    
    uksort($params, "strcasecmp"); $values = "";
    
    foreach($params as $name => $value)
    {
    //Конвертация из текущей кодировки (UTF-8)
    //необходима только если кодировка магазина отлична от Windows-1251
    $value = iconv("utf-8", "windows-1251", $value);
    $values .= $value;
    }
    
    // Формирование подписи для сравнения ее с параметром WMI_SIGNATURE
    
    $signature = base64_encode(pack("H*", md5($values . $skey)));
    
    //Сравнение полученной подписи с подписью W1
    
    if ($signature == $_POST["WMI_SIGNATURE"])
    {
    if (strtoupper($_POST["WMI_ORDER_STATE"]) == "ACCEPTED")
    {
    // TODO: Пометить заказ, как «Оплаченный» в системе учета магазина
    
    print_answer("Ok", "Заказ #" . $_POST["WMI_PAYMENT_NO"] . " оплачен!");
    }
    else
    {
    // Случилось что-то странное, пришло неизвестное состояние заказа
    
    print_answer("Retry", "Неверное состояние ". $_POST["WMI_ORDER_STATE"]);
    }
    }
    else
    {
    // Подпись не совпадает, возможно вы поменяли настройки интернет-магазина
    
    print_answer("Retry", "Неверная подпись " . $_POST["WMI_SIGNATURE"]);
    }
    
    ?>

    pay.php
    //Секретный ключ интернет-магазина
    $key = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
    
    $fields = array();
    
    // Добавление полей формы в ассоциативный массив
    $fields["WMI_MERCHANT_ID"]    = "11111111111";
    $fields["WMI_PAYMENT_AMOUNT"] = "0.1";
    $fields["WMI_CURRENCY_ID"]    = "643";
    $fields["WMI_PAYMENT_NO"]     = "12345-005";
    $fields["WMI_SUCCESS_URL"]    = "http://site.ru/_PaySystem/w1/result.php";
    $fields["WMI_DESCRIPTION"]    = "BASE64:".base64_encode("Пополнение лицевого счета");
    $fields["WMI_EXPIRED_DATE"]   = "2019-12-31T23:59:59";
    $fields["Login"]       = "admin";
    
    //Сортировка значений внутри полей
    foreach($fields as $name => $val)
    {
    if (is_array($val))
    {
    usort($val, "strcasecmp");
    $fields[$name] = $val;
    }
    }
    
    // Формирование сообщения, путем объединения значений формы,
    // отсортированных по именам ключей в порядке возрастания.
    uksort($fields, "strcasecmp");
    $fieldValues = "";
    
    foreach($fields as $value)
    {
    if (is_array($value))
    foreach($value as $v)
    {
    //Конвертация из текущей кодировки (UTF-8)
    //необходима только если кодировка магазина отлична от Windows-1251
    $v = iconv("utf-8", "windows-1251", $v);
    $fieldValues .= $v;
    }
    else
    {
    //Конвертация из текущей кодировки (UTF-8)
    //необходима только если кодировка магазина отлична от Windows-1251
    $value = iconv("utf-8", "windows-1251", $value);
    $fieldValues .= $value;
    }
    }
    
    // Формирование значения параметра WMI_SIGNATURE, путем
    // вычисления отпечатка, сформированного выше сообщения,
    // по алгоритму MD5 и представление его в Base64
    
    $signature = base64_encode(pack("H*", md5($fieldValues . $key)));
    
    //Добавление параметра WMI_SIGNATURE в словарь параметров формы
    
    $fields["WMI_SIGNATURE"] = $signature;
    
    // Формирование HTML-кода платежной формы
    
    print '<form action="https://www.walletone.com/checkout/default.aspx" method="POST">';
    
    foreach($fields as $key => $val)
    {
    if (is_array($val))
    foreach($val as $value)
    {
    print $key.':<input type="text" name="'.$key.'" value="'.$value.'"/>';
    }
    else
    print $key.':<input type="text" name="'.$key.'" value="'.$val.'"/>';
    }
    
    print '<input type="submit"/></form>';
    Ответ написан