栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > Web开发 > JavaScript

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

JavaScript 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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 
{ 
  ///  
  /// wxapi 的摘要说明 
  ///  
  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],1614753811,[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; 
      } 
    } 
  } 
} 

GetUsersHelper 帮助类

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 
  { 
 
    ///  
    /// 获取链接返回数据 
    ///  
    /// 链接 
    /// 请求类型 
    ///  
    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; 
 
    ///  
    /// AES解密 
    ///  
    /// 输入的数据encryptedData 
    /// key 
    /// 向量128 
    /// 解密后的字符串 
    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 
  } 
} 

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/89220.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号