Files
Web_CRICS_Server_VS2010_Prod/Common/FreeGoOperation.cs
2025-12-11 09:17:16 +08:00

168 lines
5.8 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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; }
}
}