Hello All, I am back with another Integration post and in this post, I will show how you can connect with LinkedIn from your salesforce org using a small piece of code.
So, Get ready to do another integration with Salesforce.
Before we start playing with the code we need to create a Custom Setting where we will store Access Token and Expiry time so that we could use this while making the callouts.
Setup Custom Object: –
Go to Setup -> Create -> Objects -> New -> Name it “LinkedIn Information“
Create a VF page and Controller Class: –
Create an Apex class Name it “LinkedlnoAuthController“
Go to Setup -> Develop -> Apex Classes -> New ->
Next, Create a VF page that will do the Authorization with LinkedIn. Name it “LinkedlnoAuth“.
You will get the complete code from my GitHub Repo. Copy Apex Class and VF page code From Here.
After you created VF page Preview it, Copy the URL and paste somewhere into the notepad++ or any other text editor. URL will be something like below
https://dreamhouse-a-dev-ed–c.ap5.visual.force.com/apex/LinkedlnoAuth
Create an App in LinkedIn: –
Time to create a Connected App into LinkedIn developer account to get the Client Id (Consumer Key) and Client Secret(Consumer Secret).
Go to LinkedIn Developer Console Create Application. Refer this link to get the complete picture of app configuration. You will get Client Id and Client Secret copy both and store in the text editor.
You LinkedIn app page will look like below
Make Required Changes into Apex Class: –
1 – Open LinkedlnoAuthController class replace redirect_URI with your VF page preview URI (line #10).
2 – Replace consumerKey with your client Id and consumerSecret with your Client Secret (line #8 and #9).
Now, we are all set to let’s do some testing and see if we have successfully integrated LinkedIn with Salesforce.
Open LinkedlnoAuth VF page and preview it. Click Connect with LinkedIn button, it will open a new screen asking your LinkedIn username and password
Enter your username and password then sign in Grant permission to Application -> Click Complete Authorization, a success message will show.
Now Click on Get Basic Info -> A basic information will show here in PAGE
Facing any issue let me know in the comment section.
Happy Coding 🙂 Enjoy Coding 🙂
Hi Amit,
I have requirement to integrate Linked Campaign Manager to full the campaign budgets ,impression information .
Could you please let me know how can we full the data using rest api
LikeLike
Hey,
Have you tried reading the LinkedIn API document for the same?
Also, in the developed LinkedIn application this can not be achieved. You need to upgrade your application for which they will ask company information and after approving you can work on the detail.
LikeLike
Hi Amit,
i read the ApI document we have reporting API
https://docs.microsoft.com/en-us/linkedin/marketing/integrations/ads-reporting/ads-reporting
But I am not sure how to make authentication and end point uRL .
LikeLike
End Point and Authentication is same the only thing that is different is the operation and parameters in the Endpoint
LikeLike
I am getting that error when try to share post on linkedin where as i am getting my basic information currectly :
Unexpected Error while communicating with LinkedIn API. Status Unauthorized and Status Code 401
LikeLike
Check the debug log and you will get the complete Error about the same. And then try to resolve the error
LikeLike
I am getting that value while fetching basic information. please suggest how to remove localized parts:
{“localizedLastName”:”khan”,”lastName”:{“localized”:{“en_US”:”khan”},”preferredLocale”:{“country”:”US”,”language”:”en”}},”firstName”:{“localized”:{“en_US”:”jawed”},”preferredLocale”:{“country”:”US”,”language”:”en”}},”profilePicture”:{“displayImage”:”urn:li:digitalmediaAsset:C5103AQEhlpTDHOzjXg”},”id”:”gdwUOtYOGv”,”localizedFirstName”:”jawed”}
LikeLike
Hey, This a Json response you can easily parse the response and then replace the localized with blank string.
LikeLike
I am getting that result while fettching basic information :
{“localizedLastName”:”khan”,”lastName”:{“localized”:{“en_US”:”khan”},”preferredLocale”:{“country”:”US”,”language”:”en”}},”firstName”:{“localized”:{“en_US”:”jawed”},”preferredLocale”:{“country”:”US”,”language”:”en”}},”profilePicture”:{“displayImage”:”urn:li:digitalmediaAsset:C5103AQEhlpTDHOzjXg”},”id”:”gdwUOtYOGv”,”localizedFirstName”:”jawed”}
LikeLike
The fetchbasicinfo method is not working for me.
LikeLike
Are you getting any error?
LikeLike
Integration With Linkdlin
Hello Amit thank you for your help this blog very helpful for me.
i need one help i get all connection in salesforce as contact. Please provide me any solution
LikeLike
Hey, Sorry for the late response but to get all the connection you need to upgrade your LinkedIn application access and the access can only be granted for companies only it’s not for practice purpose.
LikeLike
Hi Amit,
I need to get information from Linkedln like First Name, Last Name, Email (in short whatever is public information available in Linkedln) and show this on Salesforce after clicking “Get Basic Information” button. Could you please help me, what changes required to your code as I am gettinf error now after clicking “Get Basic Information” button– “Unexpected Error while communicating with LinkedIn API. Status Gone and Status Code 410”
LikeLiked by 1 person
Hi Amit,
I am getting this error: https://201196-dev-ed–c.ap4.visual.force.com/apex/LinkedlnoAuthV1?error=internal_error&error_description=Internal+Server+Error&state=12345567dggd
I am getting an error while clicking Connect to Linkedin Button.
Need help
LikeLike
Please check the LinkedIn API
LikeLike
Hi Amit,
I am using this : https://api.linkedin.com as a Linkedin API.
LikeLike
plz, share a link of updated code.
LikeLike
I can try ‘https://api.linkedin.com/v1/people/~/shares?format=json’ this endpoint but throw an error with 410 status code so i will change API with ‘ https://api.linkedin.com/v2/me‘ please help me…
LikeLike
Hi,
Recently LinkedIn has changed the API so the Authentication Method and EndPoints have been changed. Here is the link for the same
https://docs.microsoft.com/en-us/linkedin/shared/integrations/people/profile-api?context=linkedin/compliance/context
Have a Look and Make the changes accordingly.
Thanks,
SFDCPanther
LikeLike
I will try Field Selections with its API But it’s through error like ‘Not enough permissions to access: GET /people/(id: My Client Id)’… The issue in permission for my LinkedIn developer account. How can i get this permission for mine account?
What can I do? Please help me.
LikeLiked by 1 person
Hey,
Have you created the Developer LinkedIn account and Also, created a Connected Application. Be sure that you have setup everything correct with Connected app and Call back URL
LikeLiked by 1 person
when i can add call back url?
LikeLike
Have you followed all the steps carefully? Each and Every detail are there in the Post. See below Image
LinkedIn Connect App
Thanks,
Amit
LikeLike
Thanks for this link.But i have only three permission r_emailaddress,r_liteprofile,w_member_social. So I guess problem if there.
LikeLike
But I have share permission this w_member_social. I show the document and share post required only w_member_social permission. I don’t know, where I am wrong.
LikeLike
Hi,
Giving Permission at Connected Application is not enough you need to add that permission as a scope parameter while Authenticating the application. Make Sure that you are passing below permissions
r_basicprofile r_emailaddress
r_liteprofile
w_share
rw_company_admin
w_member_social
LikeLike
I think w_share permission required for post share. But my knowledge w_share is old permission and w_share replace with w_member_social new permission.
And I can send a request for a new Marketing Developer Platform product in my LinkedIn application but it is pending for review.
Thanks for helping me.
LikeLike
No. That is the required permission to share the content. The permission that you are using is for company accounts.
LikeLike
Oh! you are right.so I can’t use this API and can’t handle in Salesforce. Linkedin account
not permission for that.
LikeLiked by 1 person
Hey Amit,
I have tried to get LinkedIn post in visualforce page. But I don’t know how many permissions are required. Please Help me.
LikeLike
Hi,
You need to check the LinkedIn API for the same.
LikeLike
I was referred documentation but I have not a correct answer. I found get API for post not available in the documentation. So I will get post information or not.
LikeLike
Hi,
everything should be there in the document. If it is not there then probably either you need to connect to LinkedIn Support or it is not supported to get all the posts
LikeLike
Hi Amit,
1. I have created two fields for store username and password in LinkedIn Information object.
2. Now When authentication request I have set email address and password value from Linkedin
Information field user name and password.
3.Like:-
Email Address:- Username Field
Password:- Password field
Is this possible?
LikeLike
If you are talking about storing the username and password then it is not possible.
LikeLike
Already I have store username password in the object field. When I have a request for authentication code then open the login page I have set object field value in Email and password value.
LikeLike
HI Amit,
Thanks for the awesome block.
I have one question can we find all the contacts present on LinkedIn by matching the first name and last name.
LikeLike
I am not sure but You can explore the API and see if we can. I will implement the same
LikeLike
Hi Amit,
I am getting 401 error after sucessfull authorization, when I click on basic info button, got 401 error.
Can you please help me.
LikeLike
This might be because of LinkedIn has changed the API so now authentication process is a bit different. Here is the Link for the same :- https://docs.microsoft.com/en-us/linkedin/consumer/
LikeLike
Hi sir,
I am getting error, on 25th line
Select Id, Name, Access_Token__c, Expires_In_Seconds__c
^ERROR at Row:1:Column:18
No such column ‘Access_Token__c’ on entity ‘LinkedIn_Information__c’. If you are attempting to use a custom field, be sure to append the ‘__c’ after the custom field name. Please reference your WSDL or the describe call for the appropriate names.
63,.Variable does not exist: Access_Token__c 64.Variable does not exist: expire in seconds__c
Same on 101, 105, 144, 148 line,
Please help, it will be greatful
LikeLike
Hi, Did you created Access_Token__c Field on LinkedIn_Information__c Object?
LikeLike
I have permission for share post .when I can add post request but I face error ‘com.linkedin.publishing.util.common.ResponseException: Writers of type person are not authorized to modify UserGeneratedContent.’ 401 status code.
Please help me what can I do?
LikeLike
From the Error, I can say that the URL that you are hitting to share the Post is not correct. OR you have not authorized permission to share the post. Cross check the Connected App Settings
LikeLike
Hi Amit,
I am getting below error while clicking on “Complete Authorization”:
Error:
Unexpected Error while communicating with LinkedIn API. Status Bad Request and Status Code 400
Please help.
Thanks,
Deepika Ghose
LikeLike
Hi Deepika,
Please refer the below video for the updated Information
Salesforce Integration with LinkedIn
And below is the link for the Updated Metadata: –
Salesforce-LinkedIn-Integration
LikeLike
Hi – do you have example code that shows how you replace the references to the custom setting with a custom object name and fields please.
LikeLike
Hi Russel,
No. I do not have but I will post them soon with Custom Object and Updated Code.
LikeLike
Hi Russel,
I have updated the code to Use the Custom Object and also added a new feature by which you can share the post to Linkedin from the Code.
Let me know if you have queries
LikeLike
Hi Amit,
I am getting error on post.
Error: unexpected error while communicating with the linkedin Api. Status un authorized and status code: 401
When I run it in the postman the message I got is- Writers if type person are not authorized to modify UserGeneratedContent.
Do I have to change anything in my connected app for permissions? I even added all the permussions in my scope.
Any help is appreciated.
LikeLike
Hi Kusuma,
LinkedIn has recently changed the API. So you need to make changes in the code accordingly.
Check the new API Doc
https://docs.microsoft.com/en-us/linkedin/shared/authentication/client-credentials-flow?context=linkedin/compliance/context
LikeLike
Hi Amit,
I am usinf 3-legged Oauth. Are you saying that the below Api got changed?
Post Api: https://api.linkedin.com/v2/ugcPosts
LikeLike
Hi,
I have not worked on 3-legged Oauth. The blog is to authenticate using Oauth 2.O
LikeLike
Hi Amit,
Thanks for providing such awesome implementation. It’s working perfect.!!
I have below requirement. Please guide me:
Req : I want to fetch my contact’s LinkedIn profile’s basic information (Salesforce standard contacts)
Can you please guide me, what all changed needs to be done in your implementation to achieve my requirement?
Any help would be highly appreciated
Thanks a ton.!!
LikeLike
Hi Akash,
You want to fetch the Basic profile information of your Salesforce Contacts correct?
To get the information of your contact your contact must authorize the application atleast once if contact has not authorized the linkedIn application then you can get their information.
OR
You wanted to fetch the LinkedIn contact information. If so refer below link for the same
https://developer.linkedin.com/docs/guide/v2/people/connections-api#sample
LikeLike
Hi Amit,
Thanks for the reply.!! Yes I want to fetch the basic profile information of my contact records.
Can you please guide me below points :
1) How my contacts should authorize the application? (If any code changes needed, please let me know)
2) How to make the api callout request for specific contact’s LinkedIn’s basic profile information?
Also, I’ve gone through the below link :
https://developer.linkedin.com/support/faq
It has been mentioned that LinkedIn doesn’t have any way to refresh the access token. So if the current access token get’s expired, is there any automated way we can update it in apex class?
Thanks,
Akash
LikeLike
Akash,
Put detail page button on the contact level which will open the LinkedIn authentication page and after you get the response from the LinkedIn save the response into the Custom Object.
To refresh the access token Refer the given link
https://developer.linkedin.com/docs/oauth2
LikeLike
when i click on get basic info I am getting this error…
List index out of bounds: 0
Error is in expression ‘{!doFetchBasicInfo}’ in component in page linkedlnoauth: Class.LinkedlnoAuthController.doFetchBasicInfo: line 100, column 1
An unexpected error has occurred. Your development organization has been notified.
when I click on complete authorization :
Errors
Access Token1: Access Token1: data value too large: AQUyRtz3_y2kJ7YnBVqXX8WEtKzUKw0hhH3_QTY1d0A_SCsIYiunij5HpNg5iu3FFIeyDTbOltLP3wp_1mpM2xmDais9F6IdFnU7Hwg0CFUKY6cF9BQh0dM1N2YbK2fztK4QSIEXVo8NdEHzop3elyt1GDcwXAzcWqa9qHr41MEWo1H6ndvctcxd84WKOScpcsxr11UBqVI3vJ2P3mC5QoVaT5LTaH3bK6cKmpAhmJgJ8k7RcyRvB9oVrb7913OMz_rDKP0qOm4SjB9JnJ1KR8nm9exQ_RRzc0nC4WHm6Nq8OgEScNYIXe55I_Ak-sUUPQbTh7IKFIxU1djAppLshNyEwO51Qg (max length=255)
Unexpected Error while communicating with LinkedIn API. Status OK and Status Code 200
CONFIRM
Success:
Congrattzzzzz….. You have done successfull Integration with Linkedln
LikeLike
Hi Harish,
Need to check the below thing –
1 – Access Token1: data value too large: Error because access token length is more than 255 Chars. As a solution Create a custom Object with the Exact Value and for Access and Refresh Token use TextArea Long instead of Text Field. And then use that custom Custom Object instead of LinkedIn_Token_Info__c Custom Setting
LikeLike
I have lot of job openings in my job opening object(salesforce) after completion of salesforce and linkedin authorization automatically whatever job postings are there in job opening object that all openings automatically should post in my linkedin
pls Amith help me regarding this..how to do
LikeLike
Hi Hanitha,
For this we need to make some other API Call to post the Job form Salesforce to LinkedLn automaticlly. Let me do the test from my side and then I will post the code here in the comment Section.
LikeLike
Hi Hanitha,
I have checked and tested the same using the API Console of the LinkedIn and below are the details with the URL, header and body that you need to use while making callout from the salesforce.
1- URL Endpoint – https://api.linkedin.com/v1/people/~/shares?format=json
2 – Header – Content-Type : application/json
3 – Header – x-li-format : json
4 – Body in json format and below is sample body
{
“comment”: “Check out developer.linkedin.com!”,
“content”: {
“title”: “LinkedIn Developers Resources”,
“description”: “Leverage LinkedIn’s APIs to maximize engagement”,
“submitted-url”: “https://developer.linkedin.com”
},
“visibility”: {
“code”: “anyone”
}
}
In your case you need to develop the dynamic body and need to make the callout from the apex trigger with @future method.
Hope this will be useful for you 🙂
Regards,
Amit
LikeLike
When i click on the complete authorization i am getting error:
Error:
Unauthorize endpoint: An Administer must go to Setup -> Administer -> Security Control -> Remote Site Setting and add https://www.linkedin.com/oauth/v2/accessToken Endpoint
which access token end point i have to give
LikeLike
Add -> “https://www.linkedin.com” url into the Remote Site Setting
LikeLike
Thanks for the solution, but I am facing issues during implementation of above example.
I am using my developer (free) org, in this I am facing an issue while I am clicking on a “Complete Authorization” Button. facing this below issue:
———–
Issue:
15:06:47:863 USER_DEBUG [87]|DEBUG|#### Exception Excuted Class.selflearning.LinkedlnoAuthController.doGetAccessToken: line 76, column 1 Upsert failed. First exception on row 0; first error: STRING_TOO_LONG, Access Token: data value too large: AQXoXkOHB-jcDKI2Vehp3OJS2ajjzaPu-7CVLufzzqbxLPR0_R4sW3pSaJkZZVowRlpVjhptiUmV-Op-2bXDTa7CvBkcSwMBQxKpQQsWVw_FRPR97EsAbXvEIrJEamNfpOlyNAZZ0LdFwHHqyuFiUQqhIfbfH9NIK4GDbB2Xj46O4T_-_Z-pWM5cLjy2uwwGH0V2ldChwwJ0WgN7A7qAoLdgO2yC1zmBHQbKyRkNz1y5MWRQP8VWDYQvpp3Mu4_0DsyPijHY_VDuuxTmx30Tmhz1IKoJqVGtdL2GMcTgH4gt9pKz6i6oxC2ZDtWvmUaMldIxEaDJr_LzatOoqxRJ6b3Zk7TsVA (max length=255): [selflearning__Access_Token__c]
————-
where field (selflearning__Access_Token__c) of custom setting is of text type with 255 max character.
Have you any idea how to resolve this.
Thanks in advance
LikeLike
Thanks Amit Singh for the nice startUp. I did it
LikeLike
This issue is because that the value of Access Token is larger than 255 character. As an alternative create a custom object with the same attribute as custom setting and for access token create text area long field instead of Text and make the necessary changes into the code replace custom setting in the code.
LikeLike
Hey Amit, thanks for reply.
I did it by same logic on same day.
Nice setup/plateform you are providing for learning.
Keep it up. 🙂
LikeLike