diff --git a/CoreCms.Net.Model/FromBody/FMWxPost.cs b/CoreCms.Net.Model/FromBody/FMWxPost.cs index 078de9e..4cd74fe 100644 --- a/CoreCms.Net.Model/FromBody/FMWxPost.cs +++ b/CoreCms.Net.Model/FromBody/FMWxPost.cs @@ -10,6 +10,7 @@ using System.Collections.Generic; + using CoreCms.Net.Model.Entities; namespace CoreCms.Net.Model.FromBody @@ -53,6 +54,18 @@ namespace CoreCms.Net.Model.FromBody public int invitecode { get; set; } = 0; } + /// + /// 微信小程序登录解码手机号码 + /// + public class FMWxLoginPhoneNumber + { + public string code { get; set; } + + public string sessionAuthId { get; set; } + + public int invitecode { get; set; } = 0; + } + /// /// 微信账户创建 /// diff --git a/CoreCms.Net.Web.WebApi/Controllers/UserController.cs b/CoreCms.Net.Web.WebApi/Controllers/UserController.cs index 7259f3a..8ba4ab7 100644 --- a/CoreCms.Net.Web.WebApi/Controllers/UserController.cs +++ b/CoreCms.Net.Web.WebApi/Controllers/UserController.cs @@ -183,7 +183,7 @@ namespace CoreCms.Net.Web.WebApi.Controllers p => new CoreCmsUserWeChatInfo() { sessionKey = response.SessionKey, updateTime = DateTime.Now }, p => p.openid == userInfo.openid); } - return new WebApiDto { Code = 0, Msg = "OK", Data = new { user = userInfo.userId, isMobile = userInfo.mobile?.Length > 0 } }; + return new WebApiDto { Code = 0, Msg = "OK", Data = new { user = userInfo.userId, isMobile = userInfo.mobile?.Length > 0, sessionAuthId = response.OpenId } }; } userInfo = new CoreCmsUserWeChatInfo(); userInfo.openid = response.OpenId; @@ -192,14 +192,65 @@ namespace CoreCms.Net.Web.WebApi.Controllers userInfo.gender = 1; userInfo.createTime = DateTime.Now; await _userWeChatInfoServices.InsertAsync(userInfo); - if (userInfo is { userId: > 0 }) + return new WebApiDto { Code = 0, Msg = "OK", Data = new { user = userInfo.userId, isMobile = false, sessionAuthId = response.OpenId } }; + } + return new WebApiDto { Code = -2, Msg = "", Data = new { user = 0, isMobile = false, sessionAuthId = "" } }; + } + + /// + /// 微信小程序授权拉取手机号码并登录 + /// + /// + /// + [HttpPost] + public async Task UseWxPhoneNumberLogin([FromBody] FMWxLoginPhoneNumber entity) + { + var jm = new WebApiCallBack(); + + var userInfo = await _userWeChatInfoServices.QueryByClauseAsync(p => p.openid == entity.sessionAuthId); + if (userInfo == null) + { + jm.code = -1; + jm.msg = "用户信息获取失败"; + return jm; + } + //DecodedPhoneNumber phoneNumber; + string phoneNumber = ""; + try + { + var client = _weChatApiHttpClientFactory.CreateWxOpenClient(); + var accessToken = WeChatCacheAccessTokenHelper.GetWxOpenAccessToken(); + //phoneNumber = EncryptHelper.DecryptPhoneNumber(userInfo.sessionKey, entity.encryptedData, entity.iv); + var response = await client.ExecuteWxaBusinessGetUserPhoneNumberAsync(new SKIT.FlurlHttpClient.Wechat.Api.Models.WxaBusinessGetUserPhoneNumberRequest() { - return new WebApiDto { Code = 0, Msg = "OK", Data = new { user = userInfo.userId, isMobile = false } }; + AccessToken = accessToken, + Code = entity.code + }, HttpContext.RequestAborted); + if (response.ErrorCode == (int)WeChatReturnCode.ReturnCode.请求成功) + { + phoneNumber = response.PhoneInfo.PhoneNumber; } } - return new WebApiDto { Code = -2, Msg = "", Data = new { user = 0, isMobile = false } }; + catch (Exception ex) + { + jm.code = 500; + NLogUtil.WriteAll(LogLevel.Error, LogType.Web, "小程序接口", "微信小程序授权拉取手机号码", ex); + return jm; + } + + var data = new FMWxAccountCreate + { + mobile = phoneNumber, + invitecode = entity.invitecode, + sessionAuthId = entity.sessionAuthId + }; + + jm = await _userServices.SmsLogin(data); + return jm; + } + #region wx.login登陆成功之后发送的请求========================================================= ///