ZhiYeJianKang_PeiXun/Song.Site/Mobile/Yunzhijia.ashx.cs
2025-02-20 15:41:53 +08:00

128 lines
5.8 KiB
C#
Raw Permalink 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.Web;
using System.Net;
using System.IO;
using System.Configuration;
using System.Text;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json;
using WeiSha.Common;
using Song.ServiceInterfaces;
using Song.Extend;
namespace Song.Site.Mobile
{
/// <summary>
/// 云之家的访问
/// </summary>
public class Yunzhijia : BasePage
{
protected override void InitPageTemplate(HttpContext context)
{
//此页面的ajax提交全部采用了POST方式
if (Request.ServerVariables["REQUEST_METHOD"] == "POST")
{
string action = WeiSha.Common.Request.Form["action"].String;
string json = string.Empty;
switch (action)
{
case "getuser":
json = getUser();
break;
}
context.Response.Write(json);
context.Response.End();
}
}
/// <summary>
/// 获取云之家账号信息
/// </summary>
/// <returns></returns>
private string getUser()
{
bool isUse = Business.Do<ISystemPara>()["YunzhijiaLoginIsuse"].Boolean ?? true;
string appid = Business.Do<ISystemPara>()["YunzhijiaAppid"].String;
string secret = Business.Do<ISystemPara>()["YunzhijiaAppSecret"].String;
string domain = Business.Do<ISystemPara>()["YunzhijiaDomain"].Value; //云之家的域名
string accname = Business.Do<ISystemPara>()["YunzhijiaAcc"].Value; //指定云之家用户信息的某个字段作为当前系统的账号字段
string ticket = WeiSha.Common.Request.QueryString["ticket"].String;
string json = string.Empty;
try
{
//验证
if (!isUse) throw new Exception("禁止云之家账号登录学习系统");
if (string.IsNullOrWhiteSpace(appid)) throw new Exception("AppID不得为空");
if (string.IsNullOrWhiteSpace(secret)) throw new Exception("AppSecret不得为空");
if (string.IsNullOrWhiteSpace(domain)) throw new Exception("云之家域名不正确");
if (string.IsNullOrWhiteSpace(accname)) throw new Exception("需要指定的账号字段未设置");
//获取token
string urlToken = string.Format("{0}/openauth2/api/token?grant_type=client_credential&appid={1}&secret={2}", domain, appid, secret);
string resultToken = WeiSha.Common.Request.HttpGet(urlToken);
JObject jo = (JObject)JsonConvert.DeserializeObject(resultToken);
string token = jo["access_token"] != null ? jo["access_token"].ToString() : string.Empty; //token
if (!string.IsNullOrWhiteSpace(token))
{
string urlUser = string.Format("{0}/openauth2/api/getcontext?ticket={1}&access_token={2}", domain, ticket, token);
string resultUser = WeiSha.Common.Request.HttpGet(urlUser);
jo = (JObject)JsonConvert.DeserializeObject(resultUser);
//云之家的账号,用来对应学习系统的账号
string accout = jo[accname] != null ? jo[accname].ToString() : string.Empty; //获取账号信息
if (string.IsNullOrWhiteSpace(accout)) throw new Exception("未获取到账号信息");
//登录学习系统
loginUser(accout, jo);
json = resultUser;
}
}
catch (Exception ex)
{
JObject joUser = new JObject();
joUser.Add("appid", "0");
joUser.Add("message", ex.Message);
json = joUser.ToString(Newtonsoft.Json.Formatting.None, null);
}
return json;
}
/// <summary>
/// 登录,如果没有账号,则创建
/// </summary>
/// <param name="accout"></param>
/// <param name="user"></param>
private void loginUser(string accout, JObject user)
{
//判断是否存在
Song.Entities.Accounts acc = Business.Do<IAccounts>().IsAccountsExist(accout);
if (acc == null)
{
acc = new Entities.Accounts();
acc.Ac_AccName = accout; //账号
acc.Ac_Name = user["username"] != null ? user["username"].ToString() : string.Empty; //姓名
acc.Ac_IsPass = acc.Ac_IsUse = true;
Business.Do<IAccounts>().AccountsAdd(acc);
}
//用户头像,如果没有上传,或图片不存在
if (string.IsNullOrEmpty(acc.Ac_Photo) || acc.Ac_Photo.Trim() == "" || !System.IO.File.Exists(Upload.Get["Accounts"].Physics + acc.Ac_Photo))
{
acc = Business.Do<IAccounts>().AccountsSingle(acc.Ac_ID);
//头像
string photo = user["photoUrl"].ToString();
string photoPath = Upload.Get["Accounts"].Physics + accout + ".jpg";
WeiSha.Common.Request.LoadFile(photo, photoPath);
acc.Ac_Photo = accout + ".jpg";
//名称
if (string.IsNullOrWhiteSpace(acc.Ac_Name))
{
acc.Ac_Name = user["username"] != null ? user["username"].ToString() : string.Empty; //姓名
}
Business.Do<IAccounts>().AccountsSave(acc);
}
LoginState.Accounts.Write(acc);
//登录成功
Business.Do<IAccounts>().PointAdd4Login(acc, "手机网页", "云之家登录", ""); //增加登录积分
Business.Do<IStudent>().LogForLoginAdd(acc);
}
}
}