如何使用TWILIO ASP.Net Web API发送和验证OTP

时间:2018-08-29 10:44:47

标签: c# twilio twilio-api

我能够使用twilio从我们的应用程序向用户发送SMS消息。

此处是用于通过Twilio How to send sms using C# and twilio API

向用户发送消息的链接

现在,我想生成OTP(一次性密码)。通过twilio将OTP发送给用户。用户必须将OTP回复到twilio号。twilio是否可能?

如果是,如何将OTP SMS消息回复到Twilio号码。

有人可以帮助我,并举一些例子吗?

2 个答案:

答案 0 :(得分:0)

您必须生成OTP并通过SMS发送,然后保存并验证,Twillo不会生成该OTP。

此代码生成一个OTP:

protected void GenerateOTP(object sender, EventArgs e)
{
    string alphabets = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    string small_alphabets = "abcdefghijklmnopqrstuvwxyz";
    string numbers = "1234567890";

    string characters = numbers;
    if (rbType.SelectedItem.Value == "1")
    {
         characters += alphabets + small_alphabets + numbers;
    }
    int length = int.Parse(ddlLength.SelectedItem.Value);
    string otp = string.Empty;
    for (int i = 0; i < length; i++)
    {
        string character = string.Empty;
        do
        {
            int index = new Random().Next(0, characters.Length);
            character = characters.ToCharArray()[index].ToString();
        } while (otp.IndexOf(character) != -1);
        otp += character;
    }
    lblOTP.Text = otp;
 }

答案 1 :(得分:0)

        #region Namespaces
        using System;
        using System.Collections.Generic;
        using System.Linq;
        using System.Web;
        using System.Data;
        using System.Data.SqlClient;
        using System.Data.Sql;
        using System.Data.SqlTypes;
        using System.Configuration;
        using System.Web.UI.WebControls;
        using System.Net;
        using System.IO;
        #endregion
        
        /// <summary>
        /// Summary description for SMSAPI
        /// </summary>
        public class SMSAPI
        {
        
            MyConnection con = new MyConnection();
            public DataSet ds = new DataSet();
            public SqlDataAdapter da = new SqlDataAdapter();
            public SMSAPI()
            {
                //
                // TODO: Add constructor logic here
                //
            }
        
        
            /*Get The SMS API*/
            public string GETSMSAPI()
            {
        
                con.Open();
                string QuerySMS, StringSMS, APISMS, UserName, Password, Sender, Priority;
                QuerySMS = "SP_SMSAPIMaster_GetDetail";
                StringSMS = APISMS = UserName = Password = Sender = Priority = "";
                con.cmd.CommandText = QuerySMS;
                try
                {
                    con.Open();
                    con.cmd.ExecuteNonQuery();
                    SqlDataAdapter da = new SqlDataAdapter(con.cmd);
                    da.Fill(ds, "tbl_SMSAPIMaster");
        
                    if (ds.Tables["tbl_SMSAPIMaster"].Rows.Count > 0)
                    {
                        APISMS = ds.Tables["tbl_SMSAPIMaster"].Rows[0]["SMSAPI"].ToString();
                        UserName = ds.Tables["tbl_SMSAPIMaster"].Rows[0]["UserName"].ToString();
                        Password = ds.Tables["tbl_SMSAPIMaster"].Rows[0]["Password"].ToString();
                        Sender = ds.Tables["tbl_SMSAPIMaster"].Rows[0]["Sender"].ToString();
                        Priority = ds.Tables["tbl_SMSAPIMaster"].Rows[0]["Priority"].ToString();
                        StringSMS = APISMS.Replace("uid", UserName).Replace("psd", Password).Replace("sndid", Sender).Replace("prt", Priority);
                    }
                    else
                    {
                        StringSMS = "";
                    }
                }
                catch
                {
                }
                finally
                {
                    con.Close();
                }
                
                return StringSMS;
        
            }
            /*Call The SMS API*/
            public string GetAPICALL(string url)
            {
                HttpWebRequest httpreq = (HttpWebRequest)WebRequest.Create(url);
                try
                {
                    HttpWebResponse httpres = (HttpWebResponse)httpreq.GetResponse();
                    StreamReader sr = new StreamReader(httpres.GetResponseStream());
                    string results = sr.ReadToEnd();
                    sr.Close();
                    return results;
                }
                catch
                {
                    return "0";
                }
            }
            
        }
    
     private void SendOTPSMS()
        {
            string Msgs, SMSString;
            Msgs = SMSString = "";
            SMSString = SMSAPI.GETSMSAPI();
            Msgs = "D" + "OTP : " + lblOneTimePassword;
            lblMessageContent = Msgs;
            SMSString = SMSString.Replace("num", txtMobileNo.Value.Trim()).Replace("fedmesge", Msgs);
            string Result = SMSAPI.GetAPICALL(SMSString);
        }


  private void GenerateOTP()
    {
        int MaxSize = 4;
        //int MinSize = 0;
        char[] chars = new char[62];
        string Character;
        // a = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
        Character = "1234567890";
        chars = Character.ToCharArray();
        int Size = MaxSize;
        byte[] data = new byte[1];
        RNGCryptoServiceProvider crypto = new RNGCryptoServiceProvider();
        crypto.GetNonZeroBytes(data);
        Size = MaxSize;
        data = new byte[Size];
        crypto.GetNonZeroBytes(data);
        StringBuilder result = new StringBuilder(Size);
        foreach (byte b in data)
        {
            result.Append(chars[b % (chars.Length)]);
        }

        lblOneTimePassword = result.ToString();

    }
相关问题