Après bien des efforts, j'ai réussi à faire fonctionner mon code .Net sur SugarCRM......
C'est ce que j'ai fait....all dans une application Console pour moi. C'est une preuve de concept et donc tout est codé en dur pour le moment !
Utiliser Nuget pour installer OAuth par Daniel Crenna
Étape 1 : Établir la clé du consommateur
Allez dans Admin -> section OAuth Keys sur SugarCRM et créez un nouvel enregistrement, j'ai utilisé Key & Secret.
Étape 2 : Création d'un jeton de demande
private static void CreateRequestToken()
{
// Creating a new instance directly
OAuthRequest client = new OAuthRequest
{
Method = "GET",
Type = OAuthRequestType.RequestToken,
SignatureMethod = OAuthSignatureMethod.HmacSha1,
ConsumerKey = "Key",
ConsumerSecret = "Secret",
RequestUrl = "http://localhost/service/v4/rest.php",
Version = "1.0",
SignatureTreatment = OAuthSignatureTreatment.Escaped
};
// Using URL query authorization
string auth = client.GetAuthorizationQuery(new Dictionary<string, string>() { { "method", "oauth_request_token" } });
var request = (HttpWebRequest)WebRequest.Create("http://localhost/service/v4/rest.php?method=oauth_request_token&" + auth);
var response = (HttpWebResponse)request.GetResponse();
NameValueCollection query;
using (StreamReader sr = new StreamReader(response.GetResponseStream()))
{
string result = sr.ReadToEnd();
query = HttpUtility.ParseQueryString(result);
}
Console.WriteLine(query["authorize_url"]);
Console.WriteLine(query["oauth_token"]);
Console.WriteLine(query["oauth_token_secret"]);
}
C'est la partie délicate qui m'a pris des heures à comprendre, remarquez que le requesturl est sans la partie query dans le client, et vous devez l'ajouter à l'appel GetAuthorizationQuery ET à l'url WebRequest réelle.
Notez les 3 éléments prêts pour l'étape 4.
Étape 3 Approuver le jeton de demande
Visitez l'url "authorize_url" ci-dessus et ajoutez également &token= "oauth_token". Pour cela, c'était :
http://localhost/index.php?module=OAuthTokens&action=authorize&token=adae15a306b5
Autorisez le jeton et enregistrez le code d'autorisation du jeton.
Étape 4 Demande de jeton d'accès
private static void RequestAccessToken()
{
OAuthRequest client = new OAuthRequest
{
Method = "GET",
Type = OAuthRequestType.AccessToken,
SignatureMethod = OAuthSignatureMethod.HmacSha1,
ConsumerKey = "Key",
ConsumerSecret = "Secret",
RequestUrl = "http://localhost/service/v4/rest.php",
Version = "1.0",
SignatureTreatment = OAuthSignatureTreatment.Escaped,
Token = "adae15a306b5",
TokenSecret = "e1f47d2a9e72",
Verifier = "33e2e437b2b3"
};
// Using URL query authorization
string auth = client.GetAuthorizationQuery(new Dictionary<string, string>() { { "method", "oauth_access_token" } });
var request = (HttpWebRequest)WebRequest.Create("http://localhost/service/v4/rest.php?method=oauth_access_token&" + auth);
var response = (HttpWebResponse)request.GetResponse();
NameValueCollection query;
using (StreamReader sr = new StreamReader(response.GetResponseStream()))
{
string result = sr.ReadToEnd();
query = HttpUtility.ParseQueryString(result);
}
Console.WriteLine(query["oauth_token"]);
Console.WriteLine(query["oauth_token_secret"]);
}
Token et TokenSecret sont de l'étape 2, Verifier est le Code d'Authentification de l'étape 3.
Étape 5 Utiliser le jeton d'accès
J'utilise simplement l'identifiant de session tel que recommandé par la documentation, donc pour obtenir l'identifiant de session
private static void GetSessionId()
{
OAuthRequest client = new OAuthRequest
{
Method = "GET",
Type = OAuthRequestType.ProtectedResource,
SignatureMethod = OAuthSignatureMethod.HmacSha1,
ConsumerKey = "Key",
ConsumerSecret = "Secret",
RequestUrl = "http://localhost/service/v4/rest.php",
Version = "1.0",
SignatureTreatment = OAuthSignatureTreatment.Escaped,
Token = "adae15a306b5",
TokenSecret = "2d68ecf5152f"
};
string auth = client.GetAuthorizationQuery(new Dictionary<string, string>()
{
{ "method", "oauth_access" },
{ "input_type", "JSON" },
{ "request_type", "JSON" },
{ "response_type", "JSON" }
});
var request = (HttpWebRequest)WebRequest.Create("http://localhost/service/v4/rest.php?method=oauth_access&input_type=JSON&request_type=JSON&response_type=JSON&" + auth);
var response = (HttpWebResponse)request.GetResponse();
dynamic o;
using (StreamReader sr = new StreamReader(response.GetResponseStream()))
{
string result = sr.ReadToEnd();
o = Newtonsoft.Json.JsonConvert.DeserializeObject(result);
}
Console.WriteLine("SessionId: {0}", o.id);
}
Ici, j'utilise JSON.Net pour analyser le Json dans un objet dynamique pour un accès facile à l'id.
Étape 6 Faites-lui faire quelque chose....
À vous de jouer !
Expérience plutôt douloureuse, mais au moins ça marche pour moi.....
Tim