anyuan2002.com - vwin网

查找: 您的方位主页 > 电脑频道 > 编程代码 > 阅览资讯:怎么经过C#微信小程序服务端获取用户解密信息实例代码?

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

2017-06-27 12:15:19 来历:www.anyuan2002.com 【
vwin娱乐场

怎么经过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; 
   } 
  } 
 } 
} 

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 
 { 
 
  /// <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 
 } 
} 

感谢阅览,希望能协助到咱们,谢谢咱们对本站的支撑!


本文地址:http://www.anyuan2002.com/bcdm/89216.html
Tags: 微信 程序 服务
修改:vwin网
推行内容
引荐阅览
抢手引荐
引荐文章
关于咱们 | 联络咱们 | 友情链接 | 网站地图 | Sitemap | App | 回来顶部