vb.org Archive

vb.org Archive (https://vborg.vbsupport.ru/index.php)
-   vB4 Programming Discussions (https://vborg.vbsupport.ru/forumdisplay.php?f=252)
-   -   API login_login error: badlogin (https://vborg.vbsupport.ru/showthread.php?t=281833)

gigagon 04-20-2012 02:41 PM

API login_login error: badlogin
 
Hi Community,

I have wrote a simple api-login-script but every time I get the error message: badlogin.
I have tested the login with some accounts and i'm sure that the username and password are correct.

You can very simple the script, if you have a vbulletin installation and a activated api function.
All what you need is to edit the variable $apiurl and $apikey and uplodad the script to your webspace.

I would be very appreciated if someone can help me. :-)

PHP Code:

<?php
        
//Parameters
        
$clientname "mysuperclient";
        
$clientversion ="0.1";
        
$platformname "example";
        
$platformversion ="2.5";
        
$uniqueid "1234";
        
$apiurl='http://www.my-domain.de/forum/api.php'// Edit here
        
$apikey 'myAPIKey'// Edit here

        
error_reporting(E_ALL);

        
///////////////////////////////////////// ACTION

        
if(isset($_POST['username']) && isset($_POST['password'])) {
            
$userName $_POST['username'];
            
$password $_POST['password'];
            
            if(
$userName != '' && $password != '') {
                
$jsarray initApiRequest($clientname$clientversion$platformname$platformversion$uniqueid$apiurl);
                
$jsarray doLogIn($jsarray$userName$password$apikey$apiurl);
                
            } else {
                echo 
"userName == '' || password == ''";
            }
        }
        
///////////////////////////////////////// FUNCTIONS

        
function initApiRequest($clientname$clientversion$platformname$platformversion$uniqueid$apiurl) {
            
$init_request =  $apiurl .'?api_m=api_init&clientname='$clientname .'&clientversion='.$clientversion .'&platformname='.$platformname .'&platformversion=' .$platformversion .'&uniqueid='.$uniqueid
            
$jsarray doRestRequest($init_request);
            return 
$jsarray;
        }

        function 
doLogIn($jsarray$userName$password$apikey$apiurl) {
            
$requestparams = array('api_m' => 'login_login''vb_login_username' => $userName'vb_login_md5password' => md5($password));
            
ksort($requestparams); 
            
$login_string http_build_query($requestparams'''&'); 

            
$apiaccesstoken $jsarray->{'apiaccesstoken'};
            
$apiclientid $jsarray->{'apiclientid'};
            
$secret $jsarray->{'secret'};

            
$apiversion $jsarray->{'apiversion'};

            
$api_sig md5($login_string $apiaccesstoken $apiclientid $secret $apikey);
            
$api_registration_information 'api_c='$apiclientid .'&api_s='$apiaccesstoken .'&api_sig='$api_sig .'&api_v='$apiversion;
            
$login_request =  $apiurl .'?'$api_registration_information .'&'$login_string;

            
$jsarray doRestRequest($login_request);
            return 
$jsarray;
        }

        function 
doRestRequest($restRequest) {
            echo 
"<br>DO REST REQUEST["$restRequest ."]<br>";

            
$content '';
            
//Open and read the content
            
$fp fopen($restRequest'r');

            
// keep reading until there's nothing left
            
while ($line fread($fp1024)) {
                
$content .= $line;
            }
            
fclose($fp);            
                  
            echo 
"<hr>";
            
var_dump(json_decode($contenttrue));
            echo 
"<hr>";

            
//decode the content
            
$jsarray json_decode($content);
            return 
$jsarray;
        }
 
?>
        <html>
            <head>
            </head>
            <body>
                <form action="myresttest.php" method="post">
                 <p>Username: <input type="text" name="username" /></p>
                 <p>Password: <input type="password" name="password" /></p>
                 <p><input type="submit" /></p>
                </form>
            </body>
        </html>


Badshah93 04-21-2012 07:26 PM

i have used curl and few other methods for doing vbulletin functions through a script but never tried vbulletin api. So took a few hrs to understand vbulletin API.

Try this script (it is working for me)

PHP Code:

<?php 
        
//Parameters 
        
$clientname "mysuperclient"
        
$clientversion ="0.1"
        
$platformname "example"
        
$platformversion ="2.5"
        
$uniqueid "1234"
        
$apiurl="http://forum.com/api.php"// Edit here 
        
$apikey 'API KEY'// Edit here 

        
error_reporting(E_ALL); 

        
///////////////////////////////////////// ACTION 

        
if(isset($_POST['username']) && isset($_POST['password'])) { 
            
$userName $_POST['username']; 
            
$password $_POST['password']; 
             
            if(
$userName != '' && $password != '') { 
                
$jsarray initApiRequest($clientname$clientversion$platformname$platformversion$uniqueid$apiurl);
                
$jsarray doLogIn($jsarray$userName$password$apikey$apiurl);
                 
            } else { 
                echo 
"userName == '' || password == ''"
            } 
        } 
        
///////////////////////////////////////// FUNCTIONS 

        
function initApiRequest($clientname$clientversion$platformname$platformversion$uniqueid$apiurl) {
            
$init_request =  $apiurl .'?api_m=api_init&clientname='$clientname .'&clientversion='.$clientversion .'&platformname='.$platformname .'&platformversion=' .$platformversion .'&uniqueid='.$uniqueid
            
$jsarray doRestRequest($init_request); 
            return 
$jsarray
        } 

        function 
doLogIn($jsarray$userName$password$apikey$apiurl) { 
            
$requestparams = array('api_m' => 'login_login''vb_login_username' => $userName'vb_login_md5password' => md5($password));
                        
ksort($requestparams);  

            
$login_string http_build_query($requestparams'''&');  
            
            
$apiaccesstoken urlencode($jsarray->{'apiaccesstoken'}); 
            
$apiclientid urlencode($jsarray->{'apiclientid'}); 
            
$secret urlencode($jsarray->{'secret'}); 

            
$apiversion urlencode($jsarray->{'apiversion'}); 

            
$api_sig urlencode(md5($login_string $apiaccesstoken $apiclientid $secret $apikey));
            
$api_registration_information 'api_c='$apiclientid .'&api_s='$apiaccesstoken .'&api_sig='$api_sig .'&api_v='$apiversion;
            
$login_request =  '&'.$api_registration_information.'&vb_login_username='.$userName.'&vb_login_md5password='.md5($password);
            
$url $apiurl .'?api_m=login_login';
            
$jsarray doRestRequests($login_request$url); 
            return 
$jsarray
        } 

        function 
doRestRequest($restRequest) { 
            echo 
"<br>DO REST REQUEST["$restRequest ."]<br>"

            
$content ''
            
//Open and read the content 
            
$fp fopen($restRequest'r'); 

            
// keep reading until there's nothing left 
            
while ($line fread($fp1024)) { 
                
$content .= $line
            } 
            
fclose($fp);             
                   
          echo 
"<hr>"
            
var_dump(json_decode($contenttrue)); 
            echo 
"<hr>"

            
//decode the content 
            
$jsarray json_decode($content); 
            return 
$jsarray
        } 
        
         function 
doRestRequests($restRequest$url) { 
            echo 
"<br>DO REST REQUEST["$restRequest ."]<br>"
$context_options = array (
        
'http' => array (
            
'method' => 'POST',
            
'header'=> "Content-type: application/x-www-form-urlencoded",
            
'content' => $restRequest
            
)
        );
        
$context stream_context_create($context_options);

            
$content ''
            
//Open and read the content 
            
$fp fopen($url.$restRequest'r'false$context); 

            
// keep reading until there's nothing left 
            
while ($line fread($fp1024)) { 
                
$content .= $line
            } 
            
fclose($fp);             
                   
            echo 
"<hr>"
            
var_dump(json_decode($contenttrue)); 
            echo 
"<hr>"

            
//decode the content 
            
$jsarray json_decode($content); 
            return 
$jsarray
        } 
 
?> 
        <html> 
            <head> 
            </head> 
            <body> 
                <form action="myresttest.php" method="post"> 
                 <p>Username: <input type="text" name="username" /></p> 
                 <p>Password: <input type="password" name="password" /></p> 
                 <p><input type="submit" /></p> 
                </form> 
            </body> 
        </html>


gigagon 04-21-2012 07:54 PM

Thank you very much, it works for me too! :-)

Do you know, how i can realize a permanente login to the forum?
My target is to implement a bridge between the cms contao and vbulletin.
So i need a login to authenticate the user in contao and vbulletin.
The master system is vbulletin and the slave system is contao.
Can i geneate cookies or set the status to "everytime logged in" with the api?

many greetings
gigagon

[~AlmoR~] 05-16-2012 10:20 PM

]
Quote:

Originally Posted by gigagon (Post 2322332)
Do you know, how i can realize a permanente login to the forum?

I'm struggling with the same issue. Did you manage to get past this hurdle?

weissmad 12-27-2012 12:51 PM

Badshah93 - good example earlier as the documentation led me astray...even your password field being called vb_login_md5password rather than vb_login_password was helpful as the online documentation didn't show that.

Now onto my question...

VB posts a link for API overview/documentation:
https://www.vbulletin.com/forum/cont...7-API-Overview

I'm trying to see documentation for executing a forum search and then retrieving the results. I can see from the "All" methods page that it's under "Advanced Search Methods", but after logging in I'm being told I do not have permission to access this page.

From the "All Methods" page I see these which might do the trick, but there's no documentation on how to use them:
  • search_intro
  • --Return advanced search form related data.
  • search_process
  • --Process search and generate a searchid.
  • search_showresults
  • --Show search results.
  • search_getdaily
  • --Get new threads/posts posted in X day(s).
  • search_getnew
  • --Get new threads/posts posted since last visit.
  • search_finduser
  • --Find threads/posts posted by a specific user.
  • search_doprefs
  • --Save search preferences for logged-in user.

The methods I imagine I would need documentation for are search_process and search_showresults.

I'm on 4.2.0 Patch Level 3...thanks in advance for any help

weissmad 01-03-2013 04:24 PM

bump

Bundschuh 03-05-2013 10:27 AM

Quote:

Originally Posted by weissmad (Post 2393020)
  • search_intro
  • --Return advanced search form related data.
  • search_process
  • --Process search and generate a searchid.
  • search_showresults
  • --Show search results.
  • search_getdaily
  • --Get new threads/posts posted in X day(s).
  • search_getnew
  • --Get new threads/posts posted since last visit.
  • search_finduser
  • --Find threads/posts posted by a specific user.
  • search_doprefs
  • --Save search preferences for logged-in user.


Searching only requires:
search_process -> gives you an id to retrieve search results
search_showresults -> returns the results for given id

Parameters for search process are mostly the same as they are used in advanced search in usercp:
For example:
query = 'find*me' // search query
forumchoice = '1,2,3,4' // only in listet forums
childforums = 1 // also search in child forums
titleonly = 0 // searches only in titles
contenttypeid = 1 // searches only in posts (not blogs, groups, etc)
Have a closer look to search.php

Major parameters for search_showresult are: page, perpage and searchid


Greetings
Bundschuh

weissmad 04-03-2013 08:14 PM

Bundschuh - thanks for the reply.

Using the site through a browser I can get the desired results:

Code:

Forum Id=6 properly gives 2 results
search.php?do=process&query=televisions&titleonly=0&childforums=1&forumchoice[]=6&contenttypeid=1

Forum Id=5 properly gives no results
search.php?do=process&query=televisions&titleonly=0&childforums=1&forumchoice[]=5&contenttypeid=1

Relating this to my PHP code using the API has proven difficult. Either there are certain parameters which have dependencies or the parameters that I am passing aren't formatted properly (or a combination of both).

When I use the API if I specify the forumchoice as the URL parameter with the [] in the name, I get an api error: Invalid API Signature.

Here's what I'm passing in the api specific parms:

PHP Code:

$requestparams = array('api_m' => 'search_process''query' => 'televisions''titleonly' => '0''contenttypeid'=>'1''childforums' => '1''forumchoice' => '6''nocache'=>'1'); 



All times are GMT. The time now is 09:20 AM.

Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2025, vBulletin Solutions Inc.

X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.01333 seconds
  • Memory Usage 1,865KB
  • Queries Executed 10 (?)
More Information
Template Usage:
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (1)bbcode_code_printable
  • (3)bbcode_php_printable
  • (2)bbcode_quote_printable
  • (1)footer
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (6)option
  • (1)post_thanks_navbar_search
  • (1)printthread
  • (8)printthreadbit
  • (1)spacer_close
  • (1)spacer_open 

Phrase Groups Available:
  • global
  • postbit
  • showthread
Included Files:
  • ./printthread.php
  • ./global.php
  • ./includes/init.php
  • ./includes/class_core.php
  • ./includes/config.php
  • ./includes/functions.php
  • ./includes/class_hook.php
  • ./includes/modsystem_functions.php
  • ./includes/class_bbcode_alt.php
  • ./includes/class_bbcode.php
  • ./includes/functions_bigthree.php 

Hooks Called:
  • init_startup
  • init_startup_session_setup_start
  • init_startup_session_setup_complete
  • cache_permissions
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • printthread_start
  • bbcode_fetch_tags
  • bbcode_create
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • printthread_post
  • printthread_complete