这一篇主要讲创建房间以及用户登录拦截请求等
- 用户登录,用户进入小程序发起wx.login带上code请求服务端,服务端进行一系列的处理
- 用户登录之后,利用sessionKey来保持用户活动,那么我们将sessionKey带在HTTP请求头部,用户发起请求判断其行为是否符合要求。不符合进行拦截
- 创建房间,一个房间总共多少人,存在哪些身份牌,已经有多少人,游戏进程等等
以下实现逻辑
/// <summary>
/// 微信登陆请求
/// </summary>
/// <returns></returns>
[HttpPost]
[SkipAuthorization]
[Route("Login")]
public Result<UserReuslt> Login()
{
string code = GetParams("code");
string xmlRes = WxPayAPI.HttpService.Get("https://api.weixin.qq.com/sns/jscode2session?appid=你得ID&secret=你得密钥&js_code" +
"=" + code + "&grant_type=authorization_code");
var xmlJson = JsonConvert.DeserializeObject<Dictionary<string, string>>(xmlRes);
if (xmlJson != null && xmlJson.ContainsKey("session_key"))
{
string openId = xmlJson["openid"];
string sessionKey = xmlJson["session_key"];
string unionId = "";
if (xmlJson.ContainsKey("unionid"))
unionId = xmlJson["unionid"];
//创建或者更新用户
User user = _dbContext.Users.Where(o => o.Openid == openId).FirstOrDefault();
if (user == null)
{
//创建用户
User newU = new User()
{
Openid = openId
};
_dbContext.Users.Add(newU);
_dbContext.SaveChanges();
}
else
{
user.Openid = openId;
_dbContext.Users.Update(user);
_dbContext.SaveChanges();
}
//获取用户
user = _dbContext.Users.Where(o => o.Openid == openId).FirstOrDefault();
//更新或者插入session
SessionBag bag = SessionContainer.UpdateSession(null