Files
Web_CRICS_Server_VS2010_Prod/Common/FreeGoOperation.cs

168 lines
5.8 KiB
C#
Raw Normal View History

2025-12-11 09:17:16 +08:00
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Newtonsoft.Json;
using System.Web.Routing;
namespace Common
{
/// <summary>
/// FreeGo对接
/// </summary>
public static class FreeGoOperation
{
private static log4net.ILog logger = log4net.LogManager.GetLogger(typeof(FreeGoOperation));
private static string freego_url = System.Configuration.ConfigurationManager.AppSettings["freego_url"];
private static string freego_codes = System.Configuration.ConfigurationManager.AppSettings["freego_codes"];
private static string freego_appid = System.Configuration.ConfigurationManager.AppSettings["freego_appid"];
private static string freego_appsecret = System.Configuration.ConfigurationManager.AppSettings["freego_appsecret"];
/// <summary>
/// 调用freego获取设备密钥等信息
/// </summary>
/// <param name="mac">主机mac地址如34-D0-00-00-00-01格式</param>
/// <returns></returns>
public static DeviceRegisterResult DeviceRegister(string mac)
{
string deviceName = mac.Replace("-", "").ToUpper();
DeviceRegisterPostData postData = new DeviceRegisterPostData()
{
appid = freego_appid,
timestamp = TimeHelper.DateTimeToStamp(DateTime.Now).ToString(),
nonce_str = Guid.NewGuid().ToString(),
device_name = deviceName
};
var dic = new RouteValueDictionary();
dic["appid"] = postData.appid;
dic["timestamp"] = postData.timestamp;
dic["nonce_str"] = postData.nonce_str;
dic["device_name"] = postData.device_name;
postData.sign = HttpWebRequestHelper.GetFreeGoSignature(dic, freego_appsecret);
try
{
string result = HttpWebRequestHelper.PostWebRequest(freego_url, Newtonsoft.Json.JsonConvert.SerializeObject(postData));
return JsonConvert.DeserializeObject<DeviceRegisterResult>(result);
}
catch (Exception ex)
{
logger.Error("调用FreeGo接口失败" + ex.ToString());
return new DeviceRegisterResult() { errcode = "-1", msg = ex.Message }; ;
}
}
/// <summary>
/// 给FreeGo福瑞狗上报SOS和DND状态
/// </summary>
/// <param name="hotelCode"></param>
/// <param name="roomNumber"></param>
/// <param name="key"></param>
/// <param name="value"></param>
public static void UploadService(string hotelCode, string roomNumber, string key, string value)
{
foreach (string freego_code in freego_codes.Split(','))
{
if (freego_code == hotelCode)
{
UploadServicePostData postData = new UploadServicePostData()
{
appid = freego_appid,
appsecret = freego_appsecret,
code = freego_code,
room_number = roomNumber,
timestamp = TimeHelper.DateTimeToStamp(DateTime.Now).ToString(),
key = key,
value = value
};
try
{
HttpWebRequestHelper.PostWebRequest(freego_url, Newtonsoft.Json.JsonConvert.SerializeObject(postData));
}
catch (Exception ex)
{
logger.Error("调用FreeGo接口失败" + ex.ToString());
}
break;
}
}
}
}
internal class DeviceRegisterPostData
{
/// <summary>
/// 分配的请求id
/// </summary>
public string appid { get; set; }
/// <summary>
/// 当前unix时间戳
/// </summary>
public string timestamp { get; set; }
/// <summary>
/// 随机字符串
/// </summary>
public string nonce_str { get; set; }
/// <summary>
/// 设备名称
/// </summary>
public string device_name { get; set; }
/// <summary>
/// 签名
/// </summary>
public string sign { get; set; }
}
public class DeviceRegisterResult
{
/// <summary>
/// 错误代码0表示成功
/// </summary>
public string errcode { get; set; }
/// <summary>
/// 设备名称
/// </summary>
public string device_name { get; set; }
/// <summary>
/// 设备密钥
/// </summary>
public string device_secret { get; set; }
/// <summary>
/// 阿里云物联网id
/// </summary>
public string iot_id { get; set; }
/// <summary>
/// 产品key
/// </summary>
public string product_key { get; set; }
/// <summary>
/// 错误信息
/// </summary>
public string msg { get; set; }
}
internal class UploadServicePostData
{
public string appid { get; set; }
public string appsecret { get; set; }
/// <summary>
/// 酒店编码
/// </summary>
public string code { get; set; }
/// <summary>
/// 房号
/// </summary>
public string room_number { get; set; }
/// <summary>
/// 当前unix时间戳
/// </summary>
public string timestamp { get; set; }
/// <summary>
/// SOS/DND
/// </summary>
public string key { get; set; }
/// <summary>
/// 当前服务值
/// </summary>
public string value { get; set; }
}
}