C# 物联网开发API接口系列(3)

C# 物联网开发API接口系列(三)

提纲

1)登录验证 返回 令牌

2)激活设备

正文

1)登录验证

    /// 
    /// 获取用户token,通过账号密码
    /// 
    /// 账号或手机号
    /// 密码(未加密,明文)
    /// 
    private string login(string uc, string pwd)
    {
        StringBuilder sb = new StringBuilder();//字符串拼接用到
        string result = "";
        
        if (SqlHelper.isConnected)
        {//数据库已连接
            try
            {
                SqlConnection SqlConn = new SqlConnection(SqlHelper.ConnString);
                if (SqlConn.State != ConnectionState.Connecting)
                {
                    SqlConn.Open();// 打开数据库连接
                }
                //修改加密方法  根据自己需要 可以加密后与数据库进行对比
                SqlCommand sqlCmd = new SqlCommand("SELECT top 1 uid,fuid,uCount,uToken,uTel,uName,uPwd FROM user_List WHERE (uTel='" + uc + "' OR uCount='" + uc + "') AND uPwd='" + md5Helper.MD5Util.MD5Hash(pwd,32,true) + "' AND uStatus=1", SqlConn);
                SqlDataReader rd = sqlCmd.ExecuteReader();//返回记录集
                if (rd.HasRows)//HasRows判断reader中是否有数据 
                {
                    if (rd.Read())
                    {//读取1条数据,如果多条时 用while进行操作
                        uid = Convert.ToInt16(rd["uid"]);    //返回用户id
                        fuid = Convert.ToInt16(rd["fuid"]);  //模块父id (可无限分级)顶级为0,子级时为uid
                        utoken = rd["uToken"].ToString();  //令牌(***)
                        utel = rd["uTel"].ToString();            //绑定的电话
                        uname = rd["uName"].ToString();  //设备昵称(暂不支持直接汉字,考虑编码方式)
                        //返回 用户信息(公共变量)
                        ujson = "{\"uid\":" + uid + ",\"fuid\":" + fuid + ",\"utoken\":\"" + utoken + "\",\"uname\":\"" + uname + "\",\"utel\":\"" + utel + "\"}";
                    }
                    //json标准格式除数字外,所有key和value必须有引号,此c#里用\"转移,注意{}的使用和逗号的处理!
                    //在这拼格式 非数据引用的{}不能出现Format里面否则无法识别;Format里只能数字对应的数据
                    result = string.Format("\"data\":\"{0}\",\"code\":{1},\"time\":\"{2}\"", utoken, 200, svrNowTime());//全部数据的最后一个逗号处理
                }
                else
                {//无结果时
                    result = string.Format("\"data\":\"{0}\",\"code\":{1},\"time\":\"{2}\"", "验证失败,请检查账号或密码!", 0, svrNowTime());
                }
                rd.Close();//统一释放资源
                rd = null;
                sqlCmd = null;
                SqlConn.Close();//关闭数据库连接   
                SqlConn = null;//否则不更新原内容
            }
            catch (Exception ex)
            {//错误时(字符串为空也必须加getNewString处理)
                result = string.Format("\"data\":\"[ERROR]:{0}\",\"code\":{1},\"time\":\"{2}\"", ex.Message.ToString(), -1, svrNowTime());
            }
        }
        return "{" + result + "}";//在此组合json格式;如果有全角的{} 时替换成半角的。最后处理!
    }

//code:为数字类型,data和time为字符串类型 注意加双引号
//***重点理解**** json中的{}和format中{0},{1}等参数的调用不能在一个字符串中一次成型
//json的开头{和结尾}  不要出现在 fromat中,在外面组合或全角的符号替代最后再替换掉!!
    /// 
    /// 获取系统时间
    /// 
    /// 
    private string svrNowTime()
    {
        return string.Format("{0:yyyy-MM-dd HH:mm:ss}", DateTime.Now);
    }
    
    /// 
    /// Json中不规则字符替换
    /// 
    /// 
    /// 
    private string jsonReplace(string sstr)
    {
        return sstr.Replace("{", "{").Replace("}", "}");//前2个是中文的{}后面2个是英文的{},数据的最后个,的处理
    }
//通用方法(DELETE UPDATE)
       /// 
        /// 执行SQL(执行UPDATE,DELETE,INSERT 操作)一条记录 ExecSqlHelper.execSQL
        /// 
        /// sql语句
        /// 
        public static string execSQL(string exesql)
        {
            //ConfigSQL();//配置连接参数
            //----------------------------------
            string execRet = "";
            SqlConnection SqlConn = new SqlConnection(SqlHelper.ConnString);
            try
            {
                if (SqlConn.State == ConnectionState.Closed)
                {
                    SqlConn.Open();
                }
                SqlCommand sqlCmd = new SqlCommand(exesql, SqlConn);
                int resultNum = sqlCmd.ExecuteNonQuery();//影响结果的行数
                if (resultNum > 0)
                {
                    execRet = "OK:" + resultNum;//成功
                }
                sqlCmd = null;
                SqlConn.Close();
                SqlConn.Dispose();
            }
            catch (Exception ex)
            {
                execRet = "SORRY:" + ex.Message.ToString();//失败
            }
            return execRet;
        }

2)激活设备方法 (通过软件生成二维码链接和设备注册包参数传入)

    /// 
    /// 激活设备
    /// 
    /// 注册包
    /// 
    private string actionBox(string regpacket)
    {
        string exeResult = "";
        try
        {
            SqlConnection SqlConn = new SqlConnection(SqlHelper.ConnString);
            if (SqlConn.State != ConnectionState.Connecting) SqlConn.Open();            
            if (admintoken == token)
            {//是管理员(可以激活列黑的启用) 条件不同
                exeResult = ExecSqlHelper.execSQL("UPDATE box_List SET bActiveDate=GETDATE(),bStatus=1 WHERE bStatus!=1 AND bRegpacket='" + regpacket + "'");
            }else{//扫码激活
                exeResult = ExecSqlHelper.execSQL("UPDATE box_List SET bActiveDate=GETDATE(),bStatus=1 WHERE bStatus=0 AND bRegpacket='" + regpacket + "'");    
            }
            //通用方法返回值
            if (exeResult.IndexOf("OK") == 0)
            {
                exeResult = string.Format("\"data\":\"[OK]{0}\",\"code\":{1},\"time\":\"{2}\"","设备激活成功!", 200, DateTime.Now);
            }
            else
            {
                exeResult = string.Format("\"data\":\"{0}\",\"code\":{1},\"time\":\"{2}\"", "[SORRY]设备激活失败,请检查参数是否是否正确或已激活!", 0, DateTime.Now);
            }
        }
        catch (Exception ex)
        {
            exeResult = string.Format("\"data\":\"[ERROR]:{0}\",\"code\":{1},\"time\":\"{2}\"", ex.Message.ToString(), -1, DateTime.Now);
        }
        return "{" + exeResult + "}"; 
        
    }

C# 物联网开发API接口系列(3)_第1张图片

设备数据表

//需要前端结合接口API文档进行操作,可能要学会基本的JSON解析方法

C# 物联网开发API接口系列(3)_第2张图片

开发版效果图

C# 物联网开发API接口系列(3)_第3张图片

设备列表数据库结构

同步更新关注:https://www.toutiao.com/i6860420821303689740/

你可能感兴趣的:(物联网笔记,网络笔记,学习笔记,物联网,API接口,久爱物联网,开发文档,身份验证)