Go Back   vb.org Archive > vBulletin 4 Discussion > vB4 Programming Discussions
FAQ Community Calendar Today's Posts Search

Reply
 
Thread Tools Display Modes
  #1  
Old 04-20-2012, 02:41 PM
gigagon gigagon is offline
 
Join Date: Apr 2012
Posts: 3
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default 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>
Reply With Quote
  #2  
Old 04-21-2012, 07:26 PM
Badshah93 Badshah93 is offline
 
Join Date: Jun 2010
Location: India
Posts: 505
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

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>
Reply With Quote
Благодарность от:
gigagon
  #3  
Old 04-21-2012, 07:54 PM
gigagon gigagon is offline
 
Join Date: Apr 2012
Posts: 3
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

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
Reply With Quote
  #4  
Old 05-16-2012, 10:20 PM
[~AlmoR~] [~AlmoR~] is offline
 
Join Date: May 2002
Posts: 2
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

]
Quote:
Originally Posted by gigagon View Post
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?
Reply With Quote
  #5  
Old 12-27-2012, 12:51 PM
weissmad weissmad is offline
 
Join Date: Dec 2012
Posts: 3
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

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
Reply With Quote
  #6  
Old 01-03-2013, 04:24 PM
weissmad weissmad is offline
 
Join Date: Dec 2012
Posts: 3
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

bump
Reply With Quote
  #7  
Old 03-05-2013, 10:27 AM
Bundschuh Bundschuh is offline
 
Join Date: Mar 2012
Posts: 18
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by weissmad View Post
  • 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
Reply With Quote
  #8  
Old 04-03-2013, 08:14 PM
weissmad weissmad is offline
 
Join Date: Dec 2012
Posts: 3
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

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'); 
Reply With Quote
Reply


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT. The time now is 01:04 AM.


Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2024, vBulletin Solutions Inc.
X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.04704 seconds
  • Memory Usage 2,346KB
  • Queries Executed 13 (?)
More Information
Template Usage:
  • (1)SHOWTHREAD
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (1)ad_showthread_beforeqr
  • (1)ad_showthread_firstpost
  • (1)ad_showthread_firstpost_sig
  • (1)ad_showthread_firstpost_start
  • (1)bbcode_code
  • (3)bbcode_php
  • (2)bbcode_quote
  • (1)footer
  • (1)forumjump
  • (1)forumrules
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (1)navbar
  • (3)navbar_link
  • (120)option
  • (8)post_thanks_box
  • (1)post_thanks_box_bit
  • (8)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (1)post_thanks_postbit
  • (8)post_thanks_postbit_info
  • (8)postbit
  • (8)postbit_onlinestatus
  • (8)postbit_wrapper
  • (1)spacer_close
  • (1)spacer_open
  • (1)tagbit_wrapper 

Phrase Groups Available:
  • global
  • inlinemod
  • postbit
  • posting
  • reputationlevel
  • showthread
Included Files:
  • ./showthread.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/functions_bigthree.php
  • ./includes/class_postbit.php
  • ./includes/class_bbcode.php
  • ./includes/functions_reputation.php
  • ./includes/functions_post_thanks.php 

Hooks Called:
  • init_startup
  • init_startup_session_setup_start
  • init_startup_session_setup_complete
  • cache_permissions
  • fetch_postinfo_query
  • fetch_postinfo
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • showthread_start
  • showthread_getinfo
  • forumjump
  • showthread_post_start
  • showthread_query_postids
  • showthread_query
  • bbcode_fetch_tags
  • bbcode_create
  • showthread_postbit_create
  • postbit_factory
  • postbit_display_start
  • post_thanks_function_post_thanks_off_start
  • post_thanks_function_post_thanks_off_end
  • post_thanks_function_fetch_thanks_start
  • fetch_musername
  • post_thanks_function_fetch_thanks_end
  • post_thanks_function_thanked_already_start
  • post_thanks_function_thanked_already_end
  • postbit_imicons
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • postbit_display_complete
  • post_thanks_function_can_thank_this_post_start
  • post_thanks_function_fetch_thanks_bit_start
  • post_thanks_function_show_thanks_date_start
  • post_thanks_function_show_thanks_date_end
  • post_thanks_function_fetch_thanks_bit_end
  • post_thanks_function_fetch_post_thanks_template_start
  • post_thanks_function_fetch_post_thanks_template_end
  • tag_fetchbit_complete
  • forumrules
  • navbits
  • navbits_complete
  • showthread_complete