Exemple #1
0
        public async Task <IActionResult> WxLoginAsync(WxLoginParam loginParam)
        {
            // 使用IHttpClientFactory创建的HttpClient
            OpenIdParam openIdParam = await WxUtils.GetOpenIdAsync(loginParam, clientFactory.CreateClient());

            if (openIdParam == null || string.IsNullOrEmpty(openIdParam.session_key))
            {
                return(ValidationProblem("验证错误,Secret可能失效"));
            }
            WxPhoneModel wxPhoneModel = WxAppEncryptUtil.GetEncryptedDataStr(loginParam.EncryptedData, openIdParam.session_key, loginParam.Iv);

            if (wxPhoneModel == null)
            {
                return(ValidationProblem("用户信息解析错误"));
            }
            string phone = wxPhoneModel.PurePhoneNumber ?? wxPhoneModel.PhoneNumber;

            if (string.IsNullOrEmpty(phone))
            {
                return(ValidationProblem("可能未绑定手机号"));
            }
            TbUser user = await rep.GetEntityAsync(s => s.Phone.Equals(phone), s => new TbUser {
                State = s.State
            });

            if (user == null)
            {
                return(ValidationProblem("用户未注册"));
            }
            string token = AuthorizationUtil.GetToken(30, user.Id, user.Name, "user", user.CarNum);

            return(Ok(new { access_token = token }));
        }
Exemple #2
0
        public static WxPhoneModel GetEncryptedDataStr(string encryptedDataStr, string key, string iv)
        {
            WxPhoneModel model = null;

            //判断是否是16位 如果不够补0
            //text = tests(text);
            //16进制数据转换成byte
            byte[]          encryptedData  = Convert.FromBase64String(encryptedDataStr); // strToToHexByte(text);
            RijndaelManaged rijndaelCipher = new RijndaelManaged();

            rijndaelCipher.Key     = Convert.FromBase64String(key); // Encoding.UTF8.GetBytes(AesKey);
            rijndaelCipher.IV      = Convert.FromBase64String(iv);  // Encoding.UTF8.GetBytes(AesIV);
            rijndaelCipher.Mode    = CipherMode.CBC;
            rijndaelCipher.Padding = PaddingMode.PKCS7;
            ICryptoTransform transform = rijndaelCipher.CreateDecryptor();

            byte[] plainText = transform.TransformFinalBlock(encryptedData, 0, encryptedData.Length);
            string result    = Encoding.Default.GetString(plainText);

            //int index = result.LastIndexOf('>');
            //result = result.Remove(index + 1);
            // 转换实体类
            if (!string.IsNullOrEmpty(result))
            {
                model = JObject.Parse(result).ToObject <WxPhoneModel>();
            }
            return(model);
        }
Exemple #3
0
        /// <summary>
        /// 解密小程序的encryptedData
        /// </summary>
        /// <param name="encryptedData">加密的信息</param>
        /// <param name="sessionKey">key</param>
        /// <param name="iv">加密算法的初始向量</param>
        public static WxPhoneModel DescodeWxSHA1(string encryptedData, string sessionKey, string iv)
        {
            WxPhoneModel model = null;
            string       res   = AESDecrypt(encryptedData, sessionKey, iv);

            if (!string.IsNullOrEmpty(res))
            {
                model = JObject.Parse(res).ToObject <WxPhoneModel>();
            }
            return(model);
        }
        /// <summary>
        /// 解密小程序的encryptedData
        /// </summary>
        /// <param name="encryptedData">加密的信息</param>
        /// <param name="sessionKey">key</param>
        /// <param name="iv">加密算法的初始向量</param>
        public static WxPhoneModel DescodeWxSHA1(string encryptedData, string sessionKey, string iv)
        {
            WxPhoneModel model = null;
            var          res   = AESDecrypt(encryptedData, sessionKey, iv);// {"phoneNumber":"152XXXX9583","purePhoneNumber":"1525XXXX3","countryCode":"86","watermark":{"timestamp":1525829586,"appid":"wx38XXXXXXXX43"}}

            if (!string.IsNullOrEmpty(res))
            {
                model = JObject.Parse(res).ToObject <WxPhoneModel>();
            }
            return(model);
        }