Someone to help build the structure for API PHP WEB CONFIG step by step? with their appropriate folders?
SOS. I would like to help with web programming to add new user in hotspot change settings or add new configuration exists in mikrotik someone help ae?
Português do Brazil
alguém para me ajudar a montar a página em PHP com formulários de criação de profiles, user, etc.
só consegui fazer consultas com codigo API class PHP
![]()
- Set up the environment
1.1. Set up a web server with PHP 5.3.0 or higher (ideally, the latest PHP version; currently 5.4.14).
1.2. Open a RouterOS terminal (e.g. from Winbox, the “New Terminal” button), type
/ip service enable "api"
1.3. On your web server’s firewall, allow the php-cgi executable and/or your web server’s executable (e.g. httpd.exe for Apache on Windows) to make outgoing connections. How to do this depends on your OS and firewall software.
-
Install the client.
2.1. Click the link in my signature.
2.2. Click the icon with “PHAR” on it to download a “.phar” file with the client.
2.3. Place the file anywhere on your web server, as long as it is accessible from PHP. If you’re new to PHP, you’ll want to place the file in the same folder as the PHP file you’ll be creating in a moment. -
Create the PHP file(s) that will connect to the router.
3.1. Include the “.phar” file and create a Client object. Assuming the “.phar” file is in the same folder as the PHP file in question, have the following code first, as a test run:
<?php
use PEAR2\Net\RouterOS;
echo 'Parsing is OK if you are seeing this...';
require_once 'PEAR2_Net_RouterOS-1.0.0b3.phar';
echo 'File included!...';
try {
$client = new RouterOS\Client('192.168.0.1', 'admin', 'password');
echo 'Connection OK!';
} catch (Exception $e) {
echo 'Connection FAIL! Details:', $e;
}
(NOTE: Adjust your RouterOS IP, username and password)
3.2. Run your test file. The example above should output
Parsing is OK if you are seeing this...File included!...Connection OK!
If that’s what you’re seeing, you can move on to the real deal.
- Doing stuff to RouterOS.
4.1a Here’s an example file that adds a new concrete user, with a concrete profile called “default”:
<?php
use PEAR2\Net\RouterOS;
require_once 'PEAR2_Net_RouterOS-1.0.0b3.phar';
try {
$client = new RouterOS\Client('192.168.0.1', 'admin', 'password');
$addRequest = new RouterOS\Request('/ip hotspot user add profile=default name=username password=hotspotPassword');
$client($addRequest);
} catch (Exception $e) {
echo $e;
}
4.1b Here’s a a more elaborate example file that add a new user with a username and password based on fields in a form, and a concrete profile called “default”:
<?php
use PEAR2\Net\RouterOS;
require_once 'PEAR2_Net_RouterOS-1.0.0b3.phar';
header('Content-Type: text/html;charset=UTF-8');
$errors = array();
if (isset($_POST['username']) && isset($_POST['password'])) {
try {
$client = new RouterOS\Client('192.168.0.1', 'admin', 'password');
$addRequest = new RouterOS\Request('/ip hotspot user add profile=default');
$addReques
->setArgument('name', $_POST['username'])
->setArgument('password', $_POST['password']);
$errorResponses = $client($addRequest)->getAllOfType(RouterOS\Response::TYPE_ERROR);
foreach ($errorResponses as $error) {
$errors[] = $error->getArgument('message');
}
} catch (Exception $e) {
$errors[] = $e;
}
}
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
<title>Add new user</title>
<style type="text/css">
#OK {background-color:darkgreen;color:white;}
#errors {background-color:darkred;color:white;}
</style>
</head>
<body>
<form action="" method="post">
<?php
if (!empty($_POST)) {
if (empty($errors)) {
echo '<div id="OK">User added successfully</div>';
} else {
echo '<div id="errors"><ol>';
foreach ($errors as $error) {
echo '<li>', $error, '</li>';
}
echo '</ol></div>';
}
}
?>
<div>
<ol>
<li>
<label for="username">Username:</label>
<input type="text" id="username" name="username" value="" />
</li>
<li>
<label for="password">Password:</label>
<input type="password" id="password" name="password" value="" />
</li>
<li>
<input type="submit" value="Add" />
</li>
</ol>
</div>
</form>
</body>
</html>
If you’re seeing the pattern here, doing anything from this point on should be relatively easy. The harder part is the UI, session maintenance, and other common difficulties with any more complex PHP application.
perfect, what is your email for details of this sequence of instructions?
ja add to your ICQ ok
add Facebook: https://www.facebook.com/sandro.diniz.16?ref=tn_tnmn
boen [dot] robot [at] gmail [dot] com
I rarely use my ICQ nowadays… but this forum doesn’t let me specify Skype (which is the same as my nickname here, FYI).
So i’m new to this ordeal here and i just happen to find this thread. My issues is probably the same..however i have done all the steps and tested the file but my php file keeps timing out…
I have enabled the API on the routerBoard and downloaded the .phar file which is in the same folder/directory as the file that i’m working on.
One thing i notice is that when i remove the 1st line on your test code “use PEAR2\NET\RouterOS” the script runs but i get the an error in which it says that it can’t find the .phar file.
What else could i do? or did i miss something?
Are you sure you have PHP 5.3.0 or later? The “use” line is not parsable in earlier versions, and thus causes a parsing error.
If you’re not sure, run
<?php phpinfo();
and check the version number at the top.
Either way, I’m kind’a surprised by the PHAR not found error… unless it’s more like “unable to parse PHAR file”, which would be due to the same reason.
Well i did check it via the shell command line on the server and it shows as php 5.3.3
Try to run the PHAR file from the command line, and see what it says.
(it should output some diagnostics relating to version, extensions and socket functionality)
Also, you should try to run phpinfo() from HTTP, not the command line - sometimes, servers could use one PHP for the command line, and another one for HTTP.
Assuming the PHAR extension is there and PHP 5.3.3 is also at the HTTP front… a message about the PHAR not being found sounds really out of place… I really can’t see what would cause it, assuming the file names are all right.
I executed the .phar file from the command line and got the following:
PEAR2_Net_RouterOS-1.0.0b3.phar: line 1: ?php: No such file or directory
PEAR2_Net_RouterOS-1.0.0b3.phar line 2: syntax error near unexpected token ‘get_included_files’
PEAR2_Net_RouterOS-1.0.0b3.phar line 2: ‘if (count(get_included_files()) > 1) {’
I do have the .phar file on the directory and I’ve adjusted the permissions to make sure its executable
Also, i did run phpinfo() from the web as well and the php version is 5.3.3
I meant execute the PHAR file using PHP… not as a stand alone executable, i.e.
/path/to/php -f PEAR2_Net_RouterOS-1.0.0b3.phar
What exactly is the error message you get when you run the example file from HTTP with the “use” line being in the file?
If there’s nothing on screen, adjust your php.ini to either display errors or log them somewhere, so that you can see.
I also got the following:
stream_socket_client() function is enabled, SHA-1 HASH (string)
It also gave me a few tips on troubleshooting so i’ll look into those to make sure i can reach the router from winbox or ping
Could it be the web server?
The troubleshooting tips assume that you’re successfully including the PHAR file, but that things go south after that, when you try to actually connect. In other words, they apply when the output of the test file is
Parsing is OK if you are seeing this...File included!...Connection FAIL! Details:
so that’s probably not your problem at this point.
(BTW, if you have Skype, I’m online right now and for the next few hours since this post’s time… for this issue, it sounds like we’ll go back&forth a few more times, so rather than pollute the forum, I think it will be best to discuss it on Skype, and just post the solution after we’re done)
Okay..i think i might have found the issues. I changed the permissions on the file to 777 (not what i want to keep them at but for testing purposes this will do) and that seem to finally work. I do however have a few questions regarding the API so that would be great if you wouldn’t mind helping me out with those (nothing major and i promise i won’t take advantage
)
Sure. Go ahead.
(And I’m still at Skype; just sayin’)
So i’m still unable to connect to this, i did what you suggested and while i am able to ping the router now i just can’t access it via the API yet, still getting the same error and i’ve got the router directly connected to my modem. Could it b my ISP?
You mean you can ping the router from the web server (not from a testing PC!), and yet the API doesn’t work?
Are you sure the port is 443 at both the router and the script as we talked on Skype? I ask because it’s easy to misspell 443 as 433.
My apologies for the delay response, i had attempted to update my router’s firmware and i messed it up so i had to reinstall the firmware back..anyways after doing i retested and it finally worked!!!
I tried it both port 443 and 8728 and both worked, so i just returned to port 8728.
One of the things i wanted to know is, is it possible to update the SSID password? and change the channel of the router via the API?
How do you do it from terminal? (if you can’t tell, I don’t have a WLAN on my router)
Should be in the same fashion.