In this blog, I am going to talk about How we can call Connected App from Salesforce itself and invoke one of the REST web service after successful authentication.
1. Create Connected App: Populated below data into Connected App setup page:
Few things which are important in this step
2. Copy below highlighted Consumer Key and Consumer Secret:
3. Create Visualforce Page : oAuth_Test
4. Create Apex class : oAuthTokenController
5: Create Apex class which acts as REST webservice namely TestRestWebservice and copy below code:
@RestResource(urlMapping='/WebServiceTestingTool/*')
global class TestRestWebservice {
@httpGet
global static void WSPolicyData (){
RestRequest req = RestContext.request;
try{
List<Account> result = [SELECT Name FROM Account LIMIT 1];
RestContext.response.responseBody = Blob.valueOf(JSON.serializePretty(result));
}
catch(Exception ex){
System.debug(ex.getMessage());
}
}
}
6: Create TWO remote site setting like below:
7: Go to oAuth_Test Visualforce page we have created in step 3 and click on button.
Click on Start oAuth Code button and authorize the App. After successful authorization you will get below details:
Thats It.
Enjoy! If you have any questions, comments etc. please feel free to let me know. As always, please feel free to get in touch me as I would be more than happy to assist you with any of your Salesforce development needs.
Read More: WhatsApp on Salesforce Integration in 5 Steps
Which Salesforce API Do I Use in Integration?
When To Use Salesforce REST API
When To Use Salesforce SOAP API
When To Use Salesforce Bulk API
Latest Salesforce Interview Questions and Answers:
1. Create Connected App: Populated below data into Connected App setup page:
Few things which are important in this step
- Set Callback URL to your custom Visualforce page link(Step 3).
- Selected OAuth Scopes : All Available OAuth Scopes
Connected App Configuration |
3. Create Visualforce Page : oAuth_Test
<apex:page controller="oAuthTokenController" action="{!startOAuth_step_2}">
<apex:form >
<apex:commandButton action="{!startOAuth}" value="Start oAuth Code" rerender="msgs"/>
<apex:commandButton action="{!getNewAccessToken}" value="Get New Access Token" rerender="msgs"/>
<apex:commandButton action="{!methodGet}" value="Call Webservice" rerender="msgs"/>
</apex:form>
<apex:outPutPanel id="msgs">
Authorize code => {!authCode}<br/>
Access Token => {!accToken}<br/>
Refresh Token => {!refToken}<br/>
Instance URL => {!insURL}<br/><br/><br/><br/>
Web Service Response URL => {!wsResponce}<br/>
</apex:outPutPanel>
</apex:page>
4. Create Apex class : oAuthTokenController
public class oAuthTokenController{
private auth_response objAutoRes;
public String consumerKey = 'YOUR CONSUMER KEY';
public String consumerSecret = 'YOUR CONSUMER SECRET';
public String authCode {get; set;}
public String accToken {get; set;}
public String refToken {get; set;}
public String insURL {get; set;}
public String wsResponce {get; set;}
// BELOW METHOD FETH AUTHRIZATION CODE
public pagereference startOAuth(){
String auth_url = 'https://test.salesforce.com/services/oauth2/authorize';
String params =
'?response_type=code' +
'&client_id=' + encodingUtil.urlencode(consumerKey,'UTF-8') +
'&redirect_uri=https://test.salesforce.com/apex/oAuth_Test' +
'&prompt=consent' +
'&scope=' + encodingUtil.URLEncode('full refresh_token','UTF-8') +
'&state=step2';
pageReference pr = New PageReference(auth_url + params);
return pr;
}
// GET ACCESS TOKEN AND REFRESH TOKEN
public pagereference startOAuth_step_2(){
System.debug('state=> '+apexPages.currentPage().getParameters().get('state'));
if(apexPages.currentPage().getParameters().get('state') != 'step2')
return null;
authCode = apexPages.currentPage().getParameters().get('code');
HttpRequest req = new HttpRequest();
Http http = new Http();
String auth_url = 'https://test.salesforce.com/services/oauth2/token';
String params =
'?code=' + apexPages.currentPage().getParameters().get('code') +
'&grant_type=authorization_code' +
'&client_id=' + encodingUtil.urlencode(consumerKey,'UTF-8') +
'&client_secret=' + consumerSecret +
'&redirect_uri=https://test.salesforce.com/apex/oAuth_Test';
req.setMethod('POST');
req.setEndpoint(auth_url + params);
HTTPResponse resp = http.send(req);
objAutoRes = (auth_response)json.deserialize(resp.getBody(),auth_response.class);
accToken = objAutoRes.access_token;
refToken = objAutoRes.refresh_token;
insURL = objAutoRes.instance_url;
return null;
}
// GET NEW ACCESS TOKEN AFTER EXPIRY OF OLD ACCESS TOKEN
public void getNewAccessToken(){
// First revoke current Access token before requesting new token
String URL = objAutoRes.instance_url;
String urlRevoke = '/services/oauth2/revoke?token=';
String tokenEncode = EncodingUtil.URLENCODE(objAutoRes.access_token,'UTF-8');
URL += urlRevoke += tokenEncode;
HttpRequest req = new HttpRequest();
req.setEndpoint(URL);
req.setHeader('Content-Type','application/x-www-form-urlencoded');
req.setMethod('GET');
Http http = new Http();
HttpResponse res = http.send(req);
system.debug('CR=response= '+res);
// Now request for new access token using refresh token
HttpRequest refreshRequest = new HttpRequest();
Http refreshHttp = new Http();
String auth_url = 'https://test.salesforce.com/services/oauth2/token';
String params =
'?grant_type=refresh_token' +
'&client_id=' + encodingUtil.urlencode(consumerKey,'UTF-8') +
'&client_secret=' + consumerSecret +
'&refresh_token=' + encodingUtil.URLEncode(objAutoRes.refresh_token,'UTF-8');
refreshRequest.setMethod('POST');
refreshRequest.setEndpoint(auth_url + params);
HTTPResponse refreshResp = refreshHttp.send(refreshRequest);
objAutoRes= (auth_response)json.deserialize(refreshResp.getBody(),auth_response.class);
accToken = objAutoRes.access_token;
insURL = objAutoRes.instance_url;
}
// Retrieve the Accounts from the Salesforce org.
public void methodGet(){
HttpRequest req = new HttpRequest();
req.setMethod('GET');
req.setEndpoint(objAutoRes.instance_url+'/services/apexrest/WebServiceTestingTool');
req.setHeader('Authorization', 'OAuth '+objAutoRes.access_token);
req.setHeader('Content-Type', 'application/json');
Http http = new Http();
HTTPResponse res = http.send(req);
System.debug('***methodGet Response***** ' + res.getBody());
wsResponce = res.getBody();
}
private class auth_response{
public string refresh_token;
public string access_token;
public string instance_url;
}
}
@RestResource(urlMapping='/WebServiceTestingTool/*')
global class TestRestWebservice {
@httpGet
global static void WSPolicyData (){
RestRequest req = RestContext.request;
try{
List<Account> result = [SELECT Name FROM Account LIMIT 1];
RestContext.response.responseBody = Blob.valueOf(JSON.serializePretty(result));
}
catch(Exception ex){
System.debug(ex.getMessage());
}
}
}
6: Create TWO remote site setting like below:
7: Go to oAuth_Test Visualforce page we have created in step 3 and click on button.
Click on Start oAuth Code button and authorize the App. After successful authorization you will get below details:
Thats It.
Enjoy! If you have any questions, comments etc. please feel free to let me know. As always, please feel free to get in touch me as I would be more than happy to assist you with any of your Salesforce development needs.
Subscribe blog for More updates !!!
Read More: WhatsApp on Salesforce Integration in 5 Steps
Which Salesforce API Do I Use in Integration?
When To Use Salesforce REST API
When To Use Salesforce SOAP API
When To Use Salesforce Bulk API
Latest Salesforce Interview Questions and Answers: