Data exporteren vanuit Salesforce met de REST-API en Php

Salesforce bevat een uitgebreide API waarmee het mogelijk is ongeveer alles op te vragen en te bewerken dat ook op te vragen is middels de web-interface. De authenticatie om de zogeheten 'Bearer'-token te krijgen is echter redelijk lastig. Dit loopt via het 'OAuth'-protocol. Deze blog is een handleiding hoe u een 'Connected'-App kan configureren en vervolgens een REST-API call uitvoert.

Salesforce App configureren

Om te beginnen moet een zogeheten 'Connected'-applicatie worden aangemaakt. Dit gaat als volgt,

1, ga naar uw Salesforce omgeving (https://test.salesforce.com/) & login

2, klik rechtsboven op het wieltje en kies 'Setup'



3, kies vervolgens onder 'PLATFORMTOOLS' => Apps => Appbeheer => 'Nieuwe verbonden app'



4, configureer vervolgens de nieuwe Connected-App zoals in het voorbeeld.


Een aantal waardes spreken voor zich, anderen hebben extra uitleg nodig,

Naam verbonden app willekeurige naam
API-naam deze wordt automatisch gegenereerd op basis van de ingevoerde naam
E-mail contactpersoon -
Call-back-URL Dit veld is nodig vanwege de OAuth-authenticatie. Salesforce maakt gebruik van een zogeheten 'single-sign-on' faciliteit. Hiermee is het ook mogelijk Salesforce-authenticatie in uw webapplicatie te integreren. Hoewel dit in dit voorbeeld niet gebruikt wordt, is wel een waarde verplicht. Daarom is hier de url van de eigen website ingevoerd.
Beschikbare OAuth-bereiken Waartoe de Connected-app toegang heeft middels de REST-API. Omdat dit een test/voorbeeld is, zijn alle autorisaties toegevoegd
Geheim vereisen voor webserverstroom Deze hoeft niet te worden aangevinkt. In het voorbeeld is deze wel aangevinkt. Als dit is aangevinkt moet met de API-calls die straks worden uitgevoerd het veld 'client_secret' worden meegegeven.
ID-token opnemen Deze waarde zorgt er voor dat we een 'Bearer'-token kunnen opvragen. Als deze niet is aangevinkt werkt dit niet.


Na opslaan duurt het 2 tot 10 minuten voordat de Connected-App werkt. Let op, als u wijzigingen maakt kan het uren duren voordat deze wordt doorgevoerd. Zelf had ik in eerste instantie de App onjuist geconfigureerd en daarna aangepast. Na 2 uur zoeken had ik een extra Connected-App aangemaakt met exact dezelfde instellingen. Deze werkte vervolgens vrijwel direct.


Php code met REST-API call

De Salesforce REST-API werkt als volgt. Eerstens moet je je autoriseren en een zogeheten 'Bearer'-token op vragen. Zodra je geautoriseerd bent kan je met deze Bearer-token alle REST-API's aanroepen. De autorisatie aanvraag gaat middels een API call naar https://test.salesforce.com/services/oauth2/token

Hiervoor zijn de volgende gegevens nodig,


De client_id & client_secret waardes hebben betrekking tot de aangemaakte app. Deze zijn op te vragen onder de 'Setup' => 'Apps' => 'Appbeheer' => Bij de App-naam op de pijl naar beneden klikken en kiezen voor 'Weergeven'. Vervolgens krijg je een overzicht van de 'verbonden app'. Onder API (OAuth-instellingen) staat,


De username, password & securityToken hebben betrekking tot de gebruiker die zich aanmeld. De username & password zijn ongetwijfeld al bij je bekend - hiermee heb je je immers aangemeld op Salesforce. De securityToken kan (opnieuw) worden aangevraagd door rechtsboven op je profiel-icoon te klikken en de instellingen van de huidige gebruiker op te vragen. Vervolgens kies je links in het menu 'Mijn beveiligingstoken opnieuw instellen'. Hierna wordt er een (nieuwe) token per e-mail opgestuurd.

Nu je alle gegevens hebt kan je de Bearer-token opvragen van Salesforce, 


$ch = curl_init('https://test.salesforce.com/services/oauth2/token');
$data = array();
$data['grant_type']    = 'password';
$data['client_id']     = '93458MSKLf_FShuiwrhwieu5._89345sfdlkjaeru34985jskldfjs_sfdakjfhu3io54yuqwyerfsafadurf';
$data['client_secret'] = '8798890534123987983';
$data['username']      = 'info@itxplain.nl';
$data['password']      = 'password-123' . 'securityToken-456';
        
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

$result = curl_exec($ch);


Mocht alles goed gaan krijg je een resultaat dat er als volgt uit ziet,

{
    "access_token":"adfkJLSDFkDFKL_.JFJA!jsd89w4",
    "instance_url":"https://YOUR-INSTANCE.salesforce.com",
    "id":"https://test.salesforce.com/id/05X0E02345345345FAJ84/3904580asdf944a",
    "token_type":"Bearer",
    "issued_at":"1507555090842",
    "signature":"YXNkZmhramFzc2RoZmJsYWJsYWJsYQ=="
}


Met deze gegevens kan je vervolgens beginnen aan de API-calls! Als volgt een voorbeeldaanvraag om Accounts op te vragen,

$q = 'select Name from Account';
        
$ch = curl_init('https://YOUR-INSTANCE.salesforce.com/services/data/v20.0/query/?q='.urlencode($q));
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Authorization: Bearer ' . $access_token,
    'X-PrettyPrint: 1'
));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);


Meer informatie over de REST-API is uiteraard in de developer-documentatie te vinden.

- Bent u opzoek naar een Php of Java programmeur voor uw website of applicatie? (freelance / detachering)
- Losse tickets/opdrachten, of gehele projecten in de planning?

Dan kom ik graag met u in contact! Meer informatie over mij vindt u hier.
Sitemap | Op alle producten & diensten zijn de algemene voorwaarden van toepassing