Модератор форума: JonMagon |
Сообщество uCoz » Мастерская uCoz » Использование PHP и API на uCoz » Проблемы при использовании PHP (Ошибки, длительная загрузка скриптов и т. д.) |
Проблемы при использовании PHP |
Если у Вас возникли проблемы при работе с PHP (ошибки, длительная загрузка скриптов, неработоспособность функций и т. д.), Вы можете написать в данной теме. |
и не появится в файловом менеджере, вы же должны заливать на отдельно выделенный PHP сервер если вы оплатили услугу пхп
|
Вообщем подключил я php включил api,смысл в том что я подключаю смс биллинг, скрипты писались компанией под меня все рассказали как настроить сделал все верно но работать не работает пишет ({"SCRIPTDATA":"\ufeff","ERROR":"","SHUTDOWN":1}) в чём проблема где копать?
|
ВОТ ЧТО ОН ПИШЕТ ну вообще такой ответ даже при обращении к mk_api.php если учесть что вы в этом файле ничего не меняли и он не выполняет никаких действий, просто содержит функции взаимодействия с системой, то что-то имено в платформе юкоза... это уже Вам к ним обратиться лучше
|
скажите пожалуйста хотя бы что это значит? принцип работы: Вы сохраняете данные для доступа к каждому аккаунту в архив с паролем. Данные по цене, паролю и т. д. вносите в файл mk_config.php.Пользователей со страницы информационного или рекламного характера перенаправляете на страниццу mk_payment.php?prod=имя продукта из файла mk_config.php.
Далее, если акк еще не куплен пользователя просят ввести номер телефона, если телефон к оплате принят юзер перенаправляется на финальную страницу, где после проверки платежа может скачать архив и увидеть пароль от него, после чего архив удет удален. В архиве 4 файла, помимо данного: mk_config.php -файл конфигурации с перечнем аккаунтов, именами файлов архивов и паролями к архивам а так же ценой за каждую услугу. при этом первый ключ(в примере tovar1,tovar2,tovar3)-это как бы название аккаунта. Вы его передаете как GET или POST параметр на страницу mk_payment.php, то есть у Вас, например баннер с рекламой конкретного аккаунта, по клику оплатить Вы перенаправляете юзера на страницу mk_payment.php?prod=akk1, при этом в файле mk_config.php должен быть элемент массива akk1, у него должны быть элементы file, pass, price. mk_payment.php-собственно файл оплаты-на него Вы должны перенаправлять пользователей с параметром prod то есть mk_payment.php?prod= название продукта, который есть в массиве $files_attr в файле mk_config.php . На странице оплаты проверяется, есть ли товар в файле конфигурации, существует ли сам архив(не купили ли уже архив), и если все в порядке, выводит пользователю окно ввода номера и при успешном принятии системой запроса на оплату переводит пользователя на страницу завершения pay_ok.php с параметрами товара и айди платежа в системе x-bill.org На данной странице пользователя просят нажать кнопку подтверждения после завершения оплаты. После чего скрипт запрашивает x-bill.org о состоянии платежа-если платеж прошел-открывается ссылка на архив, после скачивания которого можно получить пароль и архив будет удален. Если оплата не прошла по каким-то причинам-выдается ошибка. Файл mk_api.php предназначен для взаимодействия с системой. Все файлы включая(желательно) архивы должны храниться в одной папке на хосте. Добавлено (23 Янв 2014, 21:47:56) Добавлено (23 Янв 2014, 21:56:35) |
|
Vladimir4544, уже 20 миллиардов раз писали как, учимся читать соседние темы.
Благодарности можно оставить — в репутации.
Помощью в ЛС не занимаюсь, есть форум. Занимаюсь сайтами на платной основе. Шаманю на php и mysql с использованием бубна 80 lvl. |
почему у меня они не работают? на вас последняя надежда описание как и что должно работать выше а вот сами скрипты mk_api.php <?php header("Content-Type: text/html; charset=UTF-8"); # Мобильная комерция x-bill.org ( API v.1.2 ) $mk_config = array(); $mk_config['usr'] = "zakamyl"; # Ваш логин на сайте x-bill.org $mk_config['key'] = "12345"; # Контрольная строка (указана в настройках проекта) $mk_config['sid'] = "68"; # ID проекта # Тут ничего менять не нужно! $mk_config['api1'] = "http://api.x-bill.org/"; # Основной адрес. $mk_config['api2'] = "http://api.x-bill.ru/"; # Дополнительный адрес на случай если первый не отвечает. # Инициализации платежа function mk_create_pay ($phone, $cost, $desc, $answer="", $arr=array()) { global $mk_config; $phone = preg_replace('/[^0-9]/', '', $phone); $cost = (float)str_replace(",", ".", $cost); $desc = $desc; $answer = $answer; $var = ""; if (isset ($arr)) { $keys = array_keys ($arr); for($i=0; $i<count($keys); $i++){ $var .= "&{$keys[$i]}=".$arr[$keys[$i]]; } } $post = "phone={$phone}&cost={$cost}&desc={$desc}&answer={$answer}&sign=".mk_create_sign($phone)."&login={$mk_config['usr']}&sid={$mk_config['sid']}{$var}"; $result = mk_send_data ($post, $mk_config['api1']."payment.php"); if ($result == 'error') { $result = mk_send_data ($post, $mk_config['api2']."payment.php"); } if ($result == 'error') { return "0"; }else{ $result = mk_parse_result($result); return $result; } } # Узнаем статус платежа по ID function mk_get_status($id) { global $mk_config; $post = "id={$id}&sign=".mk_create_sign()."&login={$mk_config['usr']}&sid={$mk_config['sid']}"; $result = mk_send_data ($post, $mk_config['api1']."status.php"); if ($result == 'error') { $result = mk_send_data ($post, $mk_config['api2']."status.php"); } if ($result == 'error') { return "0"; }else{ $result = mk_parse_result($result); return $result; } } # Запрашиваем баланс function mk_get_balance($password = "", $sid = "", $dade_in = "", $date_to = "") { global $mk_config; $post = "login={$mk_config['usr']}&sid={$sid}&pass=".md5($password)."&date_in={$dade_in}&date_to={$date_to}"; $result = mk_send_data ($post, $mk_config['api1']."balance.php"); if ($result == 'error') { $result = mk_send_data ($post, $mk_config['api2']."balance.php"); } if ($result == 'error') { return "0"; }else{ $result = mk_parse_result($result); return $result; } } # Формируем подпись function mk_create_sign ($phone=""){ global $mk_config; return md5($mk_config['usr'].$mk_config['key'].$mk_config['sid'].$phone); } # Разбираем ответ от скрипта function mk_parse_result ($result){ $XML = trim($result); $returnVal = $XML; $emptyTag = '<(.*)/>'; $fullTag = '<\\1></\\1>'; $XML = preg_replace ("|$emptyTag|", $fullTag, $XML); $matches = array(); if (preg_match_all('|<(.*)>(.*)</\\1>|Ums', trim($XML), $matches)) { if (count($matches[1]) > 0) $returnVal = array(); foreach ($matches[1] as $index => $outerXML){ $attribute = $outerXML; $value = mk_parse_result($matches[2][$index]); if (! isset($returnVal[$attribute])) $returnVal[$attribute] = array(); $returnVal[$attribute][] = $value; } } if (is_array($returnVal)) foreach ($returnVal as $key => $value){ if (is_array($value) && count($value) == 1 && key($value) === 0){ $returnVal[$key] = $returnVal[$key][0]; } } return $returnVal; } # Отпраляем POST запрос function mk_send_data ($post, $url){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,$url); curl_setopt($ch, CURLOPT_FAILONERROR, 1); #curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); # Разрешить переадресацию curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); curl_setopt($ch, CURLOPT_TIMEOUT, 4); # Таймаут не менять! curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 60); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $post); $result = curl_exec($ch); $status = curl_errno($ch); curl_close($ch); if ($status == 0 && !empty($result)) { return $result; }else{ return "error"; } } ?> mk_config.php <? ##################################################################################################################################### //массив содержит весь перечень аккаунтов tovar1,tovar2,tovar3-название товара(передается на страницу mk_payment.php в виде параметра prod) // далее у каждого товара есть атрибуты file-название файла архива для скачивание(можно с путем, но желательно все в одной папке хранить, во избежание ошибок) //pass-пароль, который Вы установите на этот конкретный архив //price-цена, за архив в рублях ##################################################################################################################################### $files_attr=array ( "Vadim2mms"=>array("file"=>"http://tanki-akki.ucoz.ru/akkaynt.rar","pass"=>"zakt","price"=>70),//название товара(передается в форму оплаты), файл у Вас на сайте, архив с аккаунтом,пароль к нему и цена услуги; "tovar2"=>array("file"=>"file2.rar","pass"=>"55525","price"=>200), "tovar3"=>array("file"=>"file3.rar","pass"=>"54545","price"=>500) ); ?> mk_payment.php <? ##################################Страница оплаты######################################## ######################Подключаем файл для взаимодействия и файл с конфигурацией товаров(все должно быть в одной папке)############################### include("mk_config.php"); include("mk_api.php"); ############################################################################################################################################ ######### //Введен номер и нажата кнопка "Оплатить" if(isset($_REQUEST["cr_pay"])&&isset($_REQUEST["prod"])&&isset($_REQUEST["phone"])) { $product=$_REQUEST['prod']; $mk = mk_create_pay ( $_REQUEST['phone'], $files_attr[$product]['price'], 'Оплата заказа'.$product, 'Платеж получен. Следуйте инструкциям на сайте.' ); if ($mk['status'] == 0) { header("Location: pay_ok.php?prod=".$product."&id=".$mk['id']); exit(); } else{ ?> <script> alert("Ошибка: <?=$mk['status_desc'];?>"); window.location="mk_payment.php?prod=<?=$product?>"; </script> <? } } //Просто перешли по ссылке на страницу оплаты elseif(isset($_REQUEST['prod'])) { $product=$_REQUEST['prod']; if(isset($files_attr[$product]))//если есть такой продукт в файле mk_config.php { if(file_exists($files_attr[$product]['file']))//если файл еще не был куплен другим пользователем { ##################################################Сама форма оплаты#################################################################### ?> <div> <form method="POST" name="phone_number"> Ввведите номер телефона в формате 79123456789 для оплаты услуги:<br> <input type="text" name="phone"> <input type="hidden" name="prod" value="<?=$_REQUEST['prod'];?>"> <input type="submit" name="cr_pay" value="Ввести"> </form> </div> <? ################################################################################################################################# } else//если архива нет, а в mk_config.php товар есть-значит его уже купили { echo "Простите, товар уже продан!"; ?> <br> <a href="#" onclick="history.go(-2);">Назад</a> <? } } else//если нет в перечне товаров { echo "Товар не найден!"; ?> <br> <a href="#" onclick="history.go(-2);">Назад</a> <? } } else//если не передан параметр prod то есть непонятно за какой аккаунт платить { echo "Товар не найден!"; ?> <br> <a href="#" onclick="history.go(-2);">Назад</a> <? } ?> pay_ok.php <? ######################Подключаем файл для взаимодействия и файл с конфигурацией товаров(все должно быть в одной папке)############################### include("mk_api.php"); include("mk_config.php"); ##################################################################### //Если оплата подтверждена, архив скачан, то выдаем пароль и удаляем архив if(isset($_GET['do'])&&$_GET['do']='pass'&&isset($_GET['prod'])) { echo "Ваш пароль к архиву: ".$files_attr[$_GET['prod']]['pass']; $res=unlink($files_attr[$_GET['prod']]['file']); die(); } ////////////////////////////////////////////////Если нажата кнопка оплата произведена проверяем по айди платежа статус оплаты: if(isset($_REQUEST['id'])&&isset($_REQUEST['prod'])) { if(isset($_REQUEST['podtv'])) { $status=mk_get_status($_REQUEST['id']); //print_r($status); //$status['pay_status']='success'; if($status['pay_status']=='wait')//ожидание оплаты { ?> <script> alert("Завершите процедуру оплаты и еще раз подтвердите!"); window.location="pay_ok.php?prod=<?=$_REQUEST['prod']?>&id=<?=$_REQUEST['id']?>"; </script> <? } elseif($status['pay_status']=='failure')//отказались от оплаты или истекло время на оплату { ?> <script> alert("Оплата не была произведена!"); window.location.href="http://tanki-akki.ucoz.ru/"; </script> <? } elseif($status['pay_status']=='success')//оплата успешно проведена-выводим ссылку на архив и ссылку на получение пароля с удалением архива { ?> <div> По ссылке ниже Вы можете скачать архив с аккаунтом. Архив защищен паролем. После успешного скачивания нажмите ссылку "Получить пароль" <br> <a href="<?=$files_attr[$_REQUEST['prod']]['file'];?>" target="_blank">Скачать архив</a> <br> <a href="?prod=<?=$_REQUEST['prod'];?>&do=pass" onclick="if(!confirm('Вы скачали архив?')) return false;">Получить пароль</a></td> </div> <? Добавлено (24 Янв 2014, 11:45:04) |
со скриптом разобрался, дело в седующем архивы формата rar должны храниться в той же папке где и скрипты, но при обращении к архиву он должен скачаться, но его по ссылке нет... хотя в каталоге он есть... вот в чём дело...как мне это обойти?
|
zak7167, по пути /php/* вызываются только *.php файлы. В противном случае вы увидите 404 ошибку.
Для решения этой проблемы создайте в папке со скриптом файл download.php следующего содержания Код <? header("Content-Type: application/octet-stream"); header("Accept-Ranges: bytes"); header("Content-Length: " . filesize($_GET['filename'])); header("Content-Disposition: attachment; filename=" . $_GET['filename']); readfile($_GET['filename']); ?> Скачивание файла будет происходить уже не по ссылке /php/super-script/abcde.rar а по ссылке /php/super-script/download.php?filename=abcde.rar Не оказываю поддержку посредством ЛС/ICQ/Skype/AIM/XMPP/E-mail.
|
спасибо за скрипт, но проблема возникает в следующем что скрипт проверяет в той папке где находится сам, наличие фаила rar если он там есть , то купить можно а если его там нет, то пишет что товар уже куплен, т.е работает так товар покупается скачивается потом автоматически по средством скрипта удаляется и если он не находится значит пишется что уже продан, как в данную ситуацию разрешить?
Добавлено (24 Янв 2014, 16:58:20) |
|
скрипт написан таким образом что после скачивания он должен удалить фаил rar. что бы не вышло накладки ,1 аккаунт в одни руки покупается понимаете? и по логике скрипты и фаилы рар с аккаунтами должны были быть в одной папке, после продажи человек скачивает архив и он автоматически удаляется, т.е при нажатии на кнопку купить скрипт проверяет наличие этого рар фаила если его не находит пишет что товар продан. а так как в одну папку со скирптами заливать архивы рар, то как мне реализовать проверку и удаление после покупки аккаунта через корень сайта, т.е скрипты проверяют корень сайта если находят рар с определенным именем то покупка продлажается если не находит то пишет что товар уже купили.
|
| |||