2017-09-21 1 views
0

Lors de l'utilisation de RequestValidator de Twilio, la fonction .Validate renvoie toujours false. Je ne suis pas sûr si je manque quelque chose, ou si j'utilise des informations incorrectes. Le code est ci-dessous:Twilio ReqestValidator renvoie toujours la valeur false

public ActionResult Text(string messageSid, string body, string to, string from) 
    { 
     var validator = new RequestValidator(AuthToken); 

     var parameters = new Dictionary<string, string> 
         { 
          {"Body", body}, 
          {"From", from}, 
          {"MessageSID", messageSid}, 
          {"To", to} 
         }; 

     var signature = Request.Headers["X-Twilio-Signature"]; 
     var url = @"https://e5f89299.ngrok.io/Home/Text"; 

     var b = validator.Validate(url, parameters, signature); 
} 

je mets les paramètres par ordre alphabétique, et l'URL est l'exact que je fournis pour Twilio. La signature semble correcte aussi. Qu'est-ce que je rate?

Répondre

0

Twilio évangéliste développeur ici. En regardant votre code et vous le faites presque bien, mais il s'avère que Twilio fera une demande à votre application en transmettant beaucoup plus d'informations que ce que vous attendez réellement, et en rétrospective, je fais apprécier que peut-être notre documentation ne le montre pas vraiment.

J'ai créé un exemple d'application here qui montre un exemple qui fonctionne avec la version actuelle de l'API. Mais au fond, tout cela se résume à la place de coder en dur les paramètres, vous pouvez faire quelque chose de semblable à ce que je l'ai fait dans ce:

public IActionResult SendMessage(IFormCollection fc) 
{ 
    // The Twilio request URL 
    const string url = "https://31123028.ngrok.io/api/Message"; 

    // Initialize the validator 
    var validator = new Twilio.Security.RequestValidator(_authtoken); 

    // The X-Twilio-Signature header attached to the request 
    var twilioSignature = "empty"; 
    StringValues headerValues; 
    if (Request.Headers.TryGetValue("X-Twilio-Signature", out headerValues)) 
    { 
     twilioSignature = headerValues.FirstOrDefault(); 
    } 

    Console.WriteLine(twilioSignature); 

    var parameters = fc.Keys.ToDictionary<string, string, string>(key => key, key => fc[key]); 

    var hashedParameters = GetHashedParameters(url, parameters); 
    Console.WriteLine(hashedParameters); 
    Console.WriteLine(validator.Validate(url, parameters, twilioSignature)); 

    return Content("blah"); 
} 

Comme vous pouvez le voir, je suis en boucle à travers tous les paramètres transmis puis en les ajoutant à un dictionnaire, que je passe ensuite dans la méthode Validate.

var parameters = fc.Keys.ToDictionary<string, string, string>(key => key, key => fc[key]); 

J'ai aussi ajouté quelques débogage et une méthode pour me montrer que je suis générer le même hachage que Twilio.

J'espère que cela vous aide.