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 + "}";
}
设备数据表
//需要前端结合接口API文档进行操作,可能要学会基本的JSON解析方法
开发版效果图
设备列表数据库结构
同步更新关注:https://www.toutiao.com/i6860420821303689740/