I am working with Salesforce PHP API(https://developer.salesforce.com/page/PHP_Toolkit_20.0_Samples) to retreive and update information. But do get the INVALID_LOGIN error when trying to execute if from server.I am trying to correct to our development instance. I double checked the username and password and they are correct. I tried it using SoapUI and it is working fine. As per the API, I need to change the URL on wsdl to "https://test.salesforce.com/services/Soap/u/27.0".

I am using the partner method to retrieve information.

Below is the request and response back from server(I have changed the username/pasword through)

    [sforce:protected] => SforceSoapClient Object
            [trace] => 1
            [compression] => 32
            [_encoding] => utf-8
            [_features] => 1    
            [_user_agent] => salesforce-toolkit-php/27.0
            [_soap_version] => 1    
            [sdl] => Resource id #11
            [__last_request] => <?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="urn:partner.soap.sforce.com"><SOAP-ENV:Body><ns1:login><ns1:username>abc@xyz.com.dev</ns1:username><ns1:password>test1ua1</ns1:password></ns1:login></SOAP-ENV:Body></SOAP-ENV:Envelope>

            [httpsocket] => Resource id #12 
            [_use_proxy] => 0               
            [httpurl] => Resource id #13        
            [__last_request_headers] => POST /services/Soap/u/27.0 HTTP/1.1^M
Host: login.salesforce.com^M                            
Connection: Keep-Alive^M                                    
User-Agent: salesforce-toolkit-php/27.0^M                   
Accept-Encoding: gzip, deflate^M                        
Content-Type: text/xml; charset=utf-8^M
SOAPAction: ""^M                                
Content-Length: 336^M

            [__last_response_headers] => HTTP/1.1 500 Server Error^M
Date: Thu, 28 Jan 2016 22:25:23 GMT^M
Set-Cookie: BrowserId=U3v2RiwfRSaGE-8qUOVSQw;Path=/;Domain=.salesforce.com;Expires=Mon, 28-Mar-2016 22:25:23 GMT^M
Expires: Thu, 01 Jan 1970 00:00:00 GMT^M
Content-Type: text/xml;charset=UTF-8^M
Transfer-Encoding: chunked^M        

            [_cookies] => Array     
                    [BrowserId] => Array
                            [0] => U3v2RiwfRSaGE-8qUOVSQw
                            [1] => /services/Soap/u
                            [2] => login.salesforce.com


            [__last_response] => <?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sf="urn:fault.partner.soap.sforce.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><soapenv:Body><soapenv:Fault><faultcode>INVALID_LOGIN</faultcode><faultstring>INVALID_LOGIN: Invalid username, password, security token; or user locked out.</faultstring><detail><sf:LoginFault xsi:type="sf:LoginFault"><sf:exceptionCode>INVALID_LOGIN</sf:exceptionCode><sf:exceptionMessage>Invalid username, password, security token; or user locked out.</sf:exceptionMessage></sf:LoginFault></detail></soapenv:Fault></soapenv:Body></soapenv:Envelope>
            [__soap_fault] => SoapFault Object
                    [message:protected] => INVALID_LOGIN: Invalid username, password, security token; or user locked out.
                    [string:Exception:private] =>
                    [code:protected] => 0

On the return details above, I do see cookie browserid values as "login.salesforce.com". I crosschecked the wsdl and they point to test instance.

Any help is appreciated.

  • "As per the API, I need to change the URL on wsdl to "test.salesforce.com/services/Soap/u/27.0"" Can you expand on this? You won't be able to login to a DE org. via test.salesforce.com, you should be using login.salesforce.com – Davin Casey Jan 28 '16 at 23:01
  • Do you mean, even if we want to query the DEV instance of Salesforce, we should use login.salesforce.com on wsdl? – Gopi Jan 28 '16 at 23:12
  • Also, the test.salesforce.com changed wsld works on SoapUI tool – Gopi Jan 28 '16 at 23:13
  • I haven't used the PHP API before but normally you login to login.salesforce.com for DEV environments. Only sandboxes are logged into via test.salesforce.com – Davin Casey Jan 28 '16 at 23:14
  • 1
    are you including the users security token with the password? – superfell Jan 29 '16 at 5:15

Below is the code that I used to connect using PHP

        * This code utilizes the SFDC-PHP API Code

        ini_set('soap.wsdl_cache_enable', '0');

        require_once ('soapclient/SforcePartnerClient.php');
        require_once ('soapclient/SforceHeaderOptions.php');


        define("USERNAME"       , "email@company.com.dev");
        define("PASSWORD"       , "account_password");
        define("SECURITY_TOKEN" , "security token");

        try {

            $mySforceConnection = new SforcePartnerClient();
            $mySoapClient = $mySforceConnection->createConnection("soapclient/partner.wsdl.xml"); // Path to the partner WSDL 
            $mylogin = $mySforceConnection->login(USERNAME, PASSWORD);

        catch (Exception $e) {
            echo "Exception ".$e->faultstring."<br/><br/>";
            echo "<br/><br/>";
            echo "Last Request:<br/><br/>";
            echo $mySforceConnection->getLastRequestHeaders();
            echo "<br/><br/>";
            echo $mySforceConnection->getLastRequest();
            echo "<br/><br/>";
            echo "Last Response:<br/><br/>";
            echo $mySforceConnection->getLastResponseHeaders();
            echo "<br/><br/>";
            echo $mySforceConnection->getLastResponse();


I tried using including the security code as part of password. But didn't work.


If you want to connect sandbox environment follow below steps

  1. Modify your SforceBaseClient.php and point it to test.salesforce.com at line 159

enter image description here

  1. Make sure you are passing securiy token with your password if login ip range is not defined at profile level.

            $mySforceConnection = new SforcePartnerClient();
            $mySoapClient = $mySforceConnection->createConnection("soapclient/partner.wsdl.xml"); // Path to the partner WSDL 
            $mylogin = $mySforceConnection->login(USERNAME, PASSWORD+SECURITY_TOKEN);

I cannot comment yet, so I am posting this as a separate answer. This code was working for me:


try {
    $mySforceConnection = new SforcePartnerClient();
    $mySoapClient = $mySforceConnection->createConnection(SOAP_CLIENT_BASEDIR.'/partner.wsdl.xml');
    $mylogin = $mySforceConnection->login($USERNAME, $PASSWORD.$SECURITY_TOKEN);

    echo "***** Get Server Timestamp *****\n";
    $response = $mySforceConnection->getServerTimestamp();
    echo "<pre>"; print_r($response);
} catch (Exception $e) {
    echo "<pre>"; print_r($e);

This works without modifying SforceBaseClient.php


Try to generate new WSDL xml document from sandbox. Go to Senter image description hereetup -> Integrations -> API to download corresponding WSDL

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.