Ответ 1
То, что вы описываете, звучит как OAuth (только потому, что вы упоминаете токен доступа).
Вот хороший пример использования OAuth в Salesforce ниже...
http://wiki.developerforce.com/page/Digging_Deeper_into_OAuth_2.0_at_Salesforce.com
Я изучаю образец, который находится на сайте разработчика Salesforce.
В этом примере, когда мы нажимаем ссылку, он будет перенаправлен на страницу входа в Salesforce. Если вход успешно завершен, тогда выдается токен доступа.
Я не хочу, чтобы мое приложение перенаправлялось на страницу входа в Salesforce. В существующей выборке для переменной среды задано значение
"https://login.salesforce.com"
Что делать, чтобы не переходить на страницу входа в salesforce.
То, что вы описываете, звучит как OAuth (только потому, что вы упоминаете токен доступа).
Вот хороший пример использования OAuth в Salesforce ниже...
http://wiki.developerforce.com/page/Digging_Deeper_into_OAuth_2.0_at_Salesforce.com
РЕШЕНИЕ:
Привет всем, я пришел к решению моей проблемы. Фактически, я изучал образец, указанный в ссылке 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. Это решает мою проблему.
Это пример кода Java, который использует поток Username-Password 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();
}
}
}
В случае Java самый простой способ - использовать Spring Social Salesforce: https://github.com/iirekm/spring-social-salesforce
Просто следуйте руководству Facebook в https://spring.io/guides/gs/accessing-facebook/ и коротко говоряйте добавьте зависимость от Spring Social Salesforce и замените всюду в коде "facebook" с "salesforce".