I have a system that is posting data to a streaming channel which works upon data changing and a trigger firing.
The a code snippet is shown below.
string sessionId = UserInfo.getSessionId();
HttpRequest req = new HttpRequest();
HttpResponse res = new HttpResponse();
Http http = new Http();
req.setEndpoint(uri);
req.setMethod('POST');
req.setHeader('Authorization', 'Bearer '+sessionId);
string body = '{"pushEvents":[{"payload":"'+payload.escapeJava()+'", "userIds":[]}]}';
req.setHeader('Content-Type', 'application/json');
req.setBody(body);
req.setCompressed(true); // otherwise we hit a limit of 32000
try {
res = http.send(req);
} catch(System.CalloutException e) {
System.debug('Callout error: '+ e);
System.debug(res.toString());
} catch(System.Exception ex){
System.debug(res.getStatusCode());
System.debug(res.toString());
}
I now need to call this code via scheduled apex and so now the sessionid is coming in null as its asynchronous.
What I can do is use OAuth to get an access token and use this for authentication. There is quite a lot of setup to this and storing usernames/passwords/securitytokens (and managing them) is something that doesn't appeal!
I have come across the Named Credentials functionality and wonder if this is something I can leverage? Anybody tried this?
I have tried
HttpRequest req = new HttpRequest();
req.setEndpoint('callout:Salesforce');
req.setMethod('POST');
Http http = new Http();
HTTPResponse res = http.send(req);
System.debug(res.getBody());
where Salesforce is the Named Credential with the following details:-
- URL: https://login.salesforce.com/services/oauth2/token
- Identity Type: Named Principal
- Authentication Protocol: Password
- Authentication Username: [my username]
- Password: [my password]
The result from Developer Console is
12:05:11.560 (560650534)|CALLOUT_RESPONSE|[6]|System.HttpResponse[Status=Bad Request, StatusCode=400]
12:05:11.560 (560668002)|HEAP_ALLOCATE|[6]|Bytes:96
12:05:11.560 (560819528)|VARIABLE_ASSIGNMENT|[6]|res|"System.HttpResponse[Status=Bad Request, StatusCode=400]"|0x319e2ef7
12:05:11.561 (561088589)|USER_DEBUG|[9]|DEBUG|{"error":"unsupported_grant_type","error_description":"grant type not supported"}
Any help appreciated.