这篇文章主要介绍了 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);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();
//创建连接池对象(与数据库服务器进行连接) SqlConnection conn = new SqlConnection( server=127.0.0.1;database=Test;uid=sa;pwd=1 //打开连接池 conn.Open(); //创建命令对象 string Qrystr = SELECT * FROM WeChatUsers WHERE openId= #39; + userInfo.openId + #39; 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],1726712066,[Memo],[counts])VALUES( #39; + userInfo.unionId + #39;, #39; + userInfo.openId + #39;, #39; + userInfo.nickName + #39;, #39; + userInfo.gender + #39;, #39; + userInfo.city + #39;, #39; + userInfo.province + #39;, #39; + userInfo.country + #39;, #39; + userInfo.avatarUrl + #39;, #39; + appid.ToString() + #39;, #39; + timestamp.ToString() + #39;, #39;来自微信小程序 #39;, #39;1 #39;) 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 = #39; + userInfo.unionId + #39; WHERE OpenId= #39; + userInfo.openId + #39; 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 }
以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!
相关推荐:
如何解决微信小程序请求服务器手机预览请求不到数据的问题
关于微信小程序中弹框和模态框的实现
以上就是微信小程序服务端获取用户解密信息的方法的详细内容,更多请关注php中文网其它相关文章!
微信app下载
微信是一款手机通信软件,支持通过手机网络发送语音短信、视频、图片和文字。微信可以单聊及群聊,还能根据地理位置找到附近的人,带给大家全新的移动沟通体验,有需要的小伙伴快来保存下载体验吧!