Аутентификация Salesforce с использованием Rest API с JAVA

Я хочу аутентифицировать Salesforce с помощью Salesforce Rest API с JAVA.

Для этого я следую по следующему URL-адресу

http://www.asagarwal.com/2401/step-by-step-guide-to-get-started-with-salesforce-rest-api-using-java

Мой код Java ниже

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.HttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.util.EntityUtils;
import org.apache.http.client.ClientProtocolException;
import org.json.JSONObject;
import org.json.JSONTokener;
import org.json.JSONException;

public class OrderProcessing extends HttpServlet {
    private static final long serialVersionUID = 1L;
    static final String PASS = "XXXXXXX";
    static final String SecurityToken = "XXXXXXXXXXXX";
    static final String USERNAME = "[email protected]";
    static final String PASSWORD = PASS + SecurityToken;
    static final String LOGINURL = "https://login.salesforce.com";
    static final String GRANTSERVICE = "/services/oauth2/token?grant_type=password";
    static final String CLIENTID = "ConsumerKeyFromSalesfoceConnectedApps";
    static final String CLIENTSECRET = "ConsumerSecretFromSalesforceConnectedApps";

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        HttpClient httpclient = HttpClientBuilder.create().build();
        String loginURL = LOGINURL + GRANTSERVICE + "&client_id=" + CLIENTID + "&client_secret=" + CLIENTSECRET
                + "&username=" + USERNAME + "&password=" + PASSWORD;

        HttpPost httpPost = new HttpPost(loginURL);
        HttpResponse resp = null;

        try {
            resp = httpclient.execute(httpPost);
        } catch (ClientProtocolException cpException) {
            cpException.printStackTrace();
        } catch (IOException ioException) {
            ioException.printStackTrace();
        }

        final int statusCode = resp.getStatusLine().getStatusCode();
        if (statusCode != HttpStatus.SC_OK) {
            System.out.println("Error authenticating to Force.com: " + statusCode);
            return;
        }

        String getResult = null;
        try {
            getResult = EntityUtils.toString(resp.getEntity());
        } catch (IOException ioException) {
            ioException.printStackTrace();
        }

        JSONObject jsonObject = null;
        String loginAccessToken = null;
        String loginInstanceUrl = null;
        try {
            jsonObject = (JSONObject) new JSONTokener(getResult).nextValue();
            loginAccessToken = jsonObject.getString("access_token");
            loginInstanceUrl = jsonObject.getString("instance_url");
        } catch (JSONException jsonException) {
            jsonException.printStackTrace();
        }

        System.out.println(resp.getStatusLine());
        System.out.println("Successful login");
        System.out.println("  instance URL: " + loginInstanceUrl);
        System.out.println("  access token/session ID: " + loginAccessToken);

        httpPost.releaseConnection();
    }
}

Ответ: HttpResponseProxy{HTTP/1.1 400 Bad Request [Date: Thu, 06 Oct 2016 11:25:26 GMT, Strict-Transport-Security: max-age=10886400; includeSubDomains; preload, Content-Security-Policy-Report-Only: default-src https:; script-src https: 'unsafe-inline' 'unsafe-eval'; style-src https: 'unsafe-inline'; img-src https: data:; font-src https: data:; report-uri /_/ContentDomainCSPNoAuth?type=login, Set-Cookie: BrowserId=bIo6TZOBQRSS2KFKtUR5ZA;Path=/;Domain=.salesforce.com;Expires=Mon, 05-Dec-2016 11:25:26 GMT, Expires: Thu, 01 Jan 1970 00:00:00 GMT, Pragma: no-cache, Cache-Control: no-cache, no-store, X-ReadOnlyMode: false, Content-Type: application/json;charset=UTF-8, Transfer-Encoding: chunked] ResponseEntityProxy{[Content-Type: application/json;charset=UTF-8,Chunked: true]}}

Ответ с использованием расширения клиента веб-службы Rest для Chrome: {"error":"invalid_client_id","error_description":"client identifier invalid"}

Пожалуйста, помогите мне решить эту проблему.


person user3441151    schedule 06.10.2016    source источник


Ответы (3)


Я решил свою проблему, используя приведенный ниже код:

String loginURL = LOGINURL + GRANTSERVICE + "&client_id=" + CLIENTID + "&client_secret=" + CLIENTSECRET + "&username=" + USERNAME + "&password=" + PASSWORD;

на месте

String loginURL = LOGINURL + GRANTSERVICE + "&client_id=" + CLIENTID + "&client_secret=" + CLIENTSECRET
                + "&username=" + USERNAME + "&password=" + PASSWORD;
person user3441151    schedule 06.10.2016

Раньше это работало? Если это было, то вам снова потребуется авторизация.

person Vincent Toonen    schedule 06.10.2016

Настройка нового подключенного приложения занимает около 15 минут. Поскольку ошибка указывает на то, что идентификатор клиента плохой, я предполагаю, что проблема именно в этом. Вы можете попробовать еще раз?

person James Ward    schedule 06.10.2016
comment
Я решил эту проблему, используя String loginURL = LOGINURL + GRANTSERVICE + & client_id = + CLIENTID + & client_secret = + CLIENTSECRET + & username = + USERNAME + & password = + PASSWORD; Но я хочу создать нового пользователя в Salesforce. Так как я могу это сделать? Помогите, пожалуйста. - person user3441151; 06.10.2016