Salesforce REST API Войти? - PullRequest
       44

Salesforce REST API Войти?

16 голосов
/ 13 февраля 2012

Я изучаю образец, который находится на сайте разработчика Salesforce.

В этом примере при нажатии на ссылку она будет перенаправлена ​​на страницу входа в систему salesforce.Если вход выполнен успешно, выдается токен доступа.

Я не хочу, чтобы мое приложение перенаправляло на страницу входа в систему salesforce.В существующем примере для переменной среды задано значение

"https://login.salesforce.com"

Что нужно сделать, чтобы избежать перенаправления на страницу входа в систему salesforce.

Ответы [ 4 ]

13 голосов
/ 13 февраля 2012

То, что вы описываете, звучит как OAuth (только потому, что вы упоминаете токен доступа).

Ниже приведен хороший пример использования OAuth в Salesforce ...

http://wiki.developerforce.com/page/Digging_Deeper_into_OAuth_2.0_at_Salesforce.com

6 голосов
/ 14 февраля 2012

РЕШЕНИЕ:

Привет всем, я пришел к решению моей проблемы. На самом деле я изучал образец, приведенный в ссылке http://wiki.developerforce.com/page/Getting_Started_with_the_Force.com_REST_API. Затем реализован поток имени пользователя-пароля OAuth 2.0 от https://login.salesforce.com/help/doc/en/remoteaccess_oauth_username_password_flow.htm#send_up_response. Это решает мою проблему.

5 голосов
/ 27 августа 2013

Это пример кода Java, который использует поток OAuth с именем пользователя и паролем:

public class AccountQuery 
{
    // The connection data
    private static final String query = "SELECT Name, Idfrom Account";
    private static final String clientId = "theID";
    private static final String clientSecret = "theSecret";
    // THis is meaningless in our context
    private static final String redirectUri = "https://localhost:8443/_callback";
    private static final String environment = "https://login.salesforce.com";   
    private static String tokenUrl = null;
    private static final String username = "username";
    private static final String password = "passwordPlusSecret";
    private static String accessToken = null;
    private static String instanceUrl = null;

    public static void main( String[] args )
    {       
        // Step 0:  Connect to SalesForce.
        System.out.println("Getting a token");
        tokenUrl = environment + "/services/oauth2/token";
        HttpClient httpclient = new HttpClient();
        PostMethod post = new PostMethod(tokenUrl);     
        post.addParameter("grant_type", "password");
        post.addParameter("client_id", clientId);
        post.addParameter("client_secret", clientSecret);
        post.addParameter("redirect_uri", redirectUri);
        post.addParameter("username", username);
        post.addParameter("password", password);

        try {
            httpclient.executeMethod(post);
            try {
                JSONObject authResponse = new JSONObject(new JSONTokener(new InputStreamReader(post.getResponseBodyAsStream())));
                System.out.println("Auth response: " + authResponse.toString(2));

                accessToken = authResponse.getString("access_token");
                instanceUrl = authResponse.getString("instance_url");

                System.out.println("Got access token: " + accessToken);
            } catch (JSONException e) {
                e.printStackTrace();                
            }
        } catch (HttpException e1) {
            e1.printStackTrace();
        } catch (IOException e1) {
            e1.printStackTrace();
        } finally {
            post.releaseConnection();
        }       
        System.out.println("We have an access token: " + accessToken + "\n" + "Using instance " + instanceUrl + "\n\n");

        HttpClient httpclient = new HttpClient();
        GetMethod get = new GetMethod(instanceUrl + "/services/data/v28.0/query");

        // set the token in the header
        get.setRequestHeader("Authorization", "OAuth " + accessToken);

        // set the SOQL as a query param
        NameValuePair[] params = new NameValuePair[1];

        params[0] = new NameValuePair("q",query);
        get.setQueryString(params);     

        try {
            httpclient.executeMethod(get);
            if (get.getStatusCode() == HttpStatus.SC_OK) {
                // Now lets use the standard java json classes to work with the results
                JSONObject response = new JSONObject( new JSONTokener( new InputStreamReader(get.getResponseBodyAsStream())));
                System.out.println("Query response: "+ response.toString(2));//.substring(0, 500));                 
                System.out.println(response.getString("totalSize") + " record(s) returned\n\n");
                JSONArray results = response.getJSONArray("records");               
                Account[] accounts = new Gson().fromJson(results.toString(), Account[].class);
                return accounts;
            }
        }
        catch (Exception e){
            e.printStackTrace();
        }finally {
            get.releaseConnection();
        }
    }
}
0 голосов
/ 22 сентября 2014

В случае с Java проще всего использовать Spring Social Salesforce: https://github.com/iirekm/spring-social-salesforce

Просто следуйте учебному пособию Facebook по адресу https://spring.io/guides/gs/accessing-facebook/, и кратко добавьте зависимость к Spring Social Salesforce изаменить везде в коде «facebook» на «salesforce».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...