微信小程序服务端获取用户解密信息的方法

互联网 18-6-27
这篇文章主要介绍了 C#微信小程序服务端获取用户解密信息实例代码的相关资料,需要的朋友可以参考下

C#微信小程序服务端获取用户解密信息实例代码

实现代码:

using AIOWeb.Models;  using Newtonsoft.Json;  using Newtonsoft.Json.Linq;  using System;  using System.Collections.Generic;  using System.Data;  using System.Data.SqlClient;  using System.Linq;  using System.Web;    namespace AIOWeb  {    /// <summary>    /// wxapi 的摘要说明    /// </summary>    public class wxapi : IHttpHandler    {      public void ProcessRequest(HttpContext context)      {        context.Response.ContentType = "text/plain";          string code = "";        string iv = "";        string encryptedData = "";        try        {          code = HttpContext.Current.Request.QueryString["code"].ToString();          iv = HttpContext.Current.Request.QueryString["iv"].ToString();          encryptedData = HttpContext.Current.Request.QueryString["encryptedData"].ToString();        }        catch (Exception ex)        {          context.Response.Write(ex.ToString());        }          string Appid = "wxdb2641f85b04f1b3";        string Secret = "8591d8cd7197b9197e17b3275329a1e7";        string grant_type = "authorization_code";          //向微信服务端 使用登录凭证 code 获取 session_key 和 openid         string url = "https://api.weixin.qq.com/sns/jscode2session?appid=" + Appid + "&secret=" + Secret + "&js_code=" + code + "&grant_type=" + grant_type;        string type = "utf-8";          AIOWeb.Models.GetUsersHelper GetUsersHelper = new AIOWeb.Models.GetUsersHelper();        string j = GetUsersHelper.GetUrltoHtml(url, type);//获取微信服务器返回字符串          //将字符串转换为json格式        JObject jo = (JObject)JsonConvert.DeserializeObject(j);          result res = new result();        try        {          //微信服务器验证成功          res.openid = jo["openid"].ToString();          res.session_key = jo["session_key"].ToString();        }        catch (Exception)        {          //微信服务器验证失败          res.errcode = jo["errcode"].ToString();          res.errmsg = jo["errmsg"].ToString();        }        if (!string.IsNullOrEmpty(res.openid))        {          //用户数据解密          GetUsersHelper.AesIV = iv;          GetUsersHelper.AesKey = res.session_key;            string result = GetUsersHelper.AESDecrypt(encryptedData);              //存储用户数据          JObject _usrInfo = (JObject)JsonConvert.DeserializeObject(result);            userInfo userInfo = new userInfo();          userInfo.openId = _usrInfo["openId"].ToString();            try //部分验证返回值中没有unionId          {            userInfo.unionId = _usrInfo["unionId"].ToString();          }          catch (Exception)          {            userInfo.unionId = "unionId";          }                    userInfo.nickName = _usrInfo["nickName"].ToString();          userInfo.gender = _usrInfo["gender"].ToString();          userInfo.city = _usrInfo["city"].ToString();          userInfo.province = _usrInfo["province"].ToString();          userInfo.country = _usrInfo["country"].ToString();          userInfo.avatarUrl = _usrInfo["avatarUrl"].ToString();            object watermark = _usrInfo["watermark"].ToString();          object appid = _usrInfo["watermark"]["appid"].ToString();          object timestamp = _usrInfo["watermark"]["timestamp"].ToString();              #region              //创建连接池对象(与数据库服务器进行连接)          SqlConnection conn = new SqlConnection("server=127.0.0.1;database=Test;uid=sa;pwd=1");          //打开连接池          conn.Open();          //创建命令对象          string Qrystr = "SELECT * FROM WeChatUsers WHERE openId='" + userInfo.openId + "'";          SqlCommand cmdQry = new SqlCommand(Qrystr, conn);          object obj = cmdQry.ExecuteScalar();          if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))          {            string str = "INSERT INTO WeChatUsers ([UnionId] ,[OpenId],[NickName],[Gender],[City],[Province],[Country],[AvatarUrl],[Appid],[Timestamp],[Memo],[counts])VALUES('" + userInfo.unionId + "','" + userInfo.openId + "','" + userInfo.nickName + "','" + userInfo.gender + "','" + userInfo.city + "','" + userInfo.province + "','" + userInfo.country + "','" + userInfo.avatarUrl + "','" + appid.ToString() + "','" + timestamp.ToString() + "','来自微信小程序','1')";              SqlCommand cmdUp = new SqlCommand(str, conn);            // 执行操作            try            {              int row = cmdUp.ExecuteNonQuery();            }            catch (Exception ex)            {              context.Response.Write(ex.ToString());            }          }          else          {            //多次访问,记录访问次数counts  更新unionId是预防最初没有,后期关联后却仍未记录            string str = "UPDATE dbo.WeChatUsers SET counts = counts+1,UnionId = '" + userInfo.unionId + "' WHERE OpenId='" + userInfo.openId + "'";            SqlCommand cmdUp = new SqlCommand(str, conn);            int row = cmdUp.ExecuteNonQuery();          }                    //关闭连接池          conn.Close();          #endregion            //返回解密后的用户数据          context.Response.Write(result);        }        else        {          context.Response.Write(j);        }      }        public bool IsReusable      {        get        {          return false;        }      }    }  }
using System;  using System.Collections.Generic;  using System.IO;  using System.Linq;  using System.Security.Cryptography;  using System.Text;  using System.Threading.Tasks;    namespace AIOWeb.Models  {    public class GetUsersHelper    {        /// <summary>      /// 获取链接返回数据      /// </summary>      /// <param name="Url">链接</param>      /// <param name="type">请求类型</param>      /// <returns></returns>      public string GetUrltoHtml(string Url, string type)      {        try        {          System.Net.WebRequest wReq = System.Net.WebRequest.Create(Url);          // Get the response instance.          System.Net.WebResponse wResp = wReq.GetResponse();          System.IO.Stream respStream = wResp.GetResponseStream();          // Dim reader As StreamReader = New StreamReader(respStream)          using (System.IO.StreamReader reader = new System.IO.StreamReader(respStream, Encoding.GetEncoding(type)))          {            return reader.ReadToEnd();          }        }        catch (System.Exception ex)        {          return ex.Message;        }      }      #region 微信小程序用户数据解密        public static string AesKey;      public static string AesIV;        /// <summary>      /// AES解密      /// </summary>      /// <param name="inputdata">输入的数据encryptedData</param>      /// <param name="AesKey">key</param>      /// <param name="AesIV">向量128</param>      /// <returns name="result">解密后的字符串</returns>      public string AESDecrypt(string inputdata)      {        try        {          AesIV = AesIV.Replace(" ", "+");          AesKey = AesKey.Replace(" ", "+");          inputdata = inputdata.Replace(" ", "+");          byte[] encryptedData = Convert.FromBase64String(inputdata);            RijndaelManaged rijndaelCipher = new RijndaelManaged();          rijndaelCipher.Key = Convert.FromBase64String(AesKey); // Encoding.UTF8.GetBytes(AesKey);          rijndaelCipher.IV = Convert.FromBase64String(AesIV);// 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.UTF8.GetString(plainText);            return result;        }        catch (Exception)        {          return null;          }      }      #endregion    }  }

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

如何解决微信小程序请求服务器手机预览请求不到数据的问题

关于微信小程序中弹框和模态框的实现

以上就是微信小程序服务端获取用户解密信息的方法的详细内容,更多内容请关注技术你好其它相关文章!

来源链接:
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
上一篇:php获取远程图片并下载保存到本地的方法分析 下一篇:如何解决微信小程序请求服务器手机预览请求不到数据的问题

相关资讯