Nous essayons d'implémenter Twitter nouvelle DM API de Salesforce. Nous envoyons notre requête JSON dans le corps comme mentionné dans la documentation mais la méthode héritée pour l'autorisation Oauth ne fonctionne pas. Toute aide est grandement appréciée. Pour ajouter, j'envoie un DM de salesforce à twitter, donc 1) Je suis en train de définir le corps de la demande dans JSON. 2) Je fais un POST. 3) J'atteins l'extrémité à 'https://api.twitter.com/1.1/direct_messages/events/new.json' 4) Oauth2, obtenant le jeton d'accès (avec succès) 5) Définir l'en-tête comme ('Content-Type', 'application/json'). 6) Création de l'en-tête Authorization sous la forme de mentions Twitter à l'aide de la clé de consommateur, de Nonce, de Signature, de la méthode de signature, d'horodatage, de la version. Construire le même que dans la section "Guide" de developer.twitter.com/fr/docs/basics/authentication/guides/ 7) Sur l'exécution du code d'erreur "{" erreurs ": [{" code ": 32," message ":"Impossible de vous authentifier."}]}". Une autre information importante que j'avais utilisé l'ancienne API de Twitter pour envoyer DM qui fonctionne parfaitement, seule différence est qu'il envoie le corps de la requête dans les paramètres d'URL au lieu du corps JSOn mais la méthode d'autorisation reste la même. Comme certaines nouvelles fonctionnalités ne peuvent être réalisées que via Twitter New API et selon la documentation, le corps doit être envoyé via le format JSON. Par conséquent, la partie de requête est modifiée mais l'autorisation est la même.Twitter nouvelle DM API, ancienne méthode d'autorisation ne fonctionne pas
Exemple de code: -
String accTok = 'redacted';
String conKey = 'redacted';
String conSec = 'redacted';
String accTokSec = 'redacted';
String theTweet = 'Hello world!';
String screenName ='some_test_username';
String jsonString = TwitterJsonReqGenerator.generateJSON(theTweet, screenName);
system.debug('JSON string ='+jsonString);
httpRequest newReq = new httpRequest();
newReq.setBody(jsonString);
newReq.setMethod('POST');
newReq.setEndpoint('https://api.twitter.com/1.1/direct_messages/events/new.json');
//Generate Nonce
string oAuth_nonce = EncodingUtil.base64Encode(blob.valueOf(string.valueOf(Crypto.getRandomInteger()+system.now().getTime())+string.valueOf(Crypto.getRandomInteger()))).replaceAll('[^a-z^A-Z^0-9]','');
map<String, String> heads = new map<String, String>{
'oauth_token'=>accTok,
'oauth_version'=>'1.0',
'oauth_nonce'=>oAuth_nonce,
'oauth_consumer_key'=>conKey,
'oauth_signature_method'=>'HMAC-SHA1',
'oauth_timestamp'=>string.valueOf(system.now().getTime()/1000)
};
//Alphabetize
string[] paramHeads = new string[]{};
paramHeads.addAll(heads.keySet());
paramHeads.sort();
string params = '';
for(String encodedKey : paramHeads){
params+=encodedKey+'%3D'+heads.get(encodedKey)+'%26';
}
//params+='status'+percentEncode('='+percentEncode(theTweet));
params+=percentEncode(theTweet);
//Build the base string
string sigBaseString = newReq.getMethod().toUpperCase()+'&'+EncodingUtil.urlEncode(newReq.getEndpoint(),'UTF-8')+'&'+params;
system.debug('signatureBaseString == '+sigBaseString);
//calculate signature
string sigKey = EncodingUtil.urlEncode(conSec,'UTF-8')+'&'+EncodingUtil.urlEncode(accTokSec,'UTF-8');
blob mac = crypto.generateMac('hmacSHA1', blob.valueOf(sigBaseString), blob.valueOf(sigKey));
string oauth_signature = EncodingUtil.base64Encode(mac);
heads.put(EncodingUtil.urlEncode('oauth_signature','UTF-8'), EncodingUtil.urlEncode(oauth_signature,'UTF-8'));
//build the authorization header
paramHeads.clear();
paramHeads.addAll(heads.keySet());
paramHeads.sort();
string oAuth_Body = 'OAuth ';
for(String key : paramHeads){
oAuth_Body += key+'="'+heads.get(key)+'", ';
}
oAuth_Body = oAuth_Body.subString(0, (oAuth_Body.length() - 2));
newReq.setHeader('Authorization', oAuth_Body);
system.debug('Authroization Header == '+oAuth_Body);
newReq.setHeader('Content-Type', 'application/json');
httpResponse httpRes = new http().send(newReq);
String response = httpRes.getBody();
system.debug(response);
Merci Prateek
Pouvez-vous envoyer votre code par modifier cette question? –
Bonjour Dima, Merci d'avoir répondu. –
Vous devriez envisager d'ajouter des informations sur votre problème, comme ce qui ne fonctionne pas. En outre, vous devriez envisager d'ajouter des informations sur le projet, comme la technologie que vous utilisez. Échantillon de code sont également très appréciés dans ce cas – Nicolas